[MM32软件] 【MM32 eMiniBoard测评报告】+ 裸机多任务工程

[复制链接]
 楼主| BinWin 发表于 2020-6-7 22:26 | 显示全部楼层 |阅读模式
本帖最后由 BinWin 于 2020-6-7 22:31 编辑

         首先感谢厂家和社区提供这样一个直接体验产品的平台和机会。希望如此大力的推广可以收到较好的效果,加深工程师对灵动的印象,未来更多的产品内蕴藏着灵动微电的中国芯。
         下面要看收到的物件了,整个板卡沉稳黑色,且期间布局比较美观整齐,接口靠近板边,看得出设计者考虑的还是比较细致的。另外板载MM-LINK调试器,含虚拟串口,对调试来说很是方便,一根USB线就解决了烧录和串口打印。加上厂商有编程的上位机软件,配套调试器堪称全家桶。EEPROM存储器,CAN控制器, FLASH存储器也都板载,可以进行SPI和I2C协议的调试,三个电位器接在ADC端口上。这些组成让板卡可以开箱即用,实现项目的初期调试。说了这么多,看下实物照片。
         c.jpg
        同样给了黑色的背景
        展示完了硬件,来烧录个程序看看吧。利用定时器设计时间片任务轮询,添加按键检测,LED提示,蜂鸣器响应,停机模式触发,串口打印信息几个任务,通过这些代码的调试体验改MCU的开发难度和外设易用性,也可评估低功耗特性和稳定性。下面看主要代码。

  1. #include "main.h"

  2. #define TASKS_MAX 4

  3. typedef struct _TASK_COMPONENTS
  4. {
  5.     uint16_t Run;                 
  6.     uint16_t Timer;              
  7.     uint16_t ItvTime;              
  8.     void (*TaskHook)(void);   
  9. } TASK_COMPONENTS;      


  10. static void System_Task(void);
  11. static void Uart_Process(void);
  12. static void Key_Scan(void);
  13. static void AdcTemp_Samp(void);

  14. static TASK_COMPONENTS TaskComps[] =
  15. {
  16.         {0, 10, 10,         Key_Scan},
  17.         {0, 200, 200,         Uart_Process},
  18.         {0, 500, 500,         AdcTemp_Samp},
  19.     {0, 1000, 1000, System_Task},
  20.         
  21. };

  22. void TaskRemarks(void)
  23. {
  24.     uint16_t i;
  25.     for (i=0; i<TASKS_MAX; i++)         
  26.     {
  27.          if (TaskComps[i].Timer)         
  28.         {
  29.             TaskComps[i].Timer--;         
  30.             if (TaskComps[i].Timer == 0)      
  31.             {
  32.                  TaskComps[i].Timer = TaskComps[i].ItvTime;
  33.                  TaskComps[i].Run = 1;           
  34.             }
  35.         }
  36.    }
  37. }

  38. void TaskProcess(void)
  39. {
  40.     uint8_t i;
  41.     for (i=0; i<TASKS_MAX; i++)      
  42.     {
  43.          if (TaskComps[i].Run)      
  44.         {
  45.              TaskComps[i].TaskHook();
  46.              TaskComps[i].Run = 0;   
  47.         }
  48.     }  
  49. }

  50. static void System_Task(void){

  51.         bsp_LedToggle(1);
  52. }

  53. static void Uart_Process(void){
  54.         //printf("hello mm32\r\n");
  55.         bsp_LedToggle(2);
  56. }


  57. static void Key_Scan(void){
  58.         
  59.         uint8_t ucKeyCode;
  60.         
  61.         bsp_KeyScan();
  62.         ucKeyCode = bsp_GetKey();

  63.         if(ucKeyCode != KEY_NONE)
  64.         {
  65.                 switch (ucKeyCode)
  66.                 {
  67.                         //stop mode ,turn off adc ,set gpio ain
  68.                         case KEY_DOWN_K1:
  69.                                 printf("\ninto stop mode\r\n");
  70.                                 for(uint8_t i = 1; i < 5; i++){
  71.                                         bsp_LedOff(i);
  72.                                 }
  73.                                 
  74.                                 HSI_SYSCLK();
  75.                                 Sys_Stop();
  76.                                 break;        
  77.                                                 
  78.                         default: bsp_LedOff(4);                    
  79.                                 break;
  80.                 }
  81.         }
  82. }

  83. static void AdcTemp_Samp(void){
  84.         
  85.         uint16_t adcVal;
  86.         float Temp;
  87.         
  88.         adcVal = ADC1_SingleChannel_Get(ADC_Channel_10);
  89.         Temp = 27.0 + (adcVal - 1800) / 5.96;
  90.         printf("\ncpu temp is %.2fC\r\n",Temp);

  91. }


  92. int main(void)   
  93. {
  94.         Hal_Init();
  95.         printf("\ninto normal mode\r\n");
  96.         for(;;){
  97.                
  98.                 TaskProcess();
  99.         
  100.         }
  101.         
  102. }


        板载按键K3按下后进入停机模式,这里没有做IO的配置和ADC的关闭操作。吐槽一下,这块板卡个人认为特色就是USB和低功耗。然而电路上没有可以方便测量工作电流的接口,或者有个电阻磁珠啥的可以挑开测测也行,但是看了原理图,没有。简单测了下整块的工作电流如图,这包括了调试器电路和板载其他期间的使用。
         b.jpg
       上电任务开始运行后,进入停机模式之前,LED1以0.5hz闪烁,LED2以1hz闪烁,ADC任务采集核心温度,串口打印如下图,内心凉凉
         a.png
       工程结构如下所示
       f.png
       整个工程的建立和调试相对于其他厂商来说还是很便利的,而且库函数的很多寄存器与常用的MCU比较近似,所以寻求替换的朋友们可以尝试了。应该说成本敏感和地方,确切外设应用的地方,使用MM32是比较有优势的。从demo板的设计与资源来看,厂家的支持应该也不错的。整体体验暂如此,接下来的小项目中继续挖掘详细的内容。




Carina卡 发表于 2021-1-10 12:54 | 显示全部楼层
写的很不错,通过楼主分享的可以看出MM32的开发板不论是资源还是技术支持还是可以的
guijial511 发表于 2021-1-17 15:04 来自手机 | 显示全部楼层
不错,学习了。
liangshuang95 发表于 2021-1-19 18:42 来自手机 | 显示全部楼层
学习了,感谢楼主分享。
fuqinyyy 发表于 2021-1-20 08:06 来自手机 | 显示全部楼层
不错,学习了。
daichaodai 发表于 2021-1-20 18:34 来自手机 | 显示全部楼层
感谢楼主分享经验
zhengshuai888 发表于 2021-1-21 08:18 来自手机 | 显示全部楼层
学习了,谢谢分享。
yangxiaor520 发表于 2021-1-22 18:25 来自手机 | 显示全部楼层
学习了,谢谢分享。
kkzz 发表于 2021-2-4 17:05 | 显示全部楼层
这个是什么系统呢   
hudi008 发表于 2021-2-4 17:06 | 显示全部楼层
学习一下 。     
lzmm 发表于 2021-2-4 17:07 | 显示全部楼层
单机与OS区别在哪  
minzisc 发表于 2021-2-4 17:07 | 显示全部楼层
            
mmbs 发表于 2021-2-4 17:07 | 显示全部楼层
能搜到一个类似的移植例子?  
fentianyou 发表于 2021-2-4 17:08 | 显示全部楼层
μC/OS资源   
xiaoyaodz 发表于 2021-2-4 17:08 | 显示全部楼层
想先把UC/OS-II移植到单片机上
febgxu 发表于 2021-2-4 17:08 | 显示全部楼层
裸机多任务?        
sdlls 发表于 2021-2-4 17:09 | 显示全部楼层
谢谢楼主的资料。        
pixhw 发表于 2021-2-4 17:09 | 显示全部楼层
            
mmbs 发表于 2021-2-4 17:09 | 显示全部楼层

学习了,谢谢分享。  
minzisc 发表于 2021-2-4 17:09 | 显示全部楼层
谢谢楼主分享的资料了。   
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

65

帖子

0

粉丝
快速回复 返回顶部 返回列表