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

【实战经验】UART应用异常案例分析

[复制链接]
zero99 发布时间:2017-5-25 16:58
UART应用异常案例分析
( d  _* x/ G8 P" i* C. }. j3 O
前言
0 Y" ^4 S( M" {在Cube软件包中,为不同系列MCU、不同外设提供了对应的例程方便开发参考。其中,针对STM324xG-EVAL平台提供了UART中断发送接收的例程。开发者参考了这个例程进行UART功能开发,并且为了实现不间断的接收功能,在接收回调函数中,再次调用中断接收函数。在这种情况下,出现了例程执行异常。本文分析了这种情况出现原因及解决方法。
/ z/ w( ~( ?% _. B- B6 N9 e
问题描述
* E  U$ i/ O% ]5 o( o测试验证板: STM3240G-EVAL: ?' r( T, Y: ^  g* Z3 B$ _7 s
参考例程路径:STM32Cube_FW_F4_V1.15.0\Projects\STM324xG_EVAL\Examples\UART\UART_Hyperterminal_IT
4 O" |  D/ R: n1 n3 `5 B0 i
基于上述例程,出于前言中交代的应用目的,在接收回调函数HAL_UART_RxCpltCallback中,再次调用HAL_UART_Receive_IT。! g) \3 O) Z) U& W2 Q- U$ k
随后出现例程执**死在下面红色标识的语句处,导致了UART中断发送无**确被执行。
21.jpg 5 E& {1 ~: `; x1 m& x

* [- t" @* M. w3 p. k9 c) J
  d3 p+ Y4 A# n" D  Z) o
问题分析及解决
1 _* T1 R/ Z' \8 g. q$ N2 ^! ^根据描述,首先考虑到是否由于UART始终处于接收忙状态,导致中断发送收到影响。但是UART外设具有发送数据寄存器和接收数据寄存器,以及互不影响的接收、发送中断。0 u" Y, j& Z. k* y: T/ h
继续对问题进行定位,发现在HAL_UART_GetState函数中,会同时获取发送和接收状态。这意味着,只有在发送和接收同时处于就绪状态时,中断发送函数才会被执行。而开发者的应用实现中,使得UART始终处于接收状态,从而判断无法通过。; `1 N: s: k4 y* ]8 W, l3 u3 d4 V
清楚了产生原因后,问题解决就一目了然了。只需将对发送和接收状态的判断,改写成仅对发送的状态的判断,如下所示。其中gState对应着发送状态。
22.png

2 H0 z$ i: J3 d- v总结
3 ^" c0 l' T0 A, a8 x* g在使用Cube软件包例程时,最好能够对各驱动接口函数有一定认识。例如上述问题,对于例程来说,没有问题。但是转移到应用时,就需要考虑到例程中调用的判断函数是否符合应用目的了。& Y% e1 O4 e; Y% }/ {
而对于各驱动接口函数,在函数定义处,都给出了介绍,包括各参数说明。同时,在Cube软件包的Drivers目录下,提供了对驱动接口函数介绍的文档。
: S4 Y' p9 g9 o
$ L0 |$ F8 J0 s7 Z% G
UART应用异常案例分析.pdf (247.39 KB, 下载次数: 131)
赞 1 收藏 4 评论5 发布时间:2017-5-25 16:58

举报

5个回答
samxyl_520 回答时间:2019-3-19 10:24:36
哦 不错 见识了
qingyu_lv 回答时间:2017-6-2 10:10:41
哦 原来如此
Gonghuwei 回答时间:2017-6-3 19:48:20
哦 原来如此.
zld9251 回答时间:2017-6-3 20:39:41
谢谢分享
深谷幽泉 回答时间:2017-6-4 19:25:58
感谢分享

所属标签

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版