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

发现stm32CubeMX一个UART3重映射的BUG

[复制链接]
千山万水总是情 发布时间:2018-1-19 16:01
到处找ST官方的邮箱找不到,反馈bug都不知道到哪里反馈,好纠结。
5 e2 i! l" q5 C0 s
& z, t! \% H+ r9 `- a先说明一下我是用的最新的版本的stm32cubeMX
' [" i* N: w5 @+ w# ?8 x, C! e QQ截图20180119152737.jpg " ?3 m5 z9 h! @: R: d) O
最近在用stm32F103VET6做一个项目,其中用到UART3,而且需要端口重映射。结果发现按实际需要配置好stm32CubeMX之后生成的工程无法使用SWD下载和仿真,需要手动复位才能重新烧写程序。
& i9 L$ q( A2 K# M* ~反复试了很多遍,排除硬件问题。而且在stm32CubeMX里面的DEBUG端口也配置成SWD模式了。7 M" A, K& l2 ?/ h; J; |1 x
只要打开UART3重映射就无法下载和仿真,在stm32CubeMX里关闭UART3重新编译工程后,又可以下载和仿真。. |: ?9 ]+ d8 j, L& N
为了确定是否是UART3重映射配置与其他外设的设置冲突了,我重新建立新的工程。
3 j. v# u: V# f3 O+ ?9 N9 U7 g( e除了外部时钟和SWD以及UART3以外其他一切都不配置,结果发现问题依旧。
4 l! i4 q9 {9 e/ |& |所以可以断定是UART3的配置代码出问题了,进一步推测应该是配置重映射代码有问题。
5 J+ W- `$ `& X% I. n于是找到了UART3重映射指令 __HAL_AFIO_REMAP_USART3_ENABLE();将其屏蔽。$ ?$ Q# O; H3 E7 X9 N4 {' R3 I
UART3其他配置代码保留原样,编译后下载仿真都正常,说明推测是正确的。
1 y3 C' f) v  s: y) {+ G于是打开stm32F1的参考手册查看AFIO的寄存器说明,其中MAPR同时管了好多映射,包括SWD和UART3,所以冲突很可能就是这里。" S1 j* T: e; y* T5 [2 A
QQ截图20180119154757.jpg + W; J' m  o$ i; ?* f3 a( m6 X9 h
QQ截图20180119154817.jpg + k! `( H7 B8 }# a* C
2 h* B. S, k+ F3 a$ R" V
QQ截图20180119154736.jpg
$ |9 ^' l& Q/ f' u6 V! D' ^0 e注意,这个寄存器关于SWD的配置的这3位是只写模式的,读出来的数没用。
6 B+ C  ^2 e7 q; G' m' U" Q不管你配置成什么模式,读出来的数都是0x04,也就是全部仿真模式都关闭。
  O+ \4 G) o+ R4 _: S也不知道是不是st的程序猿没注意这个问题,直接将MAPR的数据读出来只修改了UART3的映射位就写回去了。
: o' b- i$ }, h( {# ~+ zhal库的宏套来套去的我没时间去细追究,自己写了一行寄存器操作代码,替代了自动生成的代码。
1 k. n1 e4 U: k% N: ]! a) R$ B注意一定要屏蔽掉原先的哪行代码,否则即便添加了我这行代码也没用。# W: {! Q7 P8 J
        AFIO->MAPR = (AFIO->MAPR&0xF8FFFFCF)|0x02000030;
4 U$ ?, G9 D/ h  `% t QQ截图20180119155523.jpg
) j/ x5 y% P. z  o, R5 P经测试端口已经映射到PD8和PD9了,而且收发正常。可以进行SWD下载与仿真。- }- q& S9 ?) H
到底stm32CubeMX怎么弄成这样我就不去刨了,希望ST的攻城狮们早日看到并修复这个BUG。6 a- j# d4 y+ Q" F4 `7 F2 _
补充一句:stm32CubeMX虽然方便但是不能完全相信它啊,寄存器操作虽然枯燥乏味,但是关键时刻很好用的。
, B1 T; f+ s1 R4 m6 k/ I2 q2 _
3 D3 u- k: c/ [/ g) J9 i
赞 收藏 评论6 发布时间:2018-1-19 16:01

举报

6个回答
creep 回答时间:2018-1-19 16:29:01
技术交流QQ群:427779516( p3 {, A# K6 E7 G" G( o

- @1 w1 N3 }- @) i直通FAE:mcu.china@st.com
0 e. |  ^! K& {8 N( A$ o3 Y# l; ?  l+ y$ L3 c% O  p& \
样片购买:400 800 8051
七哥 回答时间:2018-1-20 16:56:13
creep 发表于 2018-1-19 16:29
8 k9 M6 `: i  B6 M技术交流QQ群:427779516
6 r0 S# B! t: T) C& C: ]  Q+ L4 {, X8 a. x8 |4 y
直通FAE:

: q/ v% M) B3 l' W. \" l, w  o搜索了一下群号,都ST社区群3了呀。" |# C+ g  l+ m: Q0 E3 ~+ u
看来我加得比较早,在群1
科科1987 回答时间:2018-1-20 21:26:47
我以前也遇到过bug,可以到官方论坛反馈bug:http://community.st.com/
maxtch 回答时间:2018-1-20 22:25:05
很多人都喜欢只关注 HAL,HAL 暗病还真多,看来还是直接操作寄存器靠谱。
爱咖啡 回答时间:2018-1-21 14:31:37
本帖最后由 爱咖啡 于 2018-1-21 18:24 编辑
8 i7 H2 |' H# F
/ T5 S2 d$ m  ?" A7 n4 s我昨天用CAN也是这个问题。7 S; I. M" G$ _
STM32F103ZET6 + IAR8.11 + CubeF1 V1.6。* z6 R4 F: d) E; f
在重新映射CAN到PB8,PB9时,调试器无法控制CPU了。
4 A1 O9 m3 ~! z6 _; n4 [/ v$ p1 a后来一步步排查,跟到了楼主说的那行代码。
' Z% D5 ]& C* @结合手册发现,在修改AFIO->MAPR的值时,不能采用读出来再写进去的方式,而是应该写个确定的值。
9 A( @1 n  z  z4 C' u4 k  k3 h( Z$ V
下面这两句会引起JTAG和SW关闭:
( x) z8 x" _& @, L: AAFIO->MAPR &= ~AFIO_MAPR_CAN_REMAP;5 T/ g2 n/ |" t
AFIO->MAPR |= AFIO_MAPR_CAN_REMAP_REMAP2;
) \- {: Z9 E2 z, M- q9 m9 A; r) `5 ?, z4 ?8 ^! W& \. v/ P
下面这一句就仿真正常:, Y6 a8 Z5 T6 H7 W6 r
AFIO->MAPR = 0x02004000;
$ S& X, w: C- ~( B9 F- ?% J" r3 D# {) X
/ C& Q0 p" Y0 u0 D, d
2018.01.21 15:49更新:
- ?' v8 }" @) ^1 ?3 N' `+ {) [换了一个工程,__HAL_AFIO_REMAP_CAN1_2()又没问题了,但是CAN不能正常使用。- H" v2 G* d1 r/ z; q" z
这么复杂的问题就交给ST解决吧。
" Y2 G: B$ B. G* i1 d! D8 x# U' D+ P6 T3 c: D# w
2018.01.21 18:24更新:
! V% V) f5 g  Y9 y9 u$ J! n: l又又换了一个工程,__HAL_AFIO_REMAP_CAN1_2()又又没问题了,然后CAN就能正常使用了。
& X$ x3 a, o# O
zero99 回答时间:2018-2-26 16:53:37
@千山万水总是情    @爱咖啡, y" Q7 q/ p, N! D/ T8 r" @
目前CubeMX已经更新到4.24.0了,看下还有这样的问题吗?, ?% _: L& A+ Y
下载地址:
) `: A' p: J2 G8 K% X/ Yhttps://www.stmcu.org.cn/document/detail/index/id-214984
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版