STM32 LED闪烁 初学笔记

摘要:
LED公共阴极是指LED的公共触点是GND(接地),而公共阳极是指LED公共触点是电源。当LED的另一端连接到0V时,配置LED的GPIO(ENABLE)以控制引脚输出电平库功能RCC_ APB2PeriphClockCmd说明:
  • LED的硬件电路

STM32 LED闪烁 初学笔记第1张

我的电路:

STM32 LED闪烁 初学笔记第2张STM32 LED闪烁 初学笔记第3张

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位(红框框出)。

STM32 LED闪烁 初学笔记第4张

STM32 LED闪烁 初学笔记第5张

  • 代码

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

免责声明:文章转载自《STM32 LED闪烁 初学笔记》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇爬取js加密和混淆的例子UVM基础之---------uvm factory机制base下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

数据可视化基础专题(44):NUMPY基础(9)数组操作(1)修改数组形状/翻转数组

1 修改数组形状 函数 描述 reshape 不改变数据的条件下修改形状 flat 数组元素迭代器 flatten 返回一份数组拷贝,对拷贝所做的修改不会影响原始数组 ravel 返回展开数组 numpy.reshape numpy.reshape 函数可以在不改变数据的条件下修改形状,格式如下: numpy.reshape(a...

关于hive当中的窗口分析函数总结

最近在看关于窗口分析函数的一些东西,在这里总结一下: (1)head()和 LAG()函数说明: head()按照指定的字段,然后取排序后当前行的后面多少行的这个字段的值。 举例: lead(CREATE_TIME,2) OVER(PARTITION BY ID ORDER BY CREATE_TIME) AS lead_time 这一句的意思...

mysql distinct

在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供 有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是 distinct只能返回它的目标字段,而无法返回其它字段,这个问题让我困扰了很久,用distinct不能解决的话,我只有用二重循环查询来解决...

C# 模拟鼠标(mouse_event)

想必有很多人在项目开发中可能遇见需要做模拟鼠标点击的小功能,很多人会在 百度过后采用mouse_event这个函数,不过我并不想讨论如何去使用mouse_event 函数怎么去使用,因为那没有多大意义。 [csharp] view plaincopy static void mouse_event(int dwFlags, int ...

Linux电源管理研究笔记—gnomepowermanager的工作原理

Linux电源管理研究笔记—gnome-power-manager的工作原理   转载时请注明出处:http://blog.csdn.net/absurd/   在手持设备设计中,电源管理历来为重要的研究课题之一。我们日常所说的省电就属于电源管理的范畴,这也是我们最关心的一个部分。通过挂起不必要的设备、降低CPU的频率或者其它方法,可以减少能量的消耗,达到...

内核如何启动根文件系统?

当u-boot開始运行bootcmd命令,就进入Linux内核启动阶段。与u-boot类似,普通Linux内核的启动过程也能够分为两个阶段,但针对压缩了的内核如uImage就要包含内核自解压过程了。本文以linux-2.6.37版源代码为例分三个阶段来描写叙述内核启动全过程。第一阶段为内核自解压过程,第二阶段主要工作是设置ARM处理器工作模式、使能MMU、...