STM32基于固件库学习笔记(1)GPIO基本使用

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_43993734/article/details/101227749

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(官方固件库)

链接:https://pan.baidu.com/s/1Zx2TSh_kEnyG6iNu7XNeAQ  提取码:4lkx

猜你喜欢

转载自blog.csdn.net/weixin_43993734/article/details/101227749
今日推荐