STM32第三篇

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); //防止程序跑飞
}
相关推荐
H_oRIZoN_3 小时前
Linux入门DAY40(51 单片机入门:GPIO、中断、定时器、PWM、蜂鸣器完整梳理)
单片机·嵌入式硬件
LCG元3 小时前
STM32F103 复位来源诊断实战:RCC_CSR 标志位判优、BKP 复位计数持久化与六种复位源注入实测
stm32·单片机·嵌入式硬件
国产HT1621B5 小时前
显示省不了电,休眠才见真章:1621 低功耗实操
驱动开发·单片机·嵌入式硬件·led驱动·lcd驱动
国科安芯5 小时前
低轨卫星姿轨控系统中高可靠嵌入式控制单元的设计与验证
单片机·mcu·低轨卫星·星间链路·卫星姿轨控
纯音乐sjc6 小时前
SPI 通信协议详解:从四线制到 ADXL345
面试·嵌入式
纯音乐sjc6 小时前
嵌入式面试复习准备
面试·嵌入式
老当益壮梁奶奶8 小时前
ARM 汇编学习笔记(二)启动代码、指令、函数调用与 C 混合编程
c语言·arm开发·单片机·嵌入式硬件·51单片机
天空'之城9 小时前
单片机基础核心知识点汇总(三十八)
单片机·嵌入式硬件
潘潘的嵌入式日记9 小时前
位操作怎么写才不出错?置位、清位、翻转、取位一次讲清
c语言·嵌入式·寄存器·位操作