STM32 USART接收中断程序问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32 USART接收中断程序问题相关的知识,希望对你有一定的参考价值。

参考技术A void
USART1_IRQHandler(void)接收中断函数中一直循环,可能是你中断函数的处理
程序太多了,导致延时太大,建议你直接在中断处理函数里只放些标志位,中断就改变标志位,在主循环中根据标志位处理判断。并且最好再提高系统时钟频率。你用的115200的速度,有点高!
参考技术B 程序思路是这样的,进入中断后:
接收陀螺仪的数据,如果收到的第一个字节不是0x55,就不接收。。此时counter是不增加的。。
如果接收到的第一个字节是0x55,counter自增,收到的数据暂存至
temp。。。

counter自增到11时,将temp收到的数据存至re_buf,同时counter清零,sign置1
第一行的意思是
表示
如果接收寄存器非空,即有数据,那么判断为接收中断
第五行
是跳出中断

stm32 串口 中断的问题

USART_SendData(USART2, 0x31);
while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET );后进入中断,
中断程序如下面。
因为串口返回的是8组数据。但是调试时发现返回数据不是想要的数据。
void USART2_IRQHandler(void)
int i; //定义字符变量

if (USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) //判断发生接收中断
USART_ClearITPendingBit(USART2, USART_IT_RXNE); //清除中断标志
for( i=0;i<7;i++)


TxBuf1[i]=USART_ReceiveData(USART2); //接收数据
while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);//等待发送结束


LCD_write_String(7,2,IntToStr(TxBuf1[4]));


应该如何修改?谢谢了

参考技术A 返回的数据都是一样的吧,都是第一个字符?
你应该定义一个全局变量记录接受的字节数,另外每次中断只能接受一个字节。
你的中断函数是完成接受数据的吧,怎么里面还有一句(倒数第四行)等待发送结束?
int i=0;
void USART2_IRQHandler(void)

if (USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) //判断发生接收中断

USART_ClearITPendingBit(USART2, USART_IT_RXNE); //清除中断标志
TxBuf1[i++]=USART_ReceiveData(USART2); //接收数据
if(i==8) //接受完8个字节数据

LCD_write_String(7,2,IntToStr(TxBuf1[4]));
i=0; //计数清零

以上是关于STM32 USART接收中断程序问题的主要内容,如果未能解决你的问题,请参考以下文章

STM32 USART接收中断程序问题

关于STM32串口接收中断,网上有如下中断方式接收数据的程序:

USART接收中断stm32

STM32中串口中断接收异常

STM32串口通讯程序

stm32 串口 中断的问题