mm32 / MM32_FDS

MM32 Firmware Develop Suite,MM32 固件开发套件。支持 MM32 n/p/q 版本,与 Cortex-M 微控制器软件接口标准(CMSIS)兼容。
29 stars 8 forks source link
fds library mindmotion mm32 mm32-fds

MM32-FDS

MM32 固件开发套件 (以下简称 MM32-FDS) 框架由 MM32 外设驱动库 (包含硬件描述层 HDL,硬件抽象层 HAL), 设备驱动层 (DRV),板级支持包 (BSP) 和应用程序实例构成。

MM32 固件开发套件支持 MM32F, MM32L 及 MM32SPIN 全系列 MCU 的软件开发,包含 MM32F103/MM32L3xx, MM32F031C8_CB/MM32L0xx 版本,MM32SPIN2x, MM32F031C4_C6/MM32F003 版本等多款 MCU。

MM32固件开发套件提供以下方式进行软件开发:

  1. 使用固件开发套件应用程序例程进行移植。
  2. 用户软件调用设备驱动层的接口。
  3. 访问硬件抽象层 (HAL) 函数接口。

MM32-FDS 特点

AllInOne 架构,同一个项目支持 MM32 全系列 MCU

简化应用程序编程,访问硬件外设接口高度抽象

支持同步/异步方式编程

MM32-FDS App例程

MM32-FDS 应用程序例程存放在 app 路径下,头文件存放在 inc 路径下。MM32-FDS App 所有的程序 实例,均按以下规则编写:

头文件

#ifdef _UART_C_                     // 在 C 程序代码的第一个有效行中定义
#define GLOBAL                      // 定义 GLOBAL 为空

GLOBAL bool txSuccess = false;      // 定义变量,并初始化
GLOBAL bool rxSuccess = false;

static bool toggle = false;         // 当前模块静态变量,其它模块不可使用

#else
#define GLOBAL extern               // 定义 GLOBAL 为 extern

GLOBAL bool txSuccess;              // 非当前模块之外的定义为外部变量
GLOBAL bool rxSuccess;

#endif

GLOBAL u32 g_Count;                 // 定义全局变量

#undef GLOBAL                       // 释放GLOBAL定义

应用程序

设备控制块

以下是一个设备控制块的实例:

tAPP_UART_DCB dcb = {
    .hSub       = emFILE_UART1,         // 使用 UART1
    .type       = emTYPE_DMA,           // UART1 使用 DMA 方式,可选中断或查询方式

    .cbTx       = (u32)&TxCallback,     // 发送完成回调函数地址
    .cbRx       = (u32)&RxCallback,     // 接收完成回调函数地址

    .block      = emTYPE_Non_Block,     // 读文件/写文件是否采用阻塞方式,建议使用非阻塞方式
    .sync       = emTYPE_Sync,          // 使用同步方式处理发送或接收事件
    .remapEn    = false,                // 允许/关闭端口重映象功能
    .remapIdx   = 0,                    // 重映象端口选择
    .timeOut    = 0,                    // 允许超时,0 表示不允许超时,单位毫秒

    .baudRate   = 115200,               // 波特率
    .width      = 8,                    // 传输字长,8位
    .stop       = 0,                    // 停止位长度 0 表示一位,可选 1,2,3 分别表示 2 位, 0.5 位, 1.5 位
    .parity     = emUART_PARITY_None,   // 校验方式
    .flow       = 0,                    // 0 表示不使用流控制
    .mode       = emTXRX_TxRx           // 允许发送和接受
};

对于不同的外设,dcb是不同的。具体说明详见外设驱动模块说明 (待增加)。 在 drv.h 中已经定义了绝大部分外设的 dcb,在后续版本升级中将陆续增加。

MM32-FDS DRV, BSP 与 HAL 模块

  1. MM32-FDS 设备驱动层代码放在 driver 路径下,头文件存放在 inc 路径下。MM32-FDS driver 所有的程序代码,编程规则同 app。
  2. MM32-FDS 板级支持包代码放在 bsp 路径下,头文件存放在 inc 路径下。MM32-FDS bsp 所有的程序代码,编程规则同 app。
  3. MM32-FDS 硬件抽象层代码放在 lib/hal_lib 路径下,头文件存放在 inc 路径下。MM32-FDS hal 所有的程序代码,编程规则同 app。
  4. MM32-FDS 硬件抽象层代码支持 MM32 系列所有 Flash 版本的 MCU,用户只需通过改变项目预定义的宏即可切换到选择的 MCU,所有 drv, bsp 和 hal 代码无须重新加载,实现 All in One 功能。

MM32-FDS 系统资源

MM32-FDS 系统资源代码放在 lib/startup 路径下,头文件存放在 inc 路径下。MM32-FDS 系统资源所有的程序代码,编写规则同 app。 MM32-FDS 系统资源包含以下文件

  1. startup_mm32.c, MM32-FDS 启动文件,考虑到代码的兼容性和唯一性,使用 C 代码编程,没有使用汇编语言编程。
  2. system_mm32.c, MM32-FDS 时钟初始化及 Systick 中断程序等文件文件。
  3. resource.c, MM32-FDS 键盘和显示程序调度代码。
  4. mm32.h, MM32 MCU 硬件描述层,是 MM32-FDS 固件开发套件唯一的关于 MCU 描述的文件,用户只需通过改变宏即可选择合适的 MCU,并得到其地址、结构寄存器及位段的描述。

MM32-FDS 函数命名方式

代码库函数命名采用 模块层级名 + 外设模块名 + 函数功能 的 3 级命名方式。函数名中各层以下划线分隔。模块层级名及外设模块名可省略。模块层级名及外设模块名为大写,函数功能采用大驼峰命名法。

例如 void DRV_ADC_Init(tDRV_ADC_DCB* dcb)

MM32-FDS 变量命名方式

  1. 代码库变量采用小驼峰命名法。如 GLOBAL u32 keyStatus
  2. 结构体类型定义采用模块层级名 + 外设模块名 + 结构体功能 + TypeDef 来定义。各级之间以下划线分隔。模块层级名及外设模块名采用大写形式。
  3. 结构体功能采用首字母大写的形式。例如 tDRV_EXTI_INSTANT
  4. 枚举类型定义采用 EM + 外设模块名 + 枚举类型功能 的形式。各级之间以下划线分隔。外设模块名及枚举类型功能采用大写形式。如 EM_UART_PARITY。枚举成员定义采用 em + 外设模块名 + 枚举成员功能 的形式。各级之间以下划线分隔。外设模块名为大写形式。枚举成员功能为首字母大写。

用户模块例程说明

模块例程所在文件为 /app/IP/。例程通过调用 drv 层函数,实现用户代码与底层硬件相分离。用户所调用代码原型声明在 drv.h 中,函数原型定义在各 DRV 层 C 文件函数中。DRV 层通过调用 BSP 层及 HAL 层来实现硬件底层实现。

中断函数防止重复定义规则

因为 IP 中断函数原型名称只有一个无法修改,因此模块中加入中断函数实现代码时,通过在项目中添加宏定义 __EX_IPxxx ,通过预编译判断 __EX_IPxxx 是否已经定义来区分不同项目的中断函数。在 drv_xxx.c 的文件属性中,预定义防重入宏定义。

C prepreprocessor macro definition description

No. Definition type Description Example Notes
1 IDE selection Define the development environment __KEIL, __IAR, __GCC
2 Chip selection Define the selected chip __MM3N1, __MM0N1, __MM0P1, __MM0Q1
3 Module selection Select modules to protect duplicate definition content __EX_UART
4 Development board selection Select development board __MM32_MINIBOARD, __MM32_EVB
5 System resource enable Select interrupt mode or query mode to use system resources __SYS_RESOURCE_IT, __SYS_RESOURCE_POLLING Double underline is enabled, single underline is disabled
7 Timeout return time Set the timeout return time, 0 means no timeout setting OVERTIME=0
8 External clock setting Set the external clock, the unit is Hz CLOCK=8000000 Only for IAR EWARM