STM32F103点亮LED,3种方式

目录

  • 1、寄存器
    • 1.1、开启GPIOE对应时钟
      • 1.1.1、找到GPIOE对应时钟
      • 1.1.2、找到对应基地址
      • 1.1.3、找到APB2的偏移地址
      • 1.1.4、编写程序开启PE5时钟
    • 1.2、配置PE5对应寄存器
      • 1.2.1、找到对应基地址
      • 1.2.2、找到配置寄存器IOPE的所有偏移地址
      • 1.2.3、配置CRL寄存器
    • 1.3、控制ODR或BSRR和BRR寄存器点亮LED
      • 1.3.1、控制ODR寄存器亮灭
      • 1.3.2、控制BSRR和BRR寄存器亮灭
  • 2、库函数
    • 2.1、RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)
      • 2.1.1、2个形参
      • 2.1.2、IS_RCC_APB2_PERIPH(RCC_APB2Periph)
      • 2.1.3、IS_FUNCTIONAL_STATE(NewState)
      • 2.1.4、assert_param()
      • 2.1.5、RCC函数功能
    • 2.2、结构体GPIO_InitTypeDef
      • 2.2.1、uint16_t GPIO_Pin
      • 2.2.2、GPIOSpeed_TypeDef GPIO_Speed
        • 2.2.2.1、GPIOSpeed_TypeDef的3个成员
      • 2.2.3、GPIOMode_TypeDef GPIO_Mode
        • 2.2.3.1、GPIOMode_TypeDef的8个成员
    • 2.3、GPIO_Init(GPIO_TypeDef* , GPIO_InitTypeDef* );
    • 2.4、GPIO_SetBits(GPIO_TypeDef* , uint16_t );
    • 2.5、GPIO_ResetBits(GPIO_TypeDef* , uint16_t );
    • 2.6、点亮LED代码
  • 3、位操作
    • 3.1、开启时钟
    • 3.2、配置PE5
    • 3.3、宏定义位
      • 3.3.1、找到PE5 ODR寄存器的位地址并宏定义
      • 3.3.2、用位操作点亮LED
  • 4、按键控制LED亮灭
  • 5、总结

1、寄存器

1.1、开启GPIOE对应时钟

1.1.1、找到GPIOE对应时钟

在这里插入图片描述
STM32F103点亮LED,3种方式_第1张图片
打开STM32F1xx中文参考手册,找到上图可以看到GPIOE是挂在AHB的APB2上的。

1.1.2、找到对应基地址

在这里插入图片描述
在这里插入图片描述
找到时钟控制的基地址。
用宏定义定义它的地址:
在这里插入图片描述

1.1.3、找到APB2的偏移地址

STM32F103点亮LED,3种方式_第2张图片
在这里插入图片描述

找到偏移地址
宏定义它的地址
在这里插入图片描述
不能:0x40021018|=1<<6,因为编译器默认0x40021018是数字,不是地址。
必须强制转换为指针变量,然后解引,往寄存器写数。

1.1.4、编写程序开启PE5时钟

STM32F103点亮LED,3种方式_第3张图片
找到PE5的时钟使能位
开启时钟
在这里插入图片描述

1.2、配置PE5对应寄存器

1.2.1、找到对应基地址

在这里插入图片描述
宏定义地址
在这里插入图片描述

1.2.2、找到配置寄存器IOPE的所有偏移地址

STM32F103点亮LED,3种方式_第4张图片
用指针指向寄存器地址,然后宏定义它
STM32F103点亮LED,3种方式_第5张图片

1.2.3、配置CRL寄存器

STM32F103点亮LED,3种方式_第6张图片
端口5配置为:输出模式50MHz、通用推挽输出模式
在这里插入图片描述

1.3、控制ODR或BSRR和BRR寄存器点亮LED

1.3.1、控制ODR寄存器亮灭

STM32F103点亮LED,3种方式_第7张图片
程序实现亮灭
在这里插入图片描述

1.3.2、控制BSRR和BRR寄存器亮灭

BRSS
STM32F103点亮LED,3种方式_第8张图片
BRR
STM32F103点亮LED,3种方式_第9张图片
程序实现亮灭
在这里插入图片描述

2、库函数

2.1、RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)

2.1.1、2个形参

1.uint32_t 是无字符型整形
2.FunctionalState 形参可以是DISABLE或ENABLE,前者为0后者为1

2.1.2、IS_RCC_APB2_PERIPH(RCC_APB2Periph)

RCC_APB2Periph 就是时钟的基地址,比如GPIOE的基地址

2.1.3、IS_FUNCTIONAL_STATE(NewState)

NewState 是使能或关闭,1或0

2.1.4、assert_param()

指向地址内存,使能

2.1.5、RCC函数功能

开启时钟

2.2、结构体GPIO_InitTypeDef

STM32F103点亮LED,3种方式_第10张图片

2.2.1、uint16_t GPIO_Pin

STM32F103点亮LED,3种方式_第11张图片

typedef unsigned short int uint16_t;
无符号短整型,GPIO的第几位

2.2.2、GPIOSpeed_TypeDef GPIO_Speed

2.2.2.1、GPIOSpeed_TypeDef的3个成员

GPIO_Speed_10MHz = 1,
GPIO_Speed_2MHz,
GPIO_Speed_50MHz
输出时钟频率

2.2.3、GPIOMode_TypeDef GPIO_Mode

2.2.3.1、GPIOMode_TypeDef的8个成员

STM32F103点亮LED,3种方式_第12张图片
配置GPIO

2.3、GPIO_Init(GPIO_TypeDef* , GPIO_InitTypeDef* );

2个形参,第一个是PE端,第二个是结构体指针dig
功能:初始化配置端口

2.4、GPIO_SetBits(GPIO_TypeDef* , uint16_t );

2个形参,第一个是PE端,第二个是哪个口
功能:端口输出0

2.5、GPIO_ResetBits(GPIO_TypeDef* , uint16_t );

2个形参,第一个是PE端,第二个是哪个口
功能:端口输出1

2.6、点亮LED代码

STM32F103点亮LED,3种方式_第13张图片

3、位操作

3.1、开启时钟

在这里插入图片描述

3.2、配置PE5

在这里插入图片描述

3.3、宏定义位

3.3.1、找到PE5 ODR寄存器的位地址并宏定义

打开Cortex M3权威指南
在这里插入图片描述
STM32F103点亮LED,3种方式_第14张图片
STM32F103点亮LED,3种方式_第15张图片
n:第几位
GPIOE_ODR_Addr:ODR寄存器地址
BITBAND() :把PE5的位地址计算出来
MEM_ADDR():用指针指向内存内容,改变它的内容

3.3.2、用位操作点亮LED

PBout(5)=0;

4、按键控制LED亮灭

STM32F103点亮LED,3种方式_第16张图片

STM32F103点亮LED,3种方式_第17张图片

5、总结

不管是什么方式点亮LED,都需要3步
1:使能时钟。(AHB 、SPB2)
2:配置io口(CRL、CRH寄存器)
3:控制io口(ODR寄存器或BSRR和BRR寄存器)
扩展
1:读寄存器(IDR)
2:做按键输入时初始化要写一个高低电平(上拉下拉输入模式)

你可能感兴趣的:(笔记,stm32)