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

【经验分享】一个关于 LPUART 输出异常的问题分享

[复制链接]
STMCU小助手 发布时间:2022-2-15 21:43
近日有客户反馈,使用基于 STM32L496 的 Nucleo 板的 LPUART 做打印输出时,电脑端始终没法出现任何信息。根据该开发板使用手册说明,外设 LPUART 的 TX/RX 脚【PG7/PG8】默认与开发板 STLINK 部分的VCP 端口相连,这样做可以省去飞线的麻烦,更不需要外接 USB-UART 转换器件。
, H  K7 l6 W% l: J )4GQK2Q~[[1%Q)HSFDVX9Q4.png 0 @* E  {: G* O9 P5 R9 \  [7 i
) _0 C' L  y* b" ^
客户的 LPUART 相关代码是基于该 Nucleo 板的 cube 库例程修改而成。
! h$ N8 p" s1 I' W+ l7 P: A' r, J3 t+ J8 Y+ S
0MV{9_(`TSG9UJ8{K%Y7A69.png ' z4 H3 e' D! r. ~" d- T0 U
/ `+ q. }- C/ h
从芯片数据手册我们可以得知 LPUART 的通信口可以复用到多个端口,如:PA2,PA3/PB11,PB10/PC1,PC0/PG7,PG8。上述 CUBE 库 LPUART 例程里的通信口用的 GPIO 是 PB10/PB11。
8 `0 ~+ k& H  [: V* M  k1 l' A) n先基于例程配置使用 PB10/PB11 通信口做打印输出。用飞线接到 STM32L496 的 Nucleo 板 STLINK 端的VCP 接口,输出正常。说明 STLINK 端的 VCP 端口、LPUART 外设以及 PC 端 VCP 驱动的安装都是正常的。$ B) W8 D$ ?1 l9 K
1 M/ O6 T5 i* I5 T+ g8 l
将 LPUART 通信口调整为 PG7,PG8,并做相关复用功能、GPIO 配置的修改,可是 PC 端根本看不到任何打印信息。即使用示波器直接测试 LPUART 输出脚 PG7 也毫无动静。难道 PG7,PG8 有什么特别的地方?
. A; [1 _7 M  \$ W+ z( v查看手册!
- u1 C6 ?' z+ m; e$ V+ ?; x* P
4 ]" H% y% J; v. t6 ?; s& `
' g% T% s7 h0 V% s: O- B0 J查看手册可得知,端口 PG[15:2]的供电由 VDDIO2 负责。现在需要用它,VDDIO2 脚应接上相关电源。
% V! g+ K. Q+ ]- ?, J; T
. U/ s9 T9 C- p4 Y/ p& h MI74DN){(2MHE$OW4[J3QMO.png
2 \1 E2 u1 U8 _' F( [9 {, f# H+ g/ T. F8 e' R) [  N5 n
通过查看 NUCLEO 板原理图可知,VDDIO2 已经与 VDD 相连了。1 y  r! r0 M: u  `( o/ x

6 v" ?8 I# C, N; D O0UM)O_NW3T[NHP7_8JWT60.png % V% R6 t) i( \& r, I! \7 I

' p7 ~$ [- ^& C& J* h/ u8 e& N那软件上还需要添加些什么配置呢?因为要操作 VDDIO2 域,电源接口时钟需要使能。另外,还要对一个跟 VDDIO2 供电有效的寄存器位【IOSV】进行置位,申明 VDDIO2 域可以工作了。
8 M3 J, ?+ _1 G  \
7 F+ c0 Z  r& m/ Z) F+ b! t1 p EURZE%OT8OFXAGN$N)I2P0P.png
2 U" U. I# P$ `) W* f" q* }2 w- A
* \* W; H! S" p: o- v- |将上面的第一句代码插入到例程中 HAL_UART_MspInit()函数里,将第二句代码添加到SystemClock_Config()即可。然后编译调试,输出正常,问题基本了结。& V( t1 n! r7 g, s, `; b

5 N! y0 I+ y( H# v' S上面是基于现存的 Cube 库代码修改而成。如果利用 STM32CubeMx 工具进行配置会快捷很多,关于上面添加的那几行配置代码 STM32CubeMx 会帮你配置好,省去你研究那些细节了,从效率上讲高了很多。也许会有人说这个效率是以牺牲对细节的把握为代价,也没说错。不过多数时候作为应用工程师来讲重点还是在应用功能的实现与优化层面。
3 |& M6 l- g2 Q$ O# Z
1 z5 h4 ?5 m3 q, u$ D最后,顺便提醒下关于 LPUART 波特率的配置要注意的问题。) I. z# O$ x5 z
其实在前面的测试过程中,在设置波特率时也遇到点麻烦。例程中的波特率设置的 115200,当把波特率设置为较低数值,比方 9600 时,发现 UART 通信不工作了。当波特率调高时工作又正常了,这样反复验证了多次现象依旧,应该是波特率设置这个地方有些细节需进一步了解确认。打开 STM32L4 的参考手册 RM0394 阅读相关章节。关于波特率的设置及参数限制都做了明确描述。
; l: ]- Q. z$ ^, E9 g% ]7 }+ z& q% v  v1 W- n. m
06U[`6B%Q]I6}JSV0M4)UY0.png : Q4 g* t# l+ O9 i  B: m6 t% N2 s4 `

+ S( w1 @5 E6 @: c+ L1.对于 LPUART 的波特率设置除了满足上述公式外,还得遵守 LPUART 的时钟须在【3 倍波特率到 4096 倍波特率】的范围内。前面测试过程中,LPUART 的时钟源来自系统时钟,最高 80MHz。依据上述规定及公式,那它的波特率最低不得低于 80M/4096=19531,所以当我们设置波特率为 9600 时自然无法正常通信了,此时建议配置在 38400 以上。1 y% Y; F8 V8 b5 t+ f& P% f/ A; F

' g  Z1 k# |, L; Z, i6 ^2.LPUART 的时钟源可以是系统时钟,还可以是 LSE。如果是 32768 的 LSE,根据上述规定,LPUART_BRR的值不得小于 0X300,即十进制 768.那么相应的波特率配置就不要高于 9600.7 i: @4 T7 U0 K$ c3 e0 \

; Z9 h5 Q7 M! n  ZOK,抛砖引玉似地分享这些小细节,愿君有所获。9 d- D* k( c# {" ^. E% h

8 g) N2 F: C" ]
赞 收藏 评论0 发布时间:2022-2-15 21:43

举报

0个回答

所属标签

相似技术帖

官网相关资源

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