串口实验的中断里前面几句是这样写的:
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是0x0d 0x0a结尾)
{
Res =USART_ReceiveData(USART1);//(USART1->DR); //读取接收到的数据
if((USART_RX_STA&0x8000)==0)//接收未完成
{
、、、、、、、
}
意思是当状态标志变量最高位为1时则不进行余下的操作,我在主程序中加了delay_ms(500); 的语句,然后让串口每50ms,发一次数据,
按照程序的意思,这种情况下,主程序来不及处理,新的接收又开始了,由于USART_RX_STA最高位未在主函数中清零,接收被忽略,
这样当主程序处理了接收,中断中再次处理新的接收时,这时候好多数据被忽略了,接收应该不完整了,但是调试助手上看数据没问题啊?
为什么呢?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
但是怎么接不到的收是stm32控制的啊?虽然取出来了,但是控制器的程序控制是接收不到的啊
但是,按照程序上来看,如果主程序没把接收到的数据发送之前,(USART_RX_STA&0x8000=1),此时是不会将数据存到缓冲区的啊:程序的判断语句:if((USART_RX_STA&0x8000)==0),
例程是每次先接收一个数据,然后判断是否主程序处理了原来的数据,这样的话,并不能确定这个数据是否是第一个数据啊!如果不是,这时候进行数据处理,不是要丢失前面的数据了吗?
一周热门 更多>