利用开发板上带的资源,3个按键(复位键除外)和3个可控红绿蓝指示灯,进一步学习GPIO口的输入输出控制。 需要从OKdo官网下载开发板的硬件资料,邮票孔引脚说明和板子的原理图。 开发板的引脚说明: 从图中可以看出,3个指示灯红绿蓝分别对应PIO1_4、PIO1_7、PIO1_6。3个按键从右到左(复位键除外)分别对应PIO1_18、PIO1_9、PIO0_5。搞清楚了要控制的引脚之后,就可以开始编程了。
打开IDE开发环境,还是以上次的点灯工程为基础,因为这次的测试使用了板子上的3个指示灯,所以在开始之前要先配置下IO引脚。
点击主菜单上的“配置工具”中的“引脚”子项,3个指示灯对应PIO1_4、PIO1_7、PIO1_6这3个引脚, 所以我们只要先配置这3个。
上一个项目中只用到了红色指示灯的引脚,所以上图中只有引脚1是勾选的, 我们再勾选上引脚5、9,并选择引脚信号类型: GPIO。
接下来对新勾选的2个引脚进一步配置,方向为Output,模式为上拉电阻方式, 初始状态选择逻辑1,这样上电后不会3个指示灯同时亮。
引脚配置好之后, 我们就可以修改主程序了, 将主程序作如下修改: - int main(void)
- {
- int i;
- /* Init output LED GPIO. */
- // GPIO_PortInit(GPIO, BOARD_LED_PORT);
- GPIO_PortInit(GPIO, 0);
- GPIO_PortInit(GPIO, 1);
- /* Board pin init */
- /* set BOD VBAT level to 1.65V */
- // POWER_SetBodVbatLevel(kPOWER_BodVbatLevel1650mv,kPOWER_BodHystLevel50mv, false);
- BOARD_InitPins();
- SystemCoreClockUpdate();
- gpio_pin_config_t KEY_config = {
- .pinDirection= kGPIO_DigitalInput,
- .outputLogic = 0u
- };
- IOCON_PinMuxSet(IOCON, 1, 4,IOCON_PIO_FUNC0 | IOCON_PIO_DIGITAL_EN);
- IOCON_PinMuxSet(IOCON, 1, 6,IOCON_PIO_FUNC0 | IOCON_PIO_DIGITAL_EN);
- IOCON_PinMuxSet(IOCON, 1, 7,IOCON_PIO_FUNC0 | IOCON_PIO_DIGITAL_EN);
- IOCON_PinMuxSet(IOCON, 1, 9,IOCON_PIO_FUNC0 | IOCON_PIO_DIGITAL_EN);
- IOCON_PinMuxSet(IOCON, 1, 18,IOCON_PIO_FUNC0 | IOCON_PIO_DIGITAL_EN);
- IOCON_PinMuxSet(IOCON, 0, 5,IOCON_PIO_FUNC0 | IOCON_PIO_DIGITAL_EN);
- GPIO_PinInit(GPIO, 1, 9, &KEY_config);
- GPIO_PinInit(GPIO, 1, 18, &KEY_config);
- GPIO_PinInit(GPIO, 0, 5, &KEY_config);
- /* Set systick reload value to generate 1msinterrupt */
- if(SysTick_Config(SystemCoreClock / 1000U))
- {
- while (1)
- {
- }
- }
- while (1)
- {
- if(!GPIO_PinRead(GPIO, 1, 9))
- {
- for(i=0;i<10; i++)
- {
- GPIO_PortToggle(GPIO,1, 1u << 7);
- SysTick_DelayTicks(100U);
- }
- }
- if(!GPIO_PinRead(GPIO, 1, 18))
- {
- for(i=0;i<10; i++)
- {
- GPIO_PortToggle(GPIO,1, 1u << 4);
- SysTick_DelayTicks(500U);
- }
- }
- if(!GPIO_PinRead(GPIO, 0, 5))
- {
- for(i=0;i<10; i++)
- {
- GPIO_PortToggle(GPIO,1, 1u << 6);
- SysTick_DelayTicks(1000U);
- }
- }
- }
- }
复制代码
按下开关SW1,红灯每0.3秒闪烁一次; 按下开关SW2,绿灯每0.3秒闪烁一次; 按下开关SW3,蓝灯每0.3秒闪烁一次; 编译,下载,程序运行效果如视频所示。
|