前言
本文记录的是基于stm32f103vet6开发板,点亮led的过程。本例是以GPIOB的PB0 LED_G为例。
提示:以下是本篇文章正文内容,下面案例可供参考
一、原理图
由原理图,我们可以知道,GPIOB对应的引脚输出低电平,LED就会被点亮。
二、芯片手册
1.点亮LED步骤
1、打开GPIOB的时钟 2、设置GPIOB为输出模式 3、将GPIOB对应的引脚输出低电平
2.相关寄存器
(1)RCC_APB2ENR ![在这里插入图片描述](https://img-blog.csdnimg.cn/a62226e083204b7ea074dcddb693df1f.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAZnJlZShtZSk=,size_20,color_FFFFFF,t_70,g_se,x_16) ![在这里插入图片描述](https://img-blog.csdnimg.cn/096d1b51b96849b4b6cecae34d242d37.png) (2)端口配置低寄存器(GPIOx_CRL) (x=A..E) ![在这里插入图片描述](https://img-blog.csdnimg.cn/88213c36dc024343becb194ed893df02.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAZnJlZShtZSk=,size_20,color_FFFFFF,t_70,g_se,x_16)
(3)端口输出数据寄存器(GPIOx_ODR) (x=A…E)
三、代码
#if 0
#include <reg52.h>
sbit LED = P0^0
void main(void) {
P0 = 0xfe;
LED = 0;
return ;
}
#endif
#include "stm32f10x.h"
int main(void) {
*((unsigned int*) 0x40021018) |= (1 << 3);
*((unsigned int*) 0x40010c00) &= ~(16 << 0);
*((unsigned int*) 0x40010c00) |= (1 << 0);
*((unsigned int*) 0x40010c0c) &= ~(1 << 0);
return 0;
}
void SystemInit(void) {
return ;
}
总结
找相关寄存器的映射地址的时候,需要先找到它的基地址。通过存储器映像找到三个总线(APB1/APB2/AHB)的基地址,然后根据寄存器在哪个总线和偏移地址,就能算出寄存器的地址。
|