有STM32用户使用STM32H7xx芯片进行开发,用到SPI外设。通过定时器定时触发SPI的发送,但发现每次发送的数据跟本来设计的不一样。本来他是希望每次发生定时器更新事件,在更新中断里发送一个16位数据,可他发现发送的数据却是32位,通过SPI的时钟信号可以清楚的看到每次发送的32个时钟脉冲。这是怎么回事呢?
经过反复确认,跟SPI有关的配置方面没有发现任何问题。
这里我就基于上述问题,稍加拓展地做些验证分析。我找了块STM32H743的Nucleo板进行些验证测试。使用SPI1,让其工作在双工主模式,MOSI与MISO短接,自发自收。
首先,我用DMA的方式来传输数据。使用TIM3的更新事件触发DMA,通过DMA将内存数据写到SPI1的发送数据寄存器,同时SPI1的接收也开启DMA传输,即通过SPI1的接收事件触发DMA传输,将SPI1收到的数据搬到内存数组。
使用STM32CubeMx工具进行初始化配置。
1、对TIM3进行基本配置,并使能更新事件的DMA请求。【这里将DMA配置为循环模式以便测试】
2、对SPI1进行初始化配置。工作在双工主模式,数据宽度选择16位,开启SPI接收事件的DMA传输。
做些其它有关调试、时钟的配置后,生成初始化代码。
准备需要的数据变量并添加相关用户代码。