学习目标
- 掌握SPI配置方式
- 掌握SPI读写操作
学习内容
需求

SPI配置
打开SPI1,选中全双工模式。观察下方自动生成的引脚,是否和自己开发板引脚对应。
修改引脚,来动右侧芯片引脚视图,找到开发板对应引脚,进行修改。


观察修改后的引脚,是否和开发板对应:
修改SPI参数,目前当前业务只需要修改速率,通过修改分频得到。
SPI编码
OLED驱动拷贝
将原有OLED驱动拷贝到项目中OLED的GPIO初始化修改
```c GPIO_InitTypeDef GPIO_InitStruct = {0};
//cs1: 屏幕的片选 CS1_PORT_RCC(); GPIO_InitStruct.Pin = CS1_PIN; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; HAL_GPIO_Init(CS1_PORT, &GPIO_InitStruct); //
//cs2: 字库的片选 CS2_PORT_RCC(); GPIO_InitStruct.Pin = CS2_PIN; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; HAL_GPIO_Init(CS2_PORT, &GPIO_InitStruct);
//dc: 是屏幕自己独有的命名控制引脚,和spi无关 DC_PORT_RCC(); GPIO_InitStruct.Pin = DC_PIN; HAL_GPIO_Init(DC_PORT, &GPIO_InitStruct);
```c#include "stm32f4xx_hal.h"#include "spi.h"#ifndef u8#define u8 uint8_t#endif#ifndef u16#define u16 uint16_t#endif#ifndef u32#define u32 uint32_t#endif/////// CS1#define CS1_PORT_RCC() __HAL_RCC_GPIOA_CLK_ENABLE()#define CS1_PORT GPIOA#define CS1_PIN GPIO_PIN_15/////// CS2#define CS2_PORT_RCC() __HAL_RCC_GPIOA_CLK_ENABLE()#define CS2_PORT GPIOA#define CS2_PIN GPIO_PIN_4/////// DC#define DC_PORT_RCC() __HAL_RCC_GPIOB_CLK_ENABLE()#define DC_PORT GPIOB#define DC_PIN GPIO_PIN_8//-----------------OLED端口定义----------------#define OLED_DC_Clr() HAL_GPIO_WritePin(DC_PORT,DC_PIN, GPIO_PIN_RESET)//DC#define OLED_DC_Set() HAL_GPIO_WritePin(DC_PORT,DC_PIN, GPIO_PIN_SET)#define OLED_CS_Clr() HAL_GPIO_WritePin(CS1_PORT,CS1_PIN, GPIO_PIN_RESET)//CS1#define OLED_CS_Set() HAL_GPIO_WritePin(CS1_PORT,CS1_PIN, GPIO_PIN_SET)#define OLED_ROM_CS_Clr() HAL_GPIO_WritePin(CS2_PORT,CS2_PIN, GPIO_PIN_RESET)//CS2#define OLED_ROM_CS_Set() HAL_GPIO_WritePin(CS2_PORT,CS2_PIN, GPIO_PIN_SET)
- 将引入改为
#include "stm32f4xx_hal.h" - 引入生成的
spi.h实现SPI的读写
定义头
实现spi读写/* USER CODE BEGIN Prototypes */void SPI1_write(uint8_t data);uint8_t SPI1_read();/* USER CODE END Prototypes */
/* USER CODE BEGIN 1 */void SPI1_write(uint8_t data) {HAL_SPI_Transmit(&hspi1, &data, 1, HAL_MAX_DELAY);}uint8_t SPI1_read() {uint8_t data;HAL_SPI_Receive(&hspi1, &data, 1, HAL_MAX_DELAY);return data;}/* USER CODE END 1 */
练习
- 使用HAL库点亮屏幕
