欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

stm32 微控制器寄存器操作:十六进制数转换为二进制数

最编程 2024-05-22 19:32:05
...

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

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已经定义宏了