STM32CubeMx+HAL笔记(三)寄存器编程

之前在STM32CubeMx+HAL笔记(一)里讲过开发流程,在开发过程中最重要的便是程序编写,有两种编程方式:寄存器编程,库函数编程。

一、什么是寄存器

简单来说,寄存器就是器件地址,之前有提过,STM32单片机其实是ST公司购买ARM公司的内核,在内核的基础上增加各种外设元件的一类器件。寄存器就是这些外设元件的地址,在参考手册中我们可以查阅对应芯片型号的所有外设的地址,知道外设地址后就可以对外设进行操作,完成各种功能。

 二、如何操作寄存器(寄存器编程)

首先通过查阅参考手册可以知道对应器件的地址,知道地址后就可以对其进行操作。

//定义地址指针
//方式一:定义变量
volatile unsigned int * pointer = (unsigned int *)0x40028000;
//方式二:宏定义
#define pointer (volatile unsigned int *)0x40028000

volatile:关键字,防止编译器优化该变量。比如,

unsigned int *pointer = (unsigned int *)0x40028000;
*pointer += 1;
*pointer += 2;

此段代码的本意假设是先实现外设的某一功能,再实现外设的另一功能;但是如果不加volatile关键字编译器会将其优化为*pointer += 3;而这实现的又是外设的其他功能了,与我们的初衷相悖,所以对寄存器(地址)的变量进行定义时一定要加关键字volatile。

在上面代码中,方式二采用宏定义的方式比方式一更好,定义变量会占据很多内存,而宏定义只是文本的复制,并不占用内存。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值