最近使用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);
}
关键字:CUBEMX配置 UART 中断
引用地址:
解决CUBEMX配置生成的UART无法进入中断的问题
推荐阅读最新更新时间:2024-03-16 16:26
GPS信号中断时惯导芯片的位置信息感知系统设计
引言 当今社会,GPS卫星定位系统早已广泛应用于人们的社会生活中,如交通工具导航、个人定位服务等。但在某些情况下,由于物体遮蔽、散射等原因,我们无法实时接收到GPS卫星信号(比如列车进入隧道)。所以有必要研究在GPS信息缺失的情况下,如何通过一定的算法产生模拟GPS信息,从而实现全天候的无缝位置感知。这在某些对位置信息敏感的场合中就显得非常急迫和重要。
1 惯导芯片简介 ADIS16003是ADI公司的一款低成本、低功耗,具有SPI接口的双轴加速度计,属MEMS传感器件。它可以测量动态和静态加速度并以数字量输出,测量范围最小可以达到±1.7 g,同时还集成了温度传感器,可用于惯性导航、振动检测和稳定性测试等场合中。 SPI
[嵌入式]
STM32学习之:USART中断方式
前面我们接收了串口通信的查询方式,现在我们来介绍中断方式。 步骤一:初始化GPIO GPIO_InitTypeDef GPIO_InitStructure; /* Configure USART1 Tx (PA.09) as alternate function push-pull */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &GPIO_Init
[单片机]
STM32中中断优先级理解
很多人在配置STM32中断时对固件库中的这个函数NVIC_PriorityGroupConfig()——配置优先级分组方式,会很不理解,尤其是看中文翻译版的,因为中文翻译版里把这里翻译成“先占优先级和从优先级”这样翻译其实是不对的,很容易让人误解。为了便于大家理解,有必要先解释两个概念: 抢占式优先级/响应优先级: STM32(Cortex-M3)中有两个优先级的概念——抢占式优先级和响应优先级,有人把响应优先级称作'亚优先级'或'副优先级',每个中断源都需要被指定这两种优先级。 具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套,或者说高抢占式优先级的中断可以嵌套在
[单片机]
异常中断处理程序
6.2.1 异常中断处理程序的方法种类及其介绍 1.SWI 异常中断处理程序的实现 在 SWI 指令中包括一个 24 位的立即数,该立即数指示了用户请求的特定的 SWI 功能。在 SWI 异常中断处理程序要读取该 24 位的立即数,这涉及到 SWI异常模式下对寄存器 LR的读 取,并且要从存储器读取该 SWI 指令。这样需要使用汇编程序来实现。通常 SWI异常中断处 理程序分为两级:第 1 级 SWI 异常中断处理程序为汇编,用于确定 SWI 指令中的 24 位的立 即数;第 2级 SWI 异常中断处理程序具体实现 SWI 的各个功能,它可以是汇编程序,也可以 时 C 程序,下面我们分别介绍这两
[单片机]
芯来科技发明多处理器中断处理装置 提高SoC精确分发能力
近日,芯来科技助力道生物联发布基于RISC-V内核的TurMass™标准无线终端SoC芯片—TK8610,该芯片产品采用芯来科技RISC-V N200系列处理器内核。 随着芯片的可集成度越来越高,芯片的算力成为了衡量一个SoC(系统级芯片)系统最重要的指标之一,因此CPU正式步入了多核时代。同时,芯片上所集成的知识产权(IP)也越来越复杂。 一般而言,IP送出的中断数量与IP的复杂程度成正比。这种情况下,片上中断和CPU多核之间的精确分发,便成为了高性能SoC设计中必须要解决的问题。 为此,芯来科技在2021年12月3日申请了一项名为“一种中断处理装置、芯片和电子设备”的发明专利(申请号:202111460925.0),申请人为芯
[手机便携]
用Proteus学习51单片机之中断
以52单片机来说,一共有6个中断源,其说明如下(序号用于中断程序的编写): 中断源名称 默认级别 序号 说明 INT0 最高 0 外部中断0,由P3.2端口线引入,低电平或下降沿引起 INT1 第3 2 由P3.3端口线引入,低电平或下降沿引起 T0 第2 1 定时器/计数器0中断,由T0计数器计满回零引起 T1 第4 3 定时器/计数器1中断,由T1计数器计满回零引起 T2 最低 5 定时器/计数器2中断,由T2计数器计满回零引起 TI/RI 第5 4 串行口中断,串行端口完成一帧字符发送/接收后引起 中断的允许和关闭,由中断允许寄存器IE控制,而IE又细分为7位,详细控制到每一个中断的开关 位序号 位
[单片机]
STM32F4 EXTI外部中断(一)
STM32中共有23根中断总线 外部中断配置步骤 1.使能IO时钟,初始化IO为输入 详见 2.开启SYSCFG时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);//使能SYSCFG时钟 3.设置IO口与中断线映射关系 SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0); 参数1:端口组 EXTI_PortSourceGPIOA, EXTI_PortSourceGPIOB, EXTI_PortSourceGPIOC ~~~ 参数2:中断线:EXTI_PinSource0 ~ EXTI_
[单片机]
MSP430单片机按键中断程序
#include IRRemo te .h void main(void) { //初始化 Ini ti alize(); //死循环 while(1) { unsigned int transmit; //初始化变量 transmit = ENDTRANSMIT; //等待按键按下 SetForPress(); //进入LPM4模式 LPM4; Debounce(); //扫描键盘 KeyS CAN (); //键盘处理 KeyLookup(); if (Er
[单片机]