> 文档中心 > 【MM32F5270开发板试用】外设例程的分析与使用

【MM32F5270开发板试用】外设例程的分析与使用


本篇文章来自极术社区与灵动组织的MM32F5270开发板评测活动,更多开发板试用活动请关注极术社区网站。作者:ifconfig

MINDSDK的工程的例程的基本结构如下图所示:
是一个最基本的单片机的裸机工程结构。基本上BOARD_InitPins是所有使用的IO的初始化,并不是只有Console的。

【MM32F5270开发板试用】外设例程的分析与使用

看一下GPIO的函数GPIO_WriteBit的原型。

【MM32F5270开发板试用】外设例程的分析与使用

可以看到函数是很简洁的,基本上可以看作是寄存器操作了。
不像是ST的HAL库,封装的层比较多,也有比较多的断言机制 函数:assert_param,而且为了兼容性,一个GPIO的API函数体内,代码也比较多,逻辑也复杂一些。
纵观MINDSDK的代码,简洁、高效贯穿其中。
任何决策都有两面性,现在ST也推出了LL库,把效率也提上来了。
而随着产品线的增加,产品的增多,灵动也要开始布局兼容性问题了。

GPIO的这个外设例程,就是根据按键的输入,来决定不同的LED的亮灭情况。

【MM32F5270开发板试用】外设例程的分析与使用

再看一下Time的例程。
例程在BOARD_Init()之后,又调用了app_tim_init(),来初始化定时器的一些配置。

【MM32F5270开发板试用】外设例程的分析与使用

app_tim_init()算是用户层的函数,脱离了device库,这部分是要用户自己定义的。
中断函函数,这里是宏定义全新定义的,原的有函数名是在启动文件中定义的。这与ST等单片机的启动文件的机制是一样的。

现在把两个工程合并成一个。
通过如下两步,就可以操作初始化的GPIO了。
BOARD_Init——>BOARD_InitBootClocks中初始化时钟
BOARD_Init——>BOARD_InitPins中初始化引脚

这里初始化的是LED0,时间设置成0.5s。
这时,串口会有输出,这个是定时器的中断函数里的输出程序。

【MM32F5270开发板试用】外设例程的分析与使用

又在中断函数中增加了LED的控制

bool led=false;void BOARD_TIM_IRQHandler(void){    uint32_t flags = TIM_GetInterruptStatus(BOARD_TIM_PORT);    if ( 0u != (flags & TIM_STATUS_UPDATE_PERIOD ) ) /* Check update status. */    { putchar('*');  led=!led;  GPIO_WriteBit(GPIOI, GPIO_PIN_0, led);    }    TIM_ClearInterruptStatus(BOARD_TIM_PORT, flags);}

效果如下:

动图封面

动图封面