SLAM小车,从0到1——STM32 HAL库使用

目录

前言

一、外设概况。

二、HAL库的命名方式风格

三、各外设的结构体及常用函数

四、遇到的问题和解决方法



前言

小车底盘的控制,采用STM32F405。以下梳理STM32 HAL库的各项外设初始化结构体和函数。



一、外设概况。

各外设初始化方式如下表。

外设

用途

初始化配置

初始化方式

ADC

电压采集

ADC_HandleTypeDef

HAL_ADC_Init(MspInit重定义) ->

HAL_ADC_ConfigChannel->HAL_ADC_Start

CAN

通讯

CAN_HandleTypeDef

HAL_CAN_Init(MspInit重定义)->

HAL_CAN_ConfigFilter->HAL_CAN_Start

Common

-

-

Cortex

内核

-

-

DMA

-

-

EXTI

中断

-

-

Flash

Boot loader

FLASH_EraseInitTypeDef

先擦再写HAL_FLASH_Unlock->

__HAL_FLASH_CLEAR_FLAG->

HAL_FLASHEx_Erase->

(__HAL_FLASH_CLEAR_FLAG)->

HAL_FLASH_Program

GPIO

外设的基础

GPIO_InitTypeDef

HAL_GPIO_Init

I2C

IMU控制

TBD

TBD

PWR

电源/休眠

-

__HAL_RCC_PWR_CLK_ENABLE

RCC

时钟配置

-

-

TIM

解码/PWM

TBD

TBD

USART

串口/打印

USART_HandleTypeDef

HAL_GPIO_Init(MspInit重定义)


二、HAL库的命名方式风格

  1. 数据,外设_功能(主谓)。
  2. 函数,HAL_外设_功能(谓/主谓/谓宾)。
  3. 数据结构体:寄存器值,控制参数,句柄(实例/参数/buffer/状态/错误码)。
  4. 函数:先断言。

三、各外设的结构体及常用函数

1. GPIO

GPIO_InitTypeDef定义好,调用HAL_GPIO_Init即完成初始化。

数据结构

作用

备注

GPIO_TypeDef

寄存器结构体

根据地址偏移,对应寄存器

GPIO_InitTypeDef

初始化结构体

PIN/模式/输出方式/速度/复用的定义

HAL常用函数

作用

备注

HAL_GPIO_Init

初始化相关

HAL_GPIO_ReadPin

HAL_GPIO_TogglePin

HAL_GPIO_WritePin

控制&状态

HAL_GPIO_EXTI_Callback

HAL_GPIO_EXTI_IRQHandler

中断

中断回调

清除中断标志位,调用回调

2. USART

USART_HandleTypeDef定义好实例和初始化参数,调用HAL_GPIO_Init(MspInit中先初始化GPIO)完成初始化。

数据结构

作用

备注

USART_InitTypeDef

初始化结构体

波特率、字长、中止位、校验、模式

USART_HandleTypeDef

句柄

*Instance实例为寄存器基地址

Init初始化结构体,状态,错误码

HAL常用函数

作用

备注

HAL_USART_Init

HAL_USART_MspInit

初始化

芯片级寄存器初始化

需要重定义MspInit初始化GPIO

HAL_USART_Transmit

HAL_USART_Receive

发送

接收

3. CAN

CAN_HandleTypeDef定义好实例和初始化参数,初始化步骤HAL_CAN_Init(MspInit中初始化GPIO) -> HAL_CAN_ConfigFilter -> HAL_CAN_Start。

数据结构

作用

备注

CAN_InitTypeDef

初始化结构体

波特率、字长、中止位、校验、模式

CAN_HandleTypeDef

句柄

*Instance实例为寄存器基地址

Init初始化结构体,状态,错误码

CAN_RxHeaderTypeDef

帧头结构体

CAN_TxHeaderTypeDef

帧头结构体

CAN_FilterTypeDef

过滤结构体

FIFO设0或1

HAL常用函数

作用

备注

HAL_CAN_Init

HAL_CAN_MspInit

HAL_CAN_ConfigFilter

HAL_CAN_Start

初始化

芯片级寄存器初始化

过滤配置

启动

需要重定义MspInit初始化GPIO

HAL_CAN_AddTxMessage HAL_CAN_GetRxMessage

发送

接收

FIFO需要跟初始化一致

4. ADC

ADC_HandleTypeDef定义好实例和初始化参数,初始化步骤HAL_ADC_Init(MspInit中初始化GPIO) -> HAL_ADC_ConfigChannel -> HAL_ADC_Start。

数据结构

作用

备注

ADC_InitTypeDef

初始化结构体

波特率、字长、中止位、校验、模式

ADC_HandleTypeDef

句柄

*Instance实例为寄存器基地址

Init初始化结构体,状态,错误码

ADC_ChannelConfTypeDef

通道配置结构体

HAL常用函数

作用

备注

HAL_ADC_Init

HAL_ADC_MspInit

HAL_ADC_ConfigChannel

初始化

芯片级寄存器初始化

通道配置

需要重定义MspInit初始化GPIO

HAL_ADC_Start

HAL_ADC_GetState HAL_ADC_GetValue

启动

状态获取

值获取

5. Flash

ADC_HandleTypeDef定义好实例和初始化参数,初始化步骤HAL_ADC_Init(MspInit中初始化GPIO) -> HAL_ADC_ConfigChannel -> HAL_ADC_Start。

数据结构

作用

备注

FLASH_EraseInitTypeDef

擦写结构体

波特率、字长、中止位、校验、模式

HAL常用函数

作用

备注

HAL_FLASH_Unlock

解锁

__HAL_FLASH_CLEAR_FLAG

标志位清除

HAL_FLASHEx_Erase

HAL_FLASH_Program



四、遇到的问题和解决方法

1.     MspInit是weak函数,未重定义,导致缺少GPIO初始化。

2.     CAN未调用START,导致无法发送CAN。

3.     CAN未配置过滤,导致无法接收CAN。

4.     通过查看各外设的状态寄存器和错误寄存器来排查。

你可能感兴趣的:(笔记,单片机,stm32,arm)