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

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

1、寄存器映射原理

存储器本身没有地址,给存储器分配地址的过程叫存储器映射;在存储器区域,设计的是片上外设,它们以四个字节为一个单元,共 32bit, 每一个单元对应不同的功能,当我们控制这些单元时就可以驱动外设工作。我们可以找到 每个单元的起始地址,然后通过 C 语言指针的操作方式来访问这些单元,如果每次都是通 过这种地址的方式来访问,不仅不好记忆还容易出错,这时我们可以根据每个单元功能的 不同,以功能为名给这个内存单元取一个别名,这个别名就是我们经常说的寄存器,这个 给已经分配好地址的有特定功能的内存单元取别名的过程就叫寄存器映射。

2、GPIO端口的初始化三步骤

1、时钟配置

由于 STM32的 外设很多,为了降低功耗,每个外设都对应着一个时钟,在芯片刚 上电的时候这些时钟都是被关闭的,如果想要外设工作,必须把相应的时钟打开。 STM32 的所有外设的时钟由一个专门的外设来管理,叫 RCC(reset and clockcontrol)

image-20211021214236303

例如

 // 开启 GPIOB 端口 时钟 

 RCC_APB2ENR |= (1<<3);

2、输入输出模式设置与最大速率设置

在 GPIO 外设中,控制端口高低控制寄存器 CRH 和 CRL 可以配置每个 GPIO 的工作模式和 工作的速度,每 4 个位控制一个 IO,CRH 控制端口的高八位,CRL 控制端口的低 8 位,具 体的看 CRH 和 CRL 的寄存器描述

image-20211021215111866

image-20211021215154504

例如

把 PB0 配置为通 用推挽输出,输出的速度为 10M

 // 清空控制 PB0 的端口位

 GPIOB_CRL &= ~( 0x0F<< (4*0));*

// 配置 PB0 为通用推挽输出,速度为 10M 

 GPIOB_CRL |= (1<<4*0);

在代码中,先把控制 PB0 的端口位清 0,然后再向它赋值“0001 b”,从而使 GPIOB0 引脚设置成输出模式,速度为 10M。

代码中使用了“&=~”、“|=”这种操作方法是为了避免影响到寄存器中的其它位, 因为寄存器不能按位读写,假如直接给 CRL 寄存器赋值:

GPIOB_CRL = 0x0000001;

这时 CRL 的的低 4 位被设置成“0001”输出模式,但其它 GPIO 引脚就有意见了,因 为其它引脚的 MODER 位都已被设置成输入模式。

3、寄存器ODR

image-20211022134403131

例如

 // PB0 输出低电平

 GPIOB_ODR &= ~(1<<0);
3、程序设计思路

因为我购买的是STM32最小系统核心板(STM32F103C8T6),GPIOA与GPIOB都有0-15端口,GPIOC只有13-15号端口,所以为控制三个LED灯,采用GPIOA0、GPIOB0、GPIOC13三个端口来实现。

程序代码

#include "stm32f10x.h"
#include <stdio.h>

void SystemInit(
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值