查看: 2109|回复: 0

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

[复制链接]
  • TA的每日心情
    慵懒
    2016-10-17 12:07
  • 签到天数: 306 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2014-11-20 17:09:09 | 显示全部楼层 |阅读模式
    分享到:
    得到了一块新唐公司的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的环境搭建。
    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 文件 也是主程序
    library 中添加 ( keil工程所在目录\Library\StdDriver\src )

    (5)为工程添加头文件 。



    在 main.c 中放入下面的程序:
    #include <stdio.h>#include "M451Series.h"#define HCLK_CLOCK       72000000void 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 = 0C11 = 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;    }}/**************************************************************************//** * @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       72000000void 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 = 0C11 = 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;    }}/**************************************************************************//** * @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       72000000void 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 = 0C11 = 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;    }}编译下载之后就可以运行了,就可以看到PC9对应的LED在闪烁。
    希望可以和更多爱好者们多多交流学习。
    由于本人水平有限,文章中若有错误,或有什么建议问题欢迎私信或者Email(574433742@qq.com)我哦。。。。
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    手机版|小黑屋|与非网

    GMT+8, 2024-4-24 04:57 , Processed in 0.117276 second(s), 17 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.