搜索
bottom↓
回复: 17

说下我遇到的n76e003 的坑

[复制链接]

出0入16汤圆

发表于 2019-8-17 12:18:49 | 显示全部楼层 |阅读模式
由于项目紧来不及看完n76e003 两百多页的datasheet,想想反正是51单片机而已,选择要用的部分来看就行了,没想到实际用起来才发现里面是有很多坑的:
1,用供应商提供的nu-link连接调试出现大概率连接不上的问题,后来才发现调试接口是固定5V的(只有nu-link pro才可以选电压),半天就把我给板子供电的电池充怀孕了。后来换了一个nu-link-me用3.3V连就连接正常了。
2,关于时钟,看到例程里都没有设置时钟的也就没有设置它,调试时各种不正常,使能内部高速时钟后恢复正常。
3,关于ADC转换口,选择ADC通道的宏定义里是要把该通道与数字口断开,误选通道后该通道的数字输入就永远为0了,需要重新设置连接数字口才行。
4,bandgap的采样保持时间太长,datasheet里建议保持20ms以上。如果ADC轮流采集其它通道和bandgap而保持时间较短的话,我试了单步运行结果正常,但全速运行采样结果就被前一个通道给污染了,结果差别非常大。
5,终极巨坑的TA操作。开始调试时几乎所有TA保护的寄存器操作都不成功,最后发现是在KEIL的优化等级选9就会出现这个问题而优化等级为8时就没问题。由于程序空间吃紧,就把所有用到TA保护的寄存器操作用一个C文件来写,然后单独把这个C文件设为优化等级8和速度优先(整个项目还是优化等级9和 代码大小优先)就好了。

出0入0汤圆

发表于 2019-8-17 13:02:19 | 显示全部楼层
你那個系統時鐘的坑我也踩過。
之前選N76E003是看上了它的FLASH有18KB,而且我對51核也很熟悉。我的應用是一個加熱用的PID控制器,調試的時候需要實時查看計算的數據的,然後悲催的發現這顆料調試時無法實時刷新查看數據,由於數據量比較多,串口輸出也不方便,在調試了4天無果后忍無可忍的換成了STM8,好在我的系統很小,換主控的工作量不是太大,換好主控后只花了不到15分鐘就定位到問題并調試好了!
看來我是離開了調試功能沒法好好完成工作的了。

出0入25汤圆

发表于 2019-8-17 13:07:17 | 显示全部楼层
farfar 发表于 2019-8-17 13:02
你那個系統時鐘的坑我也踩過。
之前選N76E003是看上了它的FLASH有18KB,而且我對51核也很熟悉。我的應用是 ...

你说的debug 用的是keil 还是iar?

出0入0汤圆

发表于 2019-8-17 13:08:31 | 显示全部楼层
rei1984 发表于 2019-8-17 13:07
你说的debug 用的是keil 还是iar?

Keil的...紫薯布丁

出0入442汤圆

发表于 2019-8-17 14:49:50 | 显示全部楼层
哈哈,读写寄存器不成功确实很不友好。如果是用memory mapped模式操作寄存器,c代码必须得有volatile描述。。

出0入0汤圆

发表于 2019-8-17 17:19:49 | 显示全部楼层
这个用过,简单应用没啥问题,1块不到的东西就别玩复杂的了

出0入8汤圆

发表于 2019-8-17 17:46:28 来自手机 | 显示全部楼层
与wifi或蓝牙模块通讯,115200的波特率就是不行,转到9600才正常

出0入0汤圆

发表于 2019-8-17 18:21:55 | 显示全部楼层
datasheet中,PWM模块图输出IO有两个寄存器画反了。后面寄存器表中是对的。

出675入8汤圆

发表于 2019-8-17 19:21:23 来自手机 | 显示全部楼层
不会用单片机调试功能的路过。。。

出0入0汤圆

发表于 2019-8-17 19:32:27 | 显示全部楼层
skype 发表于 2019-8-17 17:46
与wifi或蓝牙模块通讯,115200的波特率就是不行,转到9600才正常

需要把HIRC由16M调整到16.6M才行

出0入8汤圆

发表于 2019-8-18 11:20:20 | 显示全部楼层
谢谢,有空试下!

出0入0汤圆

发表于 2019-8-18 11:50:02 | 显示全部楼层
skype 发表于 2019-8-18 11:20
谢谢,有空试下!

嗯,手册上有写的,按照手册上的调一下时钟。

出0入0汤圆

发表于 2019-8-18 13:05:37 | 显示全部楼层
第5点我也碰到过了,现在是把整个工程设置成8。单独C文件怎么设置优化等级啊?

出0入16汤圆

 楼主| 发表于 2019-8-18 21:50:18 | 显示全部楼层
arm_m0 发表于 2019-8-18 13:05
第5点我也碰到过了,现在是把整个工程设置成8。单独C文件怎么设置优化等级啊? ...

左边项目管理器里右键单点该xxx.C文件,在弹出的菜单点“option for  xxx.C”里的C51选项卡里单独设置优化等级~

出0入0汤圆

发表于 2019-9-15 08:08:38 | 显示全部楼层
Elex 发表于 2019-8-18 21:50
左边项目管理器里右键单点该xxx.C文件,在弹出的菜单点“option for  xxx.C”里的C51选项卡里单独设置优 ...

看到了,谢谢!

出0入0汤圆

发表于 2020-9-22 14:41:59 | 显示全部楼层
移植MODBUS的时候 ,发现0X10指令,只有第一个写的寄存器正常,接下来的多只能读到低字节的数据,现在还没搞定

            while( usNRegs > 0 )
            {
                //currentRegDate  = *pucRegBuffer++ << 8;
                currentRegDate = *pucRegBuffer ;
                pucRegBuffer++;      
                currentRegDate<<=8;
                currentRegDate |= *pucRegBuffer++;
                _write_holding_reg_data(iRegIndex,currentRegDate);
                iRegIndex++;
                usNRegs--;
            }

出0入16汤圆

 楼主| 发表于 2020-12-12 22:30:03 | 显示全部楼层
补一个bandgap 校准值的坑。
一堆人吐槽N76E003 bandgap不准。我用了好多块万用表来测量都可以确定是bandgap校准后测量不准。后来,终于在某个例程里发现UID后面的校准数据根本不是数据手册那么简单。校准数据需要分三种情况,
1,(UID[0x0d] & 0xF0) == 0x00 时,  bandgapValue = (UID[0x0c] )<< 4 +  (UID[0x0d] & 0x0F);
2,(UID[0x0d] & 0xF0) == 0x80 时,  bandgapValue = (UID[0x0c] )<< 4 +  (UID[0x0d] & 0x0F)- 44;
3,(UID[0x0d] & 0xF0) == 0x90 时,  bandgapValue = (UID[0x0e] )<< 4 +  (UID[0x0f] & 0x0F;

按这3种情况校准bandgap,测量数据就基本上很准确了

出0入25汤圆

发表于 2020-12-13 07:41:23 来自手机 | 显示全部楼层
Elex 发表于 2020-12-12 22:30
补一个bandgap 校准值的坑。
一堆人吐槽N76E003 bandgap不准。我用了好多块万用表来测量都可以确定是bandga ...

是的。官方的ds 写的不对。 但是他的sample code 就是这么给出答案的。 而sample code的 bsp 部分的串口函数又有问题,需要在其他文件里找到答案。。。。。  

熟悉了这些坑之后,想换最近出的24m 51都懒得换了
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-10 18:27

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表