文章目录
- 12.1 GPIO输入硬件
- 12.1.1 GPIO初始化
12.1 GPIO输入硬件
RST 复位按键
- 连接至 RT1052 的 POR_B 引脚,当该引脚为低电平时会引起 RT1052芯片的复位
WAUP 按键
- 该按键在没有被按下的时候,引脚状态为高电平,当按键按下时,引脚状态为低电平
MODE 按键
- 通过一系列电路连接至两个引脚 BOOT_MODE[0] 和BOOT_MODE[1],当该按键按下时,BOOT_MODE[0] 引脚状态为高电平,BOOT_MODE[1]则相反为低电平。
- 根据 BOOT_MODE[0] 和 BOOT_MODE[1] 的电平状态来选择 FLASH 还是 USB 的启动方式
12.1.1 GPIO初始化
1 /************************* 第 1 部分 **************************/
2 #include "fsl_iomuxc.h"
3 #include "fsl_gpio.h"
8 /************************* 第 2 部分 **************************/
9 /* 所有引脚均使用同样的 PAD 配置 */
10 #define KEY_PAD_CONFIG_DATA (SRE_0_SLOW_SLEW_RATE| \
11 DSE_0_OUTPUT_DRIVER_DISABLED| \
12 SPEED_2_MEDIUM_100MHz| \
13 ODE_0_OPEN_DRAIN_DISABLED| \
14 PKE_1_PULL_KEEPER_ENABLED| \
15 PUE_1_PULL_SELECTED| \
16 PUS_3_22K_OHM_PULL_UP| \
17 HYS_1_HYSTERESIS_ENABLED)
18 /* 配置说明 : */
19 /* 转换速率 : 转换速率慢
20 驱动强度 : 关闭
21 速度配置 : medium(100MHz)
22 开漏配置 : 关闭
23 拉 / 保持器配置 : 使能
24 拉 / 保持器选择 : 上下拉
25 上拉 / 下拉选择 : 22K 欧姆上拉
26 滞回器配置 : 开启 (仅输入时有效,施密特触发器,使能后可以过滤输入噪声) */
/************************* 第 3 部分 **************************/
29 /**
30 * @brief 初始化按键相关 IOMUXC 的 MUX 复用配置
31 * @param 无
32 * @retval 无
33 */
34 static void Key_IOMUXC_MUX_Config(void)
35 {
36 /* 设置按键引脚的复用模式为 GPIO ,不使用 SION 功能 */
37 IOMUXC_SetPinMux(CORE_BOARD_WAUP_KEY_IOMUXC, 0U);
38 IOMUXC_SetPinMux(CORE_BOARD_MODE_KEY_IOMUXC, 0U);
39 }
40
41 /************************* 第 4 部分 **************************/
42 /**
43 * @brief 初始化按键相关 IOMUXC 的 MUX 复用配置
44 * @param 无
45 * @retval 无
46 */
47 static void Key_IOMUXC_PAD_Config(void)
48 {
49 /* 设置按键引脚属性功能 */
50 IOMUXC_SetPinConfig(CORE_BOARD_WAUP_KEY_IOMUXC, KEY_PAD_CONFIG_DATA);
51 IOMUXC_SetPinConfig(CORE_BOARD_MODE_KEY_IOMUXC, KEY_PAD_CONFIG_DATA);
52 }
/************************* 第 5 部分 **************************/
55 /**
56 * @brief 初始化按键相关的 GPIO 模式
57 * @param 无
58 * @retval 无
59 */
60 static void Key_GPIO_Mode_Config(void)
61 {
62 /* 定义 gpio 初始化配置结构体 */
63 gpio_pin_config_t key_config;
64
65 /** 核心板的按键, GPIO 配置 **/
66 key_config.direction = kGPIO_DigitalInput; // 输入模式
67 key_config.outputLogic = 1; // 默认高电平(输入模式时无效)
68 key_config.interruptMode = kGPIO_NoIntmode; // 不使用中断
69
70 /* 初始化按键 GPIO. */
71 GPIO_PinInit(CORE_BOARD_WAUP_KEY_GPIO, CORE_BOARD_WAUP_KEY_GPIO_PIN, &key_config);
72 GPIO_PinInit(CORE_BOARD_MODE_KEY_GPIO, CORE_BOARD_MODE_KEY_GPIO_PIN, &key_config);
73 }
75 /************************* 第 6 部分 **************************/
76 /**
77 * @brief 初始化控制 KEY 的 IO
78 * @param 无
79 * @retval 无
80 */
81 void Key_GPIO_Config(void)
82 {
83 /* 初始化 GPIO 复用、属性、模式 */
84 Key_IOMUXC_MUX_Config();
85 Key_IOMUXC_PAD_Config();
86 Key_GPIO_Mode_Config();
87 }
配置中KEY_PAD_CONFIG_DATA :
- 因为引脚要用于输入模式,所以关闭了输出驱动强度的控制。
- 期望引脚在按键没按下的时候有更加稳定的输入,所以设置了 22K 欧姆的上拉。
- 按键的输入信号存在抖动,所以使能了施密特触发器进行滤波。
定义 Key_GPIO_Mode_Config 函数:
- outputLogic 成员赋值为 1 或 0 是不会影响引脚的默认电平的,这个成员的配置仅在引脚用于输出模式时有效。