使用固件库点亮led灯

1. 项目

  使用STM32F103VE的固件库实现流水灯设计。

2. 代码

  由于这是基于野火的视频进行学习的,项目代码在上节基础上进行编写的。

  点亮绿灯:

  main.c

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include "stm32f10x.h"          //相当于51单片机中的    #include <reg51.h>
#include "bsp_led.h"
void Delay(uint32_t count)
{
    for(; count!=0; count--);
}
 
int main(void)
{
    //来到这里是,系统的时钟已经被配置到72MHz了
    LED_GPIO_Config();  //初始化LED函数
    while(1)
    {
        GPIO_SetBits(LED_G_GPIO_PORT,LED_G_GPIO_PIN);   //熄灭LED
        Delay(0xfffff);
        GPIO_ResetBits(LED_G_GPIO_PORT,LED_G_GPIO_PIN); //点亮LED
        Delay(0xfffff);
    }
}

  bsp_led.c

1
2
3
4
5
6
7
8
9
10
11
12
#include "bsp_led.h"
 
void LED_GPIO_Config(void)
{
    GPIO_InitTypeDef GPIO_InitStruct;
     
    RCC_APB2PeriphClockCmd(LED_G_GPIO_CLK, ENABLE);
    GPIO_InitStruct.GPIO_Pin = LED_G_GPIO_PIN;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(LED_G_GPIO_PORT, &GPIO_InitStruct);
}

  bsp_led.h

1
2
3
4
5
6
7
8
9
10
#ifndef __bsp_led_h
#define __bsp_led_h
 
#include "stm32f10x.h"
#define LED_G_GPIO_PIN                      GPIO_Pin_0
#define LED_G_GPIO_PORT                     GPIOB
#define LED_G_GPIO_CLK                      RCC_APB2Periph_GPIOB
 
void LED_GPIO_Config(void);
#endif /*__bsp_led._h*/

  点亮红蓝灯只需将对应代码替换即可

  main.c中需替换的代码:

1
2
3
4
5
6
7
8
9
10
11
GPIO_SetBits(LED_R_GPIO_PORT,LED_R_GPIO_PIN);   //熄灭LED
Delay(0xfffff);
GPIO_ResetBits(LED_R_GPIO_PORT,LED_R_GPIO_PIN); //点亮LED
Delay(0xfffff);
 
 
 
GPIO_SetBits(LED_B_GPIO_PORT,LED_B_GPIO_PIN);   //熄灭LED
Delay(0xfffff);
GPIO_ResetBits(LED_B_GPIO_PORT,LED_B_GPIO_PIN); //点亮LED
Delay(0xfffff);

  bsp_led.c中需要替换的代码:

1
2
3
4
5
6
7
GPIO_InitStruct.GPIO_Pin = LED_R_GPIO_PIN;
RCC_APB2PeriphClockCmd(LED_R_GPIO_CLK, ENABLE);
GPIO_Init(LED_R_GPIO_PORT, &GPIO_InitStruct);
 
GPIO_InitStruct.GPIO_Pin = LED_B_GPIO_PIN;
RCC_APB2PeriphClockCmd(LED_B_GPIO_CLK, ENABLE);
GPIO_Init(LED_B_GPIO_PORT, &GPIO_InitStruct);

  bsp_led.h中需要替换的代码:

1
2
3
4
5
6
7
8
#define LED_R_GPIO_PIN                      GPIO_Pin_5
#define LED_R_GPIO_PORT                     GPIOB
#define LED_R_GPIO_CLK                      RCC_APB2Periph_GPIOB
 
 
#define LED_B_GPIO_PIN                      GPIO_Pin_1
#define LED_B_GPIO_PORT                     GPIOB
#define LED_B_GPIO_CLK                      RCC_APB2Periph_GPIOB

3. 参考资料

  •   原理图
  • 函数执行流程

(1) 使用 GPIO_InitTypeDef 在bsp_led.c中定义 GPIO_InitStruct 初始化结构体变量,以便下面用于存储 GPIO 配置。

(2) 调用库函数 RCC_APB2PeriphClockCmd 来使能 LED 灯的 GPIO 端口时钟,该函数有两个输入参数,第一个参数用于指示要配置的时钟,如本例中的“LED_G_GPIO_CLK”;

 函数的第二个参数用于设置状态,可输入“Disable关闭或“Enable”使能时钟。

(3) GPIO 初始化结构体赋值,把引脚初始化成推挽输出模式,其中的 GPIO_Pin 使用宏LED_X_GPIO_PIN”来赋值,使函数的实现方便移植。

(4) 使用以上初始化结构体的配置,调用 GPIO_Init 函数向寄存器写入参数,完成 GPIO 的初始化,这里的 GPIO 端口使用“LED_X_GPIO_PORT”宏来赋值,也是为了程序移植方便。

(5) 使用同样的初始化结构体,只修改控制的引脚和端口,初始化其它 LED 灯使用的 GPIO 脚。
(6) 使用宏控制 RGB 灯默认关闭。

  •   

     

     

posted @   JRS077  阅读(467)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
历史上的今天:
2020-10-19 爬虫入门实例
点击右上角即可分享
微信分享提示