第一章 芯片与开发板简介
1.1 SAME51J20A微控制器核心特性
CPU架构:120MHz Cortex-M4F内核(带FPU和DSP指令)
存储资源:1MB Flash + 256KB SRAM
关键外设:
6个SERCOM模块(可配置为USART/SPI/I2C)
1路CAN FD
9个定时器/计数器(TC/TCC)支持输入捕获/比较、PWM
12位ADC(最高1Msps采样率,20 channel)
1路DAC 12位
板载USB 2.0 Full Speed
PTC控制器
时钟系统:支持多路时钟源与锁相环(详见第二章)
1.2 EV76S68A开发板硬件资源
调试接口:板载Curiosity Nano调试器(集成CDC串口)
微控制器:ATSAME51J20A
用户LED:PA14
用户按键:PA15
外部低速晶振:32.768kHz
第二章 时钟系统配置
2.1 时钟树整体架构
SAME51J20A时钟系统包含5个主要时钟源(可能描述有问题):
2.2 当前时钟配置实现
硬件约束:开发板无外部高速晶振
GCLK2 (60MHz) → TC3时钟 → 驱动PWM呼吸灯(第四章) GCLK1 (48MHz) → SERCOM0 → 串口115200bps(第三章)
MCC配置关键步骤:
使能DFLL48M(内部48MHz RC振荡器)
配置FDPLL0为整数倍频模式 倍数 = (param1 + 1)+(param2 / 32)
配置通用时钟分配器:
GCLK0 | FDPLL0 | 1 | 120 MHz | CPU的时钟、GCLK2的时基 |
GCLK1 | DFLL | 1 | 48 MHz | FDPLL0的时基、SERCOM0/TC3外设的时钟 |
GCLK2 | GCLK0 | 2 | 60 MHz | 暂未使用 |
第三章 串口通信实现
3.1 硬件连接与配置
物理接口:PA08:TX,PA09:RX
协议参数:115200bps,8位数据,无校验,1停止位
3.2 MCC图形化配置
引脚配置:PA08:TX,PA09:RX
协议参数:115200bps,8位数据,无校验,1停止位
第四章 LED灯控制实现
4.1 硬件电路分析
共阳极LED接法 → 通过INVERT_PWM_OUTPUT极性反转支持,或者可以勾选反转输出(为了方便更改,因此没选用该方法)
4.2 TC3定时器配置
MCC参数设置:
第五章 系统架构与代码逻辑
5.1 软件层次结构
5.2 主程序流程图
5.3 关键数据流模块输入输出控制流
serial_service | 串口原始数据 | 格式化命令字符串 | → cli_core |
cli_core | 命令字符串 | 解析后的参数(argc/argv) | → app_led/app_print |
app_led | 命令参数 | PWM参数/状态标志 | → LED状态机 |
LED状态机 | 模式参数 | TC3寄存器值 | → 物理LED |
5.4 软件模块化优势
优势 | 实现方式 | 案例 |
模块解耦 | 头文件定义接口,源文件实现细节 | app_led.h 声明 LED_parse(),main.c 直接调用 |
易扩展 | 命令注册机制 | 添加新命令只需扩展 cmd_t 结构体 |
实时响应 | SysTick 10ms 轮询 | LED状态平滑切换,无肉眼可见闪烁 |
跨平台 | PLIB抽象硬件差异 | 更换MCU只需重写plib_xxx模块 |
第六章 功能验证与总结
6.1 测试项目结果
功能项 | 测试命令 | 结果 |
LED呼吸灯 | led -m 0 | PASS |
LED反转状态 | led -m 1 | PASS |
LED自定义占空比 | led -m 2 [duty] | PASS |
LED blink(比1微快) | led -m 3 | PASS |
LED从当前状态渐变亮 | led -m 4 | PASS |
LED从当前状态渐变暗 | led -m 5 | PASS |
打印运算结果 | print -n num1 + num2 = ? | PASS |
打印指定内存数据 | print -m addr len | PASS |
数据转换为16进制 | print -x num | PASS |
打印字符串 | print -s "str" | PASS |
部分测试LOG: 00:18:27:742 ---- 已发送 utf8 编码消息: "print -s \"Hello World\"\r\n" ---- 00:18:27:749 -> Hello World 00:18:56:364 ---- 已发送 utf8 编码消息: "print -n 8 * 8 = ?\r\n" ---- 00:18:56:383 -> 64 00:19:20:587 ---- 已发送 utf8 编码消息: "print -m 0 8\r\n" ---- 00:19:20:616 -> Memory at 0x0 (8 bytes): 00:19:20:616 -> 0xF0 0xFF 0x03 0x20 0x65 0x2E 0x00 0x00 00:19:40:759 ---- 已发送 utf8 编码消息: "led -m 2 50\r\n" ---- 00:19:40:783 -> LED mode set to 2 00:19:43:808 ---- 已发送 utf8 编码消息: "led -m 2 0\r\n" ---- 00:19:43:827 -> LED mode set to 2 00:19:52:854 ---- 已发送 utf8 编码消息: "led -m 4\r\n" ---- 00:19:52:869 -> LED mode set to 4 00:19:52:869 -> Fade In: 1% 00:19:52:928 -> Fade In: 2% 00:19:52:990 -> Fade In: 3% 00:19:53:021 -> Fade In: 4% 00:19:53:083 -> Fade In: 5% 00:19:53:186 ---- 已发送 utf8 编码消息: "\r\n" ---- 00:19:53:144 -> Fade In: 6% 00:19:53:206 -> Fade In: 7% 00:19:53:267 -> Fade In: 8% 00:19:53:329 -> Fade In: 9% 00:19:53:393 -> Fade In: 10% 00:19:53:452 -> Fade In: 11% 00:19:53:514 -> Fade In: 12% 00:19:53:576 -> Fade In: 13% 00:19:53:637 -> Fade In: 14% 00:19:53:699 -> Fade In: 15% 00:19:53:760 -> Fade In: 16% 00:19:53:822 -> Fade In: 17% 00:19:53:884 -> Fade In: 18% 00:19:53:945 -> Fade In: 19% 00:19:54:007 -> Fade In: 20% 00:19:54:068 -> Fade In: 21% 00:19:54:130 -> Fade In: 22% 00:19:54:191 -> Fade In: 23% 00:19:54:253 -> Fade In: 24% 00:19:54:314 -> Fade In: 25% 00:19:54:376 -> Fade In: 26% 00:19:54:438 -> Fade In: 27% 00:19:54:499 -> Fade In: 28% 00:19:54:561 -> Fade In: 29% 00:19:54:623 -> Fade In: 30% 00:19:54:684 -> Fade In: 31% 00:19:54:746 -> Fade In: 32% 00:19:54:807 -> Fade In: 33% 00:19:54:869 -> Fade In: 34% 00:19:54:931 -> Fade In: 35% 00:19:54:995 -> Fade In: 36% 00:19:55:054 -> Fade In: 37% 00:19:55:115 -> Fade In: 38% 00:19:55:177 -> Fade In: 39% 00:19:55:239 -> Fade In: 40% 00:19:55:269 -> Fade In: 41% 00:19:55:331 -> Fade In: 42% 00:19:55:393 -> Fade In: 43% 00:19:55:454 -> Fade In: 44% 00:19:55:526 -> Fade In: 45% 00:19:55:628 -> Fade In: 46% 00:19:55:639 -> Fade In: 47% 00:19:55:705 -> Fade In: 48% 00:19:55:781 -> Fade In: 49% 00:19:55:824 -> Fade In: 50% 00:19:55:886 -> Fade In: 51% 00:19:55:947 -> Fade In: 52% 00:19:56:009 -> Fade In: 53% 00:19:56:070 -> Fade In: 54% 00:19:56:132 -> Fade In: 55% 00:19:56:193 -> Fade In: 56% 00:19:56:257 -> Fade In: 57% 00:19:56:317 -> Fade In: 58% 00:19:56:378 -> Fade In: 59% 00:19:56:440 -> Fade In: 60% 00:19:56:502 -> Fade In: 61% 00:19:56:599 -> Fade In: 62% 00:19:56:625 -> Fade In: 63% 00:19:56:686 -> Fade In: 64% 00:19:56:748 -> Fade In: 65% 00:19:56:810 -> Fade In: 66% 00:19:56:872 -> Fade In: 67% 00:19:56:933 -> Fade In: 68% 00:19:56:994 -> Fade In: 69% 00:19:57:056 -> Fade In: 70% 00:19:57:136 -> Fade In: 71% 00:19:57:179 -> Fade In: 72% 00:19:57:241 -> Fade In: 73% 00:19:57:302 -> Fade In: 74% 00:19:57:364 -> Fade In: 75% 00:19:57:425 -> Fade In: 76% 00:19:57:487 -> Fade In: 77% 00:19:57:587 -> Fade In: 78% 00:19:57:615 -> Fade In: 79% 00:19:57:641 -> Fade In: 80% 00:19:57:702 -> Fade In: 81% 00:19:57:764 -> Fade In: 82% 00:19:57:826 -> Fade In: 83% 00:19:57:887 -> Fade In: 84% 00:19:57:949 -> Fade In: 85% 00:19:58:029 ---- 已发送 utf8 编码消息: "led -m 2 0\r\n" ---- 00:19:58:011 -> LED mode set to 2
6.2 优化方向
新增屏幕:通过屏幕显示更便于调试
优化命令:目前的命令感觉不是很好用,但又没有什么好想法,准备做一个类似于Tab补全和历史命令保存的功能
6.3 gitee仓库链接
https://gitee.com/YuThirteen/SAME51J20A
参考文件
[1] SAME51J20 芯片数据手册:https://ww1.microchip.com/downloads/aemDocuments/documents/MCU32/ProductDocuments/DataSheets/SAM-D5x-E5x-Family-Data-Sheet-DS60001507.pdf
[2] EV76S68A 开发板用户手册:https://ww1.microchip.com/downloads/aemDocuments/documents/MCU32/ProductDocuments/UserGuides/SAM-E51-Curiosity-Nano-User-Guide-DS70005432.pdf