[STM32F1] STM32F103C8t6 寄存器点灯

[复制链接]
1709|4
 楼主| 花间一壶酒sd 发表于 2023-5-30 13:31 | 显示全部楼层 |阅读模式
一、原理1.原理图

        STM32F103C8t6   LED0 接PC13引脚(不同板子的引脚不一样!)

        P代表GPIO   C代表GPIO端口C    13代表第十三位


7630164758a2a21ea4.png


2.原理(1)当PC13为低电平时LED灯点亮

(2)通过配置一系列寄存器使PC13为低电平
 楼主| 花间一壶酒sd 发表于 2023-5-30 13:32 | 显示全部楼层
二、寄存器
1.端口配置表
9844464758a4722f30.png

     使用推挽输出,通过端口配置表找到需要使用的寄存器,分别为CNF、MODE(在端口配置低寄存器CRL和高寄存器CRH中)和ODR寄存器。
 楼主| 花间一壶酒sd 发表于 2023-5-30 13:32 | 显示全部楼层
2.APB2外设时钟使能寄存器(RCC_APB2ENR)
(1)起始地址:0x4002 1000

4571764758a6aa5dc0.png

(2)偏移地址:0x18 3662264758a8ae78b4.png

(3)端口C位置:APB2的第4位


 楼主| 花间一壶酒sd 发表于 2023-5-30 13:33 | 显示全部楼层
三、原码
  1. #define GPIOC_CLK (*(volatile unsigned int *)(0x40021000 + 0x18)) //确定GPIOC的外设使能寄存器的地址(RCC地址+偏移地址APB2)
  2. #define GPIOC_CRH (*(volatile unsigned int *)(0x40011000 + 0x04))        //确定GPIOC的端口配置寄存器CRL(GPIOC的基地址+端口配置高寄存器CRH的偏移地址)
  3. #define GPIOC_ODR (*(volatile unsigned int *)(0x40011000 + 0x0C))        //确定GPIOC的端口输出数据寄存器ODR(GPIOC的基地址+端口输出数据寄存器ODR的偏移地址)

  4. int main(void)
  5. {
  6.                 //1.使能GPIOC的外设时钟
  7.                 GPIOC_CLK |= (1<<4);              //给IO端口C时钟使能
  8.                 //2.GPIOB配置推挽输出模式
  9.                 GPIOC_CRH &= ~(0xf<<(4*5));          //清除低4位寄存器                 
  10.                 GPIOC_CRH |= (1<<(4*5));                        //确定输出模式中的推挽输出
  11.        
  12.                 GPIOC_ODR &= ~(0x1<<(1*13));  //清除低13位寄存器
  13.                 //GPIOC_ODR |= (1<<13);

  14. }
 楼主| 花间一壶酒sd 发表于 2023-5-30 13:33 | 显示全部楼层
四、现象
7093564758aa82e3a5.png
您需要登录后才可以回帖 登录 | 注册

本版积分规则

101

主题

1219

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部