打印
[应用方案]

八月新唐+面向IOT的NUC472实现功能设计

[复制链接]
1060|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 jinglixixi 于 2017-8-13 15:02 编辑

前段时间有机会接触了新唐面向IOT所推出的NuMaker-PFM-NUC472开发板,这块开发板与前期推出的黑色开发板NuTiny-SDK-NUC472有很大的不同,它在外设方面又增添了许多新的功能模块,其外观如图1所示。
    图1 NuMaker-PFM-NUC472开发板

该开发板的基本配置为:主频72MHz、512KB Flash、64KB SRAMMCU176引脚的NUC472HI8AE
在上电后,从电脑上会发现有虚拟的UMBED和串口COM11,如图2所示。
      
    图2 虚拟串口

本想在网上找些相关的例程来辅助学习,无奈却没有找到,所以只好参考NuTiny-SDK-NUC472开发板的资源来作为参考。
在进行程序下载时,需用到编译所生成的*.bin文件,并将其复制到虚拟UMBED中。若想进行串行通讯,则需要用USBTTL串行通讯模块来连接板上的串行通讯口UART0,如图3所示。通过串口助手即可查看活动所要实现的制作效果,参见图4所示。
      
    图3 串口连接

      
    图4 制作效果

    实现制作效果的程序如下,它是通过串行通讯函数、A/D转换中断函数及主函数等组成的。
#include <stdio.h>
#include "NUC472_442.h"
#define PLLCON_SETTING      CLK_PLLCTL_84MHz_HXT
#define PLL_CLOCK           84000000
int n=0;
long int delay_1us(void)
{
        long int count=2;
        while(count--);
        return 0;
}

void delay_ms(unsigned int nms)
{         
  unsigned int n,m;        
        n=nms;
        while(n)
        {
        for(m=0;m<1000;m++) delay_1us();
        n--;        
        }              
}   

void ADC_IRQHandler(void)
{
     uint32_t u32Flag;
      float u;
      // Get ADC conversion finish interrupt flag
      u32Flag = ADC_GET_INT_FLAG(ADC, ADC_ADF_INT);
      if(n<3)
          {
            if(u32Flag & ADC_ADF_INT)
                        {
            uint32_t u32Result;
        u32Result = ADC_GET_CONVERSION_DATA(ADC, 0);
                        u=3.3*u32Result/0xfff;      
                        if(n==0)  printf("#1 = %4.2F V;\r\n",u);
            u32Result = ADC_GET_CONVERSION_DATA(ADC, 1);
                        u=3.3*u32Result/0xfff;
            if(n==1)  printf("#2 = %4.2F V;\r\n",u);
            u32Result = ADC_GET_CONVERSION_DATA(ADC, 2);
                        u=3.3*u32Result/0xfff;
            if(n==2)  printf("#3 = %4.2F V.\r\n",u);   
      }
      //NVIC_DisableIRQ(ADC_IRQn);//
                ADC_STOP_CONV(ADC);
                delay_ms(500);  
                ADC_START_CONV(ADC);
        ADC_CLR_INT_FLAG(ADC, u32Flag);
                n++;
          }
                if(n==3)
                {
                ADC_STOP_CONV(ADC);
                printf("MyID:jinglixixi \r\n");
                }
}

void SYS_Init(void)
{
    /*---------------------------------------------------------------------------------------------------------*/
    /* Init System Clock */
    /*---------------------------------------------------------------------------------------------------------*/
    /* Unlock protected registers */
    SYS_UnlockReg();
    /* Enable External XTAL (4~24 MHz) */
    CLK_EnableXtalRC(CLK_PWRCTL_HXTEN_Msk);
    /* Waiting for 12MHz clock ready */
    CLK_WaitClockReady( CLK_STATUS_HXTSTB_Msk);
    /* Switch HCLK clock source to HXT */
    CLK_SetHCLK(CLK_CLKSEL0_HCLKSEL_HXT,CLK_CLKDIV0_HCLK(1));
    /* Set PLL to power down mode and PLL_STB bit in CLKSTATUS register will be cleared by hardware.*/
    CLK->PLLCTL|= CLK_PLLCTL_PD_Msk;
    /* Set PLL frequency */
    CLK->PLLCTL = PLLCON_SETTING;
    /* Waiting for clock ready */
    CLK_WaitClockReady(CLK_STATUS_PLLSTB_Msk);
    /* Switch HCLK clock source to PLL */
    CLK_SetHCLK(CLK_CLKSEL0_HCLKSEL_PLL,CLK_CLKDIV0_HCLK(1));
    /* Enable IP clock */
    CLK_EnableModuleClock(UART0_MODULE);
    CLK_EnableModuleClock(ADC_MODULE);
    /* Select IP clock source */
    CLK_SetModuleClock(UART0_MODULE,CLK_CLKSEL1_UARTSEL_HXT,CLK_CLKDIV0_UART(1));
    CLK_SetModuleClock(ADC_MODULE,CLK_CLKSEL1_ADCSEL_PCLK,CLK_CLKDIV0_ADC(5));
    /* Update System Core Clock */
    /* User can use SystemCoreClockUpdate() to calculate SystemCoreClock. */
    SystemCoreClockUpdate();
    /*---------------------------------------------------------------------------------------------------------*/
    /* Init I/O Multi-function                                      */
    /*---------------------------------------------------------------------------------------------------------*/
    /* Set GPG multi-function pins for UART0 RXD and TXD */
    SYS->GPG_MFPL = SYS_GPG_MFPL_PG1MFP_UART0_RXD | SYS_GPG_MFPL_PG2MFP_UART0_TXD ;
    /* Set GPG multi-function pins for CKO */
    SYS->GPC_MFPL = (SYS->GPC_MFPL & ~SYS_GPC_MFPL_PC5MFP_Msk) | SYS_GPC_MFPL_PC5MFP_CLK_O ;
    /* Configure analog input pins ADC0~ADC2 (GPE0~GPE2) */
    SYS->GPE_MFPL = SYS_GPE_MFPL_PE0MFP_ADC0_0 | SYS_GPE_MFPL_PE1MFP_ADC0_1 | SYS_GPE_MFPL_PE2MFP_ADC0_2;
    /* Disable the digital input path */
    PE->DINOFF = PE->DINOFF | (GPIO_DINOFF_DINOFF0_Msk|GPIO_DINOFF_DINOFF1_Msk|GPIO_DINOFF_DINOFF2_Msk);
    /* Reset ADC */
    SYS_ResetModule(ADC_RST);
    /* Vref connect to AVDD */
    SYS->VREFCTL |= SYS_VREFCTL_VREF_AVDD;
    /* Lock protected registers */
    SYS_LockReg();
}

void UART0_Init(void)
{
    /*---------------------------------------------------------------------------------------------------------*/
    /* Init UART                                          */
    /*---------------------------------------------------------------------------------------------------------*/
    /* Reset IP */
    SYS_ResetModule(UART0_RST);
    /* Configure UART0 and set UART0 Baudrate */
    UART0->LINE |=0x07;
    UART0->BAUD = 0x30000066;   /* 12MHz reference clock input, for 115200 */
}


int32_t main (void)
{
    SYS_Init();
    /* Init UART0 for printf */
    UART0_Init();
        printf("八月,新唐你好!\r\n");
    printf("Hello, 21ic.com ! \r\n");
        printf("ADC test: \r\n");
        // Enable channel 0,1,2
    ADC_Open(ADC, ADC_INPUT_MODE_SINGLE_END, ADC_OPERATION_MODE_CONTINUOUS, (ADC_CH_0_MASK | ADC_CH_1_MASK | ADC_CH_2_MASK));
    // Power on ADC
    ADC_POWER_ON(ADC);
    // Enable ADC ADC_IF interrupt
    ADC_EnableInt(ADC, ADC_ADF_INT);
    NVIC_EnableIRQ(ADC_IRQn);
    ADC_START_CONV(ADC);
    while(1);
        }



沙发
天灵灵地灵灵| | 2017-8-10 19:16 | 只看该作者
要求的应该是手写ID吧。。。

使用特权

评论回复
板凳
天灵灵地灵灵| | 2017-8-10 19:17 | 只看该作者
楼主的板子高大上啊。

使用特权

评论回复
地板
jinglixixi|  楼主 | 2017-8-11 10:00 | 只看该作者
天灵灵地灵灵 发表于 2017-8-10 19:17
楼主的板子高大上啊。

比较新,正不断掌握新功能的使用。

使用特权

评论回复
5
jinglixixi|  楼主 | 2017-8-11 10:01 | 只看该作者
天灵灵地灵灵 发表于 2017-8-10 19:16
要求的应该是手写ID吧。。。

回来再补一张。

使用特权

评论回复
6
wanduzi| | 2017-8-12 16:37 | 只看该作者
楼主牛叉,这板子给力。

使用特权

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

本版积分规则

446

主题

2675

帖子

37

粉丝