首页 > 其他分享 >操纵GPIO

操纵GPIO

时间:2023-04-05 19:47:48浏览次数:30  
标签:TypeDef Pin 操纵 uint16 Mode GPIO 外设

开启外设时钟

使用复位和时钟控制RCC驱动程序
(stm32f10x_rcc.c)


有3个针对不同总线连接的外设时钟命令函数
• RCC_AHBPeriphClockCmd
• RCC_APB1PeriphClockCmd
• RCC_APB2PeriphClockCmd


GPIO通过APB2总线连接系统
开启GPIO外设时钟的函数
RCC_APB2PeriphClockCmd

 

如:开启GPIOA外设时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

 

GPIO的初始化结构类型 GPIO_InitTypeDef

typedef struct
 { uint16_t GPIO_Pin;
/* 指定配置的GPIO引脚 */
 GPIOSpeed_TypeDef GPIO_Speed;
 /* 指定GPIO引脚输出的最高频率 */
 GPIOMode_TypeDef GPIO_Mode;
 /* 指定GPIO引脚配置的工作模式 */
 }GPIO_InitTypeDef;

 

GPIO_InitTypeDef成员1:GPIO_Pin

要进行配置的GPIO引脚编号
其值是常量GPIO_Pin_y(y是0…15和ALL)
#define GPIO_Pin_0 ((uint16_t)0x0001)
 /*!< Pin 0 selected */
#define GPIO_Pin_1 ((uint16_t)0x0002)
 /*!< Pin 1 selected */
……
#define GPIO_Pin_15 ((uint16_t)0x8000)
 /*!< Pin 15 selected */
#define GPIO_Pin_All ((uint16_t)0xFFFF)
 /*!< All pins selected */

 

如:PA0—PA7均使用
GPIO_IntStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;

 

GPIO_InitTypeDef成员2:GPIO_Speed

定义在枚举类型GPIOSpeed_TypeDef 中
typedef enum
{ GPIO_Speed_10MHz = 1,
 GPIO_Speed_2MHz,
 // 不赋值的枚举变量自动加1,故此常量值为2
 GPIO_Speed_50MHz // 常量值为3
}GPIOSpeed_TypeDef;


选择最高输出频率
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

 

 

GPIO_InitTypeDef成员3:GPIO_Mode

定义在枚举类型GPIOMode_TypeDef 中
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;


选择工作模式为推挽输出
GPIO_InitStructure.GPIO_Mode= GPIO_Mode_Out_PP;

 

根据设定参数初始化 GPIOA

 

 

控制外设工作

外设驱动库提供控制外设工作的有关函数
对GPIO主要是输入和输出数据


本例中只需要输出函数,例如
• 字输出GPIO_Write函数
• 位输出GPIO_WriteBit函数
• 置位GPIO_SetBits函数
• 复位GPIO_ResetBits函数

void GPIO_SetBits (GPIO_TypeDef *GPIOx,uint16_t GPIO_Pin)
void GPIO_ResetBits (GPIO_TypeDef *GPIOx,uint16_t GPIO_Pin)

 

 

 

编写用户文件

初始化结构体 GPIO_InitTypeDef 类型 -- led.c
初始化库函数 GPIO_Init() -- led.c
开启外设时钟 -- led.c
控制IO输出高、低电平 - led.c,led.h,main.c

 

Led.c

 

Led.h

 

main.c

 

标签:TypeDef,Pin,操纵,uint16,Mode,GPIO,外设
From: https://www.cnblogs.com/wxk1213/p/17290671.html

相关文章

  • stm32-----01初识GPIO
    GPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitTypeDef*GPIO_InitStruct)  -----使用结构体的参数来初始化GPIO口,一般初始化外设都用这个函数完成先定义一个结构体变量给结构体赋值调用这个函数  GPIO的4个写入函数GPIO_SetBits(GPIO_TypeDef*GPIOx,uint16_tGP......
  • GPIO原理与寄存器
    GPIO的工作方式输入浮空输入模式输出缓冲器被禁止,施密特触发输入被激活,不接上拉和下拉电阻,出现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器。 上拉输入模式输出缓冲器被禁止,施密特触发输入被激活,上拉电阻接通,不接下拉电阻,当I/O引脚无输入信号时,读取到的数据为1,......
  • 读取和修改GPIO配置参数的ADB命令
    1、读取每个GPIO的参数adbshellcat/sys/devices/virtual/misc/mtgpio/pin打印出来的参数从左到右分别是Pin:modepullseldindoutpullendirdinv(inversion) 2、修改GPIO的参数adbshellecho-w=[pin]:[mode][pullsel][din][dout][pull......
  • rk3399 gpio 设置
    rk3399GPIO的操作方法RK3399GPIO分为4个大组0~4,每个大组分为4个小组(A,B,C,D),比如GPIO0有A,B,C,D四个小组,每个小组有A0~A7个gpio一个GPIO需要三类功能支持:gpio时钟,gpio输入输出,这个pin要设置为gpio功能(复用)GPIO寄存器介绍数据寄存器,用来设置某一组(A,B,C,D)的输出......
  • 雅达利给iPad游戏配备的街机操纵杆
    很多用户都想着用他们的iPad玩游戏,雅达利认为他们可以做一个iPad的附件来帮用户实现。我想该公司努力的成果是让游戏尽可能地怀旧,比如你可以在上面玩2600游戏如《导弹部队》......
  • Java 7如何操纵文件属性
    Java7如何操纵文件属性作者:chszs,转载需注明。准备写点基础性的文章,Java7已经出来很长一段时间了,但是很多Java程序员仍然停留在早期的Java5或Java6的基础上,对Java7的新......
  • Vue实现div可拖动组件 并可操纵盒子大小
    Vue实现div可拖动组件并可操纵盒子大小借鉴文章:https://blog.csdn.net/qq_46103732/article/details/128902192场景:在pc端项目中会碰到弹框后多个页面重叠的场景,类似......
  • 如何判断树莓派通过GPIO与5G模块成功连接?
    如果想要判断自己是否成功连接了树莓派与5G模块,可以通过以下方式进行判断:查看设备连接状态:可以通过在树莓派终端中执行lsusb命令来查看USB设备的连接状态,如果5G模块被识......
  • Raspberry Pi GPIO入门指南
    如果您想使用RaspberryPi进行数字输入/输出操作,那么您需要使用GPIO(通用输入/输出)引脚。在这篇文章中,我们将为您提供RaspberryPiGPIO的基础知识,包括如何访问和操作......
  • GPIO与跑马灯实验
    STM32学习之GPIO实战:跑马灯库函数操作步骤使能IO口时钟。调用RCC_APB2PeriphClockCmd();初始化IO口模式,调用GPIO_Init();操作IO口,输出高低电平。GPIO_SetBits();GP......