(一)灵动Mini-F5375-OB开发板开箱及官方介绍
开箱
本次测评的上海灵动微电子股份有限公司推出的灵动Mini-F5375-OB开发板。目前本产品暂未对外公开售卖,因此目前暂不清楚具体的发行价格。
灵动Mini-F5375-OB开发板外包装为开盖牛皮纸盒。盒内仅包含灵动Mini-F5375-OB开发板本体。
关于该开发板的相关技术资料可通过访问极术社区官网(https://aijishu.com/a/1060000...)或上海灵动微电子股份有限公司官网(https://www.mindmotion.com.cn...)获取。
灵动Mini-F5375-OB开发板官方介绍
MM32F5370微控制器官方介绍
MM32F5370 微控制器搭载了由安谋科技授权的 ARM®v8-M 架构“星辰”STAR-MC1 (兼容 Cortex®-M33)处理器,内置 L1 ICache、DCache,同时具备高性能和低功耗的特点, 最高工作频率可达 180MHz,性能可达 4.02 CoreMark ®/MHz,内置数字信号处理器 (DSP)、浮点运算单元(FPU)和三角函数运算加速单元(CORDIC)辅助算法加速。
- 512KB Flash,支持 ECC
- 128KB SRAM,32KB 支持 ECC
- 3 个 3MSPS 的 12 位 ADC,2 个 12 位的 DAC
- 3 个模拟比较器,4 个支持 PGA 模式的运算放大器
- 4 个 16 位超级定时器,8 个 208ps 高精度 PWM 输出,2 个 16 位高级定时器,2 个 16 位和 2 个 32 位通用定时器,2 个 16 位基础定时器, 1 个低功耗定时器,1 个实时时钟(RTC)
- 1 个 QSPI 接口
- 2 个 I2C,3 个 SPI / I2S,5 个 USART,1 个低功耗 UART
- 1 个集成了内部 PHY 的 USB 2.0 全速 Device/Host 控制器
- 2 个支持 CAN-FD 模式的 FlexCAN 接口
- 工作电压为:1.8V ~ 5.5V,多个 IO 口支持 5V 容忍
- 工作温度范围:-40℃ ~ 105℃
- 封装形式: LQFP48,LQFP64 和 LQFP100
多种应用场合:
- 变频器
- 步进电机
- PLC
- 微型打印机
- 电梯主控
- 扫地机主控
- 电池管理
- 家电主控
- 储能电源
开关电源
(本部分内容来自于上海灵动微电子股份有限公司官网:https://www.mindmotion.com.cn...)灵动Mini-F5375-OB开发板官方介绍
目标芯片:MM32F5375G7PV
接口:
- USB:
-- USB-C 接口: 评估 MCU 的 USB 模块功能
-- USB-C 接口: USB 转 UART(串口打印/调试) - CAN 接口
板载资源:
- MM32LINK-OB 仿真器
- 用户 LED x2
- 用户按键 x2
- 复位按键 x1
- 2Kbit EEPROM
- 32Mbit Flash
- 电位器 x2
- CAN 收发器
供电:
Type-C 接口
(本部分内容来自于上海灵动微电子股份有限公司官网:https://www.mindmotion.com.cn...)(二)灵动Mini-F5375-OB开发板开发环境搭建
1.下载MM32 系列 KEIL 设备支持包(官方下载地址:https://www.mindmotion.com.cn...)。
2.下载MM32F5370 库函数与例程(官方下载地址:https://www.mindmotion.com.cn...)。
3.解压“MM32F5370 库函数与例程:LibSamples_MM32F5370_V0.10.3.zip”文件。
4.解压“MM32_KEIL_Pack_2.27.zip”文件。
5.在Keil中导入“MindMotion.MM32F5370_DFP.0.4.3.pack”。
6.在Keil中打开“LibSamples_MM32F5370_V0.10.3\Samples\LibSamples\”路径下“LibSamples_WorkSpace.uvmpw”工程文件。
7.点击编译,若顺利通过编译则开发环境配置完成。
(三)灵动Mini-F5375-OB开发板串口输出Hello World
1.修改main.c中内容如下:
#include <stdio.h> #include "platform.h" int main(void) { while (1) { printf(""Hello World!\r\n"); } }
2.根据“Mini-F5375-OB (LQFP64) 原理图”文件(官方下载地址:https://www.mindmotion.com.cn...),修改platform.c中内容如下:
/*********************************************************************************************************************** * @brief Initialize console for printf * @note none * @param Baudrate : UART3 communication baudrate * @retval none *********************************************************************************************************************/ void PLATFORM_InitConsole(uint32_t Baudrate) { GPIO_InitTypeDef GPIO_InitStruct; USART_InitTypeDef USART_InitStruct; RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE); USART_StructInit(&USART_InitStruct); USART_InitStruct.USART_BaudRate = Baudrate; USART_InitStruct.USART_StopBits = USART_StopBits_1; USART_InitStruct.USART_Parity = USART_Parity_No; USART_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(USART3, &USART_InitStruct); RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE); GPIO_PinAFConfig(GPIOC, GPIO_PinSource10, GPIO_AF_7); // TX GPIO_StructInit(&GPIO_InitStruct); GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_High; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOC, &GPIO_InitStruct); USART_Cmd(USART3, ENABLE); } /*********************************************************************************************************************** * @brief redefine fputc function * @note for printf * @param ch * @param f * @retval ch *********************************************************************************************************************/ int fputc(int ch, FILE *f) { USART_SendData(USART3, (uint8_t)ch); while (RESET == USART_GetFlagStatus(USART3, USART_FLAG_TC)) { } return (ch); }
3.重新对代码进行编译。
4.接入灵动Mini-F5375-OB开发板USB-DBG的USBType-C接口,终端出现新增盘符,即为连接成功。
5.在Keil中打开魔法棒工具,Debug中选择“CMSIS-DAP ARMv8-M Deugger”。
6.下载代码至灵动Mini-F5375-OB开发板。
7.打开串口调试工具,看到循环输出Hello World即为成功。
(四)灵动Mini-F5375-OB开发板UART输出Hello World
1.打开“LibSamples_MM32F5370_V0.10.3\Samples\LibSamples\USART\USART_9BitDataCommunication\MDK-ARM”文件夹下“USART_9BitDataCommunication.uvprojx”文件。
2.修改main.c中内容如下:
#include <stdio.h>
#include "platform.h"
#include "usart_9bitdatacommunication.h"
int main(void)
{
const char* message = "Hello World";
uint8_t i = 0;
USART_Configure(115200);
while (1)
{
for (i = 0; message[i] != '\0'; i++)
{
USART_SendData(USART3, message[i]);
while (RESET == USART_GetFlagStatus(USART3, USART_FLAG_TC));
}
}
}
3.根据“Mini-F5375-OB (LQFP64) 原理图”文件(官方下载地址:https://www.mindmotion.com.cn...),修改usart_9bitdatacommunication.c中内容如下:
/***********************************************************************************************************************
@file usart_9bitdatacommunication.c
@author FAE Team
@date 31-Jul-2024
@brief THIS FILE PROVIDES ALL THE SYSTEM FUNCTIONS.
**********************************************************************************************************************
@attention
<h2><center>© Copyright(c) <2023> <MindMotion></center></h2>
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and
the following disclaimer in the documentation and/or other materials provided with the distribution.
3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or
promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*********************************************************************************************************************/
/* Define to prevent recursive inclusion */
#define _USART_9BITDATACOMMUNICATION_C_
/* Files include */
#include <stdio.h>
#include "platform.h"
#include "usart_9bitdatacommunication.h"
/**
* @addtogroup MM32F5370_LibSamples
* @{
*/
/**
* @addtogroup USART
* @{
*/
/**
* @addtogroup USART_9BitDataCommunication
* @{
*/
/* Private typedef ****************************************************************************************************/
/* Private define *****************************************************************************************************/
/* Private macro ******************************************************************************************************/
/* Private variables **************************************************************************************************/
/* Private functions **************************************************************************************************/
/***********************************************************************************************************************
* @brief
* @note none
* @param none
* @retval none
*********************************************************************************************************************/
void USART_Configure(uint32_t Baudrate)
{
GPIO_InitTypeDef GPIO_InitStruct;
USART_InitTypeDef USART_InitStruct;
NVIC_InitTypeDef NVIC_InitStruct;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
USART_StructInit(&USART_InitStruct);
USART_InitStruct.USART_BaudRate = Baudrate;
USART_InitStruct.USART_WordLength = USART_WordLength_9b;
USART_InitStruct.USART_StopBits = USART_StopBits_1;
USART_InitStruct.USART_Parity = USART_Parity_No;
USART_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_Init(USART3, &USART_InitStruct);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);
GPIO_PinAFConfig(GPIOC, GPIO_PinSource10, GPIO_AF_7);
GPIO_PinAFConfig(GPIOC, GPIO_PinSource11, GPIO_AF_7);
GPIO_StructInit(&GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_High;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOC, &GPIO_InitStruct);
GPIO_StructInit(&GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_11;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_FLOATING;
GPIO_Init(GPIOC, &GPIO_InitStruct);
NVIC_InitStruct.NVIC_IRQChannel = USART3_IRQn;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStruct);
USART_ITConfig(USART3, USART_IT_PE, ENABLE);
USART_ITConfig(USART3, USART_IT_ERR, ENABLE);
USART_Cmd(USART3, ENABLE);
}
/***********************************************************************************************************************
* @brief
* @note none
* @param none
* @retval none
*********************************************************************************************************************/
void USART_9BitDataCommunication_Sample(void)
{
FunctionalState State = DISABLE;
FunctionalState WorkMode = DISABLE;
uint16_t Data = 0;
printf("\r\nTest %s", __FUNCTION__);
USART_Configure(115200);
if (ENABLE == WorkMode)
{
while (1) /* receiver */
{
if (SET == USART_GetFlagStatus(USART3, USART_FLAG_RXNE))
{
Data = USART_ReceiveData(USART3);
USART_SendData(USART3, Data);
while (RESET == USART_GetFlagStatus(USART3, USART_FLAG_TC))
{
}
}
}
}
else
{
while (1) /* transmitter */
{
State = (State) ? DISABLE : ENABLE;
if (ENABLE == State)
{
USART_SendData(USART3, Data | 0x0100);
}
else
{
USART_SendData(USART3, Data & 0x00FF);
}
while (RESET == USART_GetFlagStatus(USART3, USART_FLAG_TC))
{
}
Data = (Data + 1) % 256;
PLATFORM_DelayMS(200);
}
}
}
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/********************************************** (C) Copyright MindMotion **********************************************/