【HAL库】STM32CubeMX开发----STM32F407----SPI实验
前言
本次实验以 STM32F407VET6 芯片为MCU,使用 25MHz 外部时钟源。
SPI 通信引脚 与 MCU引脚 对应关系如下:
SPI接口 | GPIO端口 |
---|---|
CS(片选) | PA4 |
SCLK(时钟) | PA5 |
MISO(数据输入) | PA6 |
MOSI(数据输出) | PA7 |
一、使用STM32CubeMX ---- 新建SPI实验工程
步骤1:打开 STM32CubeMX 软件
步骤2:选择 从MCU开始我的项目
步骤3:选择MCU芯片
我们本次实验选择 STM32F407VET6 芯片做 MCU。
进入工程编辑,具体界面如下:
步骤4:设置烧写方式为 SWD模式
这一步必须选择一种烧写方式,否则烧写一次程序后,芯片中就没法再次烧写程序了。需要硬件重启才可以重新烧写程序。
STM32烧写程序连接方式详解
步骤5:设置时钟源
设置外部晶振为芯片系统时钟源。
步骤6:设置时钟
STM32F407 时钟最大频率为 168M
步骤7:SPI 通信配置
SPI 通信配置如下:
SPI 片选引脚配置:
步骤8:项目编辑
步骤9:代码生成编辑
步骤10:点击 GENERATE CODE 生成代码
新建的工程,已经生成,接下来就是对工程代码的编辑。
二、使用keil5----编辑程序
想要使用keil5打开工程,需要电脑先安装 keil5编译环境,具体操作流程。
可以点击下方文章链接:Keil5编译环境搭建流程
编辑片选信号
具体代码如下:
#define Flash_CS(a) if (a) \
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET);\
else \
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET)
编辑读写程序
static void SPI_WriteData(uint8_t *data, uint16_t len)//写入数据
{
HAL_SPI_Transmit(&hspi1, data, len, 1000);
}
void SPI_ReadData(uint8_t *data, uint16_t len)//读取数据
{
HAL_SPI_Receive(&hspi1, data, len, 1000);
}
uint8_t SPI_ReadWriteByte(uint8_t TxData)//读写一字节数据
{
uint8_t Rxdata;
HAL_SPI_TransmitReceive(&hspi1,&TxData,&Rxdata,1, 1000);
return Rxdata;
}