华大 MCU 之五 SPI 从机 DMA 模式 配置(不能正常接收问题处理)
最近有个需求是需要使用 华大 MCU(HC32F460) 的 SPI 作为从机来接收数据,无奈搞了两天死活不可用。配置完 SPI 的从机模式后,只要启动主机端的发送就出现如下图所示的错误:
下面是 SPI 主机发送数据的时序图(黄色为 CS,绿色为 CLK):
比较特殊的是,SPI 主机要求只发送数据,不进行接收(主机只有数据输出引脚)! 这就要求在从机 SPI 可以不发送数据,节省一个 MCU 的 IO。正是这一点,导致我在配置从机 SPI 时掉入了坑里(从机 SPI 只配置了接收!!!)。下面我们重点说一说我的经历,让大家少进坑。
从机模式
无论是用了多年的 STM32 系列 ,还是切换后的华大 MCU 系列,SPI 从机模式本次是第一次使用。也因此,我对于从机 SPI 的配置也不是很了解。首先,去手册中查找从机 SPI 的相关介绍:
HC32F460 的 SPI 支持 4 线式 SPI 模式和 3 线式时钟同步运行模式,这里我需要使用 4 线式 SPI 运行模式。至于 3 线时钟同步运行模式,感兴趣的自行去看手册。
标准里的 SPI 3 线制不是指的 MOSI 和 MISO 合并一个么?和华大手册里的 3 线制不是一个东西啊
从机模式时使用 MOSI 接收,MISO 发送
上图中红色圈出来的地方需要注意,根据我的试用,从机模式下也有欠载错误检测。
从机 SPI 配置
在看了手册的相关介绍之后,接下来就是实际写代码进行配置了。SPI 的配置还是比较简单的,我这里使用了 DMA 进行接收数据。我们直接调用库函数即可。如下:
在配置 IO 的时候,我这里不配置 MISO,因为我的需求里面不需要从机发送。
配置复用之前,我先把 IO 配成输入,且带上拉。这主要是为了保证 IO 的初始电平。这个与硬件设计有关!
举个例子:对于串口,协议规定默认的电平为高电平。如果硬件没有配置上拉,则我们必须先把 IO 配置带上拉,否则可能导致无法接收数据
注意上面的红色框中的代码,这个是用来发送数据的!在一开始配置时,我并没有配置发送 DMA,因为我一直认为作为从机,我不需要发送数据,自然我也不需要配置 SPI 的发送,所以在最初的配置中没有上图中红色框中的内容。这就导致陷入了文章开始说的误区。
分析总结
HC32F460 的 SPI 从机模式并没有只接收这种配置(ST的 SPI 可以配置仅接收),这就意味着,不管我们用不用 SPI 从机发送功能,都必须要配置发送。
如果不使用发送,则可以不去配置 SPI 从机发送引脚(MISO),节省出来的 IO 可以作为普通 IO 去使用。
在不使用发送功能时,配置的发送可以根据需要发送任意一个字节即可。例如,上面我的 DMA 发送中,仅仅就是循环发送一个字节 00。否则将导致本文开篇截图的欠载错误!我的理解是,因为 HC32F460 不能配置单独接收(对比 STM32 系列的 SPI 可以配置 仅接收、仅发送等模式),所以默认从机是收发都启用(工作)的状态。
根据手册的说明,在产生欠载错误后,会主动停止 SPI,因此实际使用中,需要处理欠载错误等异常的情况!而且,MCU 并没有提供关闭这个错误检测的配置项!!!因此,一旦出错或者说 DMA 停止了发送,这必然导致出现上面的错误!!
参考
- HC32F460系列用户手册Rev1.21.pdf
- HC32F460 驱动库示例代码
华大 MCU 之五 SPI 从机 DMA 模式 配置(不能正常接收问题处理)相关推荐
- 华大 MCU 之三 时钟控制器(CMU)配置记录
今天在新项目(MCU 为华大 HC32F460)中不再使用外部晶振,转而要使用 HC32F460 内部的 HRC,之前在使用外部晶振时,对华大 MCU 的时钟配置有过一些了解,但是,由于使用内部晶 ...
- STM32之SPI从机DMA例程
#include "stm32f10x.h" /* RCC时钟配置 */ void RCC_config(void) { ErrorStatus HSEStartUpStatus ...
- 华大 MCU 之七 DMA 导致 SPI 异常停止的原因分析、DMA 配置的那些坑
缘起 在最近的项目测试中发现,SPI 通信总是莫名其妙的失败,查看寄存器发现 SPI 已经被停止了.根据手册,SPI 在异常情况下会被强制停止(SPI 的使能为被清零),而根据波形显示通信过程没有 ...
- 基于SYSBIOS GIO接口的uart通信DMA模式
基于SYSBIOS GIO接口的uart通信DMA模式(不定长接收) 硬件:TMS320C6748 (创龙开发板) bsp: bios_6_37_03_30 相对裸机版的Uart dma配置,SYSB ...
- 基于TI SYSBIOS GIO 接口封装的SPI DMA模式
基于TI SYSBIOS GIO 接口封装的SPI DMA模式 硬件:TMS320C6748 (创龙开发板) bsp: bios_6_37_03_30 注意: DMA模式需要先使能EMDA3 TC/C ...
- ESP32学习笔记(20)——SPI(从机)接口使用
一.SPI简介 SPI(Serial Peripheral Interface) 协议是由摩托罗拉公司提出的通讯协议,即串行外围设备接口,是一种高速全双工的通信总线.它被广泛地使用在 ADC.LCD ...
- STM32从零到一,从标准库移植到HAL库,UART串口1以DMA模式收发不定长数据代码详解+常见问题 一文解析
前言 本文的参考资料 感谢提供标准库版本的CSDN同学:这两篇文章至少是我看过的最详细的标准库配置DMA版本.而且代码实测稳定能用. STM32 | DMA配置和使用如此简单(超详细)_...| .. ...
- SPI四种工作模式时序图
1.SPI总线简介 SPI(serial peripheral interface,串行外围设备接口)总线技术是Motorola公司推出的一种同步串行接口.它用于CPU与各种外围器件进行全双工.同步串 ...
- 华大 MCU 之四 使用问题记录
在最近使用华大 MCU 时,遇到了不少坑,这里记录一下,以方便在以后升级驱动库!其中,有些问题仅仅是在由 ST 切换到 华大之后不太适于的问题,有些是驱动库的更改问题! 如果您发现我说的问题是 ...
最新文章
- 洛谷专题训练 ——【算法1-1】模拟与高精度
- 【GPU推荐】高性价比GPU平台,3090赶紧入手!(11.11种草狂欢)
- 南宁师范大学计算机与信息工程学院研究生,南宁师范大学计算机与信息工程学院(专业学位)职业技术教育保研...
- Linux笔记-inode基本概念
- linux脚本能轮循吗,通过Linux定时任务实现定时轮询数据库及发送Http请求
- JS-以鼠标位置为中心的滑轮放大功能demo1
- 【三十二】thinkphp之连接数据库、实例化模型
- 企业为什么需要BI决策系统?
- 使用videojs播放rtmp视频
- matlab里面求出两条曲线的交点问题
- 华为HCIE证书含金量
- 【树莓派】登入树莓派
- 批处理+Linux书籍+黑客编程+脚本攻防+逆向工程书籍+海量资源(pdf+chm电子书)
- 11、Altiris cms 7.0 系统监控
- 全网最精减、安装最简单、无头疼配置的Katago教程,大小才168M,职业水平,散仙订制版
- Python入门-Day5
- 前NASA气象学家洛夫洛克宣判地球死刑
- CS5268/CS5265/CS5266 Type-C转HDMI设计方案|替代CS5268/CS5265/CS5266芯片|GSV2201可完全替代兼容CS5268/CS5265/CS5266
- 以太网、令牌环、FDDI、ATM、WLAN
- OS - Bitcode App 瘦身中间码