使用固件库点亮led灯
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灯的更多相关文章
- 第11章 GPIO输出—使用固件库点亮LED
第11章 GPIO输出—使用固件库点亮LED 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku. ...
- 第11章 GPIO输出-使用固件库点亮LED—零死角玩转STM32-F429系列
第11章 GPIO输出—使用固件库点亮LED 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku. ...
- GPIO 输出—使用固件库点亮 LED
编程要点 1. 使能 GPIO 端口时钟: 2. 初始化 GPIO 目标引脚为推挽输出模式: 3. 编写简单测试程序,控制 GPIO 引脚输出高.低电平. LED的电路图 过程: 1.拷贝一个库函 ...
- 第12章 GPIO输出—使用固件库点亮LED
本章参考资料:<STM32F76xxx参考手册>.库帮助文档<STM32F779xx_User_Manual.chm>. 利用库建立好的工程模板,就可以方便地使用STM32 H ...
- GPIO输出—使用固件库点亮LED
为了使工程更加有条理,我们把 LED 灯控制相关的代码独立分开存储,方便以后移植.在“工程模板”之上新建“ bsp_led.c”及“ bsp_led.h”文件,其中的“ bsp”即 BoardSupp ...
- 初探RT-Thread系统在GD32E103x芯片上的使用,点亮LED灯
初探RT-Thread系统在GD32E103x芯片上的使用,点亮LED灯 前言 随着中美贸易战的加剧,很多公司越来越重视使用国产技术的重要性.使用国产技术,一方面可规避国外对技术的封锁造成产品核心 ...
- 第7章 使用寄存器点亮LED灯
第7章 使用寄存器点亮LED灯 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fir ...
- C语言版——点亮LED灯,深入到栈
在上一篇进行了汇编语言的编写之后,我们采用C语言来编写程序,毕竟C语言才是我们使用最多的语言. 仅仅是点亮LED灯显然太过于简单,我们需要分析最后的反汇编,了解函数调用栈,深入C语言骨髓去分析代码,并 ...
- 第7章 使用寄存器点亮LED灯—零死角玩转STM32-F429系列
第7章 使用寄存器点亮LED灯 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fir ...
随机推荐
- GUI容器之Frame
Frame public class MyFrame { public static void main(String[] args) { //创建一个Frame对象 Frame frame = ne ...
- python使用pip安装模块出错 Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None))
python使用pip安装模块出错 Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) 问题: ...
- Docker编排工具Docker Compose的使用
一.安装docker compose 官网推荐方式之一: sudo curl -L "https://github.com/docker/compose/releases/download/ ...
- Python - 面向对象编程 - __init__() 构造方法
什么是构造方法 在创建类时, 可手动添加一个 __init__() 方法,称为构造方法,这是一个实例方法 构造方法用于创建实例对象时使用,每当创建一个类的实例对象时,Python 解释器都会自动调 ...
- netty系列之:在netty中处理CORS
目录 简介 服务端的CORS配置 CorsConfigBuilder CorsHandler netty对cors的支持 总结 简介 CORS的全称是跨域资源共享,他是一个基于HTTP-header检 ...
- 一文详解JavaScript的继承模式
1 原型链继承 #### ES6中通过原型继承多个引用类型的属性和方法,由于原型和实例的关系,即每个构造函数都有自己的原型对象,同时原型有一个属性指向构造函数,并且实例有一个内部的指针指向原型.如果存 ...
- requests接口自动化-excel参数化
在数据量大的时候,需要使用文件参数化. excel文件是其中一种. 安装xlrd读取excel文件.(这里是在pycharm安装) 发现选择豆瓣安装失败,阿里云安装成功. 准备excel文件,放在te ...
- vue-cli3 取消eslint 校验代码
项目生成后会有个.eslintrc.js文件 module.exports = { root: true, env: { node: true }, 'extends': [ 'plugin:vue/ ...
- 定要过python二级 选择题第5套
1. 2.. 3. https://zhidao.baidu.com/question/1952133724016713828.html 4. 5. 6. 7. 8. 9. 10. 11.
- P4457-[BJOI2018]治疗之雨【期望dp,高斯消元】
正题 题目链接:https://www.luogu.com.cn/problem/P4457 题目大意 开始一个人最大生命值为\(n\),剩余\(hp\)点生命,然后每个时刻如果生命值没有满那么有\( ...
