单片机
返回首页

解决CUBEMX配置生成的UART无法进入中断的问题

2019-03-25 来源:eefocus

最近使用STM32F107在进行开发,用CUBEMX配置UART作为串口和上位机通讯,然而一直无法接收到数据,调试了一个上午,硬件检查过,包括重写RX回调函数都试过了,但就是无法正常接收数据。


之后找了一个重写回调的函数,移植程序结构,编译执行发现在执行其中的  HAL_UART_Receive_IT  这一函数后,会能接收一次中断发出的数据(也就是复位后能进入一次中断),怀疑是因为HAL的bug或者cubemx生成代码有bug!进入该函数内部,最后筛选出两条代码添加在主函数循环前,以及中断处理函数末尾,串口就能正常进入中断了。


这两句为:


__HAL_UART_ENABLE_IT(&huart4, UART_IT_ERR)


__HAL_UART_ENABLE_IT(&huart4,UART_IT_RXNE)


可以看主要只是第二参数变化,这一宏定义函数主要功能是将中断控制寄存器置参数二的位置,也就是重置了ERR和RXNE标志位


中断处理函数的参考代码:


void UART4_IRQHandler(void)

{

char aRxBuffer[1];

 

  HAL_UART_Transmit(&huart4,'Hello,Enter Interrupt\r\n',26,0xFFFF);

 

  HAL_UART_IRQHandler(&huart4);

 

    /* Enable the UART Error Interrupt: (Frame error, noise error, overrun error) */

    __HAL_UART_ENABLE_IT(&huart4, UART_IT_ERR);

 

    /* Enable the UART Data Register not empty Interrupt */

    __HAL_UART_ENABLE_IT(&huart4, UART_IT_RXNE);

 

 

}

进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • CCD图像传感器在微光电视系统中的应用

  • 如何利用ESP8266制作一个简单的四轴飞行器

  • 离子检测器电路分析

  • 优化电路板布局的简单方法

  • 一个简单的立体声平衡指示器电路

  • 使用NE555和磁簧开关的橱柜照明电路

    相关电子头条文章