平头哥CDK W806-KIT单片机技术交流组
直播中

jinglixixi

8年用户 1640经验值
擅长:嵌入式技术 光电显示 接口/总线/驱动 控制/MCU
私信 关注
[经验]

【联盛德W806-KIT开发板试用体验】GPIO口的使用

GPIO是学习硬件的入口,自然对W806-KIT开发板也不例外。
在开发板上有3个LED,分别连接PB0~PB2。此外,还有2个按键,分别是复位键和唤醒键(作芯片升级使能用)。
因此,要实现按键控制LED的功能,必须外挂一个控制按键。
在使用GPIO之前,必须对相应的引脚进行功能配置,以控制3个LED为例,其程序代码为:
        GPIO_InitTypeDef GPIO_InitStruct = {0};
        __HAL_RCC_GPIO_CLK_ENABLE();
        GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2;
        GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT;
        GPIO_InitStruct.Pull = GPIO_NOPULL;
        HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2, GPIO_PIN_SET);
其中:
__HAL_RCC_GPIO_CLK_ENABLE()的作用是使能GPIO的系统时钟;
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2的作用是指定配置的引脚;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT的作用是将指定的引脚配置成输出口;
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2, GPIO_PIN_SET)的作用是将指定的引脚设置成输出高电平。
对于外挂的按键来讲,其配置程序代码为:
        GPIO_InitStruct.Pin = GPIO_PIN_5;
        GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
        GPIO_InitStruct.Pull = GPIO_PULLUP;
        HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
相应的语句作用为:
GPIO_InitStruct.Pin = GPIO_PIN_5指定配置的引脚;
GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING将指定的引脚配置成下降沿触发的中断引脚;
GPIO_InitStruct.Pull = GPIO_PULLUP将指定的引脚配置成上拉输入模式。
实现按键同时控制3个LED亮灭的主程序为:
int main(void)
{
        SystemClock_Config(CPU_CLK_160M);
        printf("enter mainrn");
        HAL_Init();
        GPIO_Init();
        while (1)
        {
                if (key_flag == 1)
                {
                        HAL_Delay(20);
                        if (HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_5) == GPIO_PIN_RESET)
                        {
                                HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2);
                        }
                        key_flag = 0;
                }
        }
       
    return 0;
}
以中断方式进行按键处理的程序为:
void HAL_GPIO_EXti_Callback(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin)
{
        if ((GPIOx == GPIOB) && (GPIO_Pin == GPIO_PIN_5))
        {
                key_flag = 1;
        }
}
这样,没按下一次按键,就切换一次变量key_flag的状态,同时也在语句HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2)的作用下,变换一次LED灯的状态。
经编译,其编译结果如图1所示。
1.jpg
图1完成编译
在完成下载后,其结果如图2所示。
2.jpg
图2完成下载
在按图3所示进行连接的情况下,其运行效果如图4所示,按一次键3个LED全亮,再按一次键3个LED全灭。
3.jpg
图3 连接方式
4.jpg
图4 运行效果
掌握了GPIO口的使用方法后,我们可以通过GPIO口来模拟I2C通讯,进而来驱动OLED屏的显示。

更多回帖

发帖
×
20
完善资料,
赚取积分