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

基于STM32的程序换个IDE就不运行了?

[复制链接]
攻城狮Melo 发布时间:2023-8-9 19:41
有人使用STM32H743芯片做应用开发,遇到个比较奇怪的事情。事情是这样的,他使用ST公司的图形化配置工具STM32CubeMx进行基本配置后,如果基于ARM MDK IDE创建工程并组织代码,编译除错后运行一切正常。但如果他基于IAR IDE创建工程并使用相同的用户代码时,发现程序没法正常运行,同时还没有任何报错。颇为奇怪。
+ L& j, m  x  O" I. \$ |) O
经进一步了解。他的代码要实现的一个主要功能就是ADC,并利用通用DMA将ADC结果搬运到内存。现在最明显的问题就是,当把IDE从MDK切换到IAR后,ADC的结果没有被搬运到内存。借助调试可以确认,ADC外设确实启动了、DMA配置也没有问题,那到底怎么回事呢?两个环境下的外设配置及用户应用代码是完全一样的。
借助调试,在调试过程中无意发现了一点点差异。那就是两个IDE分别为存放ADC结果的内存安排的地址不一样。下面两幅截图来自ARM MDK和IAR环境下存放ADC结果的内存地址。
6 u/ {6 G4 l  e) \( ~, Q% \
3 F! H6 e0 r8 h2 t- c5 s4 r3 C2 x1 _
微信图片_20230809194101_1.png
) r- Z4 x6 B' I% d5 H8 ]
微信图片_20230809194101.png
7 e) P# M2 ^( w
不难看到,在MDK环境下,内存地址安排在0x2400008c开始的地方,而在IAR环境下内存地址被安排在0x20000084开始的地方。难道问题就出在这个地方?
; _  ~: x, q( f+ k6 V' _
------正是!
我们先查看STMH7参考手册,看看上面2个地址位于哪些内存区。
( Y4 \) _4 J) P; c$ c: Z0 m

* u/ O6 b: [% w# y
微信图片_20230809194102_2.png

6 Y# p# k1 c+ N! Q" d
也就是说,IAR默认将存放ADC结果的内存安排在DTCM区,而MDK将其安排在AXI SRAM区。我们可以查看手册得知,H7系列的通用DMA1或DMA2是没法访问DTCM的。DTCM只能被内核或MDMA访问。- e6 X& Z2 o- D9 D4 W

. p. V. `% L( J" n
微信图片_20230809194102_1.png

* _, U3 O' j' I' A) m* M: a: ]
微信图片_20230809194102.png
上图中的短横杠表示不可访问。原来是这样,难怪编译过程中没有任何报错提示,只是所选DMA硬件上不支持对DTCM的访问而已。
' A# y' E. m8 c' r4 \
既然知道了原因,问题就好解决了。我们可以在IAR环境里直接给定存储地址,能让DMA访问到就行。或者在IAR调试环境下修改内存使用的默认地址于AXI SRAM区【参考下面截图示意操作】。
) A, f2 i8 v2 @0 e1 _) s7 ~: B1 Q- e5 x

! T( g; D! N- D( `0 D
微信图片_20230809194103.png
* n9 l: Y; J0 @6 w1 h0 ]
OK,今天的话题就分享到这里。

( v4 I7 C$ Q7 h0 H" G  q6 D3 \
如有侵权请联系删除

& i9 }: d% K8 q& E0 \! b转载自:Miler
1 x/ i0 t; z% B7 Y% D; N% F: _# e8 x

, ]4 l" H6 s5 i! }4 a
赞 收藏 评论0 发布时间:2023-8-9 19:41

举报

0个回答

所属标签

相似技术帖

官网相关资源

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