zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    linux通过源码安装nodejs
    设置npm的镜像源
    ubuntu手动安装PhantomJS
    h2数据库的简单使用
    xampp启动失败 Apache shutdown unexpectedly
    phpqrcode实现二维码(含图片)
    php 使用 rabbitmq
    rabbitMQ linux安装
    rabbitmq的web管理界面无法使用guest用户登录
    linux安装使用xdebug
  • 原文地址:https://www.cnblogs.com/XIEjm/p/13254707.html
Copyright © 2011-2022 走看看