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

发布者:PeacefulAura最新更新时间:2020-04-29 来源: eefocus关键字: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);

关键字:STM32  固件库  GPIO  基本使用 引用地址:STM32基于固件库学习笔记(1)GPIO基本使用

上一篇:STM32CubeMX5.1.0使用教程,以STM32L431为例(三):串口通信
下一篇:stm32之GPIO_Remap_SWJ_Disable之后无法使用swd下载

小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved