- 画板子先出原理图!!画板子先出原理图!!画板子先出原理图!!
- 调试的时候,暂停了之后时钟还是会跑,定时器的值还是会变。
- 掉电模式,进入掉电模式之前要把所有IO口的状态设好,不然浮空的脚或者没有处理好的脚会漏电。
- 现象:N76E003 进入掉电模式,仿真里面定时器还在运行,实际电路测试待机功耗有200多UA。
解决方法:关闭ADCEN、BOD、POF寄存器,实测待机功耗减小。 - 三脚电感升压:中间抽头接mos漏极(通过MCU输出PWM控制MOS导通),线圈少的一头(与中间抽头两端电阻小的)接5v(供电脚),线圈多的一头接负载。
- 一般的快充 D+ D-是协议脚,如果短路可能就代表快充(具体看被充端怎么规定)。
- USB TYPE-C等金属外壳的座子,外壳一定要接地,不然插上负载可能会导致极性相反导致设备烧毁.
- N76E003如果要产生频率大于30K的PWM波,只能要么外部晶振提高时钟速度(麻烦),要么改用PWM中心对齐模式(最方便)
- 写程序的时候,比如按键处理,识别到按键之后要置标志位,然后清除一大堆的变量,最好把这段清除变量的程序抽象出来封装成函数,这样方便移植也方便后面编写程序。比如开机之后置完标志位就调用一次这个开机初始化的函数,在遥控开机的地方也只需要调用一次。同理还有关机初始化函数,在关机、自动关机、APP控制关机中,直接调用就好。
- 中微CMS8S6990TSOP20,在配置烧录器的时候,要把型号选择成CMS8S6990NTSOP20,不然烧录器无法识别到CMS8S6990TSSOP20的芯片。
- 中微烧录器在配置的时候,要长按“↑”按键,返回到初始菜单,电脑才能识别到烧录器设备。配置好之后长按“↓”按键,可以返回到子菜单选择不同烧录固件。
- 代码风格,判断某个动作成立之后,要置标志位,然后再到主程序或者低时效性程序段里执行相应的动作,比如按下按键要让某个mos管导通,不要直接在if成立的动作里让io电平改变,而要置一个标志位为1,到主循环或者中断里写一个重复500ms才执行的低时效性的程序段里再改变io的电平。区分好哪些动作需要高时效性,哪些动作不用高时效性。
- 配置烧录器烧录中微6990芯片的时候,要选6990NTS20选项,不然烧录不进去,并且选完记得还要调烧录选项,不然配置跟Keil中不一样。
- 充电类的项目,充电管理芯片的充电指示脚无论如何都要接进MCU里,纯靠电压判断电池是否充满误差太大。
- 九齐的MCU,仿真跟实际烧录出来功能不同,如果有ADC检测,然后根据检测值判定某状态这类,先检查一下ADC值是否正确。
- 九齐的Q-Link如果拿来当烧录器用的话,由于没有校频,烧录出来的程序会有定时器快慢不等的情况。
- 九齐NY8BE62D 如果不开启LVR的话,上电的一瞬间有可能让某些IO口输出随机电平。
- 辉芒微的FT61FC23,进入睡眠之后端口唤醒有几率唤不醒MCU,大坑!
- ADC采样,有条件还是做分压之后经过RC低通滤波器之后再送进MCU采样,不然电压一波动,采样值也跟着拨动。
- 带有触摸功能的芯片或者MCU,要用触摸的情况下,一定要走LDO单独供电,否则同一电源内的其他用电器的启停会对触摸造成严重的干扰。
很久没更了,2023.4.13来补充:
21.经过新唐官方论坛版主确认,新唐MS51官方库在关于时钟配置的地方有问题,如果使用的是外部晶振的话,库函数中:
void ClockEnable(unsigned char u8FsysMode)
{
switch (u8FsysMode)
{
/***** HIRC enable part ******/
case FSYS_HXT:
clr_CKEN_EXTEN1; /*step1: Enable extnal 4~ 24MHz crystal clock source.*/
set_CKEN_EXTEN0;
while((CKSWT|CLR_BIT7)==CLR_BIT7); /*step2: check clock source status and wait for ready*/ /*此处大坑*/
break;
/***** HIRC enable part ******/
case FSYS_HIRC:
set_CKEN_HIRCEN; //step1: Enable extnal clock source.
while((CKSWT|CLR_BIT5)==CLR_BIT5); //step2: check clock source status and wait for ready
break;
/***** LIRC enable part******/
case FSYS_LIRC:
set_CKEN_LIRCEN; //step1: Enable extnal clock source.
while((CKSWT|CLR_BIT4)==CLR_BIT4); //step2: check clock source status and wait for ready
break;
/***** ECLK P30 enable part ******/
case FSYS_OSCIN_P30:
set_CKEN_EXTEN1; //step1: Enable extnal clock source.
set_CKEN_EXTEN0;
while((CKSWT|CLR_BIT3)==CLR_BIT3); //step2: check clock source status and wait for ready
break;
/***** ECLK P00 enable part ******/
case FSYS_HXTIN_P00:
set_CKEN_EXTEN1; //step1: Enable extnal clock source.
clr_CKEN_EXTEN0;
while((CKSWT|CLR_BIT6)==CLR_BIT6); //step2: check clock source status and wait for ready
break;
}
}
官方资料是:
case FSYS_HXT:
clr_CKEN_EXTEN1; /*step1: Enable extnal 4~ 24MHz crystal clock source.*/
set_CKEN_EXTEN0;
while(CKSWT|CLR_BIT7); /*step2: check clock source status and wait for ready*/ /*此处大坑*/
break;
那么如果用户使用的是外部晶振,在主函数中调用 FsysSelect(FSYS_HXT); 函数的话,程序就会一直卡在上面这个while循环里面,正确的写法应该为:while((CKSWT|CLR_BIT7)==CLR_BIT7);
或者使用最近版的官方库,下载地址:https://github.com/OpenNuvoton/MS51BSP_KEIL 亲测官方库已经修复这个问题
- KEIL编译报错:*** WARNING L5: CODE SPACE MEMORY OVERLAP。 出现原因:代码里面有重复的中断号,就是说中断服务函数写重了,检查代码里面是不是哪段中断服务函数在库里面的某个C文件里已经声明了,然后自己又在ISR.C里面又声明了一次。