完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
小弟恳请各位大侠挤出宝贵时间帮我看一下这个问题,我是用是STM32串口接收中断接收数据 可是为什么每次进入中断都会死在里面出不来?单步运行后发现,每次进接收中断后只能接收到数据帧的第一个字节,然后就会陷在 USART1_ReceiveChar()这个函数里出不来了,请问各位大侠,USART_ReceiveData()这个库函数执行后会清零USART_FLAG_RXNE这个标识么 我看了库函数体 貌似不会清零啊 不知怎么的 就是不能完整接收一帧数据 求大侠指导 讲解stm32串口接收的原理啊 跪求串口收发相关例程
void USART1_IRQHandler(void) { if ( USART_GetiTStatus(USART1, USART_IT_RXNE)!= RESET)//查询是否为秒中断标志 { while(USART1_ReceiveChar()!=0xaa);//寻找帧头 while(USART1_ReceiveChar()!=0xbb)//若是没到帧尾就继续接收 rbuff[i++]=USART1_ReceiveChar(); for(char j=0;j USART_ClearITPendingBit(USART1,USART_IT_RXNE); //清中断标识 } } void USART1_Putc(char c) { USART_SendData(USART1, c); /* Loop until the end of transmission */ while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); } unsigned char USART1_ReceiveChar(void) { while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET); return(USART_ReceiveData(USART1)); } |
|
相关推荐
3个回答
|
|
你的中断配置是什么样的啊,我认为是中断没配置好,所以一直停在那里
|
|
|
|
我也刚刚在学,我觉得是这样的:中断是一个字节触发一次的,而不是只在第一个字节触发以后就一直在中断里面了。比如说,你发的字符串是0xaa 0xbb 0x11 ...,当收到aa的时候会进中断,这时候 while(USART1_ReceiveChar()!=0xaa);//寻找帧头 这句应该没问题,但是在 while(USART1_ReceiveChar()!=0xbb)//若是没到帧尾就继续接收 这一句就通过不了了,死在这里了。我的意思就是说,每次进中断只能处理一个字节,而不是进一次中断处理一个字符串
|
|
|
|
解决了没有了?
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
飞凌嵌入式ElfBoard ELF 1板卡-CAN编程示例之开发板测试
678 浏览 0 评论
该问题是用APP给芯海科技的CST92F25芯片发指令是出现的
2286 浏览 1 评论
789 浏览 0 评论
1553 浏览 1 评论
2306 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 22:02 , Processed in 0.426477 second(s), Total 46, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号