stm32用gpio点亮led灯

2023-05-12 13:04 综合百科 0阅读 投稿:小七

我们在基础部分讲了有关GPIO的方面,从这章开始我们进入模块的讲解,从最开始的LED灯到各种传感器模块进行。专栏预计25个章节。后续可能会不定时地增加。
本专栏芯片为STM32F429

对于工程的移植和新建这里不做讲解,对工程建立不懂得,请参考其他博客或者某些教程。

本章使用到的是GPIO的输出功能,GPIO的内容这里不在说明,不理解或者其他原因请参看5 - STM32GPIO详解(看这篇就够了)

1-硬件设计

本实验以1个LED灯为例,本篇文章主要目的是理解GPIO输出。

stm32用gpio点亮led灯图1


LED的正极通过1KΩ与3.3v连接,LED的阴极以单片机的GPIOC的13号引脚相连接。根据电路图,当PC13位输出低电平时,LED灯亮,输出为高时LED熄灭(亮和灭就是两端的电压差,当LED两端同时都是高电平时,没有电压差)。
注:具体连接引脚请根据自己开发板上的电路原理图进行连接。

2-软件设计

1-编程步骤

  1. 使能GPIO时钟(也就是RCC,这步是非常重要的。具体在那个总线上,请参考数据手册,本专栏芯片为STM32F429)
  2. 设置对应于片上外设使用的GPIO工作模式
  3. 在应用程序中读取引脚状态、控制引脚输出状态或使用复用功能完成特定功能。

2-编程要点

  1. 使能GPIO时钟。调用函数RCC_AHB1PeriphClockCmd()。 不同的外设调用的时钟使能函数可能不一样。
  2. 初始化GPIO模式。调用函数GPIO_Init()。
  3. 操作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的GPIOGPIO_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; //timetime++; //计数器的计数值加1if(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);}
声明:若水百科所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系youzivr@vip.qq.com