STM32F103点亮LED,3种方式

举报
dz小伟 发表于 2022/11/02 12:20:14 2022/11/02
【摘要】 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.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:做按键输入时初始化要写一个高低电平(上拉下拉输入模式)

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。