SPI — SPI1 主机轮询
固件库: CIU32F003_STDLib V1.0.3
芯片: CIU32
源文件: CIU32/CIU32F003_STDLib_V1.0.3/Projects/SPI/SPI1_Master_Poll/Source/main.c
功能简介
本示例演示 SPI 总线通信。SPI 是高速同步串行接口,常用于连接 Flash、LCD、传感器等外设。
硬件准备
- 需要主机和从机两块板子,或使用回环连接(MOSI→MISO)
完整代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
#include "main.h"
int main(void)
{
uint32_t index = 0;
/* ϵͳʱ */
system_clock_config();
/* GPIOʼ */
gpio_init();
/* SPIʼ */
spi1_init();
/* SPIģʽ,Ƭѡź */
std_spi_set_nss_output(SPI_NSS_OUTPUT_LOW);
/* SPIݴ */
for(index=0; index<8; index++)
{
/* ȴݼĴΪ */
while(std_spi_get_flag(SPI_FLAG_TXFE) != SPI_FLAG_TXFE);
/* */
std_spi_write_data(g_send_buffer[index]);
/* ȴݼĴǿ */
while(std_spi_get_flag(SPI_FLAG_RXFNE) != SPI_FLAG_RXFNE);
/* */
g_recv_buffer[index] = std_spi_read_data();
}
/* SPIƬѡźţͨ */
while(!std_spi_get_flag(SPI_FLAG_TXFE));
while(std_spi_get_flag(SPI_FLAG_BUSY));
std_spi_set_nss_output(SPI_NSS_OUTPUT_HIGH);
while(1)
{
}
}
|
代码讲解
系统时钟初始化:配置 MCU 的主频和时钟树。不同芯片的时钟配置不同,一般由工具生成。
GPIO 配置:设置引脚为输出/输入模式,选择推挽/开漏输出,配置上拉/下拉。
SPI 配置:设置主/从模式、时钟极性(CPOL)、时钟相位(CPHA)、分频系数。主机和从机的 CPOL/CPHA 必须一致。
实验现象
- 主机和从机互相交换数据
- 数据校验通过则 LED 指示成功
注意事项
- CPOL 和 CPHA 必须主机从机一致
- 片选(CS)信号要手动拉低选中从机
- 时钟频率不能超过从设备的最大速率