STM32F030首次使用的异常过程"USART"
由于芯片价格问题,使用STM8S的老项目需要移植至STM32F030,在此分享一下移植过程中产生的问题。
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/68e097f1867b25bec41693e71fbb3672.png)
- STM8S使用5V供电,STM32F030使用3.3V供电,在接口上需要做好电平转换
- 软件移植使用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);/* 再次开启 */
串口无视异常,数据正确性需要软件内自行判断。
- 在FLASH存储前需要关闭总中断,为避免开启中断后,中断发生异常,建议在 总中断关闭与开启 前,先处理串口中断
LL_USART_Disable(USART1);
__disable_irq(); /*关闭中断*/
/**************************FLASH处理***********************/
/******************************************************/
/***************************开中断******************************/
LL_USART_Enable(USART1);
__enable_irq();/* 开启中断 */