【SAM E51 Curiosity Nano 开发板】开箱、介绍、环境搭建、工程测试
本文介绍了 SAM E51 Curiosity Nano 开发板的相关信息,包括开箱、主控和调试器介绍、板载资源、系统框架、原理图等,并进行了上电测试、MPLAB X IDE 开发环境搭建,并结合官方 Demo 进行工程测试,包括工程创建、流程图、代码、调试、上传和运行等流程
开箱
介绍了 SAM E51 Curiosity Nano Evaluation Kit 的包装、开发板外观等。
包装
Top view
Bottom view
注意到开发板的排针布局采用蛇形排孔,方便排针在无焊接情况下使用。
介绍
SAME51J20A Curiosity Nano 评估套件是一个硬件平台,用于 SAME51J20A 微控制器(MCU)。
受 MPLAB X 集成开发环境 (IDE) 的支持,该工具包提供了对 SAME51J20A 特性的简单访问,并解释了如何访问 将设备集成到定制设计中。
Curiosity Nano 系列评估套件包括板载调试器,不需外部工具即可实现对 SAME51J20A 的编程和调试操作。
MCU
ARM® Cortex®-M4 processor
Debugger
资源参数
SAME51J20A 微控制器
一个用户 LED (黄色)
一个用户按钮开关
一个板载调试器
可在 MPLAB X IDE 中识别
一个绿色电源/状态 LED
编程和调试
虚拟 COM 端口 (CDC)
一个逻辑分析仪 (DGI GPIO)
USB 供电
可调目标电压
由板载调试器控制的 MIC5353 LDO 调节器
1.8-3.6V 输出电压
500mA 最大输出电流 (受环境温度和输出电压限制)
详见:SAM E51 CURIOSITY NANO EVALUATION KIT | Microchip Technology
系统框图
SAME51J20A
电源
引脚定义
原理图
主控 MCU
调试器 Debugger
详见:SAME51 CURIOSITY NANO BRD
SAM E51 CURIOSITY NANO EVALUATION KIT | Microchip Technology
上电测试
使用 Micro-USB 数据线连接开发板和电脑,系统识别出板载存储器
同时板载 LED 闪烁
环境搭建
按照以下步骤完成 Curiosity Nano 平台搭建:
下载并安装 MPLAB X IDE 软件;
启动 MPLAB X IDE 工具;
在 PC 和板载调试器 USB 端口之间连接一条 USB 电缆 (Standard-A与Micro-B 或 Micro-AB)
当 Curiosity Nano Kit第一次连接到用户计算机时,操作系统将执行驱动程序软件安装。
MPLAB X IDE 包含该套件的驱动程序。
开发板通电,绿色状态指示 LED 将亮起;
MPLAB X IDE 会自动检测连接了哪个 Curiosity Nano 开发板。
MPLAB X IDE 将呈现相关的信息,如数据表和套件文档。
SAME51J20A 设备可由板载调试器编程和调试,不需要外部调试器工具。
工程测试
创建工程
下载 Demo 例程 代码 ;
例程描述
该例程演示了 LED (LED0) 超时切换并打印 LED 在串行终端上切换速率。
超时的周期从 500 毫秒到 1 秒、2 秒、4 秒,然后回到 500 毫秒,
通过 SAM E51 Curiosity Nano 评估套件上的开关 SW0 进行切换。
流程图
代码
打开 Source Files/main.c 文件
/******************************************************************************* Main Source File Company: Microchip Technology Inc. File Name: main.c Summary: This file contains the "main" function for a project. Description: This file contains the "main" function for a project. The "main" function calls the "SYS_Initialize" function to initialize the state machines of all modules in the system *******************************************************************************/ #include <stdio.h> #include <stddef.h> // Defines NULL #include <stdbool.h> // Defines true #include <stdlib.h> // Defines EXIT_FAILURE #include <string.h> #include "definitions.h" // SYS function prototypes /* RTC Time period match values for input clock of 1 KHz */ #define PERIOD_500MS 512 #define PERIOD_1S 1024 #define PERIOD_2S 2048 #define PERIOD_4S 4096 typedef enum { TEMP_SAMPLING_RATE_500MS = 0, TEMP_SAMPLING_RATE_1S = 1, TEMP_SAMPLING_RATE_2S = 2, TEMP_SAMPLING_RATE_4S = 3, } TEMP_SAMPLING_RATE; static TEMP_SAMPLING_RATE tempSampleRate = TEMP_SAMPLING_RATE_500MS; static const char timeouts[4][20] = {"500 milliSeconds", "1 Second", "2 Seconds", "4 Seconds"}; static volatile bool isRTCExpired = false; static volatile bool changeTempSamplingRate = false; static volatile bool isUSARTTxComplete = true; static uint8_t uartTxBuffer[100] = {0}; static void EIC_User_Handler(uintptr_t context) { changeTempSamplingRate = true; } static void rtcEventHandler (RTC_TIMER32_INT_MASK intCause, uintptr_t context) { if (intCause & RTC_MODE0_INTENSET_CMP0_Msk) { isRTCExpired = true; } } static void usartDmaChannelHandler(DMAC_TRANSFER_EVENT event, uintptr_t contextHandle) { if (event == DMAC_TRANSFER_EVENT_COMPLETE) { isUSARTTxComplete = true; } } // ***************************************************************************** // ***************************************************************************** // Section: Main Entry Point // ***************************************************************************** // ***************************************************************************** int main ( void ) { uint8_t uartLocalTxBuffer[100] = {0}; /* Initialize all modules */ SYS_Initialize ( NULL ); DMAC_ChannelCallbackRegister(DMAC_CHANNEL_0, usartDmaChannelHandler, 0); EIC_CallbackRegister(EIC_PIN_15,EIC_User_Handler, 0); RTC_Timer32CallbackRegister(rtcEventHandler, 0); sprintf((char*)uartTxBuffer, "Toggling LED at 500 milliseconds rate \r\n"); RTC_Timer32Start(); while ( true ) { if ((isRTCExpired == true) && (true == isUSARTTxComplete)) { isRTCExpired = false; isUSARTTxComplete = false; LED0_Toggle(); DMAC_ChannelTransfer(DMAC_CHANNEL_0, uartTxBuffer, \ (const void *)&(SERCOM5_REGS->USART_INT.SERCOM_DATA), \ strlen((const char*)uartTxBuffer)); } /* Maintain state machines of all polled MPLAB Harmony modules. */ if(changeTempSamplingRate == true) { changeTempSamplingRate = false; if(tempSampleRate == TEMP_SAMPLING_RATE_500MS) { tempSampleRate = TEMP_SAMPLING_RATE_1S; RTC_Timer32Compare0Set(PERIOD_1S); } else if(tempSampleRate == TEMP_SAMPLING_RATE_1S) { tempSampleRate = TEMP_SAMPLING_RATE_2S; RTC_Timer32Compare0Set(PERIOD_2S); } else if(tempSampleRate == TEMP_SAMPLING_RATE_2S) { tempSampleRate = TEMP_SAMPLING_RATE_4S; RTC_Timer32Compare0Set(PERIOD_4S); } else if(tempSampleRate == TEMP_SAMPLING_RATE_4S) { tempSampleRate = TEMP_SAMPLING_RATE_500MS; RTC_Timer32Compare0Set(PERIOD_500MS); } else { ; } RTC_Timer32CounterSet(0); sprintf((char*)uartLocalTxBuffer, "LED Toggling rate is changed to %s\r\n", &timeouts[(uint8_t)tempSampleRate][0]); DMAC_ChannelTransfer(DMAC_CHANNEL_0, uartLocalTxBuffer, \ (const void *)&(SERCOM5_REGS->USART_INT.SERCOM_DATA), \ strlen((const char*)uartLocalTxBuffer)); sprintf((char*)uartTxBuffer, "Toggling LED at %s rate \r\n", &timeouts[(uint8_t)tempSampleRate][0]); } } /* Execution should not come here during normal operation */ return ( EXIT_FAILURE ); } /******************************************************************************* End of File */
编程/调试工程
使用 MPLAB X IDE 软件打开项目 ~\same51n_getting_started\firmware\sam_e51_cnano.X ;
构建代码,单击工具栏中的 Make and Program 按钮,选择 Curiosity Nano ;
待显示 Programming Complete 表明固件上传完成。
运行 Demo
打开 Tera Term 软件,配置终端为串口模式;
波特率设置为 115200 bps;
SAM E51 板载 LED (LED0) 电平切换,默认超时周期为 500 毫秒;
LED 的切换速率显示在串口终端;
按下 SAM E51 板载开关 SW0 ,超时周期将更改为 1 秒;
随后每按一次开关 SW0 ,超时周期便会按照 500毫秒、1 秒、 2 秒、4 秒、500 毫秒次序循环切换。
详见:3.6.1 SAM E51 Curiosity Nano 评估套件上的入门应用程序 .
总结
本文介绍了 SAM E51 Curiosity Nano 开发板的相关信息,包括开箱、主控和调试器介绍、板载资源、系统框架、原理图等,并进行了上电测试、MPLAB X IDE 开发环境搭建,并结合官方 Demo 进行工程测试,包括工程创建、流程图、代码、调试、上传和运行等流程,为该设备的相关开发和应用提供了参考。