stm32学习:(寄存器1)控制寄存器来让led亮

  1. 开启时钟,先查找到开启时钟的寄存器,然后通过该寄存器操作时钟的开启或关闭,要打开的是GPIOA的时钟
    1. 在芯片手册,找到RCC寄存器描述章节
    2. 找到APB2外设时钟使能寄存器(RCC_APB2ENR),现在算RCC_APB2ENR这个寄存器的地址,先知道RCC这个外设的基地址,然后加上这个寄存器的偏移地址就行了
      1. RCC外设及地址在寄存器组起始地址表中查到,叫做复位和时钟控制(RCC),我查到的是0x40021000---0x400213FF,所以RCC这个外设的基地址为0x40021000
      2. 在APB2外设时钟使能寄存器(RCC_APB2ENR)下面可以看到偏移地址为0x18
      3. 所以RCC_APB2ENR的地址为0x40021000+0x18
    3. 有了地址就可以写入了
      1. 向第二位写入1,就是写入4
      2. 最终就是 *(uint32_t *)(0x40021000 + 0x18) = 4;
    4. 给IO口设置输出模式
      1. 需要先找到GPIOA的基地址,再根据偏移地址找到要使用的寄存器的地址
      2. GPIOA的基地址在寄存器组起始地址表中查到,我查到的是0x40010800---0x40010BFF
      3. 配置PA0口的输出模式的寄存器是GPIOA_CRL,推挽输出就是写入4
      4. 最后是 *(uint32_t *)(0x40010800 + 0x00) = 3;
    5. 给指定PA0口输出0就可以点亮LED1了
      1. 寄存器是ODR数据输出寄存器
      2. ODR寄存器的地址是 0x40010800 + 0x0c 。给这个地址的第0位写0,其他位写1
      3. 最后是 *(uint32_t *)((0x40010800 + 0x0c)) = 0xfffe;
    6. ST公司已经定义好外设寄存器地址,我们直接食用菌就好
      1. 最后是

        复制代码
        #include "stm32f10x.h"
        
        int main(void)
        {
            RCC->APB2ENR = 4;
            GPIOA->CRL = 3;
            GPIOA->ODR = 0xfffe;
            while (1)
            {
            }
        }
        或者是
        #include "stm32f10x.h"
        
        int main(void)
        {
            /* 开启GPIOA的时钟 第2位置1*/
            RCC->APB2ENR |= 0x1 << 2;
            /* GPIOA_CRL的最后4位置 0011 */
            GPIOA->CRL &= ~(0x1 << 3);
            GPIOA->CRL &= ~(0x1 << 2);
            GPIOA->CRL |= 0x1 << 1;
            GPIOA->CRL |= 0x1 << 0;
            /* GPIOA_ODR的第0位置0 */
            GPIOA->ODR &= ~(0x1 << 0);
            while (1)
            {
            }
        }
        或者是
        #include "stm32f10x.h"
        
        int main(void)
        {
            RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;
        
            GPIOA->CRL &= ~GPIO_CRL_CNF0_1;
            GPIOA->CRL &= ~GPIO_CRL_CNF0_0;
            GPIOA->CRL |= GPIO_CRL_MODE0_1;
            GPIOA->CRL |= GPIO_CRL_MODE0_0;
        
            GPIOA->ODR &= ~GPIO_ODR_ODR0;
        
            while (1)
            {
            }
        }
相关推荐
立志成为大牛的小牛1 小时前
数据结构——二十三、并查集的终极优化(王道408)
开发语言·数据结构·笔记·学习·程序人生·考研
小莞尔2 小时前
【51单片机】【protues仿真】基于51单片机送带计数器系统
c语言·单片机·嵌入式硬件·物联网·51单片机
QT 小鲜肉2 小时前
【个人成长笔记】Qt Creator快捷键终极指南:从入门到精通
开发语言·c++·笔记·qt·学习·学习方法
云知谷3 小时前
【嵌入式基本功】单片机嵌入式学习路线
linux·c语言·c++·单片机·嵌入式硬件
小叮当⇔5 小时前
IOT项目——STM32
stm32·嵌入式硬件·物联网
QT 小鲜肉5 小时前
【数据结构与算法基础】05. 栈详解(C++ 实战)
开发语言·数据结构·c++·笔记·学习·算法·学习方法
光子物联单片机5 小时前
STM32G474单片机开发入门(十五)CAN通信功能详解及实战
stm32·单片机·嵌入式硬件·mcu
A9better5 小时前
嵌入式开发学习日志40——stm32之I2C协议层
stm32·单片机·嵌入式硬件·学习
来生硬件工程师5 小时前
【STM32笔记】:P03 ISP 一键下载电路详解
c语言·笔记·stm32·嵌入式硬件·硬件工程·接口隔离原则·硬件设计
ha20428941946 小时前
Linux操作系统学习之---线程控制
java·linux·学习