项目介绍
小型的GUI动画界面:能够实时显示数据状态的仪表盘。
项目设计思路(含设计框图)
基于MM32F0140实现的简易仪表盘,自制PCB,通过模拟SPI控制LCD,ADC作为输入数据引脚。
核心板设计框图
程序流程图
搜集素材的思路
通过MM32F0140资料主页、灵动的MindSDK的站点收集资料。
设计PCB时主要看:
-
MM32F0140 产品手册(中文版)
文档说明: 支持 MM32F0140 系列,提供了详细的规格说明,引脚定义,电气特性及封装信息。
-
Mini-F0140 (LQFP48) PCB设计文件
文档说明: Mini-F0140 原理图 & PCB板图 & 拼板图
写代码时候主要看:
-
MM32F0140 用户手册(中文版)
文档说明: 支持 MM32F0140 系列,提供了完整的系统架构,存储器及所有外设详细说明与寄存器描述。
-
MM32F0140 勘误表(中文版)
文档说明: 支持 MM32F0140 系列,提供了该产品当前已知的问题及解决方案。
-
AN0001 MDK5.18安装指南(中文版)
文档说明: MDK5.18安装指南,简要介绍了一个MM32芯片工程的建立。
-
MM32F0140 库函数与例程
文档说明: 支持 MM32F0140 与 Cortex-M 微控制器软件接口标准(CMSIS),支持 MM32 标准库(Standard peripheral library),支持 IAR 和 MDK 开发,包含丰富的库函数操作和寄存器操作的参考例程。
画原理图、PCB制板过程中遇到的问题,以及解决方法
问题:板载DAPlink插到电脑上无法识别
- 原因:设计的时候USB的DP、DM线上串了一个33R的电阻,实际焊接的时候,没有找到就用0R的替换了。于是出现了不识别的问题。
- 解决:找了两个51R的电阻焊了上去,一切正常。
问题:接上屏幕的时候,板子直接掉电,DAPLink一连接一断开,一连接一断开。
- 原因:电源芯片使用的XC6206,其输出电流的能力只有100ma,不足以供给屏幕使用。
- 解决:由于手上没有同封装高电流的芯片,也不想飞线换其他的芯片,于是就在6206上面又叠加了一个6206(不建议这样使用)。虽然MM32F040支持5V供电,但是板载的DAPLink与主芯片用的同样的电源,且那个芯片不支持5V供电,而且手上的LCD屏幕也不支持5V电平,所以不能改电源。
实现结果展示
板子
运行效果
在芯片设计过程中,遇到什么难题以及解决方法,或未来针对这个芯片的扩展项目
设计的时候还是挺顺利的,没啥问题,就不太习惯KiCAD。
下一步这个芯片可能用于做一些控制小项目,控制个小车,做个电烙铁啥的
芯片的优势与局限
说到这个芯片,最先想到的就是与它同主频的ST家的STM32F103了,我们来看一下两款芯片的介绍。
MM32F0140
- 使用高性能的 Arm® Cortex-M0 为内核的 32 位微控制器,最高工作频率可达 72MHz,内置高速存储器,丰富的增强型 I/O 端口和多种外设。
- 64KB Flash,8KB SRAM
- 1 个 12 位的 ADC和 1 个比较器
- 1 个 16 位通用定时器、1 个 32 位通用定时器、3 个 16 位基本定时器、1 个 16 位高级定时器
- 3 个 UART 接口、2 个 SPI 接口和 1 个 I2C 接口
- 1 个 FlexCAN 接口
- 工作电压为 2.0V - 5.5V
- 高可靠性: 支持最高 ±6000V HBM ESD,±2000V CDM ESD,高温 Latch-up 可耐电流 ±300mA
- 工作温度范围(环境温度)-40℃ - 85℃ 工业级,-40℃ - 105℃ 扩展工业级(后缀为 V)和 -40℃ - 125℃ 车规级(后缀为M)
- 125℃ 车规级,可提供 AEC-Q100 Grade1 认证
- 多种省电工作模式支持低功耗应用的需求
- 与 MM32F031 引脚兼容
- 提供 LQFP48、LQFP32、QFN32 和 TSSOP20 封装
- ■ 内核:ARM 32位的Cortex™-M3 CPU
- − 最高72MHz工作频率,在存储器的0等待周期访问时可达1.25DMips/MHz(Dhrystone 2.1)
- −单周期乘法和硬件除法
- ■存储器
- −从64K或128K字节的闪存程序存储器
- − 高达20K字节的SRAM
- ■时钟、复位和电源管理
- − 2.0~3.6伏供电和I/O引脚
- − 上电/断电复位(POR/PDR)、可编程电压监测器(PVD)
- − 4~16MHz晶体振荡器
- −内嵌经出厂调校的8MHz的RC振荡器
- −内嵌带校准的40kHz的RC振荡器
- − 产生CPU时钟的PLL
- −带校准功能的32kHz RTC振荡器
- ■低功耗
- −睡眠、停机和待机模式
- − VBAT为RTC和后备寄存器供电
- ■ 2个12位模数转换器,1μs转换时间(多达16个输入通道)
- − 转换范围:0至3.6V
- −双采样和保持功能
- −温度传感器
- ■DMA:
- − 7通道DMA控制器
- − 支持的外设:定时器、ADC、SPI、I2C和USART
- ■多达80个快速I/O端口
- − 26/37/51/80个I/O口,所有I/O口可以映像到16个外部中断;几乎所有端口均可容忍5V信号
- ■调试模式
- −串行单线调试(SWD)和JTAG接口
- ■多达7个定时器
- − 3个16位定时器,每个定时器有多达4个用于输入捕获/输出比较/PWM或脉冲计数的通道和增量编码器输入
- − 1个16位带死区控制和紧急刹车,用于电机控制的PWM高级控制定时器
- − 2个看门狗定时器(独立的和窗口型的)
- −系统时间定时器:24位自减型计数器
- ■多达9个通信接口
- − 多达2个I2C接口(支持SMBus/PMBus)
- − 多达3个USART接口(支持ISO7816接口,LIN,IrDA接口和调制解调控制)
- − 多达2个SPI接口(18M位/秒)
- − CAN接口(2.0B 主动)
- − USB 2.0全速接口
- ■ CRC计算单元,96位的芯片唯一代码
优势:对比可以发现,灵动的芯片定位更加偏向工业,车规,提供了一个FlexCAN接口,还有宽电压供电,各种温度规格。
局限:面向低端市场,性能不够,资源不够。
原理图/PCB图
原理图
PCB
3D图
代码
主要代码
#include "oled.h"
#include "delay.h"
#include "adcx.h"
s32 main(void)
{
uint16_t num = 0;
DELAY_Init();
ADC1SingleChannelInit();
Lcd_Init(); //初始化OLED
LCD_Clear(BLACK); //清屏
for(;;)
{
num = Get_Adc_Average(5);
LCD_4020num(50+24*0,160, WHITE,num/1000%10);
LCD_4020num(50+24*1,160, WHITE,num/100%10);
LCD_4020num(50+24*2,160, WHITE,num/10%10);
LCD_4020num(50+24*3,160, WHITE,num/1%10);
{
uint8_t x,y;
x=200;
y=200;
for(int8_t i = 0; i<20; i++)
{
y = (20-i)*10;
x-=i/2;
if(num/200>i)
LCD_Fill(x, y, 220, y + 3, WHITE);
else
LCD_Fill(x, y, 220, y + 3, BLACK);
}
}
}
}