控制GPIO口的流程
1.声明一个结构体
GPIO_InitTypeDef GPIO_InitSystem; //声明结构体
2.使能时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD,ENABLE); //使能时钟
3.设置引脚配置
GPIO_InitSystem.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15; //选择引脚
GPIO_InitSystem.GPIO_Speed = GPIO_Speed_50MHz; //设置速率
GPIO_InitSystem.GPIO_Mode = GPIO_Mode_Out_PP;//设置为推挽模式
4.初始化端口
GPIO_Init(GPIOC,&GPIO_InitSystem); //初始化GPIOC端口
以上只是对LED输出口进行的配置,如果需要控制LED灯输出还需要对74HC573锁存器进行操作
74HC573真值表
配置LED 573锁存器
通过真值表可以看出当LE为高电平时输出随输入引脚而改变,当LE为低电平时输出结果不变,因此配置U7 573锁存器使能引脚如下
GPIO_InitSystem.GPIO_Pin = GPIO_Pin_2; //选择引脚
GPIO_Init(GPIOD,&GPIO_InitSystem); //初始化LED锁存器端口
LED灯整体初始化代码
oid LED_Init()
{
GPIO_InitTypeDef GPIO_InitSystem; //声明结构体
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD,ENABLE); //使能时钟
GPIO_InitSystem.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15; //选择引脚
GPIO_InitSystem.GPIO_Speed = GPIO_Speed_50MHz; //设置速率
GPIO_InitSystem.GPIO_Mode = GPIO_Mode_Out_PP; //设置为推挽模式
GPIO_Init(GPIOC,&GPIO_InitSystem); //初始化GPIOC端口
GPIO_InitSystem.GPIO_Pin = GPIO_Pin_2; //选择引脚
GPIO_Init(GPIOD,&GPIO_InitSystem); //初始化LED锁存器端口
}
LED灯输出代码
void LED_Control(u16 dat)
{
GPIO_ResetBits(GPIOC,dat<<8); //将结果传入LED内
GPIO_SetBits(GPIOD,GPIO_Pin_2); //打开锁存器
GPIO_ResetBits(GPIOD,GPIO_Pin_2); //关闭锁存器
}
注意
推完输出模式下,GPIO_ResetBits()/GPIO_SetBits() 函数对GPIO口直接进行操作时候可以正常配置,若对整个端口操作时,遵循一下一下图表,GPIO_ResetBits()传入的值为1时输出低电平,传入值为0时输出高电平
GPIO端口基本结构
LED原理图
LED输出具体引脚
CH573使能引脚