胖墩墩 · 2022年08月18日 · 江苏

【MM32F5270开发板试用】 MindSDK使用测评

一、前言:

非常感谢极术社区和灵动微电子开展的MM32F5270开发板试用申请活动,能够让我有幸接触MM32F5F5270开发板,作为一个电子爱好者,个人非常喜欢这款高性能的物联网开发板。感谢美林小姐姐在物联网学习技术群发了试用申请的链接,同时也非常感谢社区的大佬帮忙解答疑问。

二、开发板资料介绍

  1. Plus-F5270,据灵动微电子市场总监王维介绍,MM32F5系列采用Armv8-M Mainline架构,全系配置安谋科技“星辰”STAR-MC1处理器,在架构和外设设计上做了多处创新,能够适应工业、IoT、汽车等多种高端市场。
  2. 完整的生态配套:灵动微电子同步发布了配套的新软件和硬件的平台和开发工具,以提供给用户更全面的开发和评估的体验。
  3. 开发板功能示意图:功能.jpg
  • 4KB L1 I-Cache,4KB L1 D-Cache
  • 多达 256KB 内置 Flash
  • 多达 192KB 内置 RAM(包括 32KB ITCM、32KB DTCM 和 128KB System RAM)
  • 内置 QSPI 接口,支持程序在线执行(eXecute-in-Place,XIP)
  • 内置 FSMC 并行存储器接口
  • 2 个 12 位 SAR ADC,采样率高达 3MSPS,配置最高 24 个外部通道,支持最高 256 倍硬件过采样
  • 2 个 12 位 DAC、3 个比较器
  • 7 个 16 位定时器、2 个 32 位定时器
  • 8 个 UART 接口(包含1 个 LPUART)、3 个 SPI 接口、3 个 I2S 接口、2 个 I2C 接口
  • 1 个 USB OTG 全速接口
  • 2 个 FlexCAN 接口
  • 部分型号配置 10M/100M 以太网控制器
  • 支持的温度范围为 -40℃ - 105 ℃
  • 提供 LQFP144、LQFP100 和 LQFP64封装

三、开箱之初体验

em...提供的套件足以玩转开发板,不过有一说一这块板子的体积应该是我用过的第三个大体量的家伙,属实被震惊到了,确实比树莓派和arduino大。
  1. Plus-F5270开发板 1块
  2. 创芯工坊PWLINK2(DAP) 1个
  3. 母对母杜邦线 12条
  4. USB Type-C数据线 1条
  5. 开发板说明页 1张

c0607b2edd11addfc2d7f7d70a83462.jpg
9175112468f3500964d0af11f09fe28.jpg
a76e0b20b55efb61e04a5c46d3c4fb9.jpg
fa9d89ce4334b7f988dce410c7fd19f.jpg

铁子们,是不是很惊艳啊?

四、开发环境搭建

萌新小伙伴可以按照我的顺序来安装开发环境逐步上手,大佬们请随意,^_^
  • 系统:win10
  • ide: 免费注册地址:免费注册地址 V5.37,下载下来使用社区提供的序列号注册一个社区版本即可,42B2L-JM9GY-LHN8C。不会的小伙伴可以参考这个博文,感谢原文博主。安装idea具体步骤。有大聪明说,那我能不能直接下载,安装,那当然也是可以的。不过不破解的版本用着多少有点怪异。直接下载
  • 设备支持包:官网下载,文件下载下来之后解压缩,尔后找到“MindMotion.MM32F5277E_DFP.0.0.7.pack”点击安装,如下图:4ae3bdb3ff45fe1aff8d730ddebdca881c605bb5f7283efb9b26e08517d00fc7QzpcVXNlcnNcYWRtaW5cQXBwRGF0YVxSb2FtaW5nXERpbmdUYWxrXDY1Mzk0NjA1X3YyXEltYWdlRmlsZXNcMTY2MDc1MTI2ODA5OF9GRUQxMkIxMi1GRUU5LTRjYzctQkJDQi02MDE4MjFCRENBRDMucG5n.png
  • mdk,下载之前需要先注册一个账号,然后再进行相关的下载操作。官网地址,这个是本次测评的重要参与者。关于mdk的操作,就不赘述了,官网的视频有讲解,不会的小伙伴可以去查看一下,很简单。

五、配置与烧录

usb接口供电,烧录器进行程序烧录。大聪明可以直接使用烧录器接线供电和程序烧录。

1、先给板子上电,完成开机自检测。板子通电后会有提示音乐和跑马灯的效果,很炫。
028978c34ecfc5b21a3c99079bcc02a.jpg
2、程序烧录器我这边是接了4根线,分别是RST,SWCLK,SWDIO,GND。位置如下图:
f48bf62e4c817c7c5eaea41947f8847.jpg

3、Keil5配置
在Keil5中载入工程后,点击魔法棒,选择如下图选项;接着点击后面的设置按钮,继续选择CMSIS-DAP这个选项,具体见第二张图:
debug1.png

debug2.jpg

一定要点击确认按钮,这样就完成了设备烧录的设置。

六、例程开发

1、串口通信(HelloWord)
2、GPIO输入-案件检测
3、adc_basic

代码1

/*
 * Copyright 2021 MindMotion Microelectronics Co., Ltd.
 * All rights reserved.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

#include "board_init.h"

/*
 * Macros.
 */

/*
 * Variables.
 */

/*
 * Declerations.
 */

/*
 * Functions.
 */
int main(void)
{
    uint8_t ch;

    BOARD_Init();

    printf("hello, world\r\n");

    while (1)
    {
        ch = getchar();
        putchar(ch);
    }
}

/* EOF. */

代码2

/*
 * Copyright 2021 MindMotion Microelectronics Co., Ltd.
 * All rights reserved.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

#include <stdint.h>
#include <stdio.h>

#include "board_init.h"

/*
 * Definitions.
 */

/*
 * Variables.
 */

/*
 * Declerations.
 */

/*
 * Functions.
 */
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) ) /* key is no pressed. */
        {
            GPIO_WriteBit(BOARD_LED0_GPIO_PORT, BOARD_LED0_GPIO_PIN, 1u); /* led off. */
            GPIO_WriteBit(BOARD_LED1_GPIO_PORT, BOARD_LED1_GPIO_PIN, 0u); /* led on. */
        }
        else /* key is pressed. */
        {
            GPIO_WriteBit(BOARD_LED0_GPIO_PORT, BOARD_LED0_GPIO_PIN, 0u); /* led on. */
            GPIO_WriteBit(BOARD_LED1_GPIO_PORT, BOARD_LED1_GPIO_PIN, 1u); /* led off. */
        }
    }
}

/* EOF. */

代码3

/*
 * Copyright 2021 MindMotion Microelectronics Co., Ltd.
 * All rights reserved.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

#include <stdint.h>
#include <stdio.h>

#include "board_init.h"

/*
 * Definitions.
 */

/*
 * Variables.
 */

/*
 * Declerations.
 */
void     app_adc_init(void);
uint32_t app_adc_run_conv(void);

/*
 * Functions.
 */

int main(void)
{
    BOARD_Init();
    printf("adc_basic example.\r\n");
    app_adc_init();
    printf("press any key to start the conversion.\r\n");
    ADC_DoAutoCalib(BOARD_ADC_PORT); /* get calibration factors using hardware self-calibration. */

    while (1)
    {
        /* type any key into the terminal to trigger the conversion. */
        getchar();

        /* satrt the one channel conversion. */
        printf("app_adc_run_conv() start...\r\n");
        printf("adc_val= %u\r\n", (unsigned)app_adc_run_conv());
        printf("app_adc_run_conv() done.\r\n\r\n");
    }
}

/* setup the adc converter, and prepare a regular conversion sequence with only one channel in. */
void app_adc_init(void)
{
    /* pins and clock are already in the pin_init.c and clock_init.c. */

    /* setup the converter. */
    ADC_Init_Type adc_init;
    adc_init.Resolution = ADC_Resolution_Alt0;
    adc_init.ConvMode = ADC_ConvMode_SingleSlot;
    adc_init.Align = ADC_Align_Right;
    adc_init.SingleDiffMode = ADC_SingleDiffConvMode_SingleEnd; /* single-ended channel conversion mode. */
    adc_init.SingleVolt = ADC_SingleConvVref_Internal;  /* internal reference voltage as the reference voltage for single-ended conversion. */
    ADC_Init(BOARD_ADC_PORT, &adc_init);

    ADC_Enable(BOARD_ADC_PORT, true); /* power on the converter. */

    /* setup the sequence, a fixed channel 0 conversion. */
    ADC_EnableSeqSlotFixed(BOARD_ADC_PORT, BOARD_ADC_SLOT_MASK, ADC_SeqFixedDirection_LowFirst);

    /* set channel sample time. */
    ADC_SetChnSampleTime(BOARD_ADC_PORT, BOARD_ADC_CHN_NUM, ADC_SampleTime_Alt7);
}

/* software tirgger the adc converter and start the sequence conversion. */
uint32_t app_adc_run_conv(void)
{
    uint32_t data;
    uint32_t flags;
    uint32_t adc_channel; /* keep the actual hardware conversion channel number. */

    /* software tirgger the conversion. */
    ADC_DoSwTrigger(BOARD_ADC_PORT, true);

    /* wait while the conversion is ongoing. */
    while( 0u == (ADC_GetStatus(BOARD_ADC_PORT) & ADC_STATUS_CONV_SEQ_DONE) )
    {}

    ADC_ClearStatus(BOARD_ADC_PORT, ADC_STATUS_CONV_SEQ_DONE);

    data = ADC_GetChnConvResult(BOARD_ADC_PORT, &adc_channel, &flags);

    if (0u == (flags & ADC_CONV_RESULT_FLAG_VALID) )
    {
        data = 0u; /* the data is unavailable when the VALID flag is not on. */
    }

    return data;
}

/* EOF. */

效果1:
hello,code.jpg
hello,world.jpg
hello1.jpg

效果2:
https://www.bilibili.com/vide...

效果3:
20c3d5f9807f6393c5bb57494293a33.jpg

评价与总结

作为一个电子爱好者,个人觉得MindSDK设置的非常好,不仅有丰富的Demo工程,且工程中有比较友好的“readme.md”引导,让开发者可以知道该怎么玩,还特别说明了结果是什么。对于我这样的新手小白来说真的太友好了。工程中的代码重要的地方也都有注释,非常棒。开发板的性能稳定,提供的功能丰富,相关的外设自己后期可以扩展。貌似除了体积大,好像没什么缺点了,哈哈~
再次感谢社区能提供宝贵的试用机会,拿到板子到现在已经有4天了,这几天一直在了解板子的原理、在B站上看了苏工的课程视频、在社区看了不少大佬的博文、还向微信群里几个活跃的小伙伴请教了不少知识,真的非常的开心。本人本质工作是从事软件开发的,所以平时工作也很忙,但是对于新鲜技术的研究始终抱有热情,因为疫情原因很多传感器都在老家,暂时没法回去,目前只能先从 MindSDK开始熟悉板子,慢慢上手各项功能,最终的方向还是想实现智慧花盆的功能和实现MicroPython的移植。

夜深了,小伙伴们,晚安啦~下次见~

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