本帖最后由 eltonchang2001 于 2022-11-9 11:32 编辑
由于开发板未配置LED3,故无法对其进行观察,为此可以给它外挂一个LED模块来观察效果。 LED3所使用的PC1引脚,其控制效果如图1所示。 图1点亮LED3 了解了GPIO口的输出用法,那该如何验证其输入用法呢? 可以为它配置一个外挂的触摸感应模块,以产生输入状态的变化。 将PA1配置为输入模式的函数为: - void T2_GPIO_Configuration(void)
- {
- {
- CKCU_PeripClockConfig_TypeDef CKCUClock = {{ 0 }};
- CKCUClock.Bit.AFIO = 1;
- CKCUClock.Bit.PA = 1;
- CKCU_PeripClockConfig(CKCUClock, ENABLE);
- }
- {
- AFIO_GPxConfig(GPIO_PA, AFIO_PIN_1, AFIO_FUN_GPIO);
- GPIO_PullResistorConfig(HT_GPIOA, GPIO_PIN_1, GPIO_PR_DOWN);
- GPIO_DirectionConfig(HT_GPIOA, GPIO_PIN_1, GPIO_DIR_IN);
- GPIO_InputConfig(HT_GPIOA, GPIO_PIN_1, ENABLE);
- }
- }
以PA1来拾取状态变化并通过LED1来指示状态的函数为: - void GPIO_InputReadBit(void)
- {
- FlagStatus InputStatus = RESET;
- InputStatus = GPIO_ReadInBit(HT_GPIOA, GPIO_PIN_1);
- if (InputStatus == SET)
- {
- HT32F_DVB_LEDOn(HT_LED1);
- }
- else
- {
- HT32F_DVB_LEDOff(HT_LED1);
- }
- }
进行触摸控制LED灯的主程序为: - int main(void)
- {
- NVIC_Configuration();
- CKCU_Configuration();
- GPIO_Configuration();
- RETARGET_Configuration();
- HT32F_DVB_LEDInit(HT_LED1);
- HT32F_DVB_LEDOn(HT_LED1);
- T2_GPIO_Configuration();
- while (1)
- {
- GPIO_InputReadBit();
- __Delay(5000000);
- }
- }
经编译和下载,其运行效果如图2和图3所示,即在非接触状态,LED处于熄灭状态;而触摸时,则点亮LED。 图2非接触状态 图3接触状态
掌握了GPIO口的输入输出功能,就可以实现大量的应用处理了!
|