#include "stm32f4xx_hal.h" // 定义一个指向GPIOA的指针 GPIO_TypeDef* GPIOA_PTR = GPIOA; void GPIO_Config(void) { // 定义一个GPIO初始化结构体 GPIO_InitTypeDef GPIO_InitStruct = {0}; // 使能GPIOA时钟 __HAL_RCC_GPIOA_CLK_ENABLE(); // 配置PA5引脚为推挽输出模式,速度为高速,无上...
回到GPIO_TypeDef 这段代码,这个代码用 typedef 关键字声明了名为 GPIO_TypeDef 的结构体类型,结构体内又定义了 7 个 __IO uint32_t 类型的变量.这些变量每个都为 32 位,也就是每个变量占内存空间 4 个字节.在 c 语言中,结构体内变量的存储空间是连续的,也就是说假如我们定义了一个 GPIO_TypeDef ,这个...
//通过查找 GPIO_TypeDef 结构体可以看到typedef struct{__IO uint32_t CRL;//端口配置低寄存器__IO uint32_t CRH;//端口配置高寄存器__IO uint32_t IDR;//端口输入数据寄存器__IO uint32_t ODR;//端口输出数据寄存器__IO uint32_t BSRR;//端口置位/复位寄存器__IO uint32_t BRR;//端口位清除寄存...
1typedefenum2{3GPIO_Mode_IN =0x00,//普通IO口输入4GPIO_Mode_OUT =0x01,//普通IO口输出5GPIO_Mode_AF =0x02,//管脚复用功能6GPIO_Mode_AN =0x03//模拟输入,用于ADC功能7}GPIOMode_TypeDef; (c)、GPIO的输出速度频率:当GPIO引脚用于普通功能输出或复用功能输出时,GPIO的输出速度频率,可选的输出速率如...
• 开启时钟 GPIO工作需要提供时钟信号,在初始化结构体之前需要将时钟打开 • 配置结构体成员 GPIO_Pin是想要配置的IO,GPIO_Speed,通常写GPIO_Speed_50MHz,GPIO_Mode是IO的工作模式 • 写入配置 GPIO的工作模式在程序中有定义 登录后复制typedefenum{ GPIO_Mode_AIN =0x0,// 模拟输入GPIO_Mode_IN_FLOATING...
GPIO_InitTypeDef 类型的结构体 typedef struct{ uint32_tPin; /*!<指定要配置的GPIO引脚。该参数可以是@ref GPIO_pins_define 的任意值 */ uint32_t Mode; /*!<指定所选引脚的工作模式。该参数可以是@ref GPIO_mode_define 的值 */ uint32_t Pull; /*!< 指定所选引脚的上拉或下拉激活。该参数...
typedef struct{uint16_t GPIO_Pin; // 用于选择待初始化的IO口引脚。GPIOSpeed_TypeDef GPIO_Speed; // 设置IO口的输出速度。GPIOMode_TypeDef GPIO_Mode; // 设置IO口的工作模式,提供8种选择。} GPIO_InitTypeDef;其中,GPIO_Pin参数可以设置为无引脚被选中(GPIO_Pin_None)、选中特定引脚(如GPIO_Pin_n...
一次接触STM32时,打开一段底层驱动代码,满屏的GPIO_TypeDef、USART_HandleTypeDef之类的类型名,后面还带个"_t、Def"之类的尾巴。 明明用unsigned int就能解决问题,为什么非要多此一举搞个typedef? 别人的代码全是自定义类型,我照着写却不知道为什么要这样用? 有句话叫存在即合理,做开发很多年以后,我才明白typedef...
配置结构体成员 GPIO_Pin是想要配置的IO,GPIO_Speed,通常写GPIO_Speed_50MHz,GPIO_Mode是IO的工作模式 写入配置 GPIO的工作模式在程序中有定义 typedefenum{GPIO_Mode_AIN=0x0,// 模拟输入GPIO_Mode_IN_FLOATING=0x04,// 输入浮空GPIO_Mode_IPD=0x28,// 输入下拉GPIO_Mode_IPU=0x48,// 输入上拉GPIO_Mode...