0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于STM32F407寄存器开发点灯

CHANBAEK 来源:小浩笔记 作者:一纸HH 2023-05-19 15:08 次阅读

点灯点灯点到流水灯

效果图:

图片

1寄存器

寄存器的功能是存储二进制代码,它是由具有存储功能的触发器组合起来构成的。一个触发器可以存储1位二进制代码,故存放n位二进制代码的寄存器,需用n个触发器来构成。

在计算机领域中,寄存器是CPU内部的元件,包括通用寄存器、专用寄存器和控制寄存器。寄存器拥有非常高的读写速度,所以在寄存器之间的数据传送非常快。

举一个例子,在殿上,寄存器比如太监,CPU比如皇帝,内存比如大臣,传送文件,你细品,再细品....

STM32内部的所有寄存器都有唯一的地址

寄存器地址 = 寄存器基地址+偏移地址(偏移量)

比如说查找GPIO F端口模式寄存器的地址,首先通过 《STM32F4xx中文参考手册》(可在本公众号后台点击->笔记->技术秘籍大全获取) 找到GPIOF的边界地址:0x4002 1400,然后再查找GPIO端口模式寄存器 的偏移地址:0x00,最后就得到GPIO F端口模式寄存器的地址0x0x40021400+0x00,其他寄存器也是如此。

图片

图片

图片

2时钟树分析

时钟源:晶振、RC振荡器

晶振:自身产生时钟信号,为各种微处理芯片作时钟参考,晶振相当于这些微处理芯片的心脏,没有晶振,这些微处理芯片将无法工作。

RC振荡器:适用于低频振荡,一般用于产生1Hz~1MHz的低频信号。因为对于RC振荡电路来说,增大电阻R即可降低振荡频率,而增大电阻是无需增加成本的

时钟源用于产生方波时钟脉冲信号

时钟频率是一秒产生方波的计量单位

时钟频率(主频):1GHZ=1000MHZ=1000 000KHZ=1000 000 000HZ

1HZ:1S产生一个方波,1MHZ:1S产生1000 000 方波

1、STM32时钟源

LSI RC 32KHZ 低速内部振荡时钟源

LSE OSC 32.768KHZ 低速外部晶振时钟源

16MHZ HSI RC 高速内部振荡时钟源

4-26MHZ HSE OSC 高速外部晶振时钟源(本次笔记使用的是晶振8HZ)

2、STM32F407主要的时钟总线频率

FCLK,HCLK,PCLK都称为系统时钟,但区别如下,

FCLK,提供给CPU内核的时钟信号,CPU的主频就是指这个信号;

HCLK,提供给高速总线AHB的时钟信号;

PCLK,提供给低速总线APB的时钟信号;

SYSCLK(cpu 主频) 168MHZ

HCLK 168MHZ

AHB(AHB1 AHB2) 168MHZ

APB1 42MHZ

APB2 84MHZ

3GPIO输出开发

GPIO:(General-purpose input/output)通用型之输入输出的简称

STM32F407ZET6板子:

一共有7组IO(ABCDEF)每组IO口有16个引脚,外加2个PH0和PH1(这两个引脚用于连接晶振)一共有114个IO引脚

每组通用I/O端口包括10个寄存器:

4个32位配置寄存器(GPIOx_MODER、GPIOx_OTYPER、GPIOx_OSPEEDR 和 GPIOx_PUPDR)。

2 个32位数据寄存器(GPIOx_IDR 和 GPIOx_ODR)。

1 个32位置位/复位寄存器 (GPIOx_BSRR)、

1 个32位锁定寄存器(GPIOx_LCKR)

2 个32位复用功能选择寄存器(GPIOx_AFRH 和GPIOx_AFRL)。

GPIO工作方式:

4种输入模式

浮空输入(没有上下拉电阻

上拉输入(有上拉电阻)

下拉输入(有下拉电阻)

模拟输入(模拟信号)

4种输出模式

开漏输出(带上拉或者下拉)

开漏复用功能(带上拉或者下拉)

推挽式输出(带上拉或者下拉)

推挽式复用功能(带上拉或者下拉)

4种最大输出速度

2MHZ

25MHZ

50MHZ

100MHZ

补充:

开漏只能输出0,输出要靠外部上拉电阻才输出1(如IIC

推挽式可输出1及输出0

上拉电阻和下拉电阻有什么用?

提高驱动能力:

例如,用单片机输出高电平,但由于后续电路的影响,输出的高电平不高,就是达不到VCC,影响电路工作。所以要接上拉电阻。下拉电阻情况相反,让单片机引脚输出低电平,结果由于后续电路影响输出的低电平达不到GND,所以接个下拉电阻。

在单片机引脚电平不定的时候,让后面有一个稳定的电平:

例如上面接下拉电阻的情况下,在单片机刚上电的时候,电平是不定的,还有就是如果你连接的单片机在上电以后,单片机引脚是输入引脚而不是输出引脚,那这时候的单片机电平也是不定的,R18的作用就是如果前面的单片机引脚电平不定的话,强制让电平保持在低电平。

4LED灯寄存器

(1)理解LED灯原理图

LED0连接在PF9引脚

PF9输出VCC(1),灯灭

PF9输出GND(0),灯亮

图片

引脚电平变化是通过芯片内部(代码来改变),作为输出

引脚电平变化是通过芯片外部(按键、传感器....),作为输入

(2)配置好各个寄存器的地址(上面有提到如何寻找地址)

#define   RCC_AHB1ENR *((volatile unsigned int *)(0x40023800+0x30)) //值强制转化为地址,通过*解引访问地址空间的值


#define   GPIOF_MODER *((volatile unsigned int *)(0x40021400+0x00)) //值强制转化为地址,通过*解引访问地址空间的值
#define   GPIOF_OTYPER *((volatile unsigned int *)(0x40021400+0x04)) //值强制转化为地址,通过*解引访问地址空间的值
#define   GPIOF_OSPEEDR *((volatile unsigned int *)(0x40021400+0x08)) //值强制转化为地址,通过*解引访问地址空间的值
#define   GPIOF_PUPDR *((volatile unsigned int *)(0x40021400+0x0C)) //值强制转化为地址,通过*解引访问地址空间的值
#define   GPIOF_BSRR *((volatile unsigned int *)(0x40021400+0x18)) //值强制转化为地址,通过*解引访问地址空间的值

(3)配置好外设使能寄存器,打开GPIOF组时钟,也叫做使能F组时钟(STM32当中外设的时钟不打开,降低功耗)

//使能GPIO F组时钟,
RCC_AHB1ENR|= (0x01<<5);

图片

(4)配置好GPIO9组的寄存器

把GPIOF9引脚设置为输出模式输出推挽上拉速度

设置GPIOF9引脚对应的是18、19位 ,然后为输出模式:01,其他寄存器也类似,如图下所示

图片

图片

图片

图片

void Led_Init(void)
{
  //使能GPIO F组时钟,
  RCC_AHB1ENR |= (0x01<<5);
  
  //设置为输出模式
  GPIOF_MODER &= ~(0x01<<19); //19位置0
  GPIOF_MODER |= (0x01<<18); //18位置1
  
  //输出推挽
  GPIOF_OTYPER &= ~(0x01<<9); //9位置0
  
  //快速
  GPIOF_OSPEEDR |= (0x01<<19); //19位置1
  GPIOF_OSPEEDR &= ~(0x01<<18); //18位置0

  
  //上拉
  GPIOF_PUPDR &= ~(0x01<<19); //19位置0
  GPIOF_PUPDR |= (0x01<<18); //18位置1
  
}

点灯来了......

通过手册查找用来点灯的寄存器,就是这个GPIOx_BSRR寄存器

在25位 ,置1,灯会亮

在9位 ,置1,灯会灭

图片

main.c

#include "stm32f4xx.h"
#include "led.h"

#define COUNT 100

//粗延时
void  delayms(int n)
{
  int i, j;
  
  for(i=0; i

成功点亮一盏灯,至于流水灯,设置好一些灯,然后用延时控制灯的亮与灭

接下来的笔记是库函数开发,按键中断等等......

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • led灯
    +关注

    关注

    22

    文章

    1564

    浏览量

    107185
  • 寄存器
    +关注

    关注

    30

    文章

    5184

    浏览量

    118362
  • 晶振
    +关注

    关注

    32

    文章

    2562

    浏览量

    67197
  • 触发器
    +关注

    关注

    14

    文章

    1917

    浏览量

    60698
  • STM32F407
    +关注

    关注

    15

    文章

    187

    浏览量

    29120
收藏 人收藏

    评论

    相关推荐

    STM32F407 GPIO口输入配置配置步骤

    介绍STM32F407新建寄存器工程流程,介绍输入模式的配置方式,以按键为例完成按键输入检测。
    的头像 发表于 07-06 14:28 1505次阅读
    <b class='flag-5'>STM32F407</b> GPIO口输入配置配置步骤

    STM32F407 位带配置步骤

    介绍STM32F407位带操作方法,设置寄存器的偏移量,实现按GPIO口指定位进行读写操作,方便编程。
    的头像 发表于 07-06 14:30 838次阅读
    <b class='flag-5'>STM32F407</b> 位带配置步骤

    keil5调试STM32F407时无外设寄存器窗口

    在使用keil5.24 调试STM32F407时,发现在keil5的debug条件下,无外设寄存器窗口,只有系统寄存器窗口,请问应该怎么样配置?keil安装包路径 ARM/BIN/。。。 下面的动态链接库有无具体的使用说明?十分
    发表于 01-04 09:29

    stm32寄存器开发概述

    stm32寄存器开发基础寄存器开发概述[^1]寄存器stm
    发表于 08-10 06:07

    怎样去使用STM32F407 SPI2寄存器

    SPI模块的初始化代码是怎样的?怎样去使用STM32F407 SPI2寄存器
    发表于 10-19 09:39

    STM32F407 开发板原理图

    STM32F407 开发板原理图
    发表于 09-22 16:12 393次下载
    <b class='flag-5'>STM32F407</b> <b class='flag-5'>开发</b>板原理图

    STM32F407开发板用户手册】第13章 STM32F407启动过程详解

    STM32F407开发板用户手册】第13章 STM32F407启动过程详解
    发表于 11-23 18:06 72次下载
    【<b class='flag-5'>STM32F407</b><b class='flag-5'>开发</b>板用户手册】第13章 <b class='flag-5'>STM32F407</b>启动过程详解

    新手入门stm32F407寄存器点亮一个led灯过程分享

    纪录一下自己的学习stm32寄存器点灯的过程看完这个过程可能不会让你点灯成功但是会让大家对寄存器点灯
    发表于 11-29 16:36 11次下载
    新手入门<b class='flag-5'>stm32F407</b>用<b class='flag-5'>寄存器</b>点亮一个led灯过程分享

    STM32F407开发板用户手册】第14章 STM32F407的电源,复位和时钟系统

    STM32F407开发板用户手册】第14章 STM32F407的电源,复位和时钟系统
    发表于 12-02 16:21 42次下载
    【<b class='flag-5'>STM32F407</b><b class='flag-5'>开发</b>板用户手册】第14章 <b class='flag-5'>STM32F407</b>的电源,复位和时钟系统

    STM32F407开发板用户手册】第1章   初学STM32F407的准备工作

    STM32F407开发板用户手册】第1章   初学STM32F407的准备工作
    发表于 12-04 13:36 75次下载
    【<b class='flag-5'>STM32F407</b><b class='flag-5'>开发</b>板用户手册】第1章   初学<b class='flag-5'>STM32F407</b>的准备工作

    STM32F407开发板用户手册】第21章 STM32F407的NVIC中断分组和配置(重要)

    STM32F407开发板用户手册】第21章 STM32F407的NVIC中断分组和配置(重要)
    发表于 12-04 13:51 21次下载
    【<b class='flag-5'>STM32F407</b><b class='flag-5'>开发</b>板用户手册】第21章 <b class='flag-5'>STM32F407</b>的NVIC中断分组和配置(重要)

    STM32F407开发板用户手册】第8章 STM32F407的终极调试组件Event Recorder

    STM32F407开发板用户手册】第8章 STM32F407的终极调试组件Event Recorder
    发表于 12-04 14:21 18次下载
    【<b class='flag-5'>STM32F407</b><b class='flag-5'>开发</b>板用户手册】第8章 <b class='flag-5'>STM32F407</b>的终极调试组件Event Recorder

    STM32F407开发板用户手册】第19章 STM32F407的GPIO应用之按键FIFO

    STM32F407开发板用户手册】第19章 STM32F407的GPIO应用之按键FIFO
    发表于 12-05 15:21 36次下载
    【<b class='flag-5'>STM32F407</b><b class='flag-5'>开发</b>板用户手册】第19章 <b class='flag-5'>STM32F407</b>的GPIO应用之按键FIFO

    STM32F103点灯程序(寄存器

    STM32F103点灯程序(寄存器
    发表于 12-08 17:21 20次下载
    <b class='flag-5'>STM32</b>F103<b class='flag-5'>点灯</b>程序(<b class='flag-5'>寄存器</b>)

    STM32】基于STM32F407寄存器方式点亮LED流水灯

    目录一、通过寄存器方式点亮1.二、通过库函数方式点亮三级目录本文使用原子STM32F407最小系统板示例核心芯片为:STM32F407ZGT6一、通过寄存器方式点亮1.二、通过库函数方
    发表于 12-08 17:51 6次下载
    【<b class='flag-5'>STM32</b>】基于<b class='flag-5'>STM32F407</b><b class='flag-5'>寄存器</b>方式点亮LED流水灯