【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 进行工程测试,包括工程创建、流程图、代码、调试、上传和运行等流程,为该设备的相关开发和应用提供了参考。

 
					
				
 
			
			
			
						
			 我要赚赏金
 我要赚赏金 STM32
STM32 MCU
MCU 通讯及无线技术
通讯及无线技术 物联网技术
物联网技术 电子DIY
电子DIY 板卡试用
板卡试用 基础知识
基础知识 软件与操作系统
软件与操作系统 我爱生活
我爱生活 小e食堂
小e食堂

