华大MCU之五:SPI从机DMA模式配置(不能正常接收问题处理)

cathy的头像

最近有个需求是需要使用 华大 MCU(HC32F460) 的 SPI 作为从机来接收数据,无奈搞了两天不可用。配置完 SPI 的从机模式后,只要启动主机端的发送就出现如下图所示的错误:

“华大MCU之五:SPI从机DMA模式配置(不能正常接收问题处理)"

下面是 SPI 主机发送数据的时序图(黄色为 CS,绿色为 CLK):

“华大MCU之五:SPI从机DMA模式配置(不能正常接收问题处理)"

比较特殊的是,SPI 主机要求只发送数据,不进行接收(主机只有数据输出引脚)! 这就要求在从机 SPI 可以不发送数据,节省一个 MCU 的 IO。正是这一点,导致我在配置从机 SPI 时掉入了坑里(从机 SPI 只配置了接收!!!)。下面我们重点说一说我的经历,让大家少进坑。

从机模式
  
无论是用了多年的 STM32 系列 ,还是切换后的华大 MCU 系列,SPI 从机模式本次是第一次使用。也因此,我对于从机 SPI 的配置也不是很了解。首先,去手册中查找从机 SPI 的相关介绍:

“华大MCU之五:SPI从机DMA模式配置(不能正常接收问题处理)"

1、HC32F460 的 SPI 支持 4 线式 SPI 模式和 3 线式时钟同步运行模式,这里我需要使用 4 线式 SPI 运行模式。至于 3 线时钟同步运行模式,感兴趣的自行去看手册。

标准里的 SPI 3 线制不是指的 MOSI 和 MISO 合并一个么?和华大手册里的 3 线制不是一个东西啊

2、从机模式时使用 MOSI 接收,MISO 发送

3、上图中红色圈出来的地方需要注意,根据我的试用,从机模式下也有欠载错误检测。

从机 SPI 配置
  
在看了手册的相关介绍之后,接下来就是实际写代码进行配置了。SPI 的配置还是比较简单的,我这里使用了 DMA 进行接收数据。我们直接调用库函数即可。如下:

“华大MCU之五:SPI从机DMA模式配置(不能正常接收问题处理)"

1、在配置 IO 的时候,我这里不配置 MISO,因为我的需求里面不需要从机发送。

2、配置复用之前,我先把 IO 配成输入,且带上拉。这主要是为了保证 IO 的初始电平。这个与硬件设计有关!

举个例子:对于串口,协议规定默认的电平为高电平。如果硬件没有配置上拉,则我们必须先把 IO 配置带上拉,否则可能导致无法接收数据

3、注意上面的红色框中的代码,这个是用来发送数据的!在一开始配置时,我并没有配置发送 DMA,因为我一直认为作为从机,我不需要发送数据,自然我也不需要配置 SPI 的发送,所以在最初的配置中没有上图中红色框中的内容。这就导致陷入了文章开始说的误区。

分析总结
  
HC32F460 的 SPI 从机模式并没有只接收这种配置(ST的 SPI 可以配置仅接收),这就意味着,不管我们用不用 SPI 从机发送功能,都必须要配置发送。

“华大MCU之五:SPI从机DMA模式配置(不能正常接收问题处理)"

如果不使用发送,则可以不去配置 SPI 从机发送引脚(MISO),节省出来的 IO 可以作为普通 IO 去使用。

在不使用发送功能时,配置的发送可以根据需要发送任意一个字节即可。例如,上面我的 DMA 发送中,仅仅就是循环发送一个字节 00。否则将导致本文开篇截图的欠载错误!我的理解是,因为 HC32F460 不能配置单独接收(对比 STM32 系列的 SPI 可以配置 仅接收、仅发送等模式),所以默认从机是收发都启用(工作)的状态。

“华大MCU之五:SPI从机DMA模式配置(不能正常接收问题处理)"

根据手册的说明,在产生欠载错误后,会主动停止 SPI,因此实际使用中,需要处理欠载错误等异常的情况!而且,MCU 并没有提供关闭这个错误检测的配置项!!!因此,一旦出错或者说 DMA 停止了发送,这必然导致出现上面的错误!!

参考

1、HC32F460系列用户手册Rev1.21.pdf
2、HC32F460 驱动库示例代码

相关阅读:
华大MCU之一:HC32F460 替换 STM32F411 移植记录
华大MCU之二:USB 驱动 + FatFs 的移植使用详解
华大MCU之三:时钟控制器(CMU)配置记录
华大MCU之四:使用问题记录

————————————————

版权声明:本文为CSDN博主「ZC·Shou」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ZCShouCSDN/article/details/118597633
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。