没有网站想做个链接页面怎么做,营业执照网上年检入口,成都市招投标信息公开网,wordpress一键分享微博本文以PA1引脚点亮LED灯为案例#xff0c;解析了STM32寄存器操作的配置过程#xff0c;以及从手册查询方法和寄存器配置步骤。
一、概念
1.十六进制和二进制之间相互转换关系
首先#xff0c;需要了解十六进制和二进制之间的基本转换方法。十六进制是一种基数为16的数制解析了STM32寄存器操作的配置过程以及从手册查询方法和寄存器配置步骤。
一、概念
1.十六进制和二进制之间相互转换关系
首先需要了解十六进制和二进制之间的基本转换方法。十六进制是一种基数为16的数制用数字0到9和字母A到F或a至f)表示。 二进制则是基数为2的数制仅使用数字0和1表示。 每一个十六进制的数字可以转换成一个四位的二进制数。 如十六进制的1转换为二进制是0001,十六进制的A (或a)转换为二进制是1010
对于0xFFFFFFF0来说可以拆分并转换为对应的二进制F 1111编00000因此0xFFFFFFF0的完整二进制表示是 1111 1111 1111 1111 1111 1111 1111 0000
二、步骤
1.定位APB总线寄存器位置
第一步 开启外设时钟使能寄存器当外设时钟没有启用时软件不能读写外设寄存器数值。返回值始终为0x00
首先找寄存器映射表 STM32第6章提供了储存器映像由此观察RCC的起始和终止地址分别为
RCC_Start: 0x4003 1000
RCC_End: 0x4003 1400
接着看具体RCC中有关IO PortA寄存器偏置位 由图可知APB2外设时钟使能寄存器的偏移地址为0x18;
即如果你想设置RCC_APB2ENR这个寄存器你就必须先定位RCC地址(0x4003 100)偏移(0x18)
#define RCC_APB2ENR *((volatile unsigned int *) (0x40021000 0x18)) 2.定位IO口端口配置寄存器位置 这里我们使用IO口的A2作为例子查询寄存器映射可得PortA起始地址为0x4001 0800 终止地址为 0x4001 0C00 同理配置IO端口配置寄存器首先要找到GPIO的偏移地址 查表可得该寄存器的地址为GPIO_PortA 偏移0x00
#define GPIOA_CRL (*((volatile unsigned int *) (0x40010800 0x00)))
3.定位IO口引脚使能寄存器位置 GPIO_PortA 偏移0x10
#define GPIOA_BSRR (*((volatile unsigned int *) (0x40010800 0x10)))
4.APB总线使能 RCC_APB2ENR | 12; //RCC PortA 时钟启用
5.IO口端口配置 GPIOA_CRL 0xFFFFFF0F;//端口配置CNF1和MODE1清零
GPIOA_CRL | 0x00000030;//端口配置CNF1设定推挽输出MODE1设定输出模式最大速度50MHz 0011
6.引脚使能 GPIOA_BSRR 11;//端口位设置SET/RESET ,即BS1设定为SET
三、案例
#include stm32f10x.h // Device header//定义三个寄存器
#define RCC_APB2ENR (*((volatile unsigned int *) (0x40021000 0x18)))//控制RCC_APB2总线
#define GPIOA_CRL (*((volatile unsigned int *) (0x40010800 0x00)))//GPIO_CRLGPIO_A端口配置低配置寄存器
#define GPIOA_BSRR (*((volatile unsigned int *) (0x40010800 0x10)))//GPIOA_BSRR(GPIO端口位设置/清除寄存器)int main(){
//对寄存器进行相应设定
RCC_APB2ENR | 12; //RCC PortA 时钟启用GPIOA_CRL 0xFFFFFF0F;//端口配置CNF1和MODE1清零
GPIOA_CRL | 0x00000030;//端口配置CNF1设定推挽输出MODE1设定输出模式最大速度50MHz 0011GPIOA_BSRR 11;//端口位设置SET/RESET ,即BS1设定为SETwhile(1){};return 0;
}