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); //防止程序跑飞
}
相关推荐
LCG米26 分钟前
STM32硬件SPI驱动SSD1306 OLED实测:上电黑屏排查、页寻址模式与取模扫描方向陷阱
stm32·单片机·嵌入式硬件·嵌入式
深圳老胡1 小时前
STM32C5A3ZG 网络调试总结:从启动失败到连续 Ping 稳定
笔记·stm32·单片机·代码规范
简单电磁炮2 小时前
关于adc采集
stm32·单片机
意法半导体STM323 小时前
【官方原创】如何在STM32CubeMX2中使用UART
stm32·单片机·嵌入式硬件
探鸽小钛5 小时前
4G 终端 ES8311 - 挂断一次,下次说话就没声了之解决办法
物联网·音视频·嵌入式·esp32·webrtc
白搞电子5 小时前
ESP-Mosaico 轮滑动画编排台:拍点吸附、完整动作编辑与工程保存
单片机·嵌入式硬件·电脑
cu1436 小时前
细谈IT6653的具体功能与其应用
c语言·c++·单片机·嵌入式硬件
夏虫不可与之言冰6 小时前
RMT 与 WS2812 灯带:可寻址 RGB 全彩控制
c语言·c++·单片机·物联网·visual studio
三佛科技-134163842127 小时前
微针美容仪数显方案开发案例,微针美容仪方案单片机选择(FT62F23X,FT62F288-LRB,FT32A072)
单片机·嵌入式硬件·物联网·智能家居·pcb工艺
天空'之城8 小时前
单片机基础核心知识点汇总(四十九)
单片机·嵌入式硬件