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

【实战经验】增加UART接口应用时的异常分析

[复制链接]
zero99 发布时间:2017-5-25 16:56
增加UART接口应用时的异常分析

前言
Cube软件包的提供,极大的降低了开发难度。使用者在开发的过程中,只需参考Cube包中提供的例程就能快速的实现对应功能开发。开发者为了快速开发UART功能,参考Cube包中的UART例程,并根据应用情况,扩展了另一组UART接口。但是在应用过程中,发现两路UART不能共存。本文分析了这种情况出现的原因。

背景介绍
在Cube软件包中CDC例程实现了虚拟串口通信功能,数据传输链路如下图所示。
21.jpg
在开发者的应用中,需要实现下图数据传输链路。根据应用需求,推荐参考Cube软件包中的USB CDC例程。
22.jpg

问题描述
问题复现平台: STM324xG-Eval
例程路径:STM32Cube_FW_F4_V1.15.0\Projects\STM324xG_EVAL\Applications\USB_Device\CDC_Standalone
在对CDC例程了解后,参考已有的UART应用,新增了一路UART。对应初始化程序如下所示。其中USARTx为例程原有部分,而USARTy为新增的一路UART初始化部分。
23.png
24.png
25.jpg
在之前的UART发送和接收处,同样新增了一路UART的发送和接收。为了方便描述,这里不对应用层面进行描述。而是直接在例程中,时钟配置后执行下述语句,复现问题。
31.png

结果如下表。
32.png

问题分析
不同UART接口相互独立。UART IP设计上,不同UART同时发送不会相互影响。初步判断应该是UART初始化过程中,存在冲突。
通过对结果分析,在UARTx和UARTy都进行初始化后,只执行UARTx DMA 发送时,执行异常;只执行UARTy DMA发送时,执行正常。而在初始化中,UARTx先于UARTy初始化,进一步确认是初始化时,存在冲突。并且将问题范围缩小到HAL_UART_MspInit()函数中。
在线调试,发现在执行UARTy初始化时(UARTx已经在之前初始化结束),UARTx 发送DMA对应的Instant和Channel值都被改变。其中Instant中保存着对应DMA的寄存器基地址。
仔细检查HAL_UART_MspInit()函数,发现对于DMA的初试化,两个UART共用了例程中原有的DMA句柄变量,为上述程序中的static DMA_HandleTypeDef hdma_tx;
而在HAL_UART_Transmit_DMA函数中,会对对应的DMA进行配置并使能,而配置过程会依据DMA句柄中的参数。从而导致发送异常。
对问题的产生原因清楚后,在新增UART接口的时候,初始化函数HAL_UART_MspInit()中同样需要新增DMA句柄变量,并利用在新增UART的DMA初始化中。如下所示。
33.png


总结
所描述的问题,可以归结为一个开发漏洞。而导致这个开发漏洞的原因,更多的可能是在参考Cube例程时,对于各函数的了解以及变量的使用情况,没有逐个了解。建议在基于Cube例程进行开发时,能够对各函数及变量等加以了解,在针对应用进行修改过程中,能够减小错误率,从而减少排错时间。





文档下载

更多实战经验
收藏 2 评论2 发布时间:2017-5-25 16:56

举报

2个回答
mark0668 回答时间:2017-5-25 22:36:12
感谢分享,涨知识了
jcx0324 回答时间:2017-5-26 08:35:50
不错                       

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似技术帖

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