stm32——点亮LED
1.点亮LED灯的准备工作
需要了解GPIO的基本工作原理,话不多说,先上图
关于详细的功能介绍,请参考普中科技F407详细资料,今天主要到的是GPIO的推挽输出模式
如图
通过软件向寄存器中写入数据,然后通过图中所示线路控制IO口输入高低电平,从而控制LED灯。
其次,需要了解GPIO配置所需的寄存器,比如模式寄存器,时钟寄存器,置位复位寄存器等。
了解了这些,我们就可以开始点灯了
点灯大法一——使用寄存器点亮LED
1.查看开发板原理图,看看自己的板子上LED是与哪一个管脚连接。(我用的普中f407,LED与gpiof9连接)
根据原理图,要使LED1亮,就必须让PF9输出为低电平。
下面就开始使用寄存器来操作 STM32 使 PF9 输出一个低电平。要操作 STM32
寄存器,我们就需要使用 C 语言对其封装,这部分程序我们都放在 stm32f4xx.h
中。具体代码如下:
#define PERIPH_BASE ((unsigned int)0x40000000)
#define AHB1PERIPH_BASE (PERIPH_BASE + 0x00020000)
#define GPIOF_BASE (AHB1PERIPH_BASE + 0x1400)
#define GPIOF_MODER *(unsigned int*)(GPIOF_BASE+0x00)
#define GPIOF_BSRR *(unsigned int*)(GPIOF_BASE+0x18)
#define RCC_BASE (AHB1PERIPH_BASE + 0x3800)
#define RCC_AHB1ENR *(unsigned int*)(RCC_BASE+0x30)
这里需要GPIOF的总线的地址,也就是说,GPIOF是挂接到AHB1总线上的,然后就是配置GPIO的各种模式需要的寄存器地址(详细参考普中科技)
将寄存器封装好就可以编写程序了
#include "stm32f4xx.h" (1)
int main()
{
RCC_AHB1ENR |= 1<<5; (2)
GPIOF_MODER = (1<<(2*9)); (3)
GPIOF_BSRR=(1<<(16+9)); (4)
while(1)
{
}
}
首先让GPIOF起作用,就必须让对应的管脚使能,即给他置1.
该寄存器第5位是GPIOF设置位,通过将第五位置1,将PF9使能。通过查看手册,将模式寄存器配置为推挽输出,然后通过置位寄存器将PF9置0,就完成了基本的点亮LED的操作。编译,下载后就可以看到效果。
当然也可以配置速度寄存器等,也可以写延时函数实现闪烁的效果。
不过,使用寄存器点灯太过麻烦,需要修改的话很不方便
然后就有了点灯大法——固件库函数
stm公司封装了大量的库函数,我们只需要将库以及一些内核文件加载进工程,就可以轻松实现点灯,看操作:
首先需要建立几个文件夹
然后就需要在开发板提供的资料中去复制需要的文件,user中需要的基本文件如下
Libraries中需要的文件
CMSIS中包含一些内核文件以及启动文件
STM32F4xx_Stdperiph_driver包含的是各种外设,把资料中的全部复制过来就行
复制完以上内容,就可以建工程,
添加文件
将所需要的文件添加到工程。然后开始配置选项卡。
基本步骤和寄存器模板类似值得注意的地方就是
一定要注意,第二步中间是逗号,不然会报很多错。添加文件时注意路径是否添加正确。
在写程序之前,先创建一个文件夹,将LED的代码保存在这个文件夹中,方便修改和维护。
里面新建上图中的.c和.h文件。
编写.h文件
用固件库点亮LED步骤;
首先端口使能,初始化(各种寄存器配置),对管脚置低电平;
GPIOF端口使能函数
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);
后面的参数都可以在相应的头文件中找到。
初始化函数
首先定义结构体变量
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure结构体中的成员都已经在头文件封装好,只需要将需要的成员找到并赋值即可。
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;//模式为输出模式;
GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;//推挽输出
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;//管脚配置为9;
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;上拉模式
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;速度为100M
GPIO_Init(GPIOF,&GPIO_InitStructure);初始化;
然后就需要一个重要的函数,为管脚置位。
GPIO_ResetBits(GPIOF,GPIO_Pin_9);GPIO管脚输出低电平;
GPIO_SetBits(GPIOF,GPIO_Pin_9);GPIO复位,输出高电平;
然后将代码整合一下,在led.c文件编写LED初始化函数
#include "led.h"void led_Init()
{GPIO_InitTypeDef GPIO_InitStructure;RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;GPIO_Init(GPIOF,&GPIO_InitStructure);
}
将写好的函数在头文件声明;
然后在主函数中引用
#include "stm32f4xx.h"
#include"led.h"int main()
{led_Init();
while(1)
{
GPIO_ResetBits(GPIOF,GPIO_Pin_9);}
}
这样就完成了LED灯的点亮。添加一个延时和复位函数就可以实现闪烁效果;
部分资源来源于普中科技,如有侵权,联系删除(2361823003@qq.com)
stm32——点亮LED相关推荐
- STM32点亮led的详细步骤
STM32 点亮LED灯的步骤1:先是在点亮LED灯那个引脚使能,相当于修路,比如是PIN5引脚,就要使能对应的GPIO.使能函数是 控制一个固件发挥作用:第一步就是把它对应的总线时钟使能,第二步配置 ...
- stm32点亮LED灯
stm32点亮LED灯 野火烧不尽,春风吹又生,我购买的是野火的指南针开发板,接下来我就以发表动态来跟大家一起学习,也可以让我学习这块开发板更有动力,增加印象. 每一块开发板,第一个例程无一例外就是通 ...
- 使用STM32点亮LED
多学多练 一.题目描述 二.设计思路 三.寄存器实现 01 时钟配置 02 模式设置 03 代码编写 04 创建工程文件 四.HAL库实现 01 安装 STM32CubeMX 02 安装HAL库 03 ...
- stm32点亮led灯。
新手学习stm32 学习32第一个程序就是点亮led灯.本人用的是野火的指南者开发板.先上电路图. 如图所示,为led模块电路图,由图可知,此模块为共阳极.只需将引脚变成低电平即可使led灯亮.此次代 ...
- stm32点亮LED的有关寄存器配置CRL、CRH、IDR、ODR
1.先了解io口 32的io口可以由软件配置寄存器为8种模式: 1.输入浮空 5.开漏输出 2.输入上拉 6.推挽输出 3.输入下拉 7.推挽式复用功能 4.模拟输入 8.开漏复用功能 单io口寄存器 ...
- stm32点亮三个led灯
stm32点亮led灯 stm32点灯原理 建立工程文件 接下来进行硬件连接和代码编写 硬件连接 烧录利用FlyMcu 串口烧录工具 总结 stm32点灯原理 通过设置相应端口的时钟,在配置相应端口寄 ...
- 配置STM32寄存器控制GPIO点亮LED
STM32点亮LED 寄存器方式 IO简介 1.每个IO可以自由编程,但是IO口寄存器必须按照32位字被访问. 2.每个IO端口都有7个寄存器来控制. CRL [0-7]端口配置寄存器 32位 CR ...
- STM32F103(库函数)——点亮LED并且使用软件延时实现led闪烁
当我们学过51单片机之后就知道在51单片机中点亮一个LED很简单一句代码就可以实现.只需要将LED所连接的IO口拉低就可以点亮LED. 但是在STM32中,点亮LED确实比51要麻烦很多. 一样,在S ...
- keil8个led灯闪烁c语言程序,简单的STM32 汇编程序—闪烁LED
要移植操作系统,汇编是道不得不跨过去的坎.所以承接上篇的思路,我准备用汇编写一个简单的闪烁LED灯的程式.以此练习汇编,为操作系统做准备. 第一步,还是和上篇一样,建立一个空的文件夹. 第二步,因为是 ...
最新文章
- List和List的区别?
- 十一、Struts2封装请求参数的方式
- andriod的apk文件相关的编译反编译工具
- JS 客户端浏览器操作、BOM、渗透客户端浏览器(windows对象:screen屏幕操作、location浏览器域名、history浏览器历史、Navigator浏览器信息、cookie)
- mysql完全手册阅读笔记
- python批量导入网页信息_python批量导入数据进Elasticsearch的实例
- 【FFMPEG系列】之查看FFMPEG版本号
- webgame 上线版本控制
- SCF: 简单配置门面[转]
- 查看浏览器Browsers的内核版本, 可以用 navigator.userAgent
- HM代码阅读3:AMVP候选填充函数Void TComDataCU::fillMvpCand ()
- PAT(A) 1127. ZigZagging on a Tree (30)
- 读书笔记:《冯唐成事心法》
- English语法_关系代词 - 定义与分类
- WordPress安装教程(2022)|详细
- cPython的GIL
- 吕鑫MFC学习系列一
- 用html布局怎么调试,网页规划 CSS布局调试的有用办法
- CentOS 7如何连接无线网络
- win7官方原版iso镜像_如何才能下载到纯净的windows各个版本官方原版镜像?
热门文章
- 计算机网络安全的关键技术有,计算机网络安全的几项关键技术
- ValidationError: Invalid options object.报错
- 修改yum源为国内yum源和本地yum源
- C#中 //TODO: 的用法
- 中国有望成为世界第一个发射量子轨道卫星的国家
- Python语音合成探究(一、男声和女声的选择)
- matlab-结构体struct
- rtx2060什么水平_rtx2060性能怎么样
- 音乐生毕业论文有什么好的选题?
- 两个小Tips: 解决Matlab初始化时间过长Office使用(KMS工具无效时)