1-硬件设计
本实验以1个LED灯为例,本篇文章主要目的是理解GPIO输出。
LED的正极通过1KΩ与3.3v连接,LED的阴极以单片机的GPIOC的13号引脚相连接。根据电路图,当PC13位输出低电平时,LED灯亮,输出为高时LED熄灭(亮和灭就是两端的电压差,当LED两端同时都是高电平时,没有电压差)。
注:具体连接引脚请根据自己开发板上的电路原理图进行连接。
2-软件设计
1-编程步骤
- 使能GPIO时钟(也就是RCC,这步是非常重要的。具体在那个总线上,请参考数据手册,本专栏芯片为STM32F429)
- 设置对应于片上外设使用的GPIO工作模式
- 在应用程序中读取引脚状态、控制引脚输出状态或使用复用功能完成特定功能。
2-编程要点
- 使能GPIO时钟。调用函数RCC_AHB1PeriphClockCmd()。不同的外设调用的时钟使能函数可能不一样。
- 初始化GPIO模式。调用函数GPIO_Init()。
- 操作GPIO,设置引脚输出状态。调用函数GPIO_SetBits();或GPIO_ResetBits()或GPIO_ToggleBits()。
3-代码实现
static void LED_Config(void){ GPIO_InitTypeDef GPIO_InitStructure; //GPIO_InitStructure用于存放GPIO的参数 /*开启LED相关的GPIO外设时钟*/ 第一步 RCC_AHB1PeriphClockCmd (RCC_AHB1Periph_GPIOC, ENABLE); //使能GPIOC的时钟 /*选择要控制的GPIO引脚*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; //设置引脚 *设置引脚模式为输出*/ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //设置模式 /*设置引脚速率为2MHz */ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; //设置I/O输出速度 /*设置引脚的输出类型为推挽输出*/ GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //设置输出类型 /*设置引脚为上拉模式*/ GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //设置上拉/下拉模式 /*调用库函数,使用上面配置的GPIO_InitStructure初始化GPIO*/ 第二步 GPIO_Init(GPIOC, &GPIO_InitStructure); //根据参数初始化LED的GPIO GPIO_WriteBit(GPIOC, GPIO_Pin_13, Bit_SET); //将LED默认状态设置为熄灭}
void InitLED(void){ LED_Config(); //配置LED的GPIO}
* 函数名称:Contl_lLED* 函数功能:控制LED亮灭* 输入参数:mode:1-点亮,0-熄灭* 输出参数:void* 返 回 值:void* 创建日期:*********************************************************************************************************/void Contl_lLED(u8 mode){ if(mode) { GPIO_WriteBit(GPIOC, GPIO_Pin_13, Bit_RESET); //点亮LED } else { GPIO_WriteBit(GPIOC, GPIO_Pin_13, Bit_SET); //熄灭LED } } void LED_ON_OF(u16 cnt){ static u16 time; //time time++; //计数器的计数值加1 if(time >= cnt) //计数器的计数值大于cnt { time = 0; //重置计数器的计数值为0 //LED状态取反,实现LED闪烁 GPIO_WriteBit(GPIOC, GPIO_Pin_13, (BitAction)(1 - GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_13))); }} int main(void){ InitLED(); LED_ON_OF(300);}