STM32F103点亮LED,3种方式「掘金日新计划 · 12 月更文挑战」

137 阅读2分钟

“携手创作,共同成长!开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第1天,点击查看活动详情

1、寄存器

1.1、开启GPIOE对应时钟

1.1.1、找到GPIOE对应时钟

在这里插入图片描述 在这里插入图片描述 打开STM32F1xx中文参考手册,找到上图可以看到GPIOE是挂在AHB的APB2上的。

1.1.2、找到对应基地址

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

1.1.3、找到APB2的偏移地址

在这里插入图片描述 在这里插入图片描述

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

1.1.4、编写程序开启PE5时钟

在这里插入图片描述 找到PE5的时钟使能位 开启时钟 在这里插入图片描述

1.2、配置PE5对应寄存器

1.2.1、找到对应基地址

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

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

在这里插入图片描述 用指针指向寄存器地址,然后宏定义它 在这里插入图片描述

1.2.3、配置CRL寄存器

在这里插入图片描述 端口5配置为:输出模式50MHz、通用推挽输出模式 在这里插入图片描述

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

1.3.1、控制ODR寄存器亮灭

在这里插入图片描述 程序实现亮灭 在这里插入图片描述

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

BRSS 在这里插入图片描述 BRR 在这里插入图片描述 程序实现亮灭 在这里插入图片描述

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

在这里插入图片描述

2.2.1、uint16_t GPIO_Pin

在这里插入图片描述

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个成员

在这里插入图片描述 配置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代码

在这里插入图片描述

3、位操作

3.1、开启时钟

在这里插入图片描述

3.2、配置PE5

在这里插入图片描述

3.3、宏定义位

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

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

3.3.2、用位操作点亮LED

PBout(5)=0;

4、按键控制LED亮灭

在这里插入图片描述

在这里插入图片描述

5、总结

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