打印
[文档下载]

新唐NuEdu-SDK-M451开发板快速上手

[复制链接]
1391|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
仙女山|  楼主 | 2015-11-5 20:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
得到了一块新唐公司的NuEdu-SDK-M451 开发板。小小使用了一下,分享一下自己的环境(keil uVersion4)搭建过程,和对这款芯片的看法吧,希望和大家能够交流一下使用心得,如果有什么错误还希望大家批评指正。
下图就是开发板模块:



开发板上板载的芯片型号是: M453VG6AE
下面是这个芯片的具体信息,如果想了解这个芯片更详细的信息请查看新唐官网
• 内核    - ARM® Cortex™-M4 with DSP and FPU    - 最大频率72 MHz    - 工作电压: 2.5V to 5.5V
    - 工作温度: -40℃ ~ 105℃
• 存储
    - 256 KB of Flash Memory
    - 32 KB of SRAM
12-bit ADC (16 通道) 12-bit DAC• 16-bit PWM (12 通道)
定时器    - 4个 32bit 定时器
    - RTC
连接    - USB 2.0 OTG
    - CAN 总线接口
    - 四个 UART 串口
    - 三个 SPI 总线接口
    - 两个 I²C总线接口 (1 MHz)
    - Smart card 接口
    - 两 个 I²S 总线接口
安全    - CRC engine
这片芯片的性能和外设 从参数来看还是可以的,基本该有的功能都有了,采用Cortex-M4的内核,作为一片MCU处理速度还是相当强大的。
    我的电脑里已经装好了keil C uVersion 4 ,在这里我就略过如何安装keil了(还支持IAR、CooCox等开发环境),我在这里只讲下keil开发M451的环境搭建。

沙发
仙女山|  楼主 | 2015-11-5 20:37 | 只看该作者
1.首先去官网下载如下内容:
       M451芯片手册    M451Series_BSP_CMSIS_V3.00.003.zip  板级支持包
      Nu-Link在keil上的驱动:Nu-Link Driver for Keil RVMDK V1.27.6340.zip
2.安装Nu-Link Driver
      (1)将你下载的 Nu-Link_Keil_Driver_V1.27.6340.zip 解压 ,找到里面的安装文件 安装在你的 你的 keil 的安装目录里。(我的安装目录为 E:\Program\Keil u4 , 所以我安装的时候目录选中Keil u4 即可),安装成功后,会出现 Nu-Link_Keil 这个文件夹(E:\Program\Keil u4\Nu-Link_Keil)大家可以直接参考这个文档NuMicro 开发环境 - Keil uVision4 快速上手.pdf完成配置。

(2) 打开keil 之后新建一个工程。
         将板级支持包(M451SeriesBSP_CMSIS_v3.00.003 )压缩包中的 M451SeriesBSP_CMSIS_v3.00.003 \Library 下的 CMSIS文件夹   Device文件夹 和 StdDriver 文件夹 复制到你工程所在的文件夹中。
(3)在新建的项目中 建立图片上三个文件夹。

(4)为CMSIS 中添加 图片上的文件 (分别在 keil工程所在目录\Library\Device\Nuvoton\M451Series\Source 和 keil工程所在目录\Library\Device\Nuvoton\M451Series\Source\IAR 文件夹中)
user 文件夹中存放用户自己新建的 main.c 文件 也是主程序

使用特权

评论回复
板凳
仙女山|  楼主 | 2015-11-5 20:38 | 只看该作者
library 中添加 ( keil工程所在目录\Library\StdDriver\src )
(5)为工程添加头文件 。



在 main.c 中放入下面的程序:

使用特权

评论回复
地板
仙女山|  楼主 | 2015-11-5 20:40 | 只看该作者
#include <stdio.h>
#include "M451Series.h"

#define HCLK_CLOCK       72000000


void SYS_Init(void)
{
    /*---------------------------------------------------------------------------------------------------------*/
    /* Init System Clock                                                                                       */
    /*---------------------------------------------------------------------------------------------------------*/
    /* Unlock protected registers */
    SYS_UnlockReg();

    /* Enable HIRC clock (Internal RC 22.1184MHz) */
    CLK_EnableXtalRC(CLK_PWRCTL_HIRCEN_Msk);

    /* Wait for HIRC clock ready */
    CLK_WaitClockReady(CLK_STATUS_HIRCSTB_Msk);

    /* Select HCLK clock source as HIRC and and HCLK clock divider as 1 */
    CLK_SetHCLK(CLK_CLKSEL0_HCLKSEL_HIRC, CLK_CLKDIV0_HCLK(1));

    /* Enable HXT clock (external XTAL 12MHz) */
    CLK_EnableXtalRC(CLK_PWRCTL_HXTEN_Msk);

    /* Wait for HXT clock ready */
    CLK_WaitClockReady(CLK_STATUS_HXTSTB_Msk);

    /* Set core clock as HCLK_CLOCK */
    CLK_SetCoreClock(HCLK_CLOCK);

    /* Update System Core Clock */
    /* User can use SystemCoreClockUpdate() to calculate SystemCoreClock. */
    SystemCoreClockUpdate();

    /*---------------------------------------------------------------------------------------------------------*/
    /* Init I/O Multi-function                                                                                 */
    /*---------------------------------------------------------------------------------------------------------*/
    /* Set GPD multi-function pins for UART0 RXD and TXD */
    SYS->GPD_MFPL &= ~(SYS_GPD_MFPL_PD6MFP_Msk | SYS_GPD_MFPL_PD1MFP_Msk);
    SYS->GPD_MFPL |= (SYS_GPD_MFPL_PD6MFP_UART0_RXD | SYS_GPD_MFPL_PD1MFP_UART0_TXD);

    /* Lock protected registers */
    SYS_LockReg();
}


/*---------------------------------------------------------------------------------------------------------*/
/* MAIN function                                                                                           */
/*---------------------------------------------------------------------------------------------------------*/
int main(void)
{      
    int i=0;
    SYS_Init();

    /* Select SysTick clock source as HXT */
    CLK_SetSysTickClockSrc(CLK_CLKSEL0_STCLKSEL_HXT);

    /*Configure PC.9 as Output mode */
    GPIO_SetMode(PC, BIT9, GPIO_MODE_OUTPUT);
    GPIO_SetMode(PC, BIT10, GPIO_MODE_OUTPUT);
    GPIO_SetMode(PC, BIT11, GPIO_MODE_OUTPUT);
     
    /*PWM_ConfigOutputChannel(PWM0, PWM_CH_0_MASK, 100, 50);
    PWM_Start(PWM0,BIT0);
    */
    while(1)
    {
        /* Configure PC.9 to low */
        PC9  = 1; // PC10 = 0;PC11 = 0;
        /* Delay 200 ms */
        CLK_SysTickDelay( 200-i);

        /* Configure PC.9 to high */
        PC9  = 0;//PC10 = 1; PC11 = 1;
        /* Delay 200 ms */
        CLK_SysTickDelay(i);
        i++;
        if(++i == 200 ) i=0;
    }

}

使用特权

评论回复
5
仙女山|  楼主 | 2015-11-5 20:40 | 只看该作者
    /**************************************************************************//**
     * [url=home.php?mod=space&uid=288409]@file[/url]     main.c
     * [url=home.php?mod=space&uid=895143]@version[/url]  V1.00
     * $Date: 14/08/28 10:51a $
     * [url=home.php?mod=space&uid=247401]@brief[/url]    Toggle PC.9 to turn on / off the board LED
     *
     * @note
     * Copyright (C) 2013 Nuvoton Technology Corp. All rights reserved.
     *
     ******************************************************************************/
    #include <stdio.h>
    #include "M451Series.h"

    #define HCLK_CLOCK       72000000


    void SYS_Init(void)
    {
        /*---------------------------------------------------------------------------------------------------------*/
        /* Init System Clock                                                                                       */
        /*---------------------------------------------------------------------------------------------------------*/
        /* Unlock protected registers */
        SYS_UnlockReg();

        /* Enable HIRC clock (Internal RC 22.1184MHz) */
        CLK_EnableXtalRC(CLK_PWRCTL_HIRCEN_Msk);

        /* Wait for HIRC clock ready */
        CLK_WaitClockReady(CLK_STATUS_HIRCSTB_Msk);

        /* Select HCLK clock source as HIRC and and HCLK clock divider as 1 */
        CLK_SetHCLK(CLK_CLKSEL0_HCLKSEL_HIRC, CLK_CLKDIV0_HCLK(1));

        /* Enable HXT clock (external XTAL 12MHz) */
        CLK_EnableXtalRC(CLK_PWRCTL_HXTEN_Msk);

        /* Wait for HXT clock ready */
        CLK_WaitClockReady(CLK_STATUS_HXTSTB_Msk);

        /* Set core clock as HCLK_CLOCK */
        CLK_SetCoreClock(HCLK_CLOCK);

        /* Update System Core Clock */
        /* User can use SystemCoreClockUpdate() to calculate SystemCoreClock. */
        SystemCoreClockUpdate();

        /*---------------------------------------------------------------------------------------------------------*/
        /* Init I/O Multi-function                                                                                 */
        /*---------------------------------------------------------------------------------------------------------*/
        /* Set GPD multi-function pins for UART0 RXD and TXD */
        SYS->GPD_MFPL &= ~(SYS_GPD_MFPL_PD6MFP_Msk | SYS_GPD_MFPL_PD1MFP_Msk);
        SYS->GPD_MFPL |= (SYS_GPD_MFPL_PD6MFP_UART0_RXD | SYS_GPD_MFPL_PD1MFP_UART0_TXD);

        /* Lock protected registers */
        SYS_LockReg();
    }


    /*---------------------------------------------------------------------------------------------------------*/
    /* MAIN function                                                                                           */
    /*---------------------------------------------------------------------------------------------------------*/
    int main(void)
    {      
        int i=0;
        SYS_Init();

        /* Select SysTick clock source as HXT */
        CLK_SetSysTickClockSrc(CLK_CLKSEL0_STCLKSEL_HXT);

        /*Configure PC.9 as Output mode */
        GPIO_SetMode(PC, BIT9, GPIO_MODE_OUTPUT);
        GPIO_SetMode(PC, BIT10, GPIO_MODE_OUTPUT);
        GPIO_SetMode(PC, BIT11, GPIO_MODE_OUTPUT);
         
        /*PWM_ConfigOutputChannel(PWM0, PWM_CH_0_MASK, 100, 50);
        PWM_Start(PWM0,BIT0);
        */
        while(1)
        {
            /* Configure PC.9 to low */
            PC9  = 1; // PC10 = 0;PC11 = 0;
            /* Delay 200 ms */
            CLK_SysTickDelay( 200-i);

            /* Configure PC.9 to high */
            PC9  = 0;//PC10 = 1; PC11 = 1;
            /* Delay 200 ms */
            CLK_SysTickDelay(i);
            i++;
            if(++i == 200 ) i=0;
        }

    }

使用特权

评论回复
6
仙女山|  楼主 | 2015-11-5 20:42 | 只看该作者
/**************************************************************************//**
* @file     main.c
* @version  V1.00
* $Date: 14/08/28 10:51a $
* @brief    Toggle PC.9 to turn on / off the board LED
*
* @note
* Copyright (C) 2013 Nuvoton Technology Corp. All rights reserved.
*
******************************************************************************/
#include <stdio.h>
#include "M451Series.h"

#define HCLK_CLOCK       72000000


void SYS_Init(void)
{
    /*---------------------------------------------------------------------------------------------------------*/
    /* Init System Clock                                                                                       */
    /*---------------------------------------------------------------------------------------------------------*/
    /* Unlock protected registers */
    SYS_UnlockReg();

    /* Enable HIRC clock (Internal RC 22.1184MHz) */
    CLK_EnableXtalRC(CLK_PWRCTL_HIRCEN_Msk);

    /* Wait for HIRC clock ready */
    CLK_WaitClockReady(CLK_STATUS_HIRCSTB_Msk);

    /* Select HCLK clock source as HIRC and and HCLK clock divider as 1 */
    CLK_SetHCLK(CLK_CLKSEL0_HCLKSEL_HIRC, CLK_CLKDIV0_HCLK(1));

    /* Enable HXT clock (external XTAL 12MHz) */
    CLK_EnableXtalRC(CLK_PWRCTL_HXTEN_Msk);

    /* Wait for HXT clock ready */
    CLK_WaitClockReady(CLK_STATUS_HXTSTB_Msk);

    /* Set core clock as HCLK_CLOCK */
    CLK_SetCoreClock(HCLK_CLOCK);

    /* Update System Core Clock */
    /* User can use SystemCoreClockUpdate() to calculate SystemCoreClock. */
    SystemCoreClockUpdate();

    /*---------------------------------------------------------------------------------------------------------*/
    /* Init I/O Multi-function                                                                                 */
    /*---------------------------------------------------------------------------------------------------------*/
    /* Set GPD multi-function pins for UART0 RXD and TXD */
    SYS->GPD_MFPL &= ~(SYS_GPD_MFPL_PD6MFP_Msk | SYS_GPD_MFPL_PD1MFP_Msk);
    SYS->GPD_MFPL |= (SYS_GPD_MFPL_PD6MFP_UART0_RXD | SYS_GPD_MFPL_PD1MFP_UART0_TXD);

    /* Lock protected registers */
    SYS_LockReg();
}


/*---------------------------------------------------------------------------------------------------------*/
/* MAIN function                                                                                           */
/*---------------------------------------------------------------------------------------------------------*/
int main(void)
{      
    int i=0;
    SYS_Init();

    /* Select SysTick clock source as HXT */
    CLK_SetSysTickClockSrc(CLK_CLKSEL0_STCLKSEL_HXT);

    /*Configure PC.9 as Output mode */
    GPIO_SetMode(PC, BIT9, GPIO_MODE_OUTPUT);
    GPIO_SetMode(PC, BIT10, GPIO_MODE_OUTPUT);
    GPIO_SetMode(PC, BIT11, GPIO_MODE_OUTPUT);
     
    /*PWM_ConfigOutputChannel(PWM0, PWM_CH_0_MASK, 100, 50);
    PWM_Start(PWM0,BIT0);
    */
    while(1)
    {
        /* Configure PC.9 to low */
        PC9  = 1; // PC10 = 0;PC11 = 0;
        /* Delay 200 ms */
        CLK_SysTickDelay( 200-i);

        /* Configure PC.9 to high */
        PC9  = 0;//PC10 = 1; PC11 = 1;
        /* Delay 200 ms */
        CLK_SysTickDelay(i);
        i++;
        if(++i == 200 ) i=0;
    }

}

使用特权

评论回复
7
yan_jian| | 2015-11-6 16:56 | 只看该作者
照你的方法,成功!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

36

主题

340

帖子

2

粉丝