STM32入门系列-使用C语言封装寄存器

 前面文章介绍了存储器映射、寄存器和寄存器映射,这些都是为了介绍使用 C语言封装寄存器做铺垫。这里我们通过一个实例来对 C 语言封装寄存器进行介绍。

具体实例:控制 GPIOC 端口的第 0 管脚输出一个低电平。首先我们需要知道GPIOC 端口外设是挂接在哪个总线上的,然后根据总线基地址和本身的偏移地址得到 GPIOC 外设基地址,最后通过这个外设基地址得到里面各种寄存器基地址。

总线和外设基地址封装

根据寄存器的概念,我们可以使用 C 语言中的宏定义对寄存器进行定义。具体代码如下:

1    //定义外设基地址 2 3    #define PERIPH_BASE ((unsigned int)0x40000000) 1) 4 5 //定义 APB2 总线基地址 6 7 #define APB2PERIPH_BASE (PERIPH_BASE + 0x00010000) 2) 8 9 //定义 GPIOC 外设基地址 10 11 #define GPIOC_BASE (AHB1PERIPH_BASE + 0x0800) 3) 12 13 //定义寄存器基地址 这里以 GPIOC 为例 14 15 #define GPIOC_CRL *(unsigned int*)(GPIOC_BASE+0x00) 4) 16 17 #define GPIOC_CRH *(unsigned int*)(GPIOC_BASE+0x04) 18 19 #define GPIOC_IDR *(unsigned int*)(GPIOC_BASE+0x08) 20 21 #define GPIOC_ODR *(unsigned int*)(GPIOC_BASE+0x0C) 22 23 #define GPIOC_BSRR *(unsigned int*)(GPIOC_BASE+0x10) 24 25 #define GPIOC_BRR *(unsigned int*)(GPIOC_BASE+0x14) 26 27 #define GPIOC_LCKR *(unsigned int*)(GPIOC_BASE+0x18)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwggsw.html