输入数据寄存器是由 IO 口经过上下拉电阻、施密特触发器引入。当信号经过触发器,模拟信号将变为数字信号 0 或 1,然后存储在输入数据寄存器中,通过读取输入数据寄存器 GPIOx_IDR 就可以知道 IO 口的电平状态。 (7)、复用功能输入 此模式与复用功能输出类似。在复用功能输入模式时,GPIO 引脚的信号传输到 STM32 其他...
CKS32的GPIO口寄存器必须要按32位字被访问,每个IO端口都有7个寄存器来控制。分别是:配置模式的2个32位的端口配置寄存器CRL和CRH;2个32位的数据寄存器IDR和ODR;1个32位的置位/复位寄存器BSRR;一个16位的复位寄存器BRR;1个32位的锁存寄存器LCKR。如果想要了解每个寄存器的详细使用方法,可以参考《CKS32F107参考手册...
STM32F407 GPIO: 每个通用 I/O 端口包括 4 个 32 位配置寄存器(GPIOx_MODER、GPIOx_OTYPER、 GPIOx_OSPEEDR 和 GPIOx_PUPDR)、2 个 32 位数据寄存器(GPIOx_IDR 和 GPIOx_ODR)、1 个 32 位置位/复位寄存器 (GPIOx_BSRR)、1 个 32 位锁定寄存器 (GPIOx_LCKR) 和 2 个 32 位复用功能选择寄存器...
uint8_t level;if((s_gpio_list[_id].gpio->IDR & s_gpio_list[_id].pin) ==0) { level=0; }else{ level=1; }if(level ==s_gpio_list[_id].ActiveLevel) {return1; }else{return0; } }/*** * 函数名: IsKeyDownFunc * 功能说明: 判断按键是否按下。单键和组合键区分。单键事件不...
分析:首先通过 &GPIO_IDR_IDR屏蔽掉PE2之外的其他PE口。当PE2为高电平时,GPIO-〉IDR的bit2为‘1’,取反后为‘0’,因此条件为假;当PE2为低电平时,GPIO-〉IDR的bit2为‘0’,取反后为‘1’,因此条件为真;通过此方法可以同时判断PE2或PE4(甚至更多PE口)是否为低电平(如按键被按下) ...
登录后复制#ifndef_KEY_H#define_KEY_H#include"stm32f4xx.h"#include"delay.h"voidKEY_Init(void);u8ScanKeyVal(u8 mode);#defineKEY0 (!!(GPIOE- >IDR&1< < 4))#defineKEY1 (!!(GPIOE- >IDR&1< < 3))#defineKEY2 (!!(GPIOE- >IDR&1< < 2))#defineKEY_UP (!!(GPIOA- >IDR&1< ...
#define PCin(n) BIT_ADDR(GPIOC_IDR_Addr,n) //输入 #define PDout(n) BIT_ADDR(GPIOD_ODR_Addr,n) //输出 #define PDin(n) BIT_ADDR(GPIOD_IDR_Addr,n) //输入 #define PEout(n) BIT_ADDR(GPIOE_ODR_Addr,n) //输出 #define PEin(n) BIT_ADDR(GPIOE_IDR_Addr,n) //输入 ...
#define PCin(n) BIT_ADDR(GPIOC_IDR_Addr,n) //输入 #define PDout(n) BIT_ADDR(GPIOD_ODR_Addr,n) //输出 #define PDin(n) BIT_ADDR(GPIOD_IDR_Addr,n) //输入 #define PEout(n) BIT_ADDR(GPIOE_ODR_Addr,n) //输出 #define PEin(n) BIT_ADDR(GPIOE_IDR_Addr,n) //输入 ...
GPIOx_IDR(端口数据输入) GPIOx_ODR(端口数据输出) 不管是数据的输入还是输出,永远都是16位的,因此这两个寄存器的高16位都是系统保留的。 3、GPIO初始化流程 1)打开GPIO时钟(每一个模块使用的时候,必须先打开对应时钟) 2)选择输入输出模式 3)设置输出类型(如果是输出模式) ...
#include"stm32f4xx.h"#include"delay.h"voidKEY_Init(void);u8ScanKeyVal(u8 mode);#defineKEY0(!!(GPIOE->IDR&1<<4))#defineKEY1(!!(GPIOE->IDR&1<<3))#defineKEY2(!!(GPIOE->IDR&1<<2))#defineKEY_UP(!!(GPIOA->IDR&1<<0))#endif ...