常用的GPIO的配置(基于STM32F103C8xx)

绿色:注释 紫色:实际使用代码

//开启GPIOB的时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

①可选输入值:RCC_APB2Periph_GPIOA 或者 RCC_APB2Periph_GPIOB 或者 RCC_APB2Periph_ALL

②可选输入值:ENABLE 或者 DISABLE

/*GPIO初始化*/
/*typedef struct
{
uint16_t GPIO_Pin;
GPIOSpeed_TypeDef GPIO_Speed;
GPIOMode_TypeDef GPIO_Mode;
}GPIO_InitTypeDef; */

//定义于文件"stm32f10x_gpio.h",不需要添加!!!结构体类型(类似int的用法),用于配置STM32微控制器的GPIO端口的初始化参数

GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
/*

GPIO_Mode_AIN //模拟输入:GPIO无效,引脚直接接入内部ADC
GPIO_Mode_IN_FLOATING //浮空输入:可读取引脚电平,若引脚悬空,则电平不确定;一般实际运用时,引脚不建议悬空,易受干扰。 通俗讲就是让管脚什么都不接,浮空着
GPIO_Mode_IPD //下拉输入:可读取引脚电平,内部连接下拉电阻,悬空时默认低电平
GPIO_Mode_IPU //上拉输入:可读取引脚电平,内部连接上拉电阻,悬空时默认高电平
GPIO_Mode_Out_OD //开漏输出:可输出引脚电平,高电平为高阻态,低电平接VSS
GPIO_Mode_Out_PP //推挽输出:可输出引脚电平,高电平接VDD,低电平接VSS
GPIO_Mode_AF_OD //复用开漏输出:可以理解为GPIO口被用作第二功能时的配置情况,高电平为高阻态,低电平接VSS
GPIO_Mode_AF_PP //复用推挽输出:可以理解为GPIO口被用作第二功能时的配置情况,高电平接VDD,低电平接VSS

*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_8 | GPIO_Pin_5 | GPIO_Pin_4 | GPIO_Pin_3; //选择待设置的 GPIO 管脚,使用操作符"|"可以一次选中多个管脚
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
/*GPIO_Speed_10MHz 最高输出速率 10MHz
GPIO_Speed_2MHz 最高输出速率 2MHz
GPIO_Speed_50MHz 最高输出速率 50MHz*/
GPIO_Init(GPIOB, &GPIO_InitStructure);

/*设置GPIO初始化后的默认电平*/
GPIO_SetBits(GPIOB, GPIO_Pin_9 | GPIO_Pin_8);//设置指定的数据端口位,给PB8、PB9高电平:1
GPIO_ResetBits(GPIOA, GPIO_Pin_6 | GPIO_Pin_7);//清除指定的数据端口位,给PA6、PA7低电平:0

GPIO_WriteBit(GPIOA, GPIO_Pin_9 | GPIO_Pin_8, Bit_SET);

//设置或者清除指定的数据端口位
Bit_RESET: 清除数据端口位 0
Bit_SET: 设置数据端口位 1

GPIO_Write(GPIOB, ~0x0008); //写入端口输出数据寄存器的值

可以一次将GPIO中16个IO进行高低电平赋值 ~:取反

GPIO_DeInit(GPIOA); //可以使GPIOA复位

GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct); //给结构体变量赋一个默认值

GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0); //读取指定端口管脚的输入
GPIO_ReadInputData(GPIOB); //读取指定的 GPIO 端口输入
GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_0); //读取指定端口管脚的输出
GPIO_ReadOutputData(GPIOB); //读取指定的 GPIO 端口输出
/* 实例:LED取反
if (GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_0) == 0)
{
GPIO_SetBits(GPIOA, GPIO_Pin_0);
}
else
{
GPIO_ResetBits(GPIOA, GPIO_Pin_0);
}
*/

//锁定 GPIO 管脚设置寄存器

GPIO_PinLockConfig(GPIOA, GPIO_Pin_0 | GPIO_Pin_1);

//选择 GPIO 管脚用作事件输出
GPIO_EventOutputConfig(GPIO_PortSourceGPIOC, GPIO_PinSource6);

//使能或者失能事件输出
GPIO_EventOutputCmd(ENABLE 或者 DISABLE);

//改变指定管脚的映射
GPIO_PinRemapConfig(uint32_t GPIO_Remap, ENABLE 或者 DISABLE);

//选择 GPIO 管脚用作外部中断线路
GPIO_EXTILineConfig(GPIO_PortSource_GPIOB, GPIO_PinSource8);

相关推荐
点灯小铭几秒前
基于单片机的自动存包柜设计
数据库·单片机·mongodb·毕业设计·课程设计
学生董格2 小时前
[嵌入式embed]RT-ThreadStudio-STM32F103C8T6(江协科技)+移植RT-Thread v4.11模版
科技·stm32·嵌入式硬件
szxinmai主板定制专家3 小时前
一种基于 RK3568+AI 的国产化充电桩安全智能交互终端的设计与实现,终端支持各种复杂的交互功能和实时数据处理需求
arm开发·人工智能·嵌入式硬件·安全
萧技电创EIIA3 小时前
基于stc12单片机的PID恒温烙铁设计
单片机·嵌入式硬件·pid过程控制
szxinmai主板定制专家4 小时前
基于 ZYNQ ARM+FPGA+AI YOLOV4 的电网悬垂绝缘子缺陷检测系统的研究
arm开发·人工智能·嵌入式硬件·yolo·fpga开发
光子物联单片机4 小时前
STM32G474单片机开发入门(八)内部FLASH详解及读写实战
stm32·单片机·嵌入式硬件·mcu
BreezeJuvenile5 小时前
通用定时器_输入捕获介绍及案例实操
stm32·单片机·嵌入式硬件·输入捕获·通用定时器
时空自由民.6 小时前
无人机系统耗电,低功耗管理问题解决方法(chatgpt)
单片机·嵌入式硬件·无人机
时空自由民.6 小时前
无人机系统耗电,低功耗管理问题解决方法(腾讯元宝)
单片机·嵌入式硬件·无人机
清风6666667 小时前
基于单片机的双档输出数字直流电压源设计
单片机·mongodb·毕业设计·nosql·课程设计