stm32 微控制器寄存器操作:十六进制数转换为二进制数
本文已参与「新人创作礼」活动,一起开启掘金创作之路。
16进制转2进制
==16进制数的每一位对应四位二进制数:== 可以说四位二进制数的是一个8421的规律。
16进制1转为二进制为0001-----计算原理为
0*8+0*4+0*2+1*1=1
16进制8转为二进制为1000-----计算原理为
1*8+0*4+0*2+0*1=8
16进制F(15)转为二进制1111---计算原理为:
1*8+1*4+1*2+1*1=15(F)
以此类推。 因此0x0F转换成二进制数为:(其中0x代表16进制数)
0000 1111
stm32单片机寄存器操作:16进制数转二进制
16进制转二进制基本转换知识
可以说四位二进制数的是一个8421的规律。
16进制1转为二进制为0001-----计算原理为 0 x 8+0 x 4+0 x 2+1 x 1=1
16进制8转为二进制为1000-----计算原理为 1 x 8+0 x 4+0 x 2+0 x 1=8
16进制F(15)转为二进制1111---计算原理为: 1 x 8+1 x 4+1 x 2+1 x 1=15(F) 以此类推。
16进制转二进制单片机操作
例如 #define GPIO_Pin_5 ((uint16_t)0x0020)
0x0002
其中,0x代表16进制,0002的每一位代表着四位二进制数
第一个0代表0000
第二个0代表0000
第三个0代表0000
第四个2代表0010
所以0x0002就表示二进制数00000000 00000010
也即在GPIO某个端口的寄存器操作中第二位是1
又例: 0x0020 第一个0代表0000 第二个0代表0000 第三个2代表0010 第四个0代表0000 所以0x0400就表示二进制数00000000 00100000 也即在寄存器操作中第6位是1 如下图,代表着红色处为1,其余位全为0
定义结构体变量指针
固件库编程雏形
以STM32中点亮LED灯为例
//外设总线基地址
#define PERIPH_BASE ((unsigned int)0x40000000)
#define APB1_PERIPH_BASE (PERIPH_BASE)
#define APB2_PERIPH_BASE (PERIPH_BASE + 0x10000)
#define AHB_PERIPH_BASE (PERIPH_BASE + 0x20000)
//外设基地址
#define RCC_BASE (AHB_PERIPH_BASE + 0x1000)
#define GPIOB_BASE (APB2_PERIPH_BASE + 0x0C00)
#define GPIOE_BASE (APB2_PERIPH_BASE + 0x1800)
typedef unsigned int uint32_t;
typedef unsigned short uint16_t;
重点
//定义结构体
typedef struct
{
uint32_t CRL;
uint32_t CRH;
uint32_t IDR;
uint32_t ODR;
uint32_t BSRR;
uint32_t BRR;
}GPIO_TypeDef;
//强制类型转换
#define GPIOB ( (GPIO_TypeDef*)GPIOB_BASE ) //强制转换成结 构类型指针
将GPIO_BASE基地址转换成GPIO_TypeDef结构体指针 这样的话指针可以指向结构体的任一成员。 例如: GPIOB->CRL GPIOB->ODR
注:GPIOB已经定义宏了