IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> stm32——点亮LED -> 正文阅读

[嵌入式]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)

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-07-22 14:21:29  更:2021-07-22 14:23:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 18:51:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码