#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 板载按键K3按下后进入停机模式,这里没有做IO的配置和ADC的关闭操作。吐槽一下,这块板卡个人认为特色就是USB和低功耗。然而电路上没有可以方便测量工作电流的接口,或者有个电阻磁珠啥的可以挑开测测也行,但是看了原理图,没有。简单测了下整块的工作电流如图,这包括了调试器电路和板载其他期间的使用。{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\r\n"); 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("\ninto stop mode\r\n");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("\ncpu temp is %.2fC\r\n",Temp);}int main(void) { Hal_Init();printf("\ninto normal mode\r\n");for(;;){ TaskProcess(); }}
上电任务开始运行后,进入停机模式之前,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警告:
灵动微新品MM32F0010替代8位MCU最佳方案
用户:王小琪
MM32F0010概述
免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!