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);
上一篇:STM32CubeMX5.1.0使用教程,以STM32L431为例(三):串口通信
下一篇:stm32之GPIO_Remap_SWJ_Disable之后无法使用swd下载
设计资源 培训 开发板 精华推荐
- AM1DR-0505SH30Z 5V 1 瓦 DC-DC 转换器的典型应用
- 使用 Cypress Semiconductor 的 CYPD1103-35FNXI 的参考设计
- 用于炊具的 PSoC 嵌入式系统
- 团子恐龙会唱歌
- LTC3895EFE 高效 140V 至 24V 降压转换器的典型应用电路
- LM217 限流 6V 充电器稳压器的典型应用
- OpenLRS
- LM358DMR2G 双四路滤波器运算放大器的典型应用
- 4455-868-PDK,用于 Si4455 868-MHz 射频收发器的 EZRadio 双向链路开发套件
- 使用 ROHM Semiconductor 的 BD9A600MUV 的参考设计