- 1、本文档共5页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
一个菜鸟的STM32寄存器学习笔记1_用GPIO输出
接触 STM32 快一年了,断断续续的学了点东西。学来学去总是有种心里没底的感觉。
寄存器和库函数都有接触过。先用的正点原子的STM32 不完全手册学的寄存器感觉很难就
没有学下去。后来转学库函数,用库函数做了几个小项目。以为自己会了。但有机会接触到
了一个大的项目的源程序,因为人家使用的是寄存器发现自己看的很痛苦。所以下定决心学
一学寄存器,还有一个想法,在 STM32 上可以使用库函数,其他的也许也有库函数,但芯
片的都是操作寄存器,现在学习寄存器和看寄存器手册,以后遇到别的没有库函数的芯片也
不会太困难了。
刚学寄存器,写本文是一来是督促自己学习,并加深理解。二来是以一个菜鸟的理解方
式学习后面会持续更新。我知道不是很全面,现在的首要目标是实现功能,优化以后在实践
中积累。但是有错误一定要指出。共同学习共同成长。
本笔记是根据《STM32 不完全手册》实验顺序,参考《STM32 中文参考手册》进行的
一.点亮LED 或灭掉LED
想要点亮一个LED 首先需要知道要知道有哪些寄存器需要配置
1.配置相关寄存器
1).与LED 连接的相关引脚的时钟配置 ——RCC-APB2ENR
2).引脚功能初始化——GPIOx-CRL 或者GPIOx-CRH
3).使用GPIOx-BSRS 点亮LED 与灭掉LED
2.相关寄存器配置
第一步 时钟初始化
从从上面可以看出有3 个寄存器需要我们来配置。首先是RCC-APB2ENR 这个寄存
器的功能是使能挂在APB2 时钟线上的设备的时钟的(我们在使用某一个功能时要先使
能对应的时钟,用哪个功能就开哪个的时钟,这样可以减少功耗)
APB2ENR 的每一位对应一个功能的时钟使能。比如上面标号为 15 对应的功能是
ADC3 时钟的使能。标号14 是串口1 的时钟使能。
从说明中我们可以看出写0 关闭时钟,写1 开启时钟。
例如:我这里LED 对应的是GPIOC 的1 脚;就要把GPIOC 的时钟使能,也就是把标号为
4 的那位写入1 就行;
为了不影响其他位原来的值我们使用下面的语句来向标号为4 的位置写入1
RCC-APB2ENR=0xFFFFFFEF;//把GPIOC 对应的位清0
RCC-APB2ENR|=0//再把GPIOC 对应的位置1 使能时钟
第二步 引脚初始化
引脚初始化首先要知道有哪些设置模式
输入模式
(1)浮空输入——浮空输入,可以做KEY 识别
(2)带上拉输入——IO 内部上拉电阻输入
(3)带下拉输入—— IO 内部下拉电阻输入
(4) 模拟输入——应用ADC 模拟输入,或者低功耗下省电
输出模式
(5)开漏输出——IO 输出0 接GND,IO 输出 1,悬空,需要外接上拉电阻,才能实现输出
高电平。当输出为1 时,IO 口的状态由上拉电阻拉高电平,但由于是开漏输出模式,这样IO
口也就可以由外部电路改变为低电平或不变。可以读IO 输入电平变化,实现C51 的IO 双向
功能
(6)推挽输出——IO 输出0-接GND, IO 输出 1 -接VCC,读输入值是未知的
(7)复用功能的推挽输出——片内外设功能(I2C 的SCL,SDA)
(8)复用功能的开漏输出——片内外设功能(TX1,MOSI,MISO.SCK.SS )
(以上内容来自/s/blog_6c9bac050101djjz.html)
根据上面的介绍我们选择推挽输出比较方便,也可以是浮空开漏输出模式自己接上拉电阻
这个寄存器确实看的有点晕。不仔细看再配合下面的说明就完全看不懂了。我们知道一组
GPIO 中有16 个脚0~15 。CRL 是配置0~7 引脚的, CRH 是配置8~15 脚的CRH 和CRL 结构
是一样。每个引脚配置分成两个部分mode 和CNF 。从上图可以看出MODE 主要配置输入还
是输出的。CNF 是配置输出或输入的功能。比如 MODE=00 CNF=00 就是模拟输入,
MODE=01,CNF=00 则是通用推挽输出最大速度是10MHz
我的引脚是PC1 所以要配置CRL 中4~7 位对应得MODE 和CNF;
现在我们要点亮LED 就需要输出那么MODE=11 输出模式,最大速度50MHz,CNF=00 推
文档评论(1)