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

发现stm32CubeMX一个UART3重映射的BUG

[复制链接]
千山万水总是情 发布时间:2018-1-19 16:01
到处找ST官方的邮箱找不到,反馈bug都不知道到哪里反馈,好纠结。
7 O: |1 Y" m0 l0 \7 s
9 S% h$ W+ t% ^; g, D先说明一下我是用的最新的版本的stm32cubeMX& p: b" @8 k" O/ U! S; R, T: u
QQ截图20180119152737.jpg
, H) n- O  ?7 H- N& B0 f最近在用stm32F103VET6做一个项目,其中用到UART3,而且需要端口重映射。结果发现按实际需要配置好stm32CubeMX之后生成的工程无法使用SWD下载和仿真,需要手动复位才能重新烧写程序。
! ~, j2 E# D% E; g: B, a' E0 I反复试了很多遍,排除硬件问题。而且在stm32CubeMX里面的DEBUG端口也配置成SWD模式了。  u( F, H9 \) R8 _- ]) J
只要打开UART3重映射就无法下载和仿真,在stm32CubeMX里关闭UART3重新编译工程后,又可以下载和仿真。: Q6 a2 [* p: ]2 y. q* W1 {
为了确定是否是UART3重映射配置与其他外设的设置冲突了,我重新建立新的工程。
6 s7 K; j+ u" E, h5 J除了外部时钟和SWD以及UART3以外其他一切都不配置,结果发现问题依旧。8 z( j! S6 _* P& Q4 f
所以可以断定是UART3的配置代码出问题了,进一步推测应该是配置重映射代码有问题。
# w: X7 k8 S* H8 w于是找到了UART3重映射指令 __HAL_AFIO_REMAP_USART3_ENABLE();将其屏蔽。% n7 M7 Z& n' u1 g
UART3其他配置代码保留原样,编译后下载仿真都正常,说明推测是正确的。9 U* x0 {& x/ k+ S" q" Q
于是打开stm32F1的参考手册查看AFIO的寄存器说明,其中MAPR同时管了好多映射,包括SWD和UART3,所以冲突很可能就是这里。
! \7 X4 J5 |( i) g/ t8 e QQ截图20180119154757.jpg $ W% R/ L4 {1 b3 h/ w. k9 r; v2 g
QQ截图20180119154817.jpg
. N. f. D& W" G$ s
! t! q$ k9 M0 o: s QQ截图20180119154736.jpg 7 P, x; e- }% P, {8 i4 ^
注意,这个寄存器关于SWD的配置的这3位是只写模式的,读出来的数没用。. U! j+ \6 x5 k, a$ b& g
不管你配置成什么模式,读出来的数都是0x04,也就是全部仿真模式都关闭。
* F3 u+ T6 e# w/ t1 `也不知道是不是st的程序猿没注意这个问题,直接将MAPR的数据读出来只修改了UART3的映射位就写回去了。
9 E' I1 M2 ~5 J# K" x( V8 Mhal库的宏套来套去的我没时间去细追究,自己写了一行寄存器操作代码,替代了自动生成的代码。
0 G+ E8 Z; g4 N# Q1 ]; B注意一定要屏蔽掉原先的哪行代码,否则即便添加了我这行代码也没用。
4 B/ O, K' \: E/ ?$ ]1 \. E- u. o& v        AFIO->MAPR = (AFIO->MAPR&0xF8FFFFCF)|0x02000030;
' u4 ~/ h; _+ J  \" l6 j3 R7 D QQ截图20180119155523.jpg & c0 q6 z1 A" w: F, t3 C# P
经测试端口已经映射到PD8和PD9了,而且收发正常。可以进行SWD下载与仿真。
, W: N: {( a2 ~7 E; b, t5 L到底stm32CubeMX怎么弄成这样我就不去刨了,希望ST的攻城狮们早日看到并修复这个BUG。( E% Q5 A0 i2 [% ~  D9 [& ~8 L
补充一句:stm32CubeMX虽然方便但是不能完全相信它啊,寄存器操作虽然枯燥乏味,但是关键时刻很好用的。* x9 R6 l  T/ g
! D9 a* M% n3 A( m
赞 收藏 评论6 发布时间:2018-1-19 16:01

举报

6个回答
creep 回答时间:2018-1-19 16:29:01
技术交流QQ群:4277795164 G5 {8 S4 t0 N( \* }, s% q
3 z! u5 J0 m" X1 I: f( ^" T. ~
直通FAE:mcu.china@st.com$ d+ ?3 y( l$ i1 w
# f1 i/ z* C, Z1 F( a
样片购买:400 800 8051
七哥 回答时间:2018-1-20 16:56:13
creep 发表于 2018-1-19 16:29
; ^4 w( ]  X5 ^( e2 n0 s+ r3 i技术交流QQ群:4277795160 m+ Z8 x. i, }: N1 c* Y
& K  x/ W- W3 F6 M9 Q- W# H
直通FAE:

) ]! L; N- D" Y+ n- V搜索了一下群号,都ST社区群3了呀。* l5 n, w* ^& C8 ^3 Y
看来我加得比较早,在群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 编辑 : i" n0 O' V4 t2 Z5 W/ V

# ], y5 q) O+ x7 u" v0 f5 u3 }我昨天用CAN也是这个问题。+ W  @0 T: x. d* z' |! b
STM32F103ZET6 + IAR8.11 + CubeF1 V1.6。
' ]- P7 T+ B: m8 @2 A3 i/ S* ?在重新映射CAN到PB8,PB9时,调试器无法控制CPU了。
  r) @+ @/ _8 B% L) e后来一步步排查,跟到了楼主说的那行代码。. j- @" u* @$ v# q8 t; x
结合手册发现,在修改AFIO->MAPR的值时,不能采用读出来再写进去的方式,而是应该写个确定的值。% p! a+ T* ]1 S3 \6 l

' o. F3 B8 _5 n! |5 h" J( M) y: t下面这两句会引起JTAG和SW关闭:) g  _* g) Y% ?! ~
AFIO->MAPR &= ~AFIO_MAPR_CAN_REMAP;$ a2 m# |8 U+ i$ K$ n& ]
AFIO->MAPR |= AFIO_MAPR_CAN_REMAP_REMAP2;, r+ c, e$ r/ l
! s! A* q7 @4 a! S
下面这一句就仿真正常:" B' Q  P. q9 V( L
AFIO->MAPR = 0x02004000;
$ ]& D+ F* A# _# i  ]5 e' X: `0 D7 D- ^, i; L: J

# b/ C# f+ |) M+ j: a% T3 `$ L2018.01.21 15:49更新:
! o+ O* V6 O6 k6 U" W" c4 l. W换了一个工程,__HAL_AFIO_REMAP_CAN1_2()又没问题了,但是CAN不能正常使用。7 {: k7 z/ _8 S) e5 K! [
这么复杂的问题就交给ST解决吧。
9 Z$ [9 j# D& _& K
  a  H( B0 U1 v4 c2018.01.21 18:24更新:
1 v5 B' P8 S/ f' |5 w: j又又换了一个工程,__HAL_AFIO_REMAP_CAN1_2()又又没问题了,然后CAN就能正常使用了。
8 ?0 y$ J* O6 N* Y
zero99 回答时间:2018-2-26 16:53:37
@千山万水总是情    @爱咖啡) Y' N5 r% ^# h' V5 V4 J
目前CubeMX已经更新到4.24.0了,看下还有这样的问题吗?  y) e% S' U! @! m8 ~
下载地址:' V& i0 t! F% Y4 V
https://www.stmcu.org.cn/document/detail/index/id-214984
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版