【寄存器开发速成】半小时入门STM32寄存器开发(二)

简介: 【寄存器开发速成】半小时入门STM32寄存器开发(二)

三.使用寄存器

*(unsigned int*)(0x4001 0C0C) = OxFFFF;

上面这句代码表示将0x4001 0C0C这个十六进制数转换为(unsigned int*)类型的地址,然后解引赋值。

但是上面的操作太繁琐了,于是改进为宏定义:

#define  GPIOB_ODR  *(unsigned int*)(0x4001 0C0C)

于是就可以:

GPIOB_ODR =0XFFFF:

四.查找寄存器

1.参考手册

       如果想查看某个寄存器的话,我们可以到STM32F10xxx参考手册(中文)中查找。

可以看到,以上所有的寄存器基本上都是以地址偏移来表示的,即基地址+偏移量

例如GPIOB就是在APB2总线的基地址0x4001 0000上偏移了0x0C00后得到的0x2001 0C00。


我们还可以在上述手册中看到对应寄存器各个位的详细解释。

2.示例

例如APB2总线的一个寄存器RCC_APB2ENR:

如果我们想开启TIM8的时钟使能,就可以这么写:

RCC_APB2ENR |= 0x2000;

或者

1. 
unsigned int *pRCC_APB2ENR = (unsigned int *)0x40021018;
2. *pRCC_APB2ENR |= 0x00002000;

有些寄存器是几个外设通用的,比如GPIO的寄存器:

后面的(x=A..E)就代表这个寄存器是几个GPIO端口(A..E)通用的。

头文件里也很明确定义了结构体类型:

对于这种我们调用时就可以这么调用了:

GPIOB->LCKR = xxxxxxxxx;

五.总结

       由于寄存器更接近底层,所以寄存器操作更快,效率也更高,虽然记忆起来比库函数麻烦,但是仍有可取之处,两者各有优劣,当然我们可以使用两者混合编程,把优势发挥到最大。


相关文章
|
7月前
|
数据采集 IDE 编译器
STM32微控制器入门及应用实例
STM32微控制器入门及应用实例
|
存储 编译器 C语言
STM32开发 -- Keil基本使用
STM32开发 -- Keil基本使用
824 0
|
2月前
|
芯片
【寄存器开发速成】半小时入门STM32寄存器开发(一)
【寄存器开发速成】半小时入门STM32寄存器开发(一)
|
5月前
|
传感器 编解码 API
【STM32开发入门】温湿度监测系统实战:SPI LCD显示、HAL库应用、GPIO配置、UART中断接收、ADC采集与串口通信全解析
SPI(Serial Peripheral Interface)是一种同步串行通信接口,常用于微控制器与外围设备间的数据传输。SPI LCD是指使用SPI接口与微控制器通信的液晶显示屏。这类LCD通常具有较少的引脚(通常4个:MISO、MOSI、SCK和SS),因此在引脚资源有限的系统中非常有用。通过SPI协议,微控制器可以向LCD发送命令和数据,控制显示内容和模式。
182 0
|
7月前
|
缓存 编译器 程序员
嵌入式开发环境Vscode开发STM32单片机程序
嵌入式开发环境Vscode开发STM32单片机程序
166 0
|
API 芯片
STM32CubeMX + STM32F1系列开发时遇到的四个问题及解决方案分享
STM32CubeMX + STM32F1系列开发时遇到的四个问题及解决方案分享
266 0
|
IDE NoSQL 编译器
Vscode搭建开发调试STM32/RISC-V环境IDE(最全面)
Vscode搭建开发调试STM32/RISC-V环境IDE(最全面)
|
6月前
使用STM32F103标准库实现定时器控制LED点亮和关闭
通过这篇博客,我们学习了如何使用STM32F103标准库,通过定时器来控制LED的点亮和关闭。我们配置了定时器中断,并在中断处理函数中实现了LED状态的切换。这是一个基础且实用的例子,适合初学者了解STM32定时器和中断的使用。 希望这篇博客对你有所帮助。如果有任何问题或建议,欢迎在评论区留言。
462 2
|
5月前
stm32f407探索者开发板(十七)——串口寄存器库函数配置方法
stm32f407探索者开发板(十七)——串口寄存器库函数配置方法
749 0

热门文章

最新文章