Zeee · 2022年08月14日 · 广东

【MM32F5270开发板试用】GPIO输入+EXTI外部中断例程demo试用

【MM32F5270开发板试用】

前言:

首先,感谢灵动微电子与极术社区给予宝贵的试用机会。借助本次对Plus-F5270开发板的试用,第一次接触到了高性能物联网开发板,非常荣幸,十分感谢。同时极术社区中有许多优秀的文章提供了指导,感谢各位大佬的指点。


开发板资料介绍:

  • MM32F5270是基于安谋科技的 Armv-8 架构的“星辰”STAR-MC1 处理器开发的 32 位微控制器产品,主控工作频率可达120MHz,内置多达 256KB Flash 和 192KB RAM,配置浮点运算单元(Floating Point Unit, FPU)、数字信号处理单元(Digital Signal Processing, DSP)、信号间互联矩阵MindSwitch、可配置逻辑单元CLU、三角函数加速单元CORDIC等算法加速单元,并集成了丰富的外设模块和充足的 I/O 端口。内置了 L1 ICache、DCache、指令紧密耦合存储器 ITCM 和数据紧密耦合存储器 DTCM,同时具备高性能和低功耗的特点。

PLUS-F5270开发板功能示意框图:
 title=


开箱体验:                                               

拆开包装盒,里面开发套件共有5件:
1、 Plus-F5270开发板
2、 创芯工坊PWLINK2(DAP)
3、 杜邦线
4、 USB Type-C数据线
5、 开发板说明页
ps:防bug符还挺有趣的。

 title=

 title=


环境说明:

系统:WIN10
KEIL:KEIL 5 uVision v5.37
(建议将keil5升级到最新版5.37,因为版本低可能造成pack包安装出错)

  • MM32F5270的Pack支持包(MindMotion.MM32F5277E\\_DFP.0.0.6.pack)下载:

https://www.mindmotion.com.cn/support/software/keil\_pack
 title=

 title=
选择这个版本安装

 title=


配置与烧录:

PWLINK2烧录器连接:

  • 烧录器连上电脑,使用杜邦线按SWD调试接口引脚定义图连接:
     title=

Keil5配置:

  • 打开魔术棒点击debug界面选择切换成CMSIS-DAP
     title=

 title=

 title=


灵动例程开发:

  1. GPIO输入-按键检测

灵动微电子官网SDK有很多例程,将下载的例程包文件(plus-f5270\_mdk)解压找到driver\_examples,里面有许多的目录,进入gpio目录,直接运行以.uvprojx结尾的工程文件。如图所示。
 title=

  • 硬件原理

 title= title=

  • 软件代码

    #include <stdint.h>
    #include <stdio.h>
    #include "board_init.h"
    /* * Definitions */
    /* * Variables*/
    /** Declerations*/
    /** Functions*/
    void delay(int i)
    {
        while(i--);
    }
    
    int main(void)
    {        
        BOARD_Init();
        printf("\r\ngpio_basic example.\r\n");
        while (1)
        {
            if ( GPIO_ReadInDataBit(BOARD_KEY0_GPIO_PORT, BOARD_KEY0_GPIO_PIN) ) /* 按键S4未按下,LED点亮*/
            {
        GPIO_WriteBit(BOARD_LED2_GPIO_PORT, BOARD_LED2_GPIO_PIN, 1u); /* LED off. */
        GPIO_WriteBit(BOARD_LED3_GPIO_PORT, BOARD_LED3_GPIO_PIN, 1u); /* LED off. */
            GPIO_WriteBit(BOARD_LED0_GPIO_PORT, BOARD_LED0_GPIO_PIN, 1u); /* LED off. */
            GPIO_WriteBit(BOARD_LED1_GPIO_PORT, BOARD_LED1_GPIO_PIN, 1u); /* LED off */
            }
            else /* 按键S4按下,LED熄灭*/
            {    
        GPIO_WriteBit(BOARD_LED3_GPIO_PORT, BOARD_LED3_GPIO_PIN, 0u); /* LED on. */
        delay(600000);    
        GPIO_WriteBit(BOARD_LED2_GPIO_PORT, BOARD_LED2_GPIO_PIN, 0u); /* LED on. */
        delay(600000);    
        GPIO_WriteBit(BOARD_LED1_GPIO_PORT, BOARD_LED1_GPIO_PIN, 0u); /* LED on. */
        delay(600000);    
        GPIO_WriteBit(BOARD_LED0_GPIO_PORT, BOARD_LED0_GPIO_PIN, 0u); /* LED on. */
        delay(600000);    
            }
        }
    }
    

点击“Build Target”,无报错。点击Download按钮,提示下载成功。

 title=

  • 执行结果
    按下S4按键时,GPIO读取输入电平为低,将对应LED引脚电位拉低,此时LED全部依次点亮,反之松开按键,LED全部熄灭。
  1. EXTI外部中断-按键计数

例程包中找到driver\_examples,进入exti目录,直接打开以.uvprojx结尾的工程文件后编译并且烧录。

  • 软件代码
    #include "board_init.h"
    
    /* * 定义*/
    volatile bool app_exti_event_on = false; /* 中断状态 */
    volatile uint32_t app_exti_event_times = 0u; /*计算中断时间*/
    /** Declerations */
    void app_exti_init(void);
    /** Functions*/
    int main(void)
    {
        BOARD_Init();
        printf("\r\n<<<exti_basic_example>>>\r\n");
        /* 设置exti和syscfg */
        app_exti_init();  //初始化exti
        while (1)
        {
            while ( !app_exti_event_on ) /* 检查中断状态*/
            {
            }
            app_exti_event_on = false; /*清除中断标志位 */
            app_exti_event_times += 1u; /* 计数1次 */
            printf("exti interrupt times:%u.\r\n", (unsigned)app_exti_event_times);
        }
    }
    /*设置外部中断和系统配置*/
    void app_exti_init(void)
    {
        SYSCFG_SetExtIntMux(BOARD_SYSCFG_EXTIPORT, BOARD_SYSCFG_EXTILINE);
        /* 配置外部中断和使能 */
        EXTI_SetTriggerIn(BOARD_EXTI_PORT, BOARD_EXTI_LINE, EXTI_TriggerIn_FallingEdge);
        EXTI_EnableLineInterrupt(BOARD_EXTI_PORT, BOARD_EXTI_LINE, true);
        /* 配置NVIC */
        NVIC_EnableIRQ(BOARD_EXTI_IRQN);
    }
    /* EXTI IRQ Handler */
    void BOARD_EXTI_IRQHandler(void)
    {
        uint32_t flags = EXTI_GetLineStatus(BOARD_EXTI_PORT);
        if ( 0u != ( flags & BOARD_EXTI_LINE ) ) /* Interrupts. */
        {
            app_exti_event_on = true;
        }
        EXTI_ClearLineStatus(BOARD_EXTI_PORT, flags);
    }
  • 执行结果

打开串口助手可以看到程序已成功运行,当按下按键S4产生外部中断信号,实现了输入信号下降沿的检测,触发中断计数1次,如图所示。
 title=

ps:串口波特率(Baud rate):9600,且与电脑通信时需连接USB-UART CH340E端口 。


总结

再次感谢极术社区给予宝贵的试用机会,通过这两天的试用,从各方面上手可以看出MM32F5270开发板是一款面向物联网的多功能高性能开发板,板子接口十分丰富,结构布局合理。最后希望通过开源社区的形式,把产品和相关生态一起完善起来,推动国产MCU的崛起突出重围。
本次是从例程demo简单的上手开发,最终成功实现了例程的功能。针对这块板子,后续我会尝试这几个方向开发:基于科大讯飞的语言识别助手、基于MQTT协议的远程监测系统。本篇分享到这里就结束了,感谢大家的观看,下次再会~

推荐阅读
关注数
6108
内容数
272
灵动MM32 MCU相关技术知识,欢迎关注~
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息