STM32F103寄存器方式点亮LED流水灯

一、什么是寄存器

简单地说,寄存器就是存放东西的存贮部件,它们主要暂存指令、数据和地址。官方说法是寄存器是CPU内部用来存放一些小型存储区域,用来暂时存放参与运算的数据和运算结果。同时,我们通过不同的地址区分不同的寄存器。

1、如何找到寄存器地址

step1:找到GPIOB的基地址
找到GPIOB小区,即所有GPIOB相关的寄存器,都住在0x4001 0C000x4001 0FFF范围内。
在这里插入图片描述

step2:找到端口输入寄存器的地址偏移
找到存储数据的那个屋子,结论是0x4001 0C00+8 = 0x4001 0C08
在这里插入图片描述
step3:找到知道数据的那个人
例如:PB3的数据位于从右往左数第4个。
在这里插入图片描述
结论:
PB3的输入数据位于0x4001 0C08这个地址上,这个地址上存放数据的右起第4个位就是PB3引脚对应的高低电平。

二、使用寄存器点亮 LED 灯

自己尝试新建工程时,请对照查阅《新建工程— 寄存器版》章节。若没有安装KEIL5软件,请参考《如何安装 KEIL5》章节。
打开该工程,可看到一共有三个文件,分别 startup_stm32f10x_hd.sstm32f10x.h 以及 main.c,下面我们对这三个文件进行讲解。
在这里插入图片描述

2.1 硬件连接

在本教程中 STM32芯片与LED 灯的连接见图这是一个RGB 灯,里面由红蓝绿三个小灯构成,使用 PWM 控制时可以混合成 256 不同的颜色。
在这里插入图片描述
我们的目标是把 GPIO 的引脚设置成推挽输出模式并且默认下拉,输出低电平,这样就能让LED 灯亮起来了。

2.2 启动文件

名为startup_stm32f10x_hd.s的文件,它里边使用汇编语言写好了基本程序,当STM32 芯片上电启动的时候,首先会执行这里的汇编程序,从而建立起 C 语言的运行环境,所以我们把这个文件称为启动文件。该文件使用的汇编指令是 Cortex-M3 内核支持的指令:
在这里插入图片描述

2.3 stm32f10x.h 文件

在编程之前我们要先实现寄存器映射,有关寄存器映射的代码都统一写在 stm32f10x.h文件中,见代码:
在这里插入图片描述
GPIO外设的地址跟前面章节讲解的相同,不过此处把寄存器的地址值都直接强制转换成了指针,方便使用。代码的最后两段是RCC外设寄存器的地址定义,RCC外设是用来设置时钟的。

2.4 main 文件

在这里插入图片描述
此时直接编译的话,会出现如下错误:

Error: L6218E: Undefined symbol SystemInit (referred from startup_stm32f10x.o)

错误提示 SystemInit 没有定义。

修改代码如下:
main中添加如下函数:
在这里插入图片描述

还有一个方法就是在启动文件中把有关SystemInit
的代码注释掉也可以,具体操作如下:
在这里插入图片描述
接下来在main 函数中添加代码,实现我们的点灯之旅。

三、 GPIO模式

首先我们把连接到LED灯的GPIO引脚PBO 配置成输出模式,即配置 GPIO 的端口配置低寄存器 CRL,在这里我们把 PB0 配置为通用推挽输出,输出的速度为 10M:
在这里插入图片描述

在这里插入图片描述

3.1 控制引脚输出电平

在输出模式时,对端口位设置/清除寄存器 BSRR 寄存器、端口位清除寄存器BRRODR 寄存器写入参数即可控制引脚的电平状态,其中操作 BSRRBRR最终影响的都是ODR 寄存器,然后再通过ODR 寄存器的输出来控制GPIO
在这里插入图片描述
在这里插入图片描述

3.2 开启外设时钟

由于 STM32的 外设很多,为了降低功耗,每个外设都对应着一个时钟,在芯片刚上电的时候这些时钟都是被关闭的,如果想要外设工作,必须把相应的时钟打开。
在这里插入图片描述

在这里插入图片描述

3.3 LED灯点亮

现在我们完整组织下用 STM32控制一个 LED 的代码。
在这里插入图片描述

3.4 下载验证

把编译好的程序下载到开发板并复位,可看到板子上的LED 灯被点亮。

四、C语言实现LED点灯

4.1 创建工程

step1:创建项目,名称为test3
在这里插入图片描述

在这里插入图片描述

4.2 配置环境

step2:选择STM32F103C8版
在这里插入图片描述

step3:勾选Starup和Core
在这里插入图片描述

step4:点击魔法棒
在这里插入图片描述

step5:在output里选择create hex file
在这里插入图片描述

4.3 创建leddd.c文件

step6:在source group里创建leddd.c

在这里插入图片描述

写入代码,注意项目结构,使用的引脚是PA7,PB9,PC15,同时如果灯不闪烁,程序没有正常运行,可以先试试仿真调试,仿真调试正常了一般在板子上运行就正常

4.4 硬件设备连接

step7:硬件连接

1、设备介绍

  • 面包板

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • STM32F103ZE与PC端连接
    PA9——RXD
    PA10——TXD
    在这里插入图片描述
    需将将boot0设为1,boot1设为0,利用跳线帽实现。
    在这里插入图片描述
    借助FLYMCU下载软件,即可将test3.hex载入。

FLYMCU配置需注意配置如下:
在这里插入图片描述

4.5 烧录展示

step8:build后烧录
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

五、总结

学习完用stm32f103ze芯片做流水灯实验,还运用了面包板。从开始的摸不着头脑,一个嵌入式小白,而通过老师和同学的帮助,完成了硬件的接入,最后顺利地完成流水灯实验,实现了灯的闪烁。

六、参考资料

STM32F103C8T6实现流水灯
【嵌入式08】STM32F103C8T6寄存器方式借助面包板点亮LED流水灯详解
32之寄存器点亮流水灯

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值