本帖最后由 BinWin 于 2020-6-7 22:31 编辑
首先感谢厂家和社区提供这样一个直接体验产品的平台和机会。希望如此大力的推广可以收到较好的效果,加深工程师对灵动的印象,未来更多的产品内蕴藏着灵动微电的中国芯。
下面要看收到的物件了,整个板卡沉稳黑色,且期间布局比较美观整齐,接口靠近板边,看得出设计者考虑的还是比较细致的。另外板载MM-LINK调试器,含虚拟串口,对调试来说很是方便,一根USB线就解决了烧录和串口打印。加上厂商有编程的上位机软件,配套调试器堪称全家桶。EEPROM存储器,CAN控制器, FLASH存储器也都板载,可以进行SPI和I2C协议的调试,三个电位器接在ADC端口上。这些组成让板卡可以开箱即用,实现项目的初期调试。说了这么多,看下实物照片。
同样给了黑色的背景
展示完了硬件,来烧录个程序看看吧。利用定时器设计时间片任务轮询,添加按键检测,LED提示,蜂鸣器响应,停机模式触发,串口打印信息几个任务,通过这些代码的调试体验改MCU的开发难度和外设易用性,也可评估低功耗特性和稳定性。下面看主要代码。
#include "main.h"
#define TASKS_MAX 4
typedef 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<TASKS_MAX; 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<TASKS_MAX; 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\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 ain
case 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();
}
}
板载按键K3按下后进入停机模式,这里没有做IO的配置和ADC的关闭操作。吐槽一下,这块板卡个人认为特色就是USB和低功耗。然而电路上没有可以方便测量工作电流的接口,或者有个电阻磁珠啥的可以挑开测测也行,但是看了原理图,没有。简单测了下整块的工作电流如图,这包括了调试器电路和板载其他期间的使用。
上电任务开始运行后,进入停机模式之前,LED1以0.5hz闪烁,LED2以1hz闪烁,ADC任务采集核心温度,串口打印如下图,内心凉凉
工程结构如下所示
整个工程的建立和调试相对于其他厂商来说还是很便利的,而且库函数的很多寄存器与常用的MCU比较近似,所以寻求替换的朋友们可以尝试了。应该说成本敏感和地方,确切外设应用的地方,使用MM32是比较有优势的。从demo板的设计与资源来看,厂家的支持应该也不错的。整体体验暂如此,接下来的小项目中继续挖掘详细的内容。
|