关于STM32 PB3 PB4 如何设置成普通GPIO的配置
关于stm32的GPIO基础介绍

STM32通用GPIO的基础认识:STM32是一款基于ARM Cortex-M内核的微控制器,通用GPIO是STM32中最常用的外设之一。
通用GPIO可以在系统中连接外部器件,如LED、传感器和开关等。
以下是通用GPIO的基础知识:引脚复用:每个STM32芯片都有多个GPIO引脚,这些引脚可以被分配为不同的功能,如通用输入输出(GPIO)、SPI、I2C、USART、TIM等。
引脚复用功能允许单个引脚在不同的模式下使用。
引脚模式:每个GPIO引脚可以配置为输入或输出模式。
在输入模式下,引脚可以被用来读取外部信号,而在输出模式下,引脚可以被用来控制外部器件。
引脚状态:在输出模式下,引脚可以设置为高电平或低电平。
在输入模式下,可以读取引脚的状态。
引脚中断:STM32的GPIO引脚可以配置为触发中断。
例如,在输入模式下,可以配置引脚以在特定事件(如上升沿或下降沿)发生时触发中断。
这可以用于实时响应外部事件。
输出驱动能力:STM32的GPIO引脚可以配置不同的输出驱动能力。
输出驱动能力决定了引脚输出的电流大小。
通常,输出驱动能力越大,引脚可以驱动的负载越大。
内部上拉和下拉:STM32的GPIO引脚可以配置内部上拉或下拉电阻。
这些电阻可以用于保持引脚状态,并防止误触发或外部干扰。
速度和模式:STM32的GPIO引脚可以配置不同的速度和模式,以满足不同的应用需求。
速度指的是引脚切换状态的速度,模式包括推挽模式、开漏模式和复用模式等。
模拟输入:除了数字输入和输出,一些STM32的GPIO引脚还可以用作模拟输入。
这些引脚可以读取模拟信号,例如传感器输出的电压。
外部中断线:STM32的GPIO引脚可以通过外部中断线连接到中断控制器,以便实现更快的中断响应。
AFIO(Alternative Function Input Output)寄存器:AFIO寄存器是一个重要的寄存器,它用于设置GPIO的引脚复用和其他一些外设的功能。
STM32F103单片机GPIO使用步骤

STM32F103单片机GPIO使用步骤“快速上手STM32F103单片机,在完成单片机keil编程环境的配置后,第一个要学会的就是GPIO使用,GPIO的常用功能是输入输出,本文将介绍GPIO的C编程步骤。
”01—输出功能配置使用GPIO的步骤为以下所述:(1)开启使用引脚的时钟,因此STM32单片机为了实现其低功耗,只有在具体某个GPIO口使能时钟后,此处时钟选择需要与下文(2)中GPIO引脚相对应方能使用,具体对应关系查看手册,如图1所示,PC[15:0]表示PC15~PC0,同理PA[15:0]、PB[15:0]、PD[15:0]和PE[15:0]。
GPIOC对应PC[15:0],GPIOC又对应APB2总线。
本文PC13使能时钟为APB2;(2)配置GPIO结构体参数,分别配置输出模式为推挽输出模式,选择GPIO引脚为PC13,输出频率为最高50MHz。
(3)设置输出引脚的具体数值,0或者1,也即高低电平。
图102—keil程序Keil软件中,在User组下添加main.c文件,在该文件下添加如下代码:#include "stm32f10x.h" // 包含头文件,stm32f10x.h的定义文件int main(void){RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE); //使能GPIOC的时钟GPIO_InitTypeDef GPIO_InitStruct; //定义GPIO结构体GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13; //选择GPIO端口,P13GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; //选择GPIO端口速度GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; //选择GPIO端口输出模式,推挽GPIO_Init(GPIOC,&GPIO_InitStruct); //初始化选择GPIOC端口GPIO_ResetBits(GPIOC,GPIO_Pin_13); //P13复位,为0while(1) //无限循环,保证单片机运行状态{}}编译文件,无错误后,可下载程序到单片机中执行。
STM32PB4设置成普通GPIO的配置

注意:还是用以下这条来释放 PB4 吧,因为上面两条会 禁用 SW 和 JTAG,造成无法调试
GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST, ENABLE);
2、正常配置 IO
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4
;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOA, &GPIO_InitStructure);
3、注意:不要忘记在 RCC_Configuration()中开启 AFIO 时钟,
STM32 PB4 设置成普通 GPIO 的配置
因为 STM32F10x 系列的 MCU 复位后,PA13/14/15 & PB3/4 默认配置为 JTAG 功能fig(GPIO_Remap_SWJ_Disable, ENABLE);
或者 GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE); 用这两天其中一条,完全禁用 JTAG+SW-DP 或者屏蔽 JTAG-DP,用来释放各个 io。
STM32学习笔记--GPIO的设置

STM32学习笔记--GPIO的设置STM32 的IO 口可以由软件配置成8 种模式:1、输入浮空2、输入上拉3、输入下拉4、模拟输入5、开漏输出6、推挽输出7、推挽式复用功能8、开漏复用功能STM32 的每个IO 端口都有7 个寄存器来控制。
他们分别是:配置模式的2个32 位的端口配置寄存器CRL 和CRH;2 个32 位的数据寄存器IDR 和ODR;1 个32 位的置位/复位寄存器BSRR;一个16 位的复位寄存器BRR;1 个32 位的锁存寄存器LCKR;这里我们仅介绍常用的几个寄存器,我们常用的IO 端口寄存器只有4 个:CRL、CRH、IDR、ODR。
STM32 的IO 口位配置表如表3.1.1.1 所示:STM32 输出模式配置如表3.1.1.2 所示:该寄存器的复位值为0X4444 4444,从上图可以看到,复位值其实就是配置端口为浮空输入模式。
从上图还可以得出:STM32 的CRL 控制着每个IO 端口(A~G)的低8 位的模式。
每个IO 端口的位占用CRL 的4 个位,高两位为CNF,低两位为MODE。
这里我们可以记住几个常用的配置,比如0X0 表示模拟输入模式(ADC 用)、0X3 表示推挽输出模式(做输出口用,50M 速率)、0X8 表示上/下拉输入模式(做输入口用)、0XB 表示复用输出(使用IO 口的第二功能,50M 速率)。
给个实例,比如我们要设置PORTC 的11 位为上拉输入,12 位为推挽输出。
代码如下:GPIOC->CRH&=0XFFF00FFF;//清掉这2 个位原来的设置,同时也不影响其他位的设置GPIOC->CRH|=0X00038000; //PC11 输入,PC12 输出GPIOC->ODR=1 要想知道某个IO 口的状态,你只要读这个寄存器,再看某个位的状态就可以了。
使用起来是比较简单的。
STM32中使用GPIO的总结(超强)教学内容

S T M32中使用G P I O 的总结(超强)STM32 GPIO使用操作步骤:1.使能GPIO对应的外设时钟例如://使能GPIOA、GPIOB、GPIOC对应的外设时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC , ENABLE);2.声明一个GPIO_InitStructure结构体例如:GPIO_InitTypeDef GPIO_InitStructure;3.选择待设置的GPIO管脚例如:/* 选择待设置的GPIO第7、8、9管脚位,中间加“|”符号 */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 |GPIO_Pin_9;4.设置选中GPIO管脚的速率例如:/* 设置选中GPIO管脚的速率为最高速率2MHz */GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; //最高速率2MHz5.设置选中GPIO管脚的模式例如:/* 设置选中GPIO管脚的模式为开漏输出模式*/GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; //开漏输出模式6. 根据GPIO_InitStructure中指定的参数初始化外设GPIOX例如:/* 根据GPIO_InitStructure中指定的参数初始化外设GPIOC */ GPIO_Init(GPIOC, &GPIO_InitStructure);7.其他应用例:将端口GPIOA的第10、15脚置1(高电平)GPIO_SetBits(GPIOA, GPIO_Pin_10 | GPIO_Pin_15);例:将端口GPIOA的第10、15脚置0(低电平)GPIO_ResetBits(GPIOA, GPIO_Pin_10 | GPIO_Pin_15);GPIO寄存器:寄存器描述CRL 端口配置低寄存器CRH 端口配置高寄存器IDR 端口输入数据寄存器ODR 端口输出数据寄存器BSRR 端口位设置/复位寄存器BRR 端口位复位寄存器LCKR 端口配置锁定寄存器EVCR 事件控制寄存器MAPR 复用重映射和调试I/O 配置寄存器EXTICR 外部中断线路0-15配置寄存器GPIO库函数:函数名描述GPIO_DeInit 将外设GPIOx寄存器重设为缺省值GPIO_AFIODeInit 将复用功能(重映射事件控制和EXTI设置)重设为缺省值GPIO_Init 根据GPIO_InitStruct中指定的参数初始化外设GPIOx 寄存器GPIO_StructInit 把GPIO_InitStruct中的每一个参数按缺省值填入GPIO_ReadInputDataBit 读取指定端口管脚的输入GPIO_ReadInputData 读取指定的GPIO端口输入GPIO_ReadOutputDataBit 读取指定端口管脚的输出GPIO_ReadOutputData 读取指定的GPIO端口输出GPIO_SetBits 设置指定的数据端口位GPIO_ResetBits 清除指定的数据端口位GPIO_WriteBit 设置或者清除指定的数据端口位GPIO_Write 向指定GPIO数据端口写入数据GPIO_PinLockConfig 锁定GPIO管脚设置寄存器GPIO_EventOutputConfig 选择GPIO管脚用作事件输出GPIO_EventOutputCmd 使能或者失能事件输出GPIO_PinRemapConfig 改变指定管脚的映射GPIO_EXTILineConfig 选择GPIO管脚用作外部中断线路库函数:函数GPIO_DeInit功能描述:将外设GPIOx寄存器重设为缺省值例:GPIO_DeInit(GPIOA);函数GPIO_AFIODeInit功能描述:将复用功能(重映射事件控制和EXTI设置)重设为缺省值例:GPIO_AFIODeInit();函数GPIO_Init功能描述:根据GPIO_InitStruct中指定的参数初始化外设GPIOx寄存器例:GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_InitTypeDef structureGPIO_InitTypeDef定义于文件“stm32f10x_gpio.h”:typedef struct{u16 GPIO_Pin;GPIOSpeed_TypeDef GPIO_Speed;GPIOMode_TypeDef GPIO_Mode;}GPIO_InitTypeDef;GPIO_Pin该参数选择待设置的GPIO管脚,使用操作符“|”可以一次选中多个管脚。
STM32开发板例程讲解之二:GPIO的描述和配置,GPIOIOTG例程精讲ch...

#if 0 // 配置所有未使用GPIO引脚为输入模式(浮空输入),这样可以降低功耗,并且提高器件的抗EMI/EMC 的性能
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE, ENABLE);
//armfly :注释掉的原因是当代码在外部存储器运行时,GPIOD,E,F,G部分IO用于FSMC,因此对这些IO不能重置,否则导致取指异常 // GPIO_Init(GPIOD, &GPIO_InitStructure); // GPIO_Init(GPIOE, &GPIO_InitStructure); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |
STM32入门教程--GPIO
STM32 GPIO使用方法一、STM32 GPIO简介GPIO即通用I/O(输入/输出)端口,是STM32可控制的引脚。
STM32芯片的GPIO引脚与外部设备连接起来,可实现与外部通讯、控制外部硬件或者采集外部硬件数据的功能。
以STM32F407为例,其为F4系列是基于Cortex-M4内核,共有7组IO。
分别为GPIOA~GPIOG,每组IO有16个IO口,共有112个IO口通常称为 PAx、PBx、PCx、PDx、PEx、PFx、PGx,其中x为0-15。
STM32 GPIO的复用:STM32 有很多的内置外设,这些外设的外部引脚都是与 GPIO 共用的。
也就是说,一个引脚可以有很多作用,但是默认为IO口,如果想使用一个 GPIO内置外设的功能引脚,就需要GPIO的复用,那么当这个GPIO 作为内置外设使用的时候,就叫做复用。
比如说串口就是GPIO复用为串口。
二、GPIO的工作模式1、4种输入模式(1)GPIO_Mode_IN_FLOATING 浮空输入(2)GPIO_Mode_IPU 上拉输入(3)GPIO_Mode_IPD 下拉输入(4)GPIO_Mode_AIN 模拟输入2、4种输出模式(1)GPIO_Mode_Out_OD 开漏输出(带上拉或者下拉)(2)GPIO_Mode_AF_OD 复用开漏输出(带上拉或者下拉)(3)GPIO_Mode_Out_PP 推挽输出(带上拉或者下拉)(4)GPIO_Mode_AF_PP 复用推挽输出(带上拉或者下拉)3、4种最大输出速度(1)2MHZ (低速)(2)25MHZ (中速)(3)50MHZ (快速)(4)100MHZ (高速)关于它们的定义,都在 stm32f4xx_gpio.h 中,都为结构体形式的定义三、GPIO内部结构a、保护二极管: IO引脚上下两边两个二极管用于防止引脚外部过高、过低的电压输入,当引脚电压高于VDD_FT时,上方的二极管导通,当引脚电压低于VSS时,下方的二极管导通,防止不正常电压引入芯片导致芯片烧毁b、上拉、下拉电阻:控制引脚默认状态的电压,开启上拉的时候引脚默认电压为高电平,开启下拉的时候引脚默认电压为低电平c、TTL施密特触发器:基本原理是当输入电压高于正向阈值电压,输出为高;当输入电压低于负向阈值电压,输出为低;IO口信号经过触发器后,模拟信号转化为0和1的数字信号也就是高低电平并且是TTL电平协议这也是为什么STM32是TTL电平协议的原因d、 P-MOS管和N-MOS管:信号由P-MOS管和N-MOS管,依据两个MOS管的工作方式,使得GPIO具有“推挽输出”和“开漏输出”的模式 P-MOS管高电平导通,低电平关闭,下方的N-MOS低电平导通,高电平关闭注:VDD_FT 代表IO口,兼容3.3V和5V,如果没有标注“FT”,就代表着不兼容5V (在芯片数据手册的引脚定义中,会看到有“I/O电平”一列有FT即为支持5V)开漏输出和推挽输出的区别:推挽输出:可以输出强高低电平,连接数字器件,推挽结构一般是指两个三极管分别受两互补信号的控制,总是在一个三极管导通的时候另一个截止.开漏输出:可以输出强低电平,高电平得靠外部电阻拉高。
STM32引脚使用选择注意
stm32有些管脚它上电默认的功能不是通用GPIO,比如JTAG与SWJ调试管脚,所以,如果你想使用这几个管脚作为通用IO的话,就必须将JTAG与SWJ功能关闭,以及开启AFIO时钟。
(AFIO 时钟未设置,GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE) 这句不会生效,也就是要先设置时钟,才能配置相应端口,后变换了下顺序,先设RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);再调用GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE)就完美可以了)最近博主用STM32F103C8T6做了一个温度测控模块,用到PB3,PB4,PA15等引脚控制外设。
发现不管怎么配置,这三个引脚都不能置零。
后来发现是包括这三个引脚在内的PB3,PB4,PA13,PA14,PA15是特殊的IO口,用作JTAG/SWD仿真器的调试接口(不能直接使用)。
其中PA13,PA14分别作为SWD调试的SWIO 和SWCLK;PB3,PB4,PA13,PA14,PA15共同用于JTAG。
这五个引脚的中英文描述如下图所示,图片来源于STM32F1参考手册:这五个IO引脚非常特殊,正常情况下作为SWJ仿真器的调试引脚,如果要作为普通IO口使用需要特别的配置。
以PA13引脚为例,该引脚在STM32F1数据手册中的描述如下图:相较与其他的普通IO,PA13的Main function 为JTMS-SWDIO。
反而普通IO口的功能在Alternate functions中的remap里。
也就是说PA13要想当做普通IO口使用,就必须使用它复用功能中的重映射。
因此就需要这样的两步操作:一.在时钟配置中打开复用时钟:RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Pe riph_AFIO,ENABLE);二.对PA13引脚进行重映射:GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);步骤一比较好理解,这里重点叙述下步骤二的重映射操作。
STM32引脚JTDO、JNTRST与JTDI作为普通IO口使用配置
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
GPIO_Remap_SWJ_JTAGDisable已在“stm32f10x_gpio.h”文件中进行了宏定
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 |
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
/* Push-pill output,it can be other output types */
GPIO_ResetBits(GPIOB, GPIO_Pin_4);// PB4 is set to0;
tips:感谢大家的阅读,本文由我司收集整编。仅供参阅!
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
/* Disable JLink, enable SW */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA“
RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO,ENABLE);
STM32引脚JTDO、JNTRST与JTDI作为普通IO口
使用配置
使用Jlink向STM32烧录程序时,需要使用6个芯片的引脚(以
STM32F103C8T6为例),分别是
PB4/JNTRST、PB3/JTDO、PA13/JTMS、PA14/JTCK、PA15/JTDI、NRST。标
STM32中使用GPIO的总结计划超强.doc
STM32 GPIO使用操作步骤:使能 GPIO对应的外设时钟例如: // 使能 GPIOA、GPIOB、GPIOC对应的外设时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB| RCC_APB2Periph_GPIOC , ENABLE);声明一个 GPIO_InitStructure结构体例如:GPIO_InitTypeDef GPIO_InitStructure;选择待设置的GPIO管脚例如: /*选择待设置的GPIO7、8、9 管脚位,中间加“|符”号*/GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9;4.设置选中 GPIO管脚的速率例如: /*设置选中GPIO管脚的速率为最高速率2MHz */GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; // 最高速率 2MHz5.设置选中 GPIO管脚的模式例如: /*设置选中GPIO管脚的模式为开漏输出模式*/GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;// 开漏输出模式6. 根据 GPIO_InitStructure中指定的参数初始化外设GPIOX例如: /*根据GPIO_InitStructure中指定的参数初始化外设GPIOC */GPIO_Init(GPIOC, &GPIO_InitStructure);7.其他应用例:将端口 GPIOA的10、15 脚置 1(高电平)GPIO_SetBits(GPIOA, GPIO_Pin_10 | GPIO_Pin_15); 例:将端口 GPIOA的10、15 脚置 0(低电平)GPIO_ResetBits(GPIOA, GPIO_Pin_10 | GPIO_Pin_15); GPIO寄存器:寄存器描述CRL端口配置低寄存器CRH端口配置高寄存器IDR端口输入数据寄存器ODR端口输出数据寄存器BSRR端口位设置 / 复位寄存器BRR端口位复位寄存器LCKR端口配置锁定寄存器EVCR事件控制寄存器MAPR复用重映射和调试I/O配置寄存器EXTICR 外部中断线路 0-15 配置寄存器GPIO库函数:函数名描述GPIO_DeInit将外设GPIOx寄存器重设为缺省值GPIO_AFIODeInit将复用功能(重映射事件控制和EXTI设置)重设为缺省值GPIO_Init根据GPIO_InitStruct中指定的参数初始化外设GPIOx寄存器GPIO_StructInit 把 GPIO_InitStruct中的每一个参数按缺省值填入GPIO_ReadInputDataBit 读取指定端口管脚的输入GPIO_ReadInputData读取指定的GPIO端口输入GPIO_ReadOutputDataBit 读取指定端口管脚的输出GPIO_ReadOutputData读取指定的GPIO端口输出GPIO_SetBits设置指定的数据端口位GPIO_ResetBits清除指定的数据端口位GPIO_WriteBit设置或者清除指定的数据端口位GPIO_Write向指定GPIO数据端口写入数据GPIO_PinLockConfig锁定GPIO管脚设置寄存器GPIO_EventOutputConfig选择GPIO管脚用作事件输出GPIO_EventOutputCmd使能或者失能事件输出GPIO_PinRemapConfig改变指定管脚的映射GPIO_EXTILineConfig选择GPIO管脚用作外部中断线路库函数:函数 GPIO_DeInit功能描述:将外设GPIOx寄存器重设为缺省值例:GPIO_DeInit(GPIOA);函数 GPIO_AFIODeInit功能描述:将复用功能(重映射事件控制和EXTI设置)重设为缺省值例:GPIO_AFIODeInit();函数 GPIO_Init功能描述:根据GPIO_InitStruct中指定的参数初始化外设GPIOx寄存器例:GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_InitTypeDef structureGPIO_InitTypeDef定义于文件“ stm32f10x_gpio.h:”typedef struct{u16 GPIO_Pin;GPIOSpeed_TypeDef GPIO_Speed;GPIOMode_TypeDef GPIO_Mode;}GPIO_InitTypeDef;GPIO_Pin该参数选择待设置的 GPIO管脚,使用操作符“| 可”以一次选中多个管脚。