GD32F103 SPI全双工通信实战:从硬件连接到代码调试的完整指南
在嵌入式开发中,SPI(Serial Peripheral Interface)因其高速、全双工的特性,成为连接传感器、存储芯片和外设模块的首选协议之一。GD32F103作为一款广泛应用的国产单片机,其SPI外设功能强大但配置细节较多,让不少开发者感到困惑。本文将带你从零开始,通过一个完整的全双工通信案例,掌握GD32 SPI的核心配置技巧。
1. SPI硬件连接与基础概念
SPI通信需要四条基本信号线:
- SCK:同步时钟信号,由主机产生
- MOSI:主机输出从机输入数据线
- MISO:主机输入从机输出数据线
- NSS:片选信号(低电平有效)
对于GD32F103系列,SPI0和SPI1的默认引脚映射如下:
| 外设 | NSS | SCK | MISO | MOSI |
|---|---|---|---|---|
| SPI0 | PA4 | PA5 | PA6 | PA7 |
| SPI1 | PB12 | PB13 | PB14 | PB15 |
实际连接时需注意:
- 主机和从机的MOSI-MISO需要交叉连接
- 若使用硬件NSS,需确保电平匹配
- 长距离通信建议加入终端电阻
时钟配置是SPI的核心参数之一,GD32F103的SPI时钟源来自APB2总线(最高108MHz),通过分频器可得到多种通信速率:
c复制// 常用分频系数定义
#define SPI_PSC_2 ((uint16_t)0x0000) // 54MHz
#define SPI_PSC_4 ((uint16_t)0x0008) // 27MHz
#define SPI_PSC_8 ((uint16_t)0x0010) // 13.5MHz
#define SPI_PSC_16 ((uint16_t)0x0018) // 6.75MHz
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. SPI初始化结构体深度解析
GD32的标准外设库使用spi_parameter_struct结构体进行配置,每个参数直接影响通信行为:
c复制typedef struct
{
uint32
