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

STM32F030串口数据丢失问题

[复制链接]
四季 提问时间:2019-5-23 10:47 /
这两天调试F030的串口,cubemx配置,2400波特率、8、1,HAL库,用(HAL_UART_Receive_IT(&huart1,(uint8_t *)aRxBuffer,1),启动中断,接受1字节,进入回调函数,后续需要在回调中处理帧识别等操作,发现串口中断接受只能收前2字节数据,从第3字节起变为00,很是烦恼
int main(void)
{
xxxxxxx

if(HAL_UART_Receive_IT(&huart1,(uint8_t *)aRxBuffer,1)!=HAL_OK)
  Error_Handler();
  while (1)
  {  

    if(Uart1Ready_R==SET)
    {
       Uart1Ready_R=RESET;
       Txtemp[0]=Rx_count_UART1;
       Rx_count_UART1=0;
       Uart1_Send(Rxbuff, 10);
       memset(&Rxbuff, 0, sizeof(Rxbuff) / sizeof(uint8_t));//缓存清理
    }
}
}

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if( huart == (&huart1))
{
  UNUSED(huart);
  Rxbuff[Rx_count_UART1]=aRxBuffer[0];
  Rx_count_UART1++;
  if(Rx_count_UART1==10)
  {
   Uart1Ready_R=SET;
  }
  HAL_UART_Receive_IT(&huart1, (uint8_t *)aRxBuffer, 1);
}
}




捕获.JPG
收藏 评论5 发布时间:2019-5-23 10:47

举报

5个回答
289466080 回答时间:2019-5-23 16:23:11
在HAL_UART_RxCpltCallback中增加
    __HAL_UART_CLEAR_IDLEFLAG(&huart1);
    __HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE);
试试看

参考
  1. void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
  2. {
  3.   if (huart->Instance == USART1)
  4.   {
  5.     uart1_RxBuff[uart1_Rx_Count] = uart1_Rx_Temp;
  6.     HAL_UART_Receive_IT(huart, (uint8_t *)&uart1_Rx_Temp, 1);
  7.     if (++uart1_Rx_Count >= RECEIVELEN)
  8.     {
  9.       uart1_Rx_Count--;
  10.     }
  11.     __HAL_UART_CLEAR_IDLEFLAG(&huart1);
  12.     __HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE);
  13.   }
  14. }
复制代码

评分

参与人数 1蝴蝶豆 +3 收起 理由
STMCU + 3

查看全部评分

289466080 回答时间:2019-5-23 16:25:40
串口接收我也调试了好几天,因为发送端经常发送不定长度,把我真的搞晕了。
四季 回答时间:2019-5-23 17:25:34
289466080 发表于 2019-5-23 16:23
在HAL_UART_RxCpltCallback中增加
    __HAL_UART_CLEAR_IDLEFLAG(&huart1);
    __HAL_UART_ENABLE_IT(&hu ...

你调试好了么,加了这两句,还不行,卡机触发关门狗reset了
289466080 回答时间:2019-5-24 08:39:08
sammychen 发表于 2019-5-23 17:25
你调试好了么,加了这两句,还不行,卡机触发关门狗reset了

https://www.stmcu.org.cn/module/forum/thread-620624-1-1.html
參考我这个不定长也可以,但是最大值时要重置,我用的STM32F030F4P6
还有一个比较好的我先整理下

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

四季 回答时间:2019-5-24 08:54:18
本帖最后由 sammychen 于 2019-5-24 08:55 编辑

感谢各位,此问题暂时已经解决,实际上数据已经成功接收了,问题出在发送返回的时候,因为使用中断发送,然后立即清理缓存,此时刚发送2个字节,后面的字节还未发送是就被清理掉了。后续按需要加入帧的检测再测试看看。
       Uart1_Send(Rxbuff, 10);
       memset(&Rxbuff, 0, sizeof(Rxbuff) / sizeof(uint8_t));//缓存清理

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2 总结问题

查看全部评分

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版