STM32基于固件库学习笔记GPIO基本使用
作者:互联网
GPIO初始化函数:
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
/*
第一个参数是用来指定 GPIO,取值范围为 GPIOA~GPIOG
第二个参数为初始化参数结构体指针,结构体类型为 GPIO_InitTypeDef
*/
GPIO_InitTypeDef结构体
typedef struct
{ uint16_t GPIO_Pin;//配置端口管脚
GPIOSpeed_TypeDef GPIO_Speed;// IO 口速度设置 输出速度(只有输出模式才配置速度)
GPIOMode_TypeDef GPIO_Mode;// IO 端口输入输出模式
}GPIO_InitTypeDef;
IO 端口输入输出模式结构体
typedef enum
{ GPIO_Mode_AIN = 0x0, //模拟输入
GPIO_Mode_IN_FLOATING = 0x04, //浮空输入
GPIO_Mode_IPD = 0x28, //下拉输入
GPIO_Mode_IPU = 0x48, //上拉输入
GPIO_Mode_Out_OD = 0x14, //开漏输出
GPIO_Mode_Out_PP = 0x10, //通用推挽输出
GPIO_Mode_AF_OD = 0x1C, //复用开漏输出
GPIO_Mode_AF_PP = 0x18 //复用推挽
}GPIOMode_TypeDef;
挂载在 APB2 总线上的外设时钟使能
在固件库"stm32f10x_rcc.h"、"stm32f10x_rcc.c"中有明确定义
//主要有AHB、APB1、APB2三条时钟线,具体挂载在哪一个还得查看stm32f10x_rcc.h
void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);
void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);
IO 口速度设置结构体
typedef enum
{
GPIO_Speed_10MHz = 1,
GPIO_Speed_2MHz,
GPIO_Speed_50MHz
}GPIOSpeed_TypeDef;
程序实现LED闪烁
#include "stm32f10x.h"
//使能 PB,PE 端口时钟
void LED_Ioinit(void)
{
//
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitTypeDef GPIO_ITDef _PB5;
GPIO_ITDef _PB5.GPIO_Pin = GPIO_Pin_5;
GPIO_ITDef _PB5.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_ITDef _PB5.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_ITDef _PB5);
GPIO_SetBits(GPIOB,GPIO_Pin_5); //PB.5 输出高1
//GPIO_ResetBits(GPIOB,GPIO_Pin_5); //PB.5 输出低0
}
void delay_ms(u16 time)
{
u16 i = 0;
while(time--)
{
i = 12000;
while(i--);
}
}
int void(main)
{
LED_Ioinit();
while(1)
{
GPIO_ResetBits(GPIOB,GPIO_Pin_5); //PB.5 输出低0
delay_ms(500);//500ms
GPIO_SetBits(GPIOB,GPIO_Pin_5); //PB.5 输出高1
delay_ms(500);//500ms
}
}
stm32f10x_gpio.h给出的函数
void GPIO_DeInit(GPIO_TypeDef* GPIOx);
void GPIO_AFIODeInit(void);
//初始化IO口函数,
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
//具体的口、功能模式、速度初始化
void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct);
//读取指定端口管脚的输入(返回值:输入端口管脚的值)位
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
//读取指定的GPIO端口输入值(返回值:GPIO输入数据端口值)
uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);
//读取指定端口管脚的输出(返回值:出端口管脚的值)位
uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);//读取指定端口
//设置指定的数据端口为(置1)
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
//清楚指定的数据端口为(置0)
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
//向指定GPIO数据端口写入数据
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);
void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void GPIO_EventOutputConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource);
void GPIO_EventOutputCmd(FunctionalState NewState);
//改变指定管脚分映射()
void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState);
//选择GPIO管脚用作外部中断
void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource);
void GPIO_ETH_MediaInterfaceConfig(uint32_t GPIO_ETH_MediaInterface);
STM32F10x_StdPeriph_Lib_V3.5.0(官方固件库)
标签:TypeDef,Pin,void,端口,STM32,GPIO,固件,GPIOx 来源: https://blog.csdn.net/weixin_43993734/article/details/101227749