stm32l431 复位后第一次接收数据,第一个字节丢失。后面就正常了-云顶集团3118acm登录入口

你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm32l431 复位后第一次接收数据,第一个字节丢失。后面就正常了

[复制链接]
提问时间:2024-4-29 17:16 / 未解决

每次复位后发现接收的第一个字节总是丢失,但后面的缺没问题。例如发送数据123,接收的缓冲数据长度是2 ,第一个数是2而不是1,如下图。后续再发就没有问题,如下图

void lpuart1_irqhandler(void) { / user code begin lpuart1_irqn 0 /

/ user code begin usart1_irqn 0 /

/ user code end usart1_irqn 1 /

/ user code end lpuart1_irqn 0 / hal_uart_irqhandler(&hlpuart1); / user code begin lpuart1_irqn 1 / if(rx_len>0)// { __hal_uart_enable_it(&hlpuart1,uart_it_idle);//使能空闲中断 if(__hal_uart_get_flag(&hlpuart1, uart_flag_idle) != reset) //判断已经接受到一字节数据后的空闲中断 { lpuart_idlecallback(&hlpuart1); }

}

/ user code end lpuart1_irqn 1 / }

void hal_uart_rxcpltcallback(uart_handletypedef *huart) {

if(huart->instance==lpuart1) {

rx_len  ;                      //每接收到一个字节数据,进入回调数据长度加1  
databuff[rx_len-1]=rx_buff[0];  //把每次接收到的数据保存到缓存数组
hal_uart_receive_it(&hlpuart1, (uint8_t *)rx_buff, 1); //重新启动接收中断
test2=rx_len;

} } void lpuart_idlecallback(uart_handletypedef *huart) { if(huart->instance==lpuart1) {

__hal_uart_clear_idleflag(&hlpuart1);//清除空闲中断标志位,防止一直进入空闲中断影响后续数据接收 __hal_uart_disable_it(&hlpuart1,uart_it_idle); hal_uart_transmit(&hlpuart1, (uint8_t *)databuff, rx_len, 300); test1=rx_len; test=databuff[0];

rx_len=0;

} }

发布时间:2024-4-29 17:16
2个回答
回答时间:2024-5-9 14:56:14

如果不使用空闲中断是否正常

回答时间:2024-5-9 15:46:15
可以先发一个字节调试看看

所属标签

相似问题

关于意法半导体
联系云顶集团3118acm登录入口
隐私策略
关注云顶集团3118acm登录入口
微信公众号
手机版
网站地图