
返回的数据都是一样的吧,都是第一个字符?
你应该定义一个全局变量记录接受的字节数,另外每次中断只能接受一个字节。
你的中断函数是完成接受数据的吧,怎么里面还有一句(倒数第四行)等待发送结束?
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接收中断程序问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)