完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
void USART1_IRQHandler(void)
{ uint16_t Value; if(USART_GetFlagStatus(USART1, USART_FLAG_RXNE)) { Value = USART_ReceiveData(USART1); USART_SendData(USART1, Value); while(!USART_GetiTStatus(USART1, USART_IT_TC)); } } 为什么这个串口中断函数只能进入一次呢? |
|
相关推荐
17个回答
|
|
|
连上Jlink调试一下,标志位的问题?
|
|
|
|
|
|
你可以调试一下,程序是不是一直在while判断那里没有出来。
|
|
|
|
|
|
|
|
|
|
|
|
先赚分!
|
|
|
|
|
|
因为你在程序中,使用了 while(!USART_GetITStatus(USART1, USART_IT_TC)); 如果你将这个TC标志,换成USART_FLAG_TXE,也就是 while (!USART_GetFlagStatus(USART1, USART_FLAG_TXE)); 那样就正常了。 USART_IT_TC和USART_FLAG_TXE是STM32中很容易出问题的标志,参考手册上讲的很明白 |
|
|
|
|
|
可能是while那句出错了
|
|
|
|
|
|
|
|
|
|
|
|
回复第 6 楼 于2014-02-19 21:16:45发表:
因为你在程序中,使用了 while(!USART_GetITStatus(USART1, USART_IT_TC)); 如果你将这个TC标志,换成USART_FLAG_TXE,也就是 while (!USART_GetFlagStatus(USART1, USART_FLAG_TXE)); 那样就正常了。 USART_IT_TC和USART_FLAG_TXE是STM32中很容易出问题的标志,参考手册上讲的很明白 在这个while之前不是已经发送过数据了,等待TXE标志清除? |
|
|
|
|
|
连上仿真器看看程序死在哪了,估计是在while循环里面
|
|
|
|
|
|
受教了受教了受教了
|
|
|
|
|
|
可能是while那句出错了
|
|
|
|
|
|
1、使用仿真器是不能在中断的位置打断点的,如果想知道中断有没有进入,只能在中断中用全局变量计数,用仿真器将全局变量读出来。在中断处打断点会出现意想不到的问题
|
|
|
|
|
|
我来回答一下,USART_IT_TC发送完成中断标志位;USART_FLAG_TXE发送数据寄存器空标志位;显然你在中断里检测中断完成标志位肯定会进入死循环;
|
|
|
|
|
|
|
|
|
|
|
|
需要在中断函数里面添加,USART_ClearITPendingBit(USART2,USART_IT_ORE);
|
|
|
|
|
|
可能是while那句出错了
|
|
|
|
|
|
中断函数里面最好不要加可能出现锁死的循环语句。
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
STM32F405驱动DS1302时钟模块,输出时间错乱该怎么排查?
2797 浏览 2 评论
stm32f405rgt6驱动DS1302ZN出现时间错乱问题
2403 浏览 1 评论
stm32用fsmc读取ad7606采集数据,数据不变,只有开发版复位才更新数据
2276 浏览 0 评论
2388 浏览 1 评论
1637 浏览 1 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-1 20:38 , Processed in 0.967822 second(s), Total 106, Slave 88 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
2929