STM32学习笔记之GPIO配置问题

发布者:二进制游侠最新更新时间:2017-09-24 来源: eefocus关键字:STM32  GPIO  配置问题 手机看文章 扫描二维码
随时随地手机看文章

一、GPIO配置
(1)GPIO_Mode_AIN模拟输入 
(2)GPIO_Mode_IN_FLOATING浮空输入
(3)GPIO_Mode_IPD下拉输入 
(4)GPIO_Mode_IPU上拉输入 
(5)GPIO_Mode_Out_OD开漏输出
(6)GPIO_Mode_Out_PP推挽输出
(7)GPIO_Mode_AF_OD复用开漏输出 
(8)GPIO_Mode_AF_PP复用推挽输出


GPIO_Speed_10MHz 最高输出速率10MHz 
GPIO_Speed_2MHz 最高输出速率2MHz 
GPIO_Speed_50MHz 最高输出速率50MHz


1.1 I/O口的输出模式下,有3种输出速度可选(2MHz、10MHz和50MHz),这个速度是指I/O口驱动电路的响应速度而不是输出信号的速度,输出信号的速度与程序有关(芯片内部在I/O口的输出部分安排了多个响应速度不同的输出驱动电路,用户可以根据自己的需要选择合适的驱动电路)。通过选择速度来选择不同的输出驱动模块,达到最佳的噪声控制和降低功耗的目的。高频的驱动电路,噪声也高,当不需要高的输出频率时,请选用低频驱动电路,这样非常有利于提高系统的EMI性能。当然如果要输出较高频率的信号,但却选用了较低频率的驱动模块,很可能会得到失真的输出信号。

关键是GPIO的引脚速度跟应用匹配(推荐10倍以上?)。比如:
1.1.1 对于串口,假如最大波特率只需115.2k,那么用2M的GPIO的引脚速度就够了,既省电也噪声小。
1.1.2 对于I2C接口,假如使用400k波特率,若想把余量留大些,那么用2M的GPIO的引脚速度或许不够,这时可以选用10M的GPIO引脚速度。
1.1.3 对于SPI接口,假如使用18M或9M波特率,用10M的GPIO的引脚速度显然不够了,需要选用50M的GPIO的引脚速度。
1.2 GPIO口设为输入时,输出驱动电路与端口是断开,所以输出速度配置无意义。
1.3 在复位期间和刚复位后,复用功能未开启,I/O端口被配置成浮空输入模式。
1.4 所有端口都有外部中断能力。为了使用外部中断线,端口必须配置成输入模式。
1.5 GPIO口的配置具有上锁功能,当配置好GPIO口后,可以通过程序锁住配置组合,直到下次芯片复位才能解锁。

2、推挽输出与开漏输出的区别

推挽输出:可以输出高,低电平,连接数字器件;开漏输出:输出端相当于三极管的集电极.要得到高电平状态需要上拉电阻才行.适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内).
推挽结构一般是指两个三极管分别受两互补信号的控制,总是在一个三极管导通的时候另一个截止.
要实现线与需要用OC(open collector)门电路.是两个参数相同的三极管或MOSFET,以推挽方式存在于电路中,各负责正负半周的波形放大任务,电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小,效率高。输出既可以向负载灌电流,也可以从负载抽取电流

当端口配置为输出时: 
开漏模式:输出 0 时,N-MOS 导通,P-MOS不被激活,输出0。
输出 1 时,N-MOS 高阻, P-MOS不被激活,输出1(需要外部上拉电路);此模式可以把端口作为双向IO使用。
推挽模式:输出 0 时,N-MOS 导通,P-MOS高阻,输出0。
输出 1 时,N-MOS 高阻,P-MOS导通,输出1(不需要外部上拉电路)。

简单来说开漏是0的时候接GND 1的时候浮空推挽是0的时候接GND 1的时候接VCC

3、在STM32中选用IO模式
(1)浮空输入_IN_FLOATING ——浮空输入,可以做KEY识别,RX1
(2)带上拉输入_IPU——IO内部上拉电阻输入
(3)带下拉输入_IPD——IO内部下拉电阻输入 
(4)模拟输入_AIN ——应用ADC模拟输入,或者低功耗下省电
(5)开漏输出_OUT_OD——IO输出0接GND,IO输出1,悬空,需要外接上拉电阻,才能实现输出高电平。当输出为1时,IO口的状态由上拉电阻拉高电平,但由于是开漏输出模式,这样IO口也就可以由外部电路改变为低电平或不变。可以读IO输入电平变化,实现C51的IO双向功能
(6)推挽输出_OUT_PP——IO输出0-接GND, IO输出1 -接VCC,读输入值是未知的
(7)复用功能的推挽输出_AF_PP——片内外设功能(I2C的SCL,SDA)
(8)复用功能的开漏输出_AF_OD——片内外设功能(TX1,MOSI,MISO.SCK.SS)

实例总结:

(1)模拟I2C使用开漏输出_OUT_OD,接上拉电阻,能够正确输出0和1;读值时先
GPIO_SetBits(GPIOB, GPIO_Pin_0);拉高,然后可以读IO的值;使用
GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0);

(2)如果是无上拉电阻,IO默认是高电平;需要读取IO的值,可以使用
带上拉输入_IPU和浮空输入_IN_FLOATING和开漏输出_OUT_OD;

4、IO低功耗:

关于模拟输入&低功耗,根据STM32的低功耗AN(AN2629)及其源文件,在STOP模式下,为了得到尽量低的功耗,确实把所有的IO(包括非A/D输入的GPIO)都设置为模拟输入


5、程序

(1)时钟:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |
RCC_APB2Periph_GPIOC, ENABLE);                                          //时钟使能

(2)IO配置:
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;                                // 引脚模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;           
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;

GPIO_Init(GPIOC,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_15; 
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);

(3)输出输入:

输出0:GPIO_ResetBits(GPIOB,GPIO_Pin_0)
输出1:GPIO_SetBits(GPIOB,GPIO_Pin_0)
输入:GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_7)


关键字:STM32  GPIO  配置问题 引用地址:STM32学习笔记之GPIO配置问题

上一篇:STM32学习笔记之 关于电池检测滤波算法
下一篇:STM32独立看门狗IWDG与窗口看门狗WWDG研究

推荐阅读最新更新时间:2024-03-16 15:38

STM32的ADC用法
AD采样在电路中是一种比较常见的功能,可以用于电池电压检测、传感器值读取、信号采集等。STM32的ADC,由于引入了DMA,以及多种触发源,功能自然强大,用法也多种多样。今天,我们简单说说在单通道情况下,AD采样的几种用法。 1、AD单次转换+软件启动 最基本的用法,通过程序启动AD,AD采集一次,我们就去读一次。这种情况,建议开启AD转换完成中断,在中断中读出AD值并做处理。 这种方式的优点是配置简单,缺点么,太T么简单~ 初始化的时候,启动一次。然后在主循环里,每隔一秒启动一次。 在中断回调函数里,进行相关处理: 电脑输出如下: 2、连续转换+软件启动 在方法1的基础上做调整,从单次转换,变成连续转换。
[单片机]
<font color='red'>STM32</font>的ADC用法
STM32的精准延迟
这里主要是使用Systick 时钟 来实现精准延迟,它本质也是一个 定时器 ,使用时只需复制粘贴使用,这里是使用72M的 STM32 F103ZET6,不同型号需要自行修改对应参数。 #include stm32f10x.h static uint8_t D_us=0; //微妙系数 static uint16_t D_ms=0; //毫秒系数 void Delay_Init(void) { SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); D_us = SystemCoreClock/8000000; D_ms = (uint16
[单片机]
STM32输入捕获--“PWM输入模式”(可拓展多路同时捕获)
前言 博文基于STM32F103ZET6和标准固件库V3.5.0在MDK5环境下开发; 本博文只讨论输入捕获的PWM输入模式,这个模式是STM32输入捕获检测脉宽和频率的一种硬件处理机制,说白了就是STM32芯片专门用来进行对PWM进行捕获的一个功能;此方法相比较于传统的PWM的捕获方法,大大减小了代码量,提高了检测效率,而实际上对于PWM信号的检测还有其他方法(下面我会介绍,就是原子教程提供的方法),并且关于繁琐的寄存器的介绍这里就不多说了,有兴趣的话可以直接去我的另外一个博客里去看: https://blog.csdn.net/wuyuzun/article/details/73135662 ;(备注:此链接里的博客里有一个配
[单片机]
<font color='red'>STM32</font>输入捕获--“PWM输入模式”(可拓展多路同时捕获)
STM8中GPIO的12种模式
(1)GPIO_Mode_In_FL_No_IT:浮空输入无中断 (2)GPIO_Mode_In_PU_No_IT:上拉输入无中断 (3)GPIO_Mode_In_FL_IT:浮空输入有中断 (4)GPIO_Mode_In_PU_IT :上拉输入有中断 (5)GPIO_Mode_Out_OD_Low_Fast :开漏-输出低-高速 Output open-drain, low level, 10MHz (6)GPIO_Mode_Out_PP_Low_Fast :推挽-输出低-高速 Output push-pull, low level, 10MHz (7)GPIO_Mode_Out_OD_Low_Slow :开漏-
[单片机]
STM32入门系列-开发工具keil5安装
主要介绍如下三部分内容: keil5软件获取 keil5安装 安装STM32芯片包 软件获取 可以通过搜索引擎搜索关键字“KEIL5下载”,找到其官方网站http://www.keil.com。我们这里使用MDK5.14版本,如果后面出了更高的版本选择性升级即可,不过也没有必要什么都追求最新的,这一个软件用着习惯就行。 登录armkeil官方网站,网站首页有软件下载连接,在这里我们选择MDK-Arm。会让你先注册,注册完成之后就可以开始下载了。 软件安装 安装此软件时一定要注意以下几点: 安装路径不能带中文,必须是英文路径。 安装目录不能跟51的KEIL或者KEIL4冲突,三者目录必须分开。 KE
[单片机]
<font color='red'>STM32</font>入门系列-开发工具keil5安装
STM32 printf 方法重定向到串口UART
在嵌入式系统中调试代码是很麻烦的一件事, 如果能方便地输出调试信息(与调试者交互), 能使极大加快问题排查的过程. 串口在嵌入式领域是一个比较重要的通讯接口. 因为没有显示设备, 在单片机的程序里调用printf()打印内容是不可见的,但我们可以利用它的外设来实现printf(),比如串口, 串口基本上大多数单片机都有, 通常用串口来打印内容. 通过重写fputc()函数来实现. fputc()是printf()的底层函数, 通过它把要打印的数据发送到串口上去. 不使用 MicroLib的普通方式 禁用半主机模式, 禁用了半主机模式才能使用标准库函数printf()打印信息到串口 说明: 半主机模式是ARM单片机的一种调试机制
[单片机]
STM32开发笔记11: 在Keil中使用C++进行程序设计
单片机型号:STM32F030R8 希望在Keil中使用C++进行程序设计,开始时,总是报错,经过仔细分析,原因时Keil在默认情况下不支持C++进行程序设计。本文将介绍在Keil中使用C++进行程序设计的方法。 1、在Keil中使用C++进行程序设计,首先需要系统支持,如下图所示。 2、建立类,需要2个文件,cpp和hpp,在hpp中对类进行描述,在cpp中完成函数实现。 依循上述方法就可以使用C++进行程序设计了。
[单片机]
<font color='red'>STM32</font>开发笔记11: 在Keil中使用C++进行程序设计
意法半导体的芯片获HTEC穿戴式心脏记录仪采用
横跨多重电子应用领域、全球领先的半导体供应商意法半导体(STMicroelectronics,简称ST;纽约证券交易所代码:STM)拥有性能强大的STM32微控制器,可保证HTEC穿戴式心电图记录仪(ECG recorder, electrocardiogram recorder)能够长时间持续运行,远程监测心脏健康状况。 全球有数百万名不同年龄段的患者受到心律不齐或心跳异常等不同类型心脏疾病的困扰。通过及时准确的诊断,多数心律失常症状均能够被有效治疗,并能将死亡率降至最低。标准Holter动态心律监视器必须在记录后第二天早晨交给医生,以检查病患过去24小时的心率状况,而基于STM32的3导(3-lead)心电图记录
[医疗电子]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved