接下来就需要通过检测按键引脚的电平状态来判断按键是否按下了。那么我们怎么获取引脚的电平状态呢,查阅参考手册可知,我们可以通过读取IDR寄存器的值来获取。而这个操作同样被STM32固件库封装了,其函数名为GPIO_ReadInputDataBit。查看源码,其正是对IDR寄存器操作的封装,如下图3-2所示。 图3-2 其最终会返回引脚的电平...
如果 VDD 连接的是 3.3V,那么引脚输出的就是 3.3V,如果 VDD 连接的是 5V,那么引脚输出的就是 5V。因此如果想要让 STM32 管脚输出 5V,可以选择开漏输出模式,然后在外接上拉电阻的电源 VDD 选择 5V 即可,前提是这个 STM32 引脚是容忍 5V 的。开漏输出模式一般应用在 I2C、SMBUS 通讯等需要“线与”功能的总...
每个GPIO 都具有 2 个 16 位数据寄存器:输入和输出数据寄存器(GPIOx_IDR和GPIOx_ODR)。GPIOx_ODR 用于存储待输出数据,可对其进行读/写访问。通过 I/O 输入的数据存储到输入数据寄存器 (GPIOx_IDR) 中,它是一个只读寄存器。 端口输入寄存器IDRy[15:0]:端口输入数据 (Port input data) (y = 0..15) 这...
GPIO工作模式 由于GPIO内部的结构关系,决定了GPIO可配置成以下几种模式。 输入模式 在输入模式时,施密特触发器打开,输出被禁止。可通过输入数据寄存器GPIOx_IDR读取I/O状态。输入模式可以配置为模拟、上拉、下拉以及浮空模式。上拉和下拉输入很好理解,默认的电平由上拉或者下拉决定。浮空输入的电平是不确定的,完全由外...
就是一个宏定义,即后面的KEY0将全部用 后面的这一串代替:“(GPIOD->IDR&GPIO_Pin_0)”所以,下面的语句 if KEY0 printf("Stop");经过预编译后就变成了:if (GPIOD->IDR&GPIO_Pin_0) printf("Stop");所以使用宏定义后如果编译出错,你又看不出来的话,需要你仔细你的宏定义是否...
vu32 IDR;vu32 ODR;vu32 BSRR;vu32 BRR;vu32 LCKR;} GPIO_TypeDef;只表示对该结构体申明,而((GPIO_TypeDef *) GPIOC_BASE)表示将其强制转换为指针类型,#define GPIOC ((GPIO_TypeDef *) GPIOC_BASE)的意思是用GPIOC来替换((GPIO_TypeDef *) GPIOC_BASE),那么这个时候GPIOC就是指针了.所以程序里面...
return((uint16_t)GPIOx->IDR); } /** * @brief Reads the specified output data port bit. * @param GPIOx: where x can be (A..I) to select the GPIO peripheral. * @param GPIO_Pin: specifies the port bit to read. * This parameter can be GPIO_Pin_x where x can be ...
GPIO接口的主要寄存器包括:1.端口配置寄存器(GPIOx_CRL/CRH):用于配置GPIO 引脚的工作模式和触发方式。2.端口输入数据寄存器(GPIOx_IDR):用于读取GPIO 引脚的输入状态。3.端口输出数据寄存器(GPIOx_ODR):用于设置GPIO 引脚的输出状态。4.端口位清除寄存器(GPIOx_BRR):用于清除指定的GPIO位。5.端口位...
Elixir Cross Referencer - Explore source code in your browser - Particularly useful for the Linux kernel and other low-level projects in C/C++ (bootloaders, C libraries...)
GPIO设计 GPIO设计 配置模式 通用输出 复用功能输出 输入 推挽(Push-Pull)开漏(Open-Drain)推挽(Push-Pull)开漏(Open-Drain)模拟输入浮空输入下拉输入上拉输入 CNF1CNF0MODE1 0 0 1 1 0 1 MODE0 PxODR寄存器 0或10或1不使用 不使用 0 0 1 1 0 00 不使用 不使用 0 1 ...