打印
[技术问答]

9G 请教 新唐M0 Mini54LAN 上电不工作

[复制链接]
3819|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
现象:
    MCU上电复位正常时, LDO_CAP脚 输出 约1.8V(内部供电)
    MCU不正常时,LDO_CAP脚 输出 仅 650mV

环境:
    MCU 5V供电正常,由7805降压过来,7805输入12V;
        电源滤波电容在 VDD脚附近
    RC复位电路参考手册的电路,10K 10uF
    LDO_CAP外接 10uF,距离MCU近

测试:
    用BSP自带的demo,仅开启IRC_22M,一个GPIO口,用于LED闪烁,其他都没启用

    用旧版BSP V1.0.06 也会出现LDO_CAP只有650mV
    用新版BSP V2.0 也会出现LDO_CAP只有650mV

请教高手,出现此问题有哪些可能

附测试代码:
void SYS_Init(void)
{
    SYS_UnlockReg();
        /* Enable  IRC_22MHz */
        SYSCLK->PWRCON &= ~(SYSCLK_PWRCON_XTLCLK_EN_Msk);
        SYSCLK->PWRCON |= SYSCLK_PWRCON_IRC22M_EN_Msk;   
        /* Waiting for 12MHz clock ready */
        SYS_WaitingForClockReady(SYSCLK_CLKSTATUS_IRC22M_STB_Msk);   
        /* Switch HCLK clock source to XTAL */
        SYSCLK->CLKSEL0 &= ~SYSCLK_CLKSEL0_HCLK_S_Msk;
        SYSCLK->CLKSEL0 |= SYSCLK_CLKSEL0_HCLK_IRC22M;
        /* Update System Core Clock */
        SystemCoreClockUpdate();
        SYS_LockReg();
}
void LED_Init(void)
{
    _GPIO_SET_PIN_MODE(P3,2,GPIO_PMD_OUTPUT);
    P32 = 1;
}
int32_t main (void)
{
    uint32_t u32i;

    SYS_Init();
    LED_Init();

    while (1)
    {
        for (u32i=0;u32i<0x0001FFFF;u32i++)
        {
            P32 = 0;
        }
        for (u32i=0;u32i<0x0001FFFF;u32i++)
        {
            P32 = 1;
        }
    }
}
沙发
新浪| | 2013-8-9 17:05 | 只看该作者
   SystemCoreClockUpdate();
这个是做什么的?
你去掉试试

使用特权

评论回复
板凳
新浪| | 2013-8-9 17:10 | 只看该作者
  SYSCLK->PWRCON &= ~(SYSCLK_PWRCON_XTLCLK_EN_Msk);
是不是要修改?你用内部的22M

使用特权

评论回复
地板
zlq_pub| | 2013-8-9 17:10 | 只看该作者
提示: 该帖被管理员或版主屏蔽
5
奔跑的牛| | 2013-8-9 17:24 | 只看该作者
LDO_CAP的电容要拿掉,mini51AN LDO不能加电容。
另外, startup_MINI51.s 里面确认没有关闭POR

使用特权

评论回复
6
tigerdill2000|  楼主 | 2013-8-9 17:27 | 只看该作者
本帖最后由 tigerdill2000 于 2013-8-9 17:31 编辑

谢谢回复
补贴函数
void SystemCoreClockUpdate (void)            
{
    uint32_t u32CoreFreq, u32ClkSrc;

    u32ClkSrc = SYSCLK->CLKSEL0 & 0x7;
        
    if (u32ClkSrc == 0)
        u32CoreFreq = __XTAL;                /* External crystal clock */

    else if (u32ClkSrc == 3)
        u32CoreFreq = __IRC10K;        /* Interanl 10K crystyl clock */

    else if (u32ClkSrc ==  7)
        u32CoreFreq = __IRC22M;        /* Internal 22M */

    else
        u32CoreFreq = __IRC22M;         /* unknown value, use default Internal 22M */


    SystemCoreClock = (u32CoreFreq/((SYSCLK->CLKDIV & 0xF) + 1));
    CyclesPerUs = (SystemCoreClock + 500000) / 1000000;
}
更新系统时钟,库自带的函数,从Demo保留下来的

SYSCLK->PWRCON &= ~(SYSCLK_PWRCON_XTLCLK_EN_Msk)
是清 使用外部晶振 寄存器对应位

现在我分析的原因是:那个LDO_CAP输出的电压是给 M0内核用的1.8V
当LDO输出650mV时,M0内核没工作起来,所以用户代码也无法执行

不知道为何 M0 内置的 LDO 5V转1.8V的 工作不正常

未命名.jpg (38.99 KB )

未命名.jpg

使用特权

评论回复
7
缥缈九哥| | 2013-8-9 17:52 | 只看该作者
LDO上的10UF电容去掉吧。或者用104的。

使用特权

评论回复
8
Harvard| | 2013-8-9 22:09 | 只看该作者
我也遇到这个问题 怪事情. 把bod选项改改试试看. 会好点.

使用特权

评论回复
9
缥缈九哥| | 2013-8-10 07:14 | 只看该作者
BOD的选项是有关于,你复位电压的选择高于正常工作电压 ,害得CPU总是在复位。比如 你工作是3.3V的。你就不要选择3.7V复位电平并且使能低电压复位啦。

使用特权

评论回复
10
奔跑的牛| | 2013-8-12 08:50 | 只看该作者
另外,目前沒有此問題, 可能你手上的IC是較早的,樣片版本

使用特权

评论回复
11
缥缈九哥| | 2013-8-13 02:14 | 只看该作者
#include <stdio.h>
#include <stdint.h>
#include <Nuvoton\iomini51.h>
#include "mini51.h"
#include "Driver/DrvGPIO.h"
#include "Driver/DrvSYS.h"
#include "Driver/DrvADC.h"

#ifdef NDEBUG
#define printf(...)
#endif
int main(void)
{
    UNLOCKREG();
    DrvSYS_SetOscCtrl(XTL_CLK,1);
    DrvSYS_SelectHCLKSource(0);
        LOCKREG();   
    /* Output a message on Hyperterminal using printf function */
        printf("\n\r\n\r");
        printf("*** 9G-MINI51 V1.00 Build by yuanxihua@21cn.com on ("__DATE__ " - " __TIME__ ")\n\r");
        printf("*** 9G-MINI51 V1.00 Rebooting ...\n\r\n\r");

    GPIO_P0_PMD = 0X5555;
    GPIO_P1_PMD = 0X5555;
    GPIO_P2_PMD = 0X5555;
    GPIO_P3_PMD = 0X5555;
    GPIO_P4_PMD = 0X5555;
    GPIO_P5_PMD = 0X5555;

    while(1)
    {
        for(uint32_t j = 0; j <800000; j++);
        GPIO_P0_DOUT = 0x5E;        /* switch on LEDs                    */
                GPIO_P1_DOUT = 0xCA;
                GPIO_P2_DOUT = 0xAB;
                GPIO_P3_DOUT = 0x9A;
                GPIO_P4_DOUT = 0x55;//NO USE
        GPIO_P5_DOUT = 0XE2;
        for(uint32_t j = 0; j <800000; j++);
        GPIO_P0_DOUT = 0xAD;        /* switch off LEDs                    */
                GPIO_P1_DOUT = 0xF7;
                GPIO_P2_DOUT = 0xD7;
                GPIO_P3_DOUT = 0xED;
                GPIO_P4_DOUT = 0xAA;//NO USE
        GPIO_P5_DOUT = 0XDD;
    }
}
用我的MINI51 TINY板出厂测试代码看看。

使用特权

评论回复
12
缥缈九哥| | 2013-8-13 02:25 | 只看该作者
9G-MINI51 新唐CM0+EWARM入门开发过程简介

一,准备EWARM + 新唐CM0软件包

1,在http://www.mcu123.com/news/Soft/ ... ID=1&SoftID=535
        下载 IAR Embedded Workbench for ARM v6.20 FULL CD-EWARM-6201-2590 软件
        CD-EWARM-6201-2590_mcu123.zip
    ftp://mcu123:mcu123@mcu123.com/已整理目录/开发工具软件/ARM/CD-EWARM-6201-2590_mcu123.zip
    相关文件“IAR_EWARM5.4和谐文件.rar ”可以在GOOGLE上搜索到
    http://bbs.mcu123.net/bbs/thread-15164-1-1.html
    并下载:
    IAR_EWARM5[1].4和谐文件.rar  

2,在http://www.nuvoton-m0.com/forum. ... &extra=page%3D1
        下载Nu-Link驱动“公测版驱动下载 v1.17.5218,支持最新的IAR 6.21”
        Nu-Link_IAR_Driver 1.17.5218.zip
        http://www.nuvoton-m0.com/forum. ... TUyOTkyOTF8MA%3D%3D
   
    下载ICP编程工具“NuMicro ICP Programming Tool 1.17.5218”
    NuMicro ICP Programming Tool 1.17.5218.zip
    http://www.nuvoton-m0.com/forum. ... TUyOTkyOTF8MA%3D%3D

        下载ISP编程工具“NuMicro ISP Programming Tool v1.41”
        NuMicro ISP Programming Tool V1.41.zip
        http://www.nuvoton-m0.com/forum. ... TJ8MTMxNTI5OTI5MXww
       
        下载?M051软件库资源“M051SeriesBSP_CMSIS V1.02.001”和“M051SeriesBSP_RegCtrlPrg V1.00.002”
        M051SeriesBSP_v1.02.001.zip
        http://www.nuvoton-m0.com/forum. ... 2V8MTMxNTM3NjExOHww
        M051SeriesBSP_RegCtrlPrg.zip
        http://www.nuvoton-m0.com/forum. ... GN8MTMxNTM3NjExOHww
       
3,在“http://dzstic.com/down.asp”上下载“NuTiny-EVB-Mini51_V002”文档
        NuTiny-EVB-Mini51_V002.rar
        http://dzstic.com/upload/20110907/20110907141832652.rar

4,新唐官方资料网址
        新唐CM0官方资料主页
        http://www.nuvoton.com/hq/chs/Pages/default.aspx
   
二,建立CM0的EWARM+Nu-LINK开发环境

1,双击“IAR_EWARM5[1].4和谐文件.rar”,运行里面的“EWARM_FULL_ARM540.exe”,选择“Product”中的“Embedded Workbench For ARM v5.40”,然后点击“Generate”
        把产生的“License key”“License number”密码和序列号记录下来;

2,双击“CD-EWARM-6201-2590_mcu123.zip”运行里面的“autorun.exe”,在“IAR Embedded Workbench For ARM”中选择“Install IAR Embedded Workbench”,按常规的软件安装方式
        把“IAR Embedded Workbench For ARM”安装到电脑上;

3,双击“Nu-Link_IAR_Driver 1.17.5218.zip”运行里面的“Nu-Link_IAR_Driver 1.17.5218.exe”,便会在“C:\Program Files\Nuvoton Tools\Nu-Link_IAR”和“C:\Program Files
        \IAR Systems\Embedded Workbench 6.0” 目录中安装上相关的“Nu-LINK”的驱动。

4,双击“NuMicro ICP Programming Tool 1.17.5218.zip”运行里面的“NuMicro ICP Programming Tool 1.17.5218.exe”,便会在“C:\Program Files\Nuvoton Tools\ICPTool”
        目录中安装上相关的“ ICP Programming Tool”的工具。

三,建立CM0的EWARM基本工程

1,在电脑开始菜单中打开“IAR Embedded Workbench IDE”,在“EWARM”的IDE菜单中选择“Project”->“Create New Project”创建一个新工程,在“Create New Project”选择“OK”存储目录
        到“D:\works\9G-CM0\9G-MINI51\prj”下面,工程名叫“MINI51.ewp,点击“OK”完成,点击“File”下的“Save Workspace”保存工作空间到目录中的“MINI51.eww”;

2,在“D:\works\9G-CM0\9G-MINI51”下建立文件夹“bsp”“drv”“inc”“src”,等子目录,在“D:\works\9G-CM0\9G-MINI51\prj”下建立子目录“config”,并把 “M051SeriesBSP_v1.02.001.zip”
        的“M051SeriesBSP\NuvotonPlatform_IAR\Src\Driver”和“M051SeriesBSP\NuvotonPlatform_IAR\Include\Driver”解压到“D:\works\9G-CM0\9G-MINI51\bsp\Driver”目录,把“M051SeriesBSP\
        NuvotonPlatform_IAR\Include\System”解压到“D:\works\9G-CM0\9G-MINI51\bsp\System”目录,把“M051SeriesBSP\CMSIS\CM0\DeviceSupport\Nuvoton\M051Series\startup\iar\startup_M051Series.s”解压到
        “D:\works\9G-CM0\9G-MINI51\bsp\Boot”,把“M051SeriesBSP\CMSIS\CM0\DeviceSupport\Nuvoton\M051Series”下的H和C文件及“M051SeriesBSP\CMSIS\CM0\CoreSupport”下的H和C文件解压到
        “D:\works\9G-CM0\9G-MINI51\bsp\Cmsis”;

3,在“EWARM”的IDE菜单中选择“Project”->“Options”中的“General Options”的“Target”中的“Device”中选择“Nuvoton Mini51 series (Mini51,Mini52,Mini54)”,在“Linker”菜单中选择“Linker configuration file”里选择
        “override default”并填上“$PROJ_DIR$\config\M052_Flash.icf”,在“Library Configuration”下的库选项用“FULL”在“Library Opitions”下的“printf”和“scanf”格式也用“FULL”;

4,在“Options for node 'MINI51'”的“Category:”中选择上“Debugger”,在“Setup”->“Driver”中选择“Third-Party Driver”,然后在“Third-Party Driver”选择驱动到
        “C:\Program Files\Nuvoton Tools\Nu-Link_IAR\Nu-Link_IAR.dll”,在“C/C++ Compiler”下的“Preprocessor”下面的方框内填上:
        $PROJ_DIR$\..\inc\
        $PROJ_DIR$\..\bsp\
        $PROJ_DIR$\..\bsp\Cmsis\
        $PROJ_DIR$\..\bsp\Driver\

5,在“Debugger”的“Download”勾选择“Use flash loader”和“override default .board file”并填入“$TOOLKIT_DIR$\config\flashloader\Nuvoton\Mini51_APROM.board”,把
        “C:\Program Files\Nuvoton Tools\Nu-Link_IAR\Samples\M052\config”下的“M052_Flash.icf”复制到“D:\works\9G-CM0\9G-MINI51\prj\config”,
        把“C:\Program Files\Nuvoton Tools\Nu-Link_IAR\Samples\M052”下的“SH_retarget.c”和“SH_startup_M05x_iar.s”复制到“D:\works\9G-CM0\9G-MINI51\bsp\Boot”;

6,在“IAR Embedded Workbench IDE”的“Workspace”下的“Files”中右击选择“Add”->“Add Group”并填入“sys”,另外同样建立“bsp”,“drv”,“src”等目录,然后在“sys”上右击
        选择“Add”->“Add Files” 然后选择“D:\works\9G-CM0\9G-MINI51\bsp\Boot”下的“SH_retarget.c”,“SH_startup_NUCxxx_iar.s”和“D:\works\9G-CM0\9G-MINI51\bsp\Cmsis”下的
        “core_cm0.c”和“system_M051Series.c”;同样用“Add”->“Add Files”把“D:\works\9G-CM0\9G-MINI51\bsp\Driver”的文件添加到“bsp”目录;(retarget.c除外)

7,在“D:\works\9G-CM0\9G-MINI51\src”中建立“main.c”,然后添加到工程的“src”中,并在“main.c”中填入下面内容:
        #include <stdio.h>
        #include <stdint.h>
        #include <Nuvoton\iomini51.h>
       
        int main(void)
        {
            uint32_t i=0;
            
            /* Output a message on Hyperterminal using printf function */
                printf("\n\r\n\r");
                printf("*** 9G-MINI51 V1.00 Build by yuanxihua@21cn.com on ("__DATE__ " - " __TIME__ ")\n\r");
                printf("*** 9G-MINI51 V1.00 Rebooting ...\n\r\n\r");
       
            GPIO_P0_PMD = 0X5555;
            GPIO_P1_PMD = 0X5555;
            GPIO_P2_PMD = 0X5555;
            GPIO_P3_PMD = 0X5555;
            GPIO_P4_PMD = 0X5555;
            GPIO_P5_PMD = 0X5555;
       
            while(1)
            {
                for(uint32_t j = 0; j <800000; j++);
                GPIO_P0_DOUT = 0x5E;        /* switch on LEDs                    */
                        GPIO_P1_DOUT = 0xCA;
                        GPIO_P2_DOUT = 0xAB;
                        GPIO_P3_DOUT = 0x9A;
                        GPIO_P4_DOUT = 0x55;//NO USE
                GPIO_P5_DOUT = 0XE2;
                for(uint32_t j = 0; j <800000; j++);
                GPIO_P0_DOUT = 0xAD;        /* switch off LEDs                    */
                        GPIO_P1_DOUT = 0xF7;
                        GPIO_P2_DOUT = 0xD7;
                        GPIO_P3_DOUT = 0xED;
                        GPIO_P4_DOUT = 0xAA;//NO USE
                GPIO_P5_DOUT = 0XDD;
                
                printf("*** 9G-MINI51 V1.00 Running %d Times...\n\r",i++);
            }
        }


(编译时会有与core_cm0.h与“C:\Program Files\IAR Systems\Embedded Workbench 6.0\arm\inc\c\intrinsics.h”相冲突时,把有问题的uint32_t改回相应的 unsigned long即可。)

8,在“Debugger”的“Download”勾选择“Use flash loader”和“override default .board file”并填入“$TOOLKIT_DIR$\config\flashloader\Nuvoton\NUC100_LDROM.board”,可以把
相应的程序烧进LDROM区;

9,在“EWARM”的IDE菜单中选择“Nu-Link”->“ICP Programming Tool”中,可以不擦除整片FLASH直接改变配置位从APPROM区切换到LDROM区启动,FLASH的1能修改成0;

使用特权

评论回复
13
ygl968| | 2013-8-13 09:05 | 只看该作者
mark 学习

使用特权

评论回复
14
tigerdill2000|  楼主 | 2013-8-15 08:54 | 只看该作者
谢谢大家的回复
已经排除软件问题
先已提交nuvoton华南技术支持解决

使用特权

评论回复
15
缥缈九哥| | 2013-8-15 12:48 | 只看该作者
如果可以,提交给我解决。哈哈。我生产过两种几千套MINI51 TINY板给新唐。没有发现有不良的。

使用特权

评论回复
16
zxf0168| | 2014-1-27 22:29 | 只看该作者
这到底是哪里的问题?

使用特权

评论回复
17
zxf0168| | 2014-2-13 14:48 | 只看该作者
奔跑的牛 发表于 2013-8-9 17:24
LDO_CAP的电容要拿掉,mini51AN LDO不能加电容。
另外, startup_MINI51.s 里面确认没有关闭POR
...

为啥LDO不能加电容

使用特权

评论回复
18
langziwuliao| | 2014-2-14 10:16 | 只看该作者
哇撒,好复杂,小白默默飘过~

使用特权

评论回复
19
从小木丁丁| | 2014-2-14 11:26 | 只看该作者
确实好复杂,我也小白路过

使用特权

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

本版积分规则

1

主题

5

帖子

1

粉丝