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

【经验分享】STM32H7系列使用DMA不能传输数据的问题

[复制链接]
STMCU小助手 发布时间:2022-1-1 20:00
我使用DMA进行SPI传输时发现无数据,还好有个逻辑分析仪,不然有没有信号都不知道! T7 G2 X1 |4 r* g! L1 W
+ U0 w4 ^( s1 _, F: G
这是总线访问权限的图。
; t! m; B! b, F9 c' q
! g: a- w# ~% e& o& C  o; S- S“-”表示不能访问。“D”表示直接访问。其它的都是间接访问。! n3 l5 Z- w% X4 U2 J" Q
, x, ?$ p, p1 f6 x  Z2 d5 R; f
20190830132727103.png
3 X3 U, x7 p' W! ~0 b9 `3 h

8 N9 }$ \0 C/ P) c# t
20190830133103551.png
1 {& G* X7 u& h6 i
( a4 @* M1 _. L- H: F
发现DMA1只有ITCM和DTCM不能访问,问题就出在这。! j3 S1 ^7 _# S- @6 V
) x- i2 Z9 o7 T8 _! A
有句“TCM 接口上的 DTCM-RAM 映射到地址 0x2000 0000,可供 Cortex®-M7 访问......”。(M7是处理器核)3 O* U" w: \4 y. Q4 ^- b% w# L$ ~
/ ]- e' W3 O. p" Z- N9 {- [. J
内存分布:
2 }  M3 K9 t( V: V, r
5 x/ }7 x+ K0 H$ N: {               DTCM-RAM(数据TCM RAM):起始地址:0x2000 0000,大小:0x20000(128KB)。+ D& p+ f- B! G9 L8 F& z+ Q- A3 Y9 _9 v

9 e* D, ]3 y1 i               AXI SRAM(D1域):起始地址:0x24000000% i8 p+ h% q: o2 ^

: n! p+ h, H4 I$ l& ~DTCM虽然和其它的MCU的RAM起始地址一样,但是无法被DMA访问。- ?6 W8 C7 _, H$ X& D
% N0 q5 X3 [- H  O% @
也就是通用RAM的地址变了,但是编译器还是会把DTCM的地址作为通用RAM的起始地址。
% p# F3 b, m# P" q! a1 y8 B  C' C* D& d3 j
20190830134309979.png

3 I! c+ {: q0 t) q# }
6 G4 @% ?: d* I& Y$ m, Q使用DMA传输时把内存起始地址修改为D1域。也就是把勾打在RAM2上。这是最简单的解决方法。
' `! U/ R3 n$ i" {- O2 q, X- q+ a" I* l- Y7 i
Makefile工程:: [, Y. ~% T  b# M8 g/ ^  A) x
2 q7 [8 A8 |) [
在指定位置创建内存:9 m( n  p, Q$ H
                                在ld文件中添加:7 W( |! w$ G) C4 K
                                    .DisplayBuffer : //DisplayBuffer是名字
8 `( U: i1 X% ^6 n6 {                                    {undefined' a8 R) Y% E" L9 f
                                        *(.DisplayBuffer)4 a9 g+ T+ ]3 X7 o
                                    } >RAM_D2 //RAM_D2是所在地) `: D( x$ o. J
                                使用该内存:__attribute__((section(".DisplayBuffer"))) uint16_t DisplayBuffer[ScreenH][ScreenW];。
+ s  f! x; O$ B) q) G$ ~; ?                                也可以直接指定地址:uint16_t DisplayBuffer[100][100] __attribute__((section(".ARM.__at_0x20000000")));。只能在bss段里,bss段所在的内存区域在ld文件里看,看最后指向哪个RAM区域。- g5 m' X" V2 u! V

; Y* d% _& ^$ K只要变量不在DTCM里就行。
% b( U5 a( ]( A" n* T
5 a4 I4 G% H3 j. E1 L; o7 v2 f& V( w; O: A' T3 `. n
收藏 评论0 发布时间:2022-1-1 20:00

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版