查看: 1202|回复: 0

[评测分享] 【NXP OKdo E1双核Cortex M33开发板 】之GPIO

[复制链接]
  • TA的每日心情
    开心
    昨天 22:30
  • 签到天数: 1412 天

    连续签到: 16 天

    [LV.10]以坛为家III

    发表于 2020-11-16 13:03:51 | 显示全部楼层 |阅读模式
    分享到:
        利用开发板上带的资源,3个按键(复位键除外)和3个可控红绿蓝指示灯,进一步学习GPIO口的输入输出控制。
        需要从OKdo官网下载开发板的硬件资料,邮票孔引脚说明和板子的原理图。
        开发板的引脚说明:
    引脚图.png
    从图中可以看出,3个指示灯红绿蓝分别对应PIO1_4、PIO1_7、PIO1_6。3个按键从右到左(复位键除外)分别对应PIO1_18、PIO1_9、PIO0_5。搞清楚了要控制的引脚之后,就可以开始编程了。

    打开IDE开发环境,还是以上次的点灯工程为基础,因为这次的测试使用了板子上的3个指示灯,所以在开始之前要先配置下IO引脚。
    主界面.png

        点击主菜单上的“配置工具”中的“引脚”子项,3个指示灯对应PIO1_4、PIO1_7、PIO1_6这3个引脚, 所以我们只要先配置这3个。


    引脚配置.png

        上一个项目中只用到了红色指示灯的引脚,所以上图中只有引脚1是勾选的, 我们再勾选上引脚5、9,并选择引脚信号类型: GPIO。

    IO选择.png

        接下来对新勾选的2个引脚进一步配置,方向为Output,模式为上拉电阻方式, 初始状态选择逻辑1,这样上电后不会3个指示灯同时亮。


    引脚路由.png

        引脚配置好之后, 我们就可以修改主程序了, 将主程序作如下修改:
    1. int main(void)
    2. {
    3.     int i;
    4.     /* Init output LED GPIO. */
    5. //    GPIO_PortInit(GPIO, BOARD_LED_PORT);
    6.     GPIO_PortInit(GPIO, 0);
    7.     GPIO_PortInit(GPIO, 1);
    8.     /* Board pin init */
    9.     /* set BOD VBAT level to 1.65V */
    10. //   POWER_SetBodVbatLevel(kPOWER_BodVbatLevel1650mv,kPOWER_BodHystLevel50mv, false);
    11.     BOARD_InitPins();
    12.     SystemCoreClockUpdate();
    13.     gpio_pin_config_t KEY_config = {
    14.            .pinDirection= kGPIO_DigitalInput,
    15.            .outputLogic = 0u
    16.     };
    17.     IOCON_PinMuxSet(IOCON, 1, 4,IOCON_PIO_FUNC0 | IOCON_PIO_DIGITAL_EN);
    18.     IOCON_PinMuxSet(IOCON, 1, 6,IOCON_PIO_FUNC0 | IOCON_PIO_DIGITAL_EN);
    19.     IOCON_PinMuxSet(IOCON, 1, 7,IOCON_PIO_FUNC0 | IOCON_PIO_DIGITAL_EN);
    20.     IOCON_PinMuxSet(IOCON, 1, 9,IOCON_PIO_FUNC0 | IOCON_PIO_DIGITAL_EN);
    21.     IOCON_PinMuxSet(IOCON, 1, 18,IOCON_PIO_FUNC0 | IOCON_PIO_DIGITAL_EN);
    22.     IOCON_PinMuxSet(IOCON, 0, 5,IOCON_PIO_FUNC0 | IOCON_PIO_DIGITAL_EN);
    23.     GPIO_PinInit(GPIO, 1, 9, &KEY_config);
    24.     GPIO_PinInit(GPIO, 1, 18, &KEY_config);
    25.     GPIO_PinInit(GPIO, 0, 5, &KEY_config);
    26.     /* Set systick reload value to generate 1msinterrupt */
    27.     if(SysTick_Config(SystemCoreClock / 1000U))
    28.     {
    29.         while (1)
    30.         {
    31.         }
    32.     }
    33.     while (1)
    34.     {
    35.        if(!GPIO_PinRead(GPIO, 1, 9))
    36.        {
    37.            for(i=0;i<10; i++)
    38.            {
    39.               GPIO_PortToggle(GPIO,1, 1u << 7);
    40.               SysTick_DelayTicks(100U);
    41.            }
    42.        }
    43.        if(!GPIO_PinRead(GPIO, 1, 18))
    44.        {
    45.            for(i=0;i<10; i++)
    46.            {
    47.               GPIO_PortToggle(GPIO,1, 1u << 4);
    48.               SysTick_DelayTicks(500U);
    49.            }
    50.        }
    51.        if(!GPIO_PinRead(GPIO, 0, 5))
    52.        {
    53.            for(i=0;i<10; i++)
    54.            {
    55.               GPIO_PortToggle(GPIO,1, 1u << 6);
    56.               SysTick_DelayTicks(1000U);
    57.            }
    58.        }
    59.     }
    60. }
    复制代码

        按下开关SW1,红灯每0.3秒闪烁一次;
        按下开关SW2,绿灯每0.3秒闪烁一次;
        按下开关SW3,蓝灯每0.3秒闪烁一次;
      编译,下载,程序运行效果如视频所示。




    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-11-23 16:33 , Processed in 0.119742 second(s), 17 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.