完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
每次复位后发现接收的第一个字节总是丢失,但后面的缺没问题。例如发送数据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; }} |
|
相关推荐
1个回答
|
|
STM32L431复位后第一次接收数据,第一个字节丢失的原因可能有以下几点:
1. 硬件问题:请检查硬件连接是否正确,确保UART通信线路没有问题。 2. 串口初始化问题:请确保在复位后正确初始化了串口。检查串口初始化代码,确保波特率、数据位、停止位和校验位等参数设置正确。 3. 中断配置问题:请检查中断配置是否正确。在STM32中,需要配置NVIC(嵌套向量中断控制器)以启用相应的中断。请确保已经正确配置了LPUART1的中断。 4. 中断服务程序问题:请检查LPUART1_IRQHandler()中断服务程序是否正确处理接收到的数据。从您提供的代码片段来看,您可能需要在接收到数据后立即处理它,而不是等待空闲中断。 5. 缓冲区问题:请检查接收缓冲区的实现,确保在接收到第一个字节时能够正确存储。 为了解决这个问题,您可以尝试以下步骤: 1. 检查硬件连接,确保UART通信线路没有问题。 2. 确保串口初始化正确,包括波特率、数据位、停止位和校验位等参数。 3. 检查NVIC配置,确保LPUART1的中断已经启用。 4. 修改LPUART1_IRQHandler()中断服务程序,确保在接收到数据后立即处理它。例如: ```c void LPUART1_IRQHandler(void) { if(__HAL_LPUART_GET_FLAG(&hlpuart1, LPUART_FLAG_RXNE) != RESET) { // 读取接收到的数据 uint8_t data = (uint8_t)__HAL_LPUART_RECEIVE(&hlpuart1); // 处理接收到的数据 // ... // 清除接收中断标志 __HAL_LPUART_CLEAR_FLAG(&hlpuart1, LPUART_FLAG_RXNE); } } ``` 5. 检查接收缓冲区的实现,确保在接收到第一个字节时能够正确存储。 通过以上步骤,您应该能够找到导致第一个字节丢失的原因,并解决这个问题。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1602 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1536 浏览 1 评论
967 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
680 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1579 浏览 2 评论
1860浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
640浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
513浏览 3评论
527浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
500浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-19 11:31 , Processed in 0.829963 second(s), Total 48, Slave 41 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号