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相关推荐

  1. STM32点亮led的详细步骤

    STM32 点亮LED灯的步骤1:先是在点亮LED灯那个引脚使能,相当于修路,比如是PIN5引脚,就要使能对应的GPIO.使能函数是 控制一个固件发挥作用:第一步就是把它对应的总线时钟使能,第二步配置 ...

  2. stm32点亮LED灯

    stm32点亮LED灯 野火烧不尽,春风吹又生,我购买的是野火的指南针开发板,接下来我就以发表动态来跟大家一起学习,也可以让我学习这块开发板更有动力,增加印象. 每一块开发板,第一个例程无一例外就是通 ...

  3. 使用STM32点亮LED

    多学多练 一.题目描述 二.设计思路 三.寄存器实现 01 时钟配置 02 模式设置 03 代码编写 04 创建工程文件 四.HAL库实现 01 安装 STM32CubeMX 02 安装HAL库 03 ...

  4. stm32点亮led灯。

    新手学习stm32 学习32第一个程序就是点亮led灯.本人用的是野火的指南者开发板.先上电路图. 如图所示,为led模块电路图,由图可知,此模块为共阳极.只需将引脚变成低电平即可使led灯亮.此次代 ...

  5. stm32点亮LED的有关寄存器配置CRL、CRH、IDR、ODR

    1.先了解io口 32的io口可以由软件配置寄存器为8种模式: 1.输入浮空 5.开漏输出 2.输入上拉 6.推挽输出 3.输入下拉 7.推挽式复用功能 4.模拟输入 8.开漏复用功能 单io口寄存器 ...

  6. stm32点亮三个led灯

    stm32点亮led灯 stm32点灯原理 建立工程文件 接下来进行硬件连接和代码编写 硬件连接 烧录利用FlyMcu 串口烧录工具 总结 stm32点灯原理 通过设置相应端口的时钟,在配置相应端口寄 ...

  7. 配置STM32寄存器控制GPIO点亮LED

    STM32点亮LED 寄存器方式 IO简介 1.每个IO可以自由编程,但是IO口寄存器必须按照32位字被访问. 2.每个IO端口都有7个寄存器来控制. CRL [0-7]端口配置寄存器  32位 CR ...

  8. STM32F103(库函数)——点亮LED并且使用软件延时实现led闪烁

    当我们学过51单片机之后就知道在51单片机中点亮一个LED很简单一句代码就可以实现.只需要将LED所连接的IO口拉低就可以点亮LED. 但是在STM32中,点亮LED确实比51要麻烦很多. 一样,在S ...

  9. keil8个led灯闪烁c语言程序,简单的STM32 汇编程序—闪烁LED

    要移植操作系统,汇编是道不得不跨过去的坎.所以承接上篇的思路,我准备用汇编写一个简单的闪烁LED灯的程式.以此练习汇编,为操作系统做准备. 第一步,还是和上篇一样,建立一个空的文件夹. 第二步,因为是 ...

最新文章

  1. List和List的区别?
  2. 十一、Struts2封装请求参数的方式
  3. andriod的apk文件相关的编译反编译工具
  4. JS 客户端浏览器操作、BOM、渗透客户端浏览器(windows对象:screen屏幕操作、location浏览器域名、history浏览器历史、Navigator浏览器信息、cookie)
  5. mysql完全手册阅读笔记
  6. python批量导入网页信息_python批量导入数据进Elasticsearch的实例
  7. 【FFMPEG系列】之查看FFMPEG版本号
  8. webgame 上线版本控制
  9. SCF: 简单配置门面[转]
  10. 查看浏览器Browsers的内核版本, 可以用 navigator.userAgent
  11. HM代码阅读3:AMVP候选填充函数Void TComDataCU::fillMvpCand ()
  12. PAT(A) 1127. ZigZagging on a Tree (30)
  13. 读书笔记:《冯唐成事心法》
  14. English语法_关系代词 - 定义与分类
  15. WordPress安装教程(2022)|详细
  16. cPython的GIL
  17. 吕鑫MFC学习系列一
  18. 用html布局怎么调试,网页规划 CSS布局调试的有用办法
  19. CentOS 7如何连接无线网络
  20. win7官方原版iso镜像_如何才能下载到纯净的windows各个版本官方原版镜像?

热门文章

  1. 计算机网络安全的关键技术有,计算机网络安全的几项关键技术
  2. ValidationError: Invalid options object.报错
  3. 修改yum源为国内yum源和本地yum源
  4. C#中 //TODO: 的用法
  5. 中国有望成为世界第一个发射量子轨道卫星的国家
  6. Python语音合成探究(一、男声和女声的选择)
  7. matlab-结构体struct
  8. rtx2060什么水平_rtx2060性能怎么样
  9. 音乐生毕业论文有什么好的选题?
  10. 两个小Tips: 解决Matlab初始化时间过长Office使用(KMS工具无效时)