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); //防止程序跑飞
}
相关推荐
新晨单片机设计1 小时前
S021A-基于STM32单片机自动追光系统(步进电机)【Proteus仿真+Keil程序+原理图】
stm32·单片机·proteus·自动追光系统
女神下凡6 小时前
芯参谋(43):DDR4_电路设计指南
arm开发·单片机·嵌入式硬件·设计规范
电子元器件选型哥7 小时前
MOS管驱动电阻怎么选?阻值大小到底影响什么?
单片机·嵌入式硬件·硬件工程师·半导体·电子元器件
lhbweilai7 小时前
深挖FreeRTOS内核实现(三)
c语言·stm32·单片机
白搞电子7 小时前
ESP32-S31 上做可在线安装的 WASM 应用平台:0.4.9 Beta 发布
单片机·嵌入式硬件·物联网
辰哥单片机设计12 小时前
漏水传感器(STM32)
stm32·单片机·嵌入式硬件
恶魔泡泡糖13 小时前
stm32F103C8T6标准库串口接收之多串口基础应用5
stm32·单片机·嵌入式硬件
木子单片机13 小时前
基于51单片机计步器—无线蓝牙APP上传
单片机·嵌入式硬件·51单片机·keil
嵌入式分享13 小时前
BSP调试#01:RTC(RK3588)
嵌入式·实时音视频
智者知已应修善业13 小时前
【51单片机只有一个8*8点阵数据如何滚动起来一片595+一组IO+花样】2022-1-15
c++·经验分享·笔记·单片机·蓝桥杯·硬件架构