STM32笔记
GPIO输出
GPIO(general purpose input output)通用输入输出
引脚电平:0V ~ 3.3V,部分引脚可容忍5V
输出模式下可控制端口输出高低电平,控制LED、蜂鸣器、模拟通信协议输出时序等
输入模式下可读取端口的额高低电平活电压,用于按键读取、外界模块电平信号输入、ADC电压猜忌、模拟通信协议接收数据等
单独操作输出数据寄存器的某一位的方法
- &=和|=操作,比较麻烦效率不高
- 操作位设置\清除寄存器,
- 读写"位带"区域,在stm32中,专门分配的一段地址区域,这段地址区域映射了RAM和外设寄存器的所有的位,操作相应的地址就相当于操作某一位
GPIO8种模式
代码操作
- 使用RCC开启GPIO的时钟
- 使用GPIO_Init函数初始化GPIO
- 使用输入输出函数控制GPIO
RCC常用函数
void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);
void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);
GPIO常用函数
void GPIO_DeInit(GPIO_TypeDef* GPIOx);
void GPIO_AFIODeInit(void);
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct);
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);
uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);
typedef struct
{
uint16_t GPIO_Pin;
GPIOSpeed_TypeDef GPIO_Speed;
GPIOMode_TypeDef GPIO_Mode;
}GPIO_InitTypeDef;
推挽开漏
推挽输出高低电平均有驱动能力
开漏高电平相当于高阻态,没有驱动能力,低电平有驱动能力
|