STM32 USART接收中断程序问题

STM32 USART接收中断程序问题,第1张

返回的数据都是一样的吧,都是第一个字符?

你应该定义一个全局变量记录接受的字节数,另外每次中断只能接受一个字节。

你的中断函数是完成接受数据的吧,怎么里面还有一句(倒数第四行)等待发送结束?

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; //计数清零

}

}

是的,HAL里面这个HAL_UART_Receive()函数已经明明白白地写了,它是阻塞式查询工作方式,只要标志不置位或者超时不结束,就干等到天荒地老。

如果你不需要阻塞式查询工作方式,就应当选用中断工作方式,改用 HAL_UART_Receive_IT()函数并配置对应的NVIC模块、调用对应的中断服务函数并且钩上对应的回调。

void USART1_IRQHandler(void)接收中断函数中一直循环,可能是你中断函数的处理

程序太多了,导致延时太大,建议你直接在中断处理函数里只放些标志位,中断就改变标志位,在主循环中根据标志位处理判断。并且最好再提高系统时钟频率。你用的115200的速度,有点高!

以上就是关于stm32 串口 中断的问题全部的内容,包括:stm32 串口 中断的问题、STM32HAL轮询模式串口接收函数超时等待问题、STM32 USART接收中断程序问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/8852223.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-22
下一篇2023-04-22

发表评论

登录后才能评论

评论列表(0条)

    保存