STM32 LED闪烁 初学笔记

  • LED的硬件电路

我的电路:

 

 

LED 共阴极指的是LED共同的接点是GND(接地),而共阳极指的是LED共同的接点是电源。LED亮灯的条件是两端有电势差。

1.共阴极:

当LED另一端接入5V电源的时候,与另一端产生电势差因此会有电流从正极流到GND,最后会亮灯

当LED另一端接入0V的时候,则不会产生电势差也就不会亮灯。

优点是符合人类的正向思维,送电ON就是开,OFF就是关。

2.共阳极:

当LED另一端接入5V电源的时候,不会产生电势差因此不会亮灯。

当LED另一端接入0V的时候,会产生电势差,电流会从5V端流经LED到0V端,会亮灯。

  • 步骤

  1. 配置LED的GPIO:选定引脚、工作模式
  2. 使能时钟:GPIOB在APB2上,库函数RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE)
  3. 控制引脚输出电平

库函数RCC_APB2PeriphClockCmd的解释:

配置RCC_APB2ENR寄存器,RCC_APB2Periph_GPIOB定义为0x00000008,也就是1000,对应寄存器的第3位(红框框出)。

  • 代码

main函数:

int main(void)
{
    InitLED();
    while(1)
    {
        LEDFlicker(500);
    }
}

LED.c文件

/*********************************************************************************************************
* 模块名称: LED.c
* 摘    要: 
* 当前版本: 1.0.0
* 作    者: xiamii
* 完成日期: 2020年07月06日
* 内    容:
* 注    意:                                                                  
**********************************************************************************************************
* 取代版本: 
* 作    者:
* 完成日期: 
* 修改内容:
* 修改文件: 
*********************************************************************************************************/

/*********************************************************************************************************
*                                              包含头文件
*********************************************************************************************************/
#include "LED.h"

/*********************************************************************************************************
*                                              宏定义
*********************************************************************************************************/

/*********************************************************************************************************
*                                              枚举结构体定义
*********************************************************************************************************/

/*********************************************************************************************************
*                                              内部变量
*********************************************************************************************************/

/*********************************************************************************************************
*                                              内部函数声明
*********************************************************************************************************/
static  void  ConfigLEDGpio(void);

/*********************************************************************************************************
*                                              内部函数实现
*********************************************************************************************************/
/*********************************************************************************************************
* 函数名称: ConfigLEDGpio
* 函数功能: 配置LED的GPIO,作为系统运行指示灯 
* 输入参数: void 
* 输出参数: void
* 返 回 值: void
* 创建日期: 2020年07月06日
* 注    意:
*********************************************************************************************************/
static  void  ConfigLEDGpio(void)
{
    GPIO_InitTypeDef GPIO_InitStruct;
    
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//使能时钟
    
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_3;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOB,&GPIO_InitStruct);  //PB3 LED1
    
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOB,&GPIO_InitStruct);  //PB4 LED2
    
    GPIO_WriteBit(GPIOB, GPIO_Pin_3, Bit_SET);  //LED1默认值为熄灭
    GPIO_WriteBit(GPIOB, GPIO_Pin_4, Bit_SET);  //LED2默认值为熄灭
}


/*********************************************************************************************************
*                                              API函数实现
*********************************************************************************************************/
/*********************************************************************************************************
* 函数名称: InitLED
* 函数功能: 
* 输入参数:
* 输出参数:
* 返 回 值: void
* 创建日期: 2020年07月06日
* 注    意:
*********************************************************************************************************/
void  InitLED(void)
{
    ConfigLEDGpio();//配置LED的GPIO
}
/*********************************************************************************************************
* 函数名称: LEDFlicker
* 函数功能: LED闪烁函数
* 输入参数: cnt
* 输出参数:
* 返 回 值: void
* 创建日期: 2020年07月06日
* 注    意: cnt为500时表示2s亮一次
*********************************************************************************************************/
void  LEDFlicker(u16 cnt)
{
    static u16 s_iCnt;
  s_iCnt++;
  
  if(s_iCnt >= cnt)      
  {
    s_iCnt = 0;
    // 对B3、B4取反
    GPIO_WriteBit(GPIOB, GPIO_Pin_3, (BitAction)(1 - GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_3)));
    GPIO_WriteBit(GPIOB, GPIO_Pin_4, (BitAction)(1 - GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_4)));
    //GPIO_WriteBit(GPIOE, GPIO_Pin_5, (BitAction)!GPIO_ReadOutputDataBit(GPIOE, GPIO_Pin_5));
  }
}

LED.h文件:

/*********************************************************************************************************
* 模块名称: LED.h
* 摘    要: 
* 当前版本: 1.0.0
* 作    者: 
* 完成日期: 2020年07月04日 
* 内    容:
* 注    意: none                                                                  
**********************************************************************************************************
* 取代版本: 
* 作    者:
* 完成日期: 
* 修改内容:
* 修改文件: 
*********************************************************************************************************/
#ifndef _LED_H_
#define _LED_H_

/*********************************************************************************************************
*                                              包含头文件
*********************************************************************************************************/
#include "stm32f10x.h"
#include "DataType.h"

/*********************************************************************************************************
*                                              宏定义
*********************************************************************************************************/
#define LED_VERSION 0x00010000      //即1.0.0版本

#define LED0        0
#define LED1        1

#define LED_OFF     1
#define LED_ON      0                //共阳极低电平有效

/*********************************************************************************************************
*                                              枚举结构体定义
*********************************************************************************************************/
/*********************************************************************************************************
*                                              API函数声明
*********************************************************************************************************/
void  InitLED(void);                    //LED初始化
void  LEDFlicker(u16 cnt);              //cnt=500表示每2s亮一次
#endif

 

posted on 2020-07-06 14:44  谢嘉敏  阅读(661)  评论(0编辑  收藏  举报

导航