【单片机通讯技能——学习条记二】STM32 HAL库 SPI主从机通过串口发送数据

[复制链接]
发表于 2025-10-20 22:29:01 | 显示全部楼层 |阅读模式
一、阐明

使用STM32F103C8T6最小体系板,让板载SPI1与SPI2通讯,通过串口收发数据。本文章阐明确在设置与编写时遇到的一些题目,以及详细阐明怎样使用cubeMAX举行代码编写。
二、CubeMAX设置

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)主循环中添加如下代码,
  1. HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET); // 拉低CS(启动通信)
复制代码

  • 作用:通过拉低 GPIOA 的 PIN4(片选引脚 CS),选中毗连的 SPI 从机装备。
  • 关键点:SPI 协议要求主机在通讯前必须拉低从机的 CS 引脚,否则从机不会相应。
  1. 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:超时时间(单位:毫秒)。
           
  1. char msg[50];
  2. sprintf(msg, "SPI1 Received: 0x%02X\r\n", spi1_rx_data);
  3. HAL_UART_Transmit(&huart1, (uint8_t*)msg, strlen(msg), 100);
  4. sprintf(msg, "SPI2 Received: 0x%02X\r\n", spi2_rx_data);
  5. HAL_UART_Transmit(&huart1, (uint8_t*)msg, strlen(msg), 100);
复制代码
将 SPI 吸取的数据格式化为字符串,并通过 UART1 发送。
  1. #include "stdio.h"
  2. #include "string.h"
复制代码

sprintf()函数大概会陈诉诫,这时应添加头函数。
  1. HAL_Delay(500); // 延时500毫秒
复制代码
每次循环隔断 500ms,克制频仍通讯导致总线辩论或数据过载。

3.到此全部的代码添加完毕,点击“把戏棒”,检察ST-Link Debugger​是否勾选,点击进入Setting,勾选上Reset and Run如许在我们每次烧录完之后不必要再按下复位让单片机乐成烧录。



四、征象展示

若与下图雷同那么实验乐成,也可以在全局变量更改吸取的数值。

如出现一下征象,大概是未将单片机上SPI1的接口与SPI2的接口相毗连起来,如下图接线。同时要留意ST-Link是无法打开串口数据的,要毗连最小体系板的USB插口或用USB转TTL接杜邦线毗连最小体系板上的A9,A10引脚。
  1. SPI1             SPI2
  2. SCK:  PA5 ---->  SCK:  PB13
  3. MISO: PA6 ---->  MISO: PB14
  4. MOSI: PA7 ---->  MOSI: PB15
  5. CS:   PA4 ---->  CS:   PB12
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

×
登录参与点评抽奖,加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表