1. 项目

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

2. 代码

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

  点亮绿灯:

  main.c

#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

#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

#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中需替换的代码:

		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中需要替换的代码:

	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中需要替换的代码:

#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 灯默认关闭。



  •   

使用固件库点亮led灯的更多相关文章

  1. 第11章 GPIO输出—使用固件库点亮LED

    第11章     GPIO输出—使用固件库点亮LED 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku. ...

  2. 第11章 GPIO输出-使用固件库点亮LED—零死角玩转STM32-F429系列

    第11章     GPIO输出—使用固件库点亮LED 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku. ...

  3. GPIO 输出—使用固件库点亮 LED

    编程要点 1. 使能 GPIO 端口时钟:  2. 初始化 GPIO 目标引脚为推挽输出模式:  3. 编写简单测试程序,控制 GPIO 引脚输出高.低电平. LED的电路图 过程: 1.拷贝一个库函 ...

  4. 第12章 GPIO输出—使用固件库点亮LED

    本章参考资料:<STM32F76xxx参考手册>.库帮助文档<STM32F779xx_User_Manual.chm>. 利用库建立好的工程模板,就可以方便地使用STM32 H ...

  5. GPIO输出—使用固件库点亮LED

    为了使工程更加有条理,我们把 LED 灯控制相关的代码独立分开存储,方便以后移植.在“工程模板”之上新建“ bsp_led.c”及“ bsp_led.h”文件,其中的“ bsp”即 BoardSupp ...

  6. 初探RT-Thread系统在GD32E103x芯片上的使用,点亮LED灯

    初探RT-Thread系统在GD32E103x芯片上的使用,点亮LED灯 前言 ​ 随着中美贸易战的加剧,很多公司越来越重视使用国产技术的重要性.使用国产技术,一方面可规避国外对技术的封锁造成产品核心 ...

  7. 第7章 使用寄存器点亮LED灯

    第7章     使用寄存器点亮LED灯 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fir ...

  8. C语言版——点亮LED灯,深入到栈

    在上一篇进行了汇编语言的编写之后,我们采用C语言来编写程序,毕竟C语言才是我们使用最多的语言. 仅仅是点亮LED灯显然太过于简单,我们需要分析最后的反汇编,了解函数调用栈,深入C语言骨髓去分析代码,并 ...

  9. 第7章 使用寄存器点亮LED灯—零死角玩转STM32-F429系列

    第7章     使用寄存器点亮LED灯 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fir ...

随机推荐

  1. Spring中使用@within与@target的一些区别

    目录 背景 模拟项目例子 看看使用@within和@target的区别 @within @target @target 看起来跟合理一点 通知方法中注解参数的值为什么是不一样的 想用@within,但 ...

  2. FinallShell连接Centos虚拟机

    1.虚拟机下输入ip addr查看网络状态,保证ens33下有ip 2.若没有IP的解决办法 方法一················· 1.输入 cd /etc/sysconfig/network-s ...

  3. Django学习day14BBS项目开发1.0

    每日测验 """ 1.简述auth模块功能 2.简述项目开发流程 3.简述bbs表设计 """ 内容回顾 auth模块 "&quo ...

  4. PHP中非常好玩的Calendar扩展学习

    为什么说这个 Calendar 扩展很好玩呢?因为你基本用不到它!这个扩展是一套关于日期历法的扩展,但是对于我们来说,它没有农历的相关操作,所以对于我们中国人来说这个扩展并没有什么实际的作用.不过这并 ...

  5. svn的应用

    SVN 如何来进行多人协作开发? 在实际工作中,通常是一个小组或者一个团队一起开发同一个项目,不同的人开发不同的功能模块,有一个公共的地方存放项目代码. 如果多个人同时对同一个文件做了修改,比如按照分 ...

  6. P7408-[JOI 2021 Final]ダンジョン 3【贪心,树状数组】

    正题 题目链接:https://www.luogu.com.cn/problem/P7408 题目大意 一个有\(n+1\)层的地牢,从\(i\)到\(i+1\)层要\(A_i\)点能量,第\(i\) ...

  7. P2350-[HAOI2012]外星人【线性筛】

    正题 题目链接:https://www.luogu.com.cn/problem/P2350 题目大意 给出\(N\)质因数分解之后的结果,求每次\(N=\varphi(N)\),多少次后\(N=1\ ...

  8. P4258-[WC2016]挑战NPC【带花树】

    正题 题目链接:https://www.luogu.com.cn/problem/P4258 题目大意 给出\(n\)个球,\(m\)个篮筐,每个球都可以被放入一些特定的篮筐,每个球都要放,要求球的个 ...

  9. Winform 窗体自适应

    前言 在使用 Winform 开发过程中,经常发些因为显示器分辨率.窗体大小改变,控件却不能自适应变化,几经查找资料,和大佬的代码.经过细小修改,终于可以让窗体在外界影响下,窗体内背景图片.控件都会自 ...

  10. join方法个人理解

    首先抛出对join的疑问 如果我有一个a线程,一个b线程 那此时 a.start(); b.start(); a.join(); b.join(); 是否意思是a线程先执行完,然后再执行b线程; 如果 ...