关于LIN发送数据一直进入接收中断问题

所用设备是GD32,添加外围LIN收发器。

正在调试汽车氛围灯程序,板子上LIN数据正常发送,但RGB不亮,用LIN软件发送同样的数据发现RGB正常点亮,起初以为是单片机发送数据有问题,连接LIN设备在上位机观察发现发送数据正常,排查了一天多,最后在DeBug中意外发现,单片机一直在进入接收中断,百思不得其解,将数据透传(可理解为将一条LIN线剪断,用单片机重新连接起来)功能注释后发现正常点亮,但是透传功能肯定是需要的,最后查找资料发现,在串口接收里面加上判断ORE溢出标志位后程序正常,此时再进入DeBug发现接收中断不再进入。

将代码贴出       

 __HAL_UART_GET_FLAG(huart, UART_FLAG_ORE) != RESET

,这是HAL库下的代码,标准库应该是        

USART_GetFlagStatus(USART1, USART_FLAG_ORE) != RESET

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要修改串口接收中断触发的条件,可以通过修改串口相关的寄存器来实现。其中比较重要的寄存器包括: 1. UART CR1寄存器:该寄存器用于控制USART模块的一些功能,例如使能UART接收中断、使能UART发送中断等。可以通过修改该寄存器来使能或者禁用UART接收中断。 2. UART CR2寄存器:该寄存器用于控制UART的一些硬件特性,例如数据位数、校验位、停止位等。可以通过修改该寄存器来改变UART接收中断的触发条件,例如接收到一定时间的数据后触发。 3. UART CR3寄存器:该寄存器用于控制UART的一些特殊功能,例如硬件流控制、扩展帧模式、LIN模式等。可以通过修改该寄存器来改变UART接收中断的触发条件。 下面是一个修改UART接收中断触发条件的简单例子: ```c // 使能UART接收中断 USART1->CR1 |= USART_CR1_RXNEIE; // 设置UART接收中断触发条件为接收到一定时间的数据后触发 USART1->CR2 &= ~USART_CR2_LBDL; // 关闭LIN帧检测 USART1->CR2 |= USART_CR2_RTOEN; // 使能超时检测 USART1->RTOR = 1000; // 设置超时时间为1000个波特率周期 // 在UART接收中断处理函数中读取接收数据 void USART1_IRQHandler(void) { if (USART1->ISR & USART_ISR_RXNE) { uint8_t rx_data = USART1->RDR; // 读取接收数据 // 处理接收数据... } } ``` 该例子中首先使能了UART接收中断,然后通过修改UART的CR2寄存器来设置了UART接收中断的触发条件为超时检测,即在接收到一定时间的数据后触发中断。最后在UART接收中断处理函数中读取接收数据并进行处理。需要注意的是,如果修改了UART的触发条件,就需要相应地修改中断处理函数,以处理新增的触发情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值