STM32片上外设

Preipheral

共同代码

初始化

一般都是 RCC 开启时钟,GPIO 初始化,然后再为特定外设的初始化
外设基本代码:都是使用结构体初始化。

定义结构体、给结构体赋值、将结构体地址传递

//封装的代码
void Preipheral_DeInit(void);
void Preipheral_Init(Preipheral_InitTypeDef* Preipheral_InitStruct);
void Preipheral_StructInit(Preipheral_InitTypeDef* Preipheral_InitStruct);
//实际操作
Preipheral_InitTypeDef Preipheral_InitStruct ; //定义结构体
Preipheral_InitStruct.member1= ; 
Preipheral_InitStruct.member2= ; 
//...  引出结构体的成员,进行赋值
Preipheral_Init(&Preipheral_InitStruct); //将结构体的地址传入,进行初始化

状态标志位

状态标志位,在状态寄存器中

FlagStatus Preipheral_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG);

void Preipheral_ClearFlag(USART_TypeDef* USARTx, uint16_t USART_FLAG);

ITStatus Preipheral_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT);

void Preipheral_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT);

中断配置

NVIC

说明

注意

调用初始化函数,将结构体地址传入函数时,就写入到硬件的寄存器中了
所以可以直接更改值继续使用,初始化其他外设

Preipheral_InitTypeDef Preipheral_InitStruct;
Preipheral_InitStruct.member1=x1;
Preipheral_InitStruct.member2=y1;
Preipheral1_Init(&Preipheral_InitStruct);

Preipheral_InitTypeDef Preipheral_InitStruct;
Preipheral_InitStruct.member1=x2;
Preipheral_InitStruct.member2=y2;
Preipheral2_Init(&Preipheral_InitStruct);