STM32 (4) 使用寄存器点亮LED 寄存器映射代码讲解

上次是操作内存地址  点亮LED灯没有用到寄存器,现在升级  实现寄存器映射。 对照上节课的代码这个如果不去手册里面查找是看不懂的,那么 我们把这些绝对的内存地址再取一个名字 叫寄存器 

那么我们利用

#if 0

#else

#endif

上面语句的意思是屏蔽  else 上面的代码  而编译  else 到 endif之间的代码

打开《STM32中文参考手册》 第二章 存储器和总像架构这里的 存储器映像   可以看到全部外设的地址分配,来看看这个系统总线框图 所有的外设都挂在AHB上

RCC 控制单片机的复位和时钟      AHB桥接到 APB2 (高速总线)和APB1上, 等下我们在实现外设寄存器映射的时候,我们先定好三条总线的基地址

比如说我们定好AHB总线的基地址,在这条总线的基础上 加上RCC的偏移 就可以得到RCC外设的基地址,然后在RCC外设这个总线的基地址上加上0x18就可以得到 APB2外设时钟使能寄存器的地址  这个寄存器的位3控制的就是GPIOB这个端口的时钟

   

再回到储存器映射表可以看到  APB1的起始地址是从 0x4000 0000开始的

这里AHB总线的地址是从 0x40018000开始的 ,而18000不太好计算所以我们可以用从0x40020000开始,这样计算起来比较方便

这里我只截取了 储存器映射中的一部分

下面开始写代码   

第一步:00

在stm32f10x.写外设基地址定义

接下来回到代码 我们要使能GPIOB就要使能 APB2 外设时钟使能寄存器的第三位

那么就在stm32f10x..h当中开始定义寄存器  这里RCC_BASE+0x18 编译器会认为只是一个立即数,所以我们要将它强制类型转化为指针,因为 外设时钟使能寄存器 是32位的,所以我们的指针也要定义成32位的。

指针首先会指向寄存器的首地址,  

一个指针指向的是一个字节,我们这个是4个字节的寄存器,指针是一个地址对应一个字节,如果指针P定义成4个字节的话他就会连续访问4个字节所以要将   RCC_BASE+0x18强制转化成32位的指针,并将取地址的操作也定义在里面

然后我们就可以操作GPIO里面的寄存器了,首先是CRL 他的偏移地址是 0x00     DRR偏移的是0x0c,我们把这两个地址的寄存器也定义到stm32_10x.h当中

下面开始写程序

上面的代码就先    把GPIO口清零(&=~) 再让GPIO口输出为低电平  灯亮了 OK大功告成

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值