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

基于STM32H7 DMA传输的SPI 应用示例

[复制链接]
oneside 发布时间:2019-12-5 10:45
这里使用stm32h743-Nucleo板做个基于DMA传输的SPI收发应用示例。选择SPI1,MOSI与MISO短接,通过DMA自发自收,分开启Cache和不开启Cache来配置演示,以供参考。
3 ]9 V$ u7 d6 R0 X8 N- A  }7 g( D
利用STM32CubeMx进行配置,生成基于ARM MDK环境和Cube库的初始化代码。
4 I' D- {  [- g3 W* v% [2 S. i
SPI1配置在双工主角色,数据位设置为16位。开启SPI的TX/RX的DMA请求。

2 i& B& V# ^( {* `6 x3 Y
11.png

1 y% X. {) A" @' {" _2 v
完成其它有关时钟、中断配置后,生成初始化代码并建立工程。

0 }" S% ]( Q6 F3 ?8 e9 f
一、先不打开Cache。【屏蔽掉相关代码语句】

& g8 N/ Q- c, |% S
22.png

6 T5 e1 s  m, p
我在主程序里周期性地修改待发送的数据,并使能SPI及DMA传输进行数据收发。
5 Z9 y& f/ R- |( Z" v) _
这里定义了两个内存数组用于数据的收发缓冲,分别是:

/ _8 B! ~) Z9 Q9 N. g. f; j, O7 L
33.png
# q4 x/ |% f" k: |$ c- u- P3 t
实验中我只各用到6个数据,并事先初始化。【对于验证而言,初始值是多少不重要】。

5 Y! K$ K' b+ ?( u  _9 e, L$ n
添加相关用户代码。这里我没有开启DMA传输相关中断,这点可以根据需要开启。

7 I* |! |+ C. G  t) @
44.png
2 Q# F! D/ F( m. r" W( j
代码整理、调试完毕,看看结果。下面是通过打断点,在两个时刻的两幅截图。【注:接收缓冲区的起始地址为0x24000020,属于AXIM RAM区】。
  P; N% I* y; K) `) R' g
55.jpg

0 Z  G  [9 Q, {2 K
不难看出,收发数据很一致,那我们接下来看看使用Cache的情况。
二、开启Cache时的情况。

/ {- F5 Z$ V0 c0 o1 p. J: V
66.png

/ g; T  U$ q- q( ?) V! I# E% P0 y: ~
整个工作流程跟上面一样,在主程序里循环地触发SPI的DMA传输。因为开启了Cache,我们要注意数据一致性问题的处理。在主循环的修改发送收据操作后做了Dcache的清除和失效操作。当然,我们也可以开启DMA传输中断,比方在传输完成中断里做Cache相关的数据更新与维护操作。整个用户代码跟上面不开启Cache时几乎一样,就最后多了一句跟Cache相关的代码。

0 f8 q& W) @% X
77.jpg
' y( K) d2 u0 L' |
稍作整理、编译运行,看看结果。同样,下面是通过打断点,在两个时刻的两幅截图。【注:接收缓冲区起始地址是0x24000020,属于AXIM RAM区】。

) ^; ]9 m$ G  z3 R4 M7 y
88.jpg
3 w7 S9 ~' o& e) Y. c$ a+ @
从验证结果可以看出,发送、接收的数据非常地一致。
' E1 W) a5 l( K% ]& B& H. ?
这里提醒下,如果开启DCache,对于会被Cache的数据缓冲区,其地址以及缓冲区大小须遵循32字节对齐的原则。所以,关于收发缓冲区的定义及初始化,开启Cache时跟不开启Cache稍有点差异。【下面的6代表代码中用到的六个16位半字数据】
  O6 p) O6 \: L4 ?
99.png

" v& J' Z3 Z2 R- ^3 K$ U; m好,整个示例就分享到这里,需要用到的代码都贴出来了。另外,当开启Cache之后,关于数据更新与维护我们也可以通过配置MPU来实现。, M1 Q; r3 D( n# o

0 F4 b9 @( ~- B- X: \4 x! H
% b0 u: I. Z! }; |4 ~
) t* {7 N5 d4 L, E( S' l

# s) m" m2 ?+ o. l: c
收藏 评论0 发布时间:2019-12-5 10:45

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版