本帖最后由 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口的输入输出功能,就可以实现大量的应用处理了!
|