1.2 STM32的GPIO
GPIO的8种输入输出模式:
输入:
- GPIO_Mode_AIN // 模拟输入:用于ADC
- GPIO_Mode_IN_FLOATING //浮空输入
- GPIO_Mode_IPD //下拉输入
- GPIO_Mode_IPU //上拉输入
输出:
- GPIO_Mode_Out_OD //开漏输出
- GPIO_Mode_Out_PP //推挽输出
- GPIO_Mode_AF_OD //复用开漏输出
- GPIO_Mode_AF_PP //复用推挽输出
RCC时钟使能:
void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState); //AHB
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);//APB2
void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);
//APB1
GPIO:
void GPIO_DeInit(GPIO_TypeDef* GPIOx); //GPIO复位
void GPIO_AFIODeInit(void); //AFIO复位
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct); //GPIO初始化
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);
LED点灯:
GPIO_InitTypeDef GPIO_InitTypeDefStructure;
GPIO_InitTypeDefStructure.GPIO_Mode=GPIO_Mode_Out_PP; //推挽输出
GPIO_InitTypeDefStructure.GPIO_Pin=GPIO_Pin_1; //PA1
GPIO_InitTypeDefStructure.GPIO_Speed=GPIO_Speed_50MHz; //速度
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //使能APB2时钟
GPIO_Init(GPIOA,&GPIO_InitTypeDefStructure); //GPIOA初始化
GPIO_SetBits(GPIOA,GPIO_Pin_1);
按键控制LED点亮:
按键Key.c:
void Key_Init(void){
GPIO_InitTypeDef GPIO_InitTypeDefStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitTypeDefStructure.GPIO_Mode=GPIO_Mode_IPD;
GPIO_InitTypeDefStructure.GPIO_Pin=GPIO_Pin_11;
GPIO_InitTypeDefStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitTypeDefStructure);
}
uint8_t Key_Out(void){
**uint8_t KeyNum = 0;**
***if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11) == 0)*******{ //防抖动****
****Delay_us(10);
while (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11) == 0);
Delay_us(10);
KeyNum = 1;
}
return KeyNum;
}****
main.c:
KeyNum=Key_Out();
if(KeyNum==1){
GPIO_SetBits(GPIOA,GPIO_Pin_1);
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具