HAL——SPI

学习目标

  1. 掌握SPI配置方式
  2. 掌握SPI读写操作

学习内容

需求

SPI配置

打开SPI1,选中全双工模式。观察下方自动生成的引脚,是否和自己开发板引脚对应。

修改引脚,来动右侧芯片引脚视图,找到开发板对应引脚,进行修改。

观察修改后的引脚,是否和开发板对应:

修改SPI参数,目前当前业务只需要修改速率,通过修改分频得到。

SPI编码

OLED驱动拷贝

将原有OLED驱动拷贝到项目中

OLED的GPIO初始化修改

OLED初始化函数

cpp 复制代码
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);

oled头文件修改

cpp 复制代码
#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.h读写定义

cpp 复制代码
/* USER CODE BEGIN Prototypes */
void SPI1_write(uint8_t data);
uint8_t SPI1_read();
/* USER CODE END Prototypes */

实现spi读写

spi.c读写实现

cpp 复制代码
/* 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 */

练习

  1. 使用HAL库点亮屏幕
相关推荐
jianqiang.xue1 小时前
单片机图形化编程:课程目录介绍 总纲
c++·人工智能·python·单片机·物联网·青少年编程·arduino
文火冰糖的硅基工坊1 小时前
[嵌入式系统-100]:IoT(物联网)与AIoT(人工智能物联网)
人工智能·物联网·架构·创业
Let's GO Tiger2 小时前
DAPLINK可以烧录,但无法调试仿真
单片机·嵌入式硬件
ooolmf3 小时前
xunjixiaochejiaogai
stm32·单片机·嵌入式硬件
充哥单片机设计3 小时前
【STM32项目开源】基于STM32的智能家庭安防系统
stm32·单片机·嵌入式硬件
日更嵌入式的打工仔3 小时前
ENET_INIT卡死在DMA_MODE判断
单片机·嵌入式硬件
电鱼智能的电小鱼4 小时前
服装制造企业痛点解决方案:EFISH-SBC-RK3588 预测性维护方案
网络·人工智能·嵌入式硬件·算法·制造
szxinmai主板定制专家5 小时前
基于ARM+FPGA的无人机数据采集卡,6通道24bit采集
arm开发·嵌入式硬件·fpga开发·无人机·能源
点灯小铭10 小时前
基于单片机的智能水箱温度液位控制系统设计
单片机·嵌入式硬件·毕业设计·课程设计
文火冰糖的硅基工坊14 小时前
[嵌入式系统-100]:常见的IoT(物联网)开发板
人工智能·物联网·架构