OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 12129|回复: 8

GPIO相关寄存器的运用

[复制链接]

3

主题

6

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2011-8-4
在线时间
0 小时
发表于 2011-8-15 20:15:33 | 显示全部楼层 |阅读模式

STM32单片机,有了端口才能和外界联系,学会了端口控制,才能更好地利用外设。建立和外界的联系,发挥自身的优点。

         首先介绍一下基本的GPIO相关的寄存器:

1,  GPIOX_CRL 8位端口配置寄存器

这个寄存器主要是对配置管脚是输入还是输出:

其中1MODEy[1:0]主要是配置是输入端口还是输出端口的。配置为输出得时候还可以配置输出的管脚速度等级。

 2CNFy[1:0] 主要是两种形式,在端口配置输入的时候,即MODEy[1:0]00(输入),用来配置输入的模式,主要是模拟输入,浮空输入,上拉模式和下拉模式。

         3CNFy[1:0]在端口配置为输出的时候,用来控制输入的模式。具体看手册吧。

总得来说,就是MODEy[1:0] 先配置管脚是输入还是输出,是输入就继续配置CNFy[1:0]来配置输出管脚的连接模式。要是输出的话,就继续配置MODEy[1:0]的管脚速度速度等级,之后再配置管脚的连接模式。上拉,下拉,推免,开漏等等。具体运用的时候看看手册就明白了。

2,  GPIOX_CRH  8位端口配置寄存器

GPIOX_CRH 完全一样,只是端口换成高8位了。不说了,看看就明白了!

3,  GPIOX_ODR  端口输出数据寄存器

学过AVR的都知道,输出的时候有输出数据寄存器,STM32也一样。思想COPY过来,就自然知道了GPIOX_ODR是做什么的了。不过要注意的是,这个玩意不能一个位一个位的去操作,还是51的简单啊,不过原子大哥已经把那个端口映射可操作位段,不明白,还是看自己的吧。一个GPIOA端口就16位,自然的32位的GPIOX_ODR 就只有低16位有效了,想输出什么就给这个寄存器赋值就OK了。

或者用GPIOA->ODR |=(1<<x);GPIOA.X输出”1”,或者啊GPIOA->ODR &=(0<<X);这样就输出“0”了。还是很简单的。

完成了这一步,我们就可以软件延时,控制输出流水灯了。前提是开启设备时钟哦。

4,  GPIOX_IDR 端口输入数据寄存器

这个寄存器用到的前提是端口配置为输入模式时候。什么时候想读取值,就什么时候读取吧。大家都明白。

5,  GPIOX_BSRR 端口位设置/清除寄存器

这个寄存器我用了一些,别的也不会。就感觉超级好用。用起来很方便。比如你端口配置好了。想PA5输出“1”。就GPIOA->BSRR |=(1<<5);5是对应的哦。输出“0”,一样的

GPIO->BSRR |=(1<<(5+16));为什么加16,你明白的。

6,  GPIOX_BRR 端口位清除寄存器

晚上百度了一下,有了GPIOX_BSRR 为什么还要有GPIOX_BRR ,没看明白。有了拿来就用就对了。一样的和GPIOx_BSRR一样的用法。专门清除的。GPIOA->BRR |= (1<<x);

7,  端口配置锁定寄存器GPIOX_LCKR,锁定了当然就不能修改了。保护了。避免不小心造成的失误。以后用到了在琢磨吧。

 

AFIO 端口复用功能了,没有它,STM32估计就是一个8051单片机了,只不过多了几个口罢了。但是有了它,端口功能就出来了,奥特曼变身了。可惜暂时还不会,慢慢研究。,今天的总结就到这里,慢慢学习,慢慢总结,继续研究……………

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2011-8-15 21:13:01 | 显示全部楼层
总结的不错!继续加油哈.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

3

主题

6

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2011-8-4
在线时间
0 小时
 楼主| 发表于 2011-8-15 23:10:25 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
谢谢啦,一直相信,坚持就是光明。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2011-8-15 23:28:46 | 显示全部楼层
学东西关键在于练习!
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

8

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2011-8-15
在线时间
3 小时
发表于 2011-8-16 17:16:13 | 显示全部楼层
同意,学东西在于不断的练习!
回复 支持 反对

使用道具 举报

13

主题

63

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
326
金钱
326
注册时间
2013-3-15
在线时间
6 小时
发表于 2013-4-20 17:22:18 | 显示全部楼层
GPIOA->ODR |=(1<<5)和GPIOA->BSRR |=(1<<5)有什么不同?都是PA5输出1
回复 支持 反对

使用道具 举报

2

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2013-7-28
在线时间
0 小时
发表于 2013-9-23 15:22:57 | 显示全部楼层
回复【5楼】bravejt:
---------------------------------
GPIO->BSRR |=(1<<(5+16));为什么加16,你明白的。楼主能不能解释一下,我不明白啊!谢谢啦。。。
回复 支持 反对

使用道具 举报

26

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
182
金钱
182
注册时间
2013-3-22
在线时间
0 小时
发表于 2014-4-26 01:00:01 | 显示全部楼层
回复【6楼】桂电小手:
---------------------------------
这个问题问得很好啊 也很想知道 一直纳闷了很久了  嘿嘿!!
回复 支持 反对

使用道具 举报

26

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
182
金钱
182
注册时间
2013-3-22
在线时间
0 小时
发表于 2014-4-26 01:06:10 | 显示全部楼层
回复【7楼】shenjianhua005:
---------------------------------
加了16 这个1就右移到BR5,也就是寄存器GPIOx->BSRR 的位21  也就是说清零了  输出“0”!!!也就是说这个GPIOx->BSRR是可以置位也可以清零的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-11 08:41

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表