STM32的国产替代者:灵动微的MM32 MCU

电子说

1.2w人已加入

描述

  应读者要求,嵌入式ARM将继续介绍能够替代STM32的国产产品。今日带来能够完美替代STM32的产品是灵动微的MM32 MCU。

  MM32是一个全球化的MCU产品,灵动微在上海设立芯片设计及运营中心,借助上海晶圆代工、封装测试完整产业链,确保灵动MCU从研发到生产一条龙进程;在南京设立软件及方案中心,一个50人规模的团队充分保障MCU方案的研发;深圳则建立销售及技术支持中心,可第一时间给予客户服务支持;此外还有香港建有海外运营及客服务中心,在台湾新竹的前不久刚成立东亚营销及方案中心。这使得MM32在中国形成多据点、本地化布局,以及时、快速的响应服务广大客户。

  最新发布的MM32 MCU产品家族的五大产品系列,包括MM32 F系列通用高性能微控制器产品、MM32 L系列低功耗宽电压微控制器产品、MM32 W系列无线微控制器产品、MM32 P系列超小封装微控制器产品以及MM32 S系列安全加密微控制器产品。

  根据21ic坛友火星国务卿的总结,MM32拥有以下亮点:

  亮点一:MM32F的强悍之处

  MM32F1主频高达168MHz,Flash/SRAM高达512KB/128KB,并有丰富的接口,据悉将在第四季度供货。

  另一款MM32F0,标准主频全面升级到72MHz,保留超频潜力,相比通常只有48MHz主频的MCU提升不少。另外新增MM32F031C8T6系列对客户已经有百K级的交付。娄方超表示,针对近期MCU市场供不应求甚至炒货的情况,灵动微电子承诺只要有货绝不存货,准时发货,同时价格保持不变。

  亮点二:L系列低功耗宽电压

  灵动低功耗宽电压MCU系列具有全球主流低功耗MCU水准,超宽的工作电压, 同时MindSafe强大的安全功能,坚固的代码保护和数据流加密等。

  亮点三:无线MCU

  支持无线连接方式BLE,支持OTA(空中升级),sub 1GHz(将于2018年Q1支持)。

  MM32无线系列的W0/W3产品,与F/L系列全部管脚兼容,并首次提出无线MCU原位替换通用MCU,同时还提倡让无线变成标准接口理念。

  亮点四:P系列超小封装

  亮点五:MindSafe技术

  除此之外,灵动MM32已经建立了丰富成熟的生态系统,用娄总的话说,七年时间做MCU,其中五年优化生态,可见完善的生态系统对MCU产品的重要性。这个生态系统包括了应用文档、库函数与样例,开发评估板、解决方案、仿真工具以及在线支持等等。

  灵动首席科学家刘强表示,基于灵动MM32开发平台,传统的库函数、例程、外设得以自然融合,给开发者以极大的便利,十倍百倍的提升开发效率,有效降低开发风险,并且使得开发成果易于复用、重用和维护。灵动还将推出在全球业界领先的SMART敏捷开发平台,将本土MCU开发水平提升至世界水准。

  多说无益,直接看几个21ic家网友的测评:

  【MM32 eMiniBoard测评报告】+ 裸机多任务工程用户:BinWin

  首先感谢厂家和社区提供这样一个直接体验产品的平台和机会。希望如此大力的推广可以收到较好的效果,加深工程师对灵动的印象,未来更多的产品内蕴藏着灵动微电的中国芯。

  下面要看收到的物件了,整个板卡沉稳黑色,且期间布局比较美观整齐,接口靠近板边,看得出设计者考虑的还是比较细致的。

  另外板载MM-LINK调试器,含虚拟串口,对调试来说很是方便,一根USB线就解决了烧录和串口打印。

  加上厂商有编程的上位机软件,配套调试器堪称全家桶。EEPROM存储器,CAN控制器, FLASH存储器也都板载,可以进行SPI和I2C协议的调试,三个电位器接在ADC端口上。这些组成让板卡可以开箱即用,实现项目的初期调试。

  说了这么多,看下实物照片。

 

灵动微

 

  同样给了黑色的背景

  展示完了硬件,来烧录个程序看看吧。利用定时器设计时间片任务轮询,添加按键检测,LED提示,蜂鸣器响应,停机模式触发,串口打印信息几个任务,通过这些代码的调试体验改MCU的开发难度和外设易用性,也可评估低功耗特性和稳定性。下面看主要代码。

 
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
#include "main.h"#define TASKS_MAX 4typedef struct _TASK_COMPONENTS{uint16_t Run;                 uint16_t Timer;              uint16_t ItvTime;              void (*TaskHook)(void);   } TASK_COMPONENTS;      static void System_Task(void);static void Uart_Process(void);static void Key_Scan(void);static void AdcTemp_Samp(void);static TASK_COMPONENTS TaskComps[] ={        {0, 10, 10,         Key_Scan},        {0, 200, 200,         Uart_Process},        {0, 500, 500,         AdcTemp_Samp},    {0, 1000, 1000, System_Task},};void TaskRemarks(void){uint16_t i;for (i=0; i    {if (TaskComps[i].Timer)                 {            TaskComps[i].Timer--;         if (TaskComps[i].Timer == 0)                  {                 TaskComps[i].Timer = TaskComps[i].ItvTime;                 TaskComps[i].Run = 1;                       }        }   }}void TaskProcess(void){uint8_t i;for (i=0; i    {if (TaskComps[i].Run)              {             TaskComps[i].TaskHook();             TaskComps[i].Run = 0;           }    }  }static void System_Task(void){        bsp_LedToggle(1);}static void Uart_Process(void){//printf("hello mm32
");        bsp_LedToggle(2);}static void Key_Scan(void){uint8_t ucKeyCode;        bsp_KeyScan();        ucKeyCode = bsp_GetKey();if(ucKeyCode != KEY_NONE)        {switch (ucKeyCode)                {//stop mode ,turn off adc ,set gpio aincase KEY_DOWN_K1:printf("
into stop mode
");for(uint8_t i = 1; i < 5; i++){                                        bsp_LedOff(i);                                }                                HSI_SYSCLK();                                Sys_Stop();break;        default: bsp_LedOff(4);                    break;                }        }}static void AdcTemp_Samp(void){uint16_t adcVal;float Temp;        adcVal = ADC1_SingleChannel_Get(ADC_Channel_10);        Temp = 27.0 + (adcVal - 1800) / 5.96;printf("
cpu temp is %.2fC
",Temp);}int main(void)   {        Hal_Init();printf("
into normal mode
");for(;;){                TaskProcess();        }}
   

  板载按键K3按下后进入停机模式,这里没有做IO的配置和ADC的关闭操作。吐槽一下,这块板卡个人认为特色就是USB和低功耗。然而电路上没有可以方便测量工作电流的接口,或者有个电阻磁珠啥的可以挑开测测也行,但是看了原理图,没有。简单测了下整块的工作电流如图,这包括了调试器电路和板载其他期间的使用。

灵动微

  上电任务开始运行后,进入停机模式之前,LED1以0.5hz闪烁,LED2以1hz闪烁,ADC任务采集核心温度,串口打印如下图,内心凉凉。

         

灵动微

  工程结构如下所示

       

灵动微

  整个工程的建立和调试相对于其他厂商来说还是很便利的,而且库函数的很多寄存器与常用的MCU比较近似,所以寻求替换的朋友们可以尝试了。应该说成本敏感和地方,确切外设应用的地方,使用MM32是比较有优势的。从demo板的设计与资源来看,厂家的支持应该也不错的。整体体验暂如此,接下来的小项目中继续挖掘详细的内容。

  【MM33 eMiniBoard测评报告】+我的评测总结用户:hu9jj

  有幸获得了MM32 eMiniBoard的评测机会,自从上月20日收到这块小巧精致的评测板之后,我立即开始了评测过程,在短短的半个月时间里,我测试过厂家提供的ADC、I2C、UART、INT、TIM、PWM等例程。对于ADC转换还同时对比测试了固件库和寄存器两个版本,测试了开通DAM进行二阶滤波ADC转换以及多通道ADC转换。同时还用轮询法和中断法两种方式测试板载的四个按键,尽管K1按键没有测试成功,但其它按键的测试效果良好。还测试了定时器及PWM输出等例程。

  除了测试板上集成的外设,我还测试了I2C驱动DS1307日历模块,成功地对日历芯片进行读写操作。测试了仿SPI驱动LCD_5110显示屏,测试了通过一线串口通讯驱动JQ8400语音模块等。

  通过一系列的测试,MM32 eMiniBoard均能很好地与外设进行数据通讯,体现了良好的适应性能。

  这次是我首次接触灵动公司的MCU产品,通过测试活动对MM32有了一定的了解,在测试过程中没有发现与主流同类产品有什么明显的差距,证明在普通应用中,国产的MCU同样也很出色。在厂家提供的资料中,最值得称赞的是同时提供了固件库和定时器两种版本,给象我一样准备学习寄存器编程的初学者带来了很大的便利,我经过ADC例程简单的对比,在相同功能情况下,寄存器版本比固件库版本的的代码要少很多,运行效率也更高。

  然而在测试过程中也发现厂家提供的例程资料的不足部分,例如代码中LED的编号与电路图和板上丝印正好相反的问题、按键例程的引脚定义与实际不符的问题、TIM1例程中定时时间过长影响测试效果的问题等,这些现象表明厂家在提供资料时还需要严格把关,所有的例程都应该在指定板子上运行测试通过后再提供给大家,这样会给大家更好的感受。

  尽管这次测试还不算完整全面,但从测试的结果来说,MM32表现还是很不错的,个人认为完全可以作为产品开发的选择之一。国产MCU的发展任重道远,也需要得到大家的支持,同时也希望灵动公司能进一步完善资料,为大家提供物美价廉的MCU产品。

  具体测评来说:

  翘首盼望了多天,一直没有快递的信息,今天上午忍不住,发邮件询问了快递号,下午就收到了。下面就是评测板的全貌——黝黑端庄:

灵动微



  这是评测板的背面——干净整洁:

灵动微



  板上有一个下载/调试接口和一个USB接口,另外还有一个三线串口(含GND)和CAN通讯接口,我迫不急待地连接好下载调试接口,随着一声短促的“嘀”声,评测板上四个不同颜色的LED便按照不同的频率闪烁起来了——绚丽多彩:


灵动微

 

  收到评测板并上电测试后,第二件必不可少的事情就是建立开发平台和自己的测试程序。相关的资料早已下载好了,只等评测板到了就可动手,万事俱备,只等东风。

  一、开发平台的建立

  我用的是Keil 5.28,先运行MindMotin.MM32L0xx_DFP.1.0.9.pack升级包,将MM32L0xx系统的相关参数添加到Keil中,此时Keil中就可以识别到mm32L0xx系列的MCU了。   

灵动微



灵动微



  再运行mm32_devkit.setup.exe程序,将mm32-LINK添加进去,此时keil中就可以选择到mm32-LINK,就可以下载烧录代码了。

 

灵动微




灵动微



  我用的是WIN10系统,所以只需要做这两步就OK,据介绍:如果还不能正常烧录代码,则再运行mm32_usb_setup.exe程序。

  需要注意的是,上述程序需要以管理员身份运行,否则有可以安装不成功。

  二、测试程序的建立

  厂家的资源中包含了固件库版和寄存器版两套各种外设的例程,完全可以直接拿来测试。我就是将其中的一个例程拷贝到自己的工程目录中,修改成自己的测试工程项目。

  项目移动后,Keil中的包含路径及一些文件的路径需要修改,为了让项目资源自成体系,便于复制到其他电脑上使用,我将Device文件夹也拷贝到项目文件中。包含路径的修改相对容易,直接在KEIL中操作就行,如下图:

 

灵动微



  库文件路径的修改则比较麻烦,一个方法就是删除后重新添加,这样做就是容易漏添加文件,我是采取逐个修改文件的路径方法,在项目文件列表框中右键点击有惊叹号的文件名:

 

灵动微



  在弹出菜单中选择第一行:

 

灵动微



  在修改窗口中修改路径:

 

灵动微

  这是修改后的路径:

 

灵动微


  修改之后项目文件列表框文件名前的惊叹号便消失了。所有惊叹号消失之后,路径修改就完成了。

  然后是编写测试的代码,与大部分测试者一样,首先是点亮LED,我选择的是流水灯,主程序的代码如下:

 
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
#include "delay.h"#include "sys.h"#include "uart.h"#include "adc.h"#include "led.h"

uint8_t ledn;
/**********************************************************************************************************函数信息 :main(void)**功能描述 :**输入参数 :**输出参数 :**    备注 :********************************************************************************************************/int main(void){    delay_init();        LED_Init();        while(1)        {            switch(ledn){                    case 0:                                LED1_ON();                            LED2_OFF();                            LED3_OFF();                            LED4_OFF();                            break;                        case 1:                                LED1_OFF();                            LED2_ON();                            LED3_OFF();                            LED4_OFF();                            break;                        case 2:                                LED1_OFF();                            LED2_OFF();                            LED3_ON();                            LED4_OFF();                            break;                        case 3:                                LED1_OFF();                            LED2_OFF();                            LED3_OFF();                            LED4_ON();                }                ledn++;                if(ledn > 3)                        ledn = 0;                delay_ms(100);
        }}

  编译代码通过,0错误,0警告:

 

灵动微



  下载烧录完成:

 

灵动微


  最后是测试效果,LED灯不停地依次闪亮。

灵动微

 

  更多过程可见:https://bbs.21ic.com/icview-2968410-1-1.html?_dsign=50d64354

  灵动微MM32 eMiniBoard的性能介绍用户:火星国务卿

  上海灵动微电子是国内专注于MCU产品及应用方案的供应商,致力于提供高性能、高质量的32位MCU产品元件。灵动迄今为止已完成数百余项产品设计,满足客户及市场多领域、多层次的丰富应用场景需求。灵动微一级代理介绍MM32 eMiniBoard相关资料。

  MM32 eMiniBoard(MCU型号:MM32L073PF),MM32 eMiniBoard开发板照片及简介。

   MM32 eMiniBoard 简介:MM32L073PF (Cortex-M0 MCU:128k FLASH、8k SRAM);板载SPI Flash芯片;板载IIC EEPROM芯片;板载CAN转换芯片;板载无源蜂鸣器;具备3个VR;具备4个LED;具备4个KEY;外设IO全部引出,方便快速搭载模块测试。

  双USB接口,USB-1支持USB仿真、下载和调试,USB-2支持USB device和供电;板载MM32-LINK OB,可对主控MCU进行在线仿真、调试和下载;支持 Keil uvision/ IAR EWARM开发环境。

  MM32L073F产品使用高性能的 ARM Cortex-M0 为内核的 32 位MCU,工作频率最高可达48MHz,并内置高速存储器,丰富的增强型 I/O 端口和外设连接到外部总线。产品系列工作电压为 2.0V ∼ 5.5V,工作温度范围包含-40◦C ∼ +85◦C 常规型和-40◦C∼ +105◦C 扩展型。多种省电工作模式保证低功耗应用的要求。适合于应用在电机驱动和应用控制、工业等。

  灵动微新品MM32F0010替代8位MCU最佳方案

  用户:王小琪

 

灵动微

 

  MM32F0010概述

  灵动微电子新产品MM32F0010使用内核M0的高性能32位微控制器,工作频率最高可达48MHz,内置高速存储器,丰富的增强型I/O端口和外设连接到外部总线。MM32F0010系列工作电压为2.0V∼5.5V,工作温度范围(环境温度)-40◦C∼85◦C常规型和-40◦C∼105◦C扩展型(V)。多种省电工作模式保证低功耗应用的要求。并提供QFN20和TSSOP20共2种封装形式。灵动微总代理英尚微电子可提供开发板、例程及必要的FAE支持等产品服务。

  根据不同的封装形式,器件中的外设配置不尽相同。这些丰富的外设配置,使得本产品微控制器适合于电机驱动和应用控制、医疗和手持设备、PC游戏外设和GPS平台、工业应用、警报系统、视频对讲、和暖气通风空调系统等多种应用场合。

     

灵动微

 QFN20引脚分布  

灵动微

 TSSOP20引脚分布

  ARMⲺCortex-M0核心并内嵌闪存和SRAM

  ARM的Cortex-M0处理器是最新一代的嵌入式ARM处理器,它为实现MCU的需要提供了低成本的平台、缩减的引脚数目、降低的系统功耗,同时提供卓越的计算性能和先进的中断系统响应。

  ARM的Cortex-M0是32位的RISC处理器,提供额外的代码效率,在通常8和16位系统的存储空间上发挥了ARM内核的高性能。MM32F0010拥有内置的ARM核心,因此它与所有的ARM工具和软件兼容。

  内置闪存存储器

  最大16K字节的内置闪存存储器,用于存放程序和数据。

  内置SRAM

  最大2K字节的内置SRAM

  低功耗模式

  产品支持低功耗模式,可以在要求低功耗、短启动时间和多种唤醒事件之间达到最佳的平衡。

  睡眠模式

  在睡眠模式,只有CPU停止,所有外设处于工作状态并可在发生中断/事件时唤醒CPU。

  停机模式

  在保持SRAM和寄存器内容不丢失的情况下,停机模式可以达到最低的电能消耗。在停机模式下,HSI的振荡器和HSE晶体振荡器被关闭。可以通过任一配置成EXTI的信号把微控制器从停机模式中唤醒,EXTI信号可以是16个外部I/O口之一、PVD的输出的唤醒信号。

  待机模式

  待机模式可实现系统的最低功耗。该模式是在CPU深睡眠模式时关闭电压调节器。内部所有的1.5V部分的供电区域被断开。HSI和HSE振荡器也都关闭,可以通过WKUP引脚的上升沿、NRST引脚的外部复位、IWDG复位唤醒或者看门狗定时器唤醒并复位。SRAM和寄存器的内容将被丢失。

  总结

  通用MCU看似简单,其实是一个很复杂的产品体系。MCU的特点不仅是简单的替代,更关键的是产品品质、供货保证、支持服务,需要广大的合作伙伴们一起配合支持。

  从灵动微产品来看,包括了5个系列覆盖各种需求场景,而整个生态图来看,灵动微的各类支持也非常丰富。不过通病还是文档方面,不过相信在国产化进程中,灵动微会越做越好。

  责任编辑:xj

  原文标题:盘点STM32的国产替代者(4)

  文章出处:【微信公众号:嵌入式ARM】欢迎添加关注!文章转载请注明出处。


打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分