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

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

[复制链接]
oneside 发布时间:2019-12-5 10:45
这里使用stm32h743-Nucleo板做个基于DMA传输的SPI收发应用示例。选择SPI1,MOSI与MISO短接,通过DMA自发自收,分开启Cache和不开启Cache来配置演示,以供参考。
8 T4 R5 d7 A6 C
利用STM32CubeMx进行配置,生成基于ARM MDK环境和Cube库的初始化代码。
& s' n: O) \! j7 I, u" r
SPI1配置在双工主角色,数据位设置为16位。开启SPI的TX/RX的DMA请求。
8 @# }" a2 Y  j
11.png

0 @4 J: L& V( _) B6 y" q
完成其它有关时钟、中断配置后,生成初始化代码并建立工程。

3 B' i6 ^7 o* w' v) y4 u4 A' S& T2 {
一、先不打开Cache。【屏蔽掉相关代码语句】

5 K+ Y9 n# w" M+ `0 a3 K- C
22.png

7 h1 \1 |3 [% \# T) m& B. B
我在主程序里周期性地修改待发送的数据,并使能SPI及DMA传输进行数据收发。
, z* T" r, d  E: B
这里定义了两个内存数组用于数据的收发缓冲,分别是:
# `; R4 m4 ]3 \6 u- q2 a
33.png
; Y8 U( r+ K9 R% K; j' G* {3 h3 P
实验中我只各用到6个数据,并事先初始化。【对于验证而言,初始值是多少不重要】。

+ [+ E3 N5 p- m- h2 ^9 @
添加相关用户代码。这里我没有开启DMA传输相关中断,这点可以根据需要开启。

. Y. E0 u4 l0 q9 l
44.png
4 Z( w- v$ F6 ?
代码整理、调试完毕,看看结果。下面是通过打断点,在两个时刻的两幅截图。【注:接收缓冲区的起始地址为0x24000020,属于AXIM RAM区】。
! w1 ^$ P6 c7 }, H" c. @- s
55.jpg
: k# V  T( X! H3 F# [
不难看出,收发数据很一致,那我们接下来看看使用Cache的情况。
二、开启Cache时的情况。
1 `6 C. h5 `; e' N
66.png

/ |; q( u( K' J
整个工作流程跟上面一样,在主程序里循环地触发SPI的DMA传输。因为开启了Cache,我们要注意数据一致性问题的处理。在主循环的修改发送收据操作后做了Dcache的清除和失效操作。当然,我们也可以开启DMA传输中断,比方在传输完成中断里做Cache相关的数据更新与维护操作。整个用户代码跟上面不开启Cache时几乎一样,就最后多了一句跟Cache相关的代码。
% w1 f) f9 M6 i2 a
77.jpg
, D" O% H# K4 D6 ~1 v) n! R6 i: j
稍作整理、编译运行,看看结果。同样,下面是通过打断点,在两个时刻的两幅截图。【注:接收缓冲区起始地址是0x24000020,属于AXIM RAM区】。
2 j0 B* m& I; W* A! |; ~  @% i
88.jpg
; [( K: o9 V5 s& T
从验证结果可以看出,发送、接收的数据非常地一致。
+ [. D: I$ F4 N/ N+ }
这里提醒下,如果开启DCache,对于会被Cache的数据缓冲区,其地址以及缓冲区大小须遵循32字节对齐的原则。所以,关于收发缓冲区的定义及初始化,开启Cache时跟不开启Cache稍有点差异。【下面的6代表代码中用到的六个16位半字数据】
7 L0 D! r6 g+ @6 {/ _( p6 }# j1 @
99.png
( a1 F  Y8 G2 N! |5 t. g/ V
好,整个示例就分享到这里,需要用到的代码都贴出来了。另外,当开启Cache之后,关于数据更新与维护我们也可以通过配置MPU来实现。' u1 D, @; H) N8 C& P
0 P6 H9 d. S$ U. {
! x% e* W3 B8 g: [; ?

7 M5 L3 g; Y5 m( X2 {1 E

  R0 G8 e6 u$ v# _0 Z2 s
赞 收藏 评论0 发布时间:2019-12-5 10:45

举报

0个回答

所属标签

相似技术帖

官网相关资源

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