2021-11-11

本文分享了将STM8S项目移植到STM32F030时遇到的串口通信问题,涉及电平转换、HAL库与LL库的比较,以及如何通过LL_USART库解决USART接收中断异常导致的串口卡死。重点在于异常处理和中断管理优化。
摘要由CSDN通过智能技术生成

STM32F030首次使用的异常过程"USART"


由于芯片价格问题,使用STM8S的老项目需要移植至STM32F030,在此分享一下移植过程中产生的问题。
在这里插入图片描述

  1. STM8S使用5V供电,STM32F030使用3.3V供电,在接口上需要做好电平转换
  2. 软件移植使用CubeMX 配置,HAL库文件,过程很顺利,但在老化测试过程中,串口会出现卡死(串口为IDLE+DMA)。修改为普通 接收中断,串口异常处理中添加ORE等标识处理,并尝试降低通讯速率,仍不能解决问题,串口依旧卡死。最后针对串口驱动使用 LL库,开启接收中断,在中断函数中使用下面代码
  LL_USART_IsEnabledIT_RXNE(USART1);/* 查询  确保无论如何都能开启下一次接收 */
  xtUart1.clear_time=1;/* 接收计时 */
  if(xtUart1.RxLen<255)  /* 防止超出区域 */
  {
      xtUart1.RxBuf[xtUart1.RxLen++]=LL_USART_ReceiveData8(USART1);/*读取 */
  }
  else
  {
      LL_USART_ReceiveData8(USART1);/* 抛弃 */
      debug.connect_error|=0x02;/* 故障标识 */
  }
  LL_USART_EnableIT_RXNE(USART1);/* 再次开启 */

串口无视异常,数据正确性需要软件内自行判断。

  1. 在FLASH存储前需要关闭总中断,为避免开启中断后,中断发生异常,建议在 总中断关闭与开启 前,先处理串口中断
 LL_USART_Disable(USART1);
 __disable_irq();  /*关闭中断*/
 /**************************FLASH处理***********************/
 /******************************************************/
 /***************************开中断******************************/
 LL_USART_Enable(USART1);
 __enable_irq();/* 开启中断 */
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值