找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2393|回复: 0
打印 上一主题 下一主题
收起左侧

STM32 GPIO简介

[复制链接]
跳转到指定楼层
楼主

GPIO口是MCU和外界进行交流的唯一方式。让我们看看底层文件。#define AHB1PERIPH_BASE       (PERIPH_BASE + 0x00020000);这一句表式了PERIPH_BASE + 0x00020000这个地址的名字就是 AHB1PERIPH_BASE  。他是以宏定义的方式命名的。让我们一层层来拨。#define GPIOF_BASE            (AHB1PERIPH_BASE + 0x1400),这一句话表明了GPIOF是这AHB1这个基地址的。#define GPIOF               ((GPIO_TypeDef *) GPIOF_BASE)//这是类型强转。把GPIO基地址装换为一个GPIO_TypeDef类型的指针,这个指针指向的就是GPIO_TypeDef里面的首地址。我们可以通过结构体指针来访问里面的元素。最终GPIO在预编译的时候会原地展开成一个地址,我们只不过把这个地址起了一个名字叫GPIOF。大家有兴趣可以看看芯片手册地址的划分。


GPIO的作用:通用输入/输出;也就是输出一个高电平,或者电平,来控制外围电路。比如LED,BEEP,SMG等。
                  作为复用功能(输入输出):首先是复用,在一款MCU上有时候为了节约成本,我们可以用一个引脚在不同的时候有不同的功能,这样节约了                   成本。比如串口通信TX,RX复用,通用定时器的输入捕获,输出比较。后面我们会具体来解释。
                   作为模拟功能:有时候我们需要的是得到一个模拟量,而不是一个具体的高低电平,此时我们需要这个功能,比如ADC采集。

GPIO配置过程:第一步:打开GPIO对应时钟(在芯片手册上有外设的时钟分布RCC->AHB1ENR |= (1<<5);第二步:选择IO端口模式,我一输出为例:
GPIOF->MODER &=~(3<<(2*n));GPIOF->MODER |=(1<<(2*n));前面的表达式里面的2*n代表2个位表示一个IO口,这2个位写0,第二个表达式表示这2个位写01,代表是输出模式。具体的模式对应得值,自己看数据手册。第三步:设置输出类似,一般设为推完输出。GPIOF->OTYPER &=~(1<<n);
第4步:设置上下拉电阻GPIOF->PUPDR &=~(3<<(2*n));我这是没有上下拉。最后一步:如果外设是低电平有效那就输出高电平,防止初始化就有了一个低电平。

GPIOx_OSPEEDR)数据手册上像这种模式的“ _”改成->,然后KEIL里面就会出现寄存器让我们选择。不要忘记X也要改。比如ABCD等。



void led_init(int n)
{
/***开GPIOF时钟***/
RCC->AHB1ENR |= (1<<5);
/***开GPIOC时钟**/
RCC->AHB1ENR |= (1<<2);
/***选择输出模式***/
GPIOF->MODER &=~(3<<(2*n));
GPIOF->MODER |=(1<<(2*n));
/***设置推完输出***/
GPIOF->OTYPER &=~(1<<n);
/**输出速度(50MHZ)***/
GPIOF->OSPEEDR &=~(3<<(2*n));
GPIOF->OSPEEDR |=(2<<(2*n));
/***没有上下拉***/
GPIOF->PUPDR &=~(3<<(2*n));
/**数据输出***/
GPIOF->ODR |=(1<<n);
/**同上只不过这是GPIOC***/
GPIOC->MODER &=~(3<<(2*n));
GPIOC->MODER |=(1<<(2*n));
GPIOC->OTYPER &=~(1<<n);
GPIOC->OSPEEDR &=~(3<<(2*n));
GPIOC->OSPEEDR |=(2<<(2*n));
GPIOC->PUPDR &=~(3<<(2*n));
GPIOC->ODR |=(1<<n);

}

今天就到这里,GPIO这一章节看着难,还有什么开漏,推完,上拉下拉,对于一个软件工程师,大家只要了解一下就可以了。当然知道的越多就肯定越好,这里CSDN论坛有关于这方面的内容,我以前也是在里面看的,大家有兴趣可以去了解。明天我写流水灯的2种写法,还有蜂鸣器。GPIO一般都是独立按键,LED,数码管,独立按键,这4个模块。好了今天就到这里,谢谢大家。

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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