GPIOx_ODR
找到PC13,写下:GPIOx_ODR : 0x0C 13 0(输出低电平) 1(输出高电平)

为什么要用不同的寄存器去操作PC13对应的bit位
GPIOC_CRH寄存器负责配置引脚模式,决定 PC13 是输入?输出?推挽?开漏?速度多少
GPIOC_ODR寄存器 负责控制引脚输出电平。模式配置完之后才用它输出高 / 低电平
查找时钟
目录名

为了降低功耗,stm32一开始会关闭时钟,需要用到哪个管脚时,就开启对应时钟
其中Bridge1和2是时钟树,图中GPIOC就是APB2管理的,但APB2也不是全开的而是需要哪个开哪个

查找打开时钟
目录中找到了APB2enable(使能)


在RCC_APB2ENR寄存器中找到IOPC是第四个比特位


查到bit4置0时为失能,置1时为使能

、
记录下RCC_APB2ENR:0x18 4 1
起始地址的查找
找到存储器映射 (3.3)

找到GPIOC的起始地址
找到RCC的起始地址



那么最终得到GPIOx_CRH:0x40011000+0x04 20:23 0010
GPIOx_ODR : 0x40011000+0x0C 13
RCC_APB2ENR:0x40021000+0x18 4 1
最后代码
#define RCC_APB2ENR (*(volatile unsigned int *)0x40021018)
#define GPIOC_CRH (*(volatile unsigned int *)0x40011004)
#define GPIOC_ODR (*(volatile unsigned int *)0x4001100C)
int main()
{
//1、开启时钟
RCC_APB2ENR |= 1 << 4;
//2、GPIOC13设置为推挽输出且输出速率为2Mhz
GPIOC_CRH = GPIOC_CRH & ~(0xf << 20);
GPIOC_CRH |= 0x2 << 20;
//3、设置PC13输出低电平
GPIOC_ODR &= ~(0x1 << 13);
while(1); //防止程序跑飞
}