STM32单片机SPI通信实战:CubeMX配置与代码详解
创作时间:
作者:
@小白创作中心
STM32单片机SPI通信实战:CubeMX配置与代码详解
引用
CSDN
1.
https://blog.csdn.net/2201_75797484/article/details/146055294
本文将详细介绍如何使用STM32F103C8T6最小系统板,通过CubeMX配置SPI1与SPI2通信,并通过串口发送数据。文章将从硬件配置、软件编程到最终的实验现象展示,为读者提供详细的步骤和关键代码片段。
一、说明
使用STM32F103C8T6最小系统板,让板载SPI1与SPI2通信,通过串口收发数据。本文章说明了在配置与编写时遇到的一些问题,以及详细说明如何使用cubeMAX进行代码编写。
二、CubeMX配置
1.时钟配置选择外部高速时钟
2.系统模式与时钟配置,选中Serial Wire模式(即 SWD 调试接口),用于连接 ST-Link 等调试工具。
3.将时钟配置为72分频,在这里一定要注意按回车确认72已经填入。
4. 选择 Full-Duplex Master(全双工主机模式),硬件 NSS 信号:已禁用(Disable Hardware NSS Signal),在这里要注意将波特率预分频改为256,图中右侧芯片引脚视图显示 SPI1 的引脚已自动分配,还要注意一点是NSS(片选) 未固定引脚,我们要在配置一下这个引脚为输出,此处右边选择PA4作为NSS。
5.选择 全双工主机模式(Full-Duplex Master) 。
6.配置串口1选择 Asynchronous(异步模式),即标准的 UART 串口通信(无同步时钟线),波特率设置为115200,USART1_TX(发送引脚) :PA9, USART1_RX(接收引脚) :PA10。
7.点击项目管理(Project Manager),在Project Manager(项目管理)中工具链/IDE(Toolchain/IDE) :选择 MDK-ARM(Keil) ,版本 V5.32 (需与本地安装的 Keil 版本匹配)。
8.勾选 “Generate peripheral initialization as a pair of '.c/.h' files per peripheral” ,表示每个外设(如 SPI、USART)的初始化代码会独立生成到
Src
和
Inc
文件夹中,提升代码可读性和模块化。
9.点击GENERATE CODE生成代码,随后点击open即可打开CubeMAX生成的代码。
三、Keil代码编写
1.因为我们需要SPI1与SPI2互相收发数据,所以我们直接定义出全局变量,以便于我们后期修改数。
2.在while(1)主循环中添加如下代码,
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET); // 拉低CS(启动通信)
- 作用:通过拉低 GPIOA 的 PIN4(片选引脚 CS),选中连接的 SPI 从机设备。
- 关键点:SPI 协议要求主机在通信前必须拉低从机的 CS 引脚,否则从机不会响应。
HAL_SPI_TransmitReceive(&hspi1, &spi1_tx_data, &spi1_rx_data, 1, 100);
- 功能:通过 SPI1 同时发送 1 字节数据(
0xFF
)并接收 1 字节数据。 - 发送数据:
spi1_tx_data
值为
0x66
(可能用于触发从机返回数据)。 - 接收数据:从机响应的数据存入
spi1_rx_data
。 - 参数解析:
- &hspi1
:SPI1 的句柄(需提前配置为 主机模式)。 - 1
:传输数据长度为 1 字节。 - 100
:超时时间(单位:毫秒)。
char msg[50];
sprintf(msg, "SPI1 Received: 0x%02X\r\n", spi1_rx_data);
HAL_UART_Transmit(&huart1, (uint8_t*)msg, strlen(msg), 100);
sprintf(msg, "SPI2 Received: 0x%02X\r\n", spi2_rx_data);
HAL_UART_Transmit(&huart1, (uint8_t*)msg, strlen(msg), 100);
将 SPI 接收的数据格式化为字符串,并通过 UART1 发送。
#include "stdio.h"
#include "string.h"
sprintf()函数可能会报警告,这时应添加头函数。
HAL_Delay(500); // 延时500毫秒
每次循环间隔 500ms,避免频繁通信导致总线冲突或数据过载。
3.到此所有的代码添加完毕,点击“魔术棒”,查看ST-Link Debugger 是否勾选,点击进入Setting,勾选上Reset and Run这样在我们每次烧录完之后不需要再按下复位让单片机成功烧录。
四、现象展示
若与下图相同那么实验成功,也可以在全局变量更改接收的数值。
如出现一下现象,可能是未将单片机上SPI1的接口与SPI2的接口相连接起来,如下图接线。同时要注意ST-Link是无法打开串口数据的,要连接最小系统板的USB插口或用USB转TTL接杜邦线连接最小系统板上的A9,A10引脚。
SPI1 SPI2
SCK: PA5 ----> SCK: PB13
MISO: PA6 ----> MISO: PB14
MOSI: PA7 ----> MOSI: PB15
CS: PA4 ----> CS: PB12
热门推荐
同居期间财产分割原则
每次体检都有尿常规,它到底能监测出什么?如何正确采集尿样?
Nature丨发现动脉粥样硬化全新治疗靶点,神经酰胺受体结构
揭秘:游戏玩家为何必须重视单核性能
世界气象组织:到2027年灾害预警要覆盖地球上的每个人
反诈宣传不停歇,拧紧反诈“安全阀”
灵芝:从神话到科学的健康密码
律师事务所骗了我怎么办
玉米大斑病症状:如何从叶片病变中发现问题
麻辣烫好还是冒菜好?一文详解两者区别
《老人与海》人物形象分析
《老人与海》的四个主题的分析
日照本地人推荐:6个必去景点和2天1晚穷游路线
深圳8大适合看夜景的好去处(附实拍图)
红烧带鱼:经典家常菜的详细制作方法
ESG证书热袭来,到底哪些证书有含金量?大众该怎么选择?
MQTT家庭智能网关:物联网数据传输的关键
什么是MQTT协议网关?
如何深入理解和分析债券市场?这种市场分析有哪些实际应用?
农作物秸秆利用:资源化与经济效益分析
HSE系统中如何识别和管理环境风险?
北京城市图书馆举办文学沙龙 梁晓声、周晓枫、蒋建伟等与读者探讨一百种人生
春季钓鱼技巧和饵料配方是什么?如何提高钓鱼成功率?
2025年卫生资格考试备考指南:政策解读、备考策略与未来趋势
三层楼房后需要给居民留出多少间隔,有法律规定吗?
混凝土砖检测标准和频率介绍,多久出报告
电脑无法加载插件怎么办?15个实用解决方案帮你轻松应对
遛狗不牵绳属于什么违法?各地规定及法律责任详解
张雪峰谈昆山杜克大学:建议去吗?录取分数线是多少?
教你三步骤回测策略:打造高胜率交易策略,击败其他交易员的必备“神器”