请选择 进入手机版 | 继续访问电脑版

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

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

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

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

image.png

image.png

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;

} }

收藏 评论2 发布时间:2024-4-29 17:16

举报

2个回答
奇迹 回答时间:2024-5-9 14:56:14

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

butterflyspring 回答时间:2024-5-9 15:46:15
可以先发一个字节调试看看
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版