zhcj66 发表于 2018-6-23 09:28:44

N76E003串口115200接收连续数据不完整怎么解决?

本帖最后由 zhcj66 于 2018-6-23 11:13 编辑

如题"N76E003串口波特率115200,接收连续数据不完整怎么解决?",

原先用的STM8S103可以一次接收10bit数据,不丢数据,然而因为涨价严重,不的不换方案

这些8bit的mcu也没有DMA真的接收数据很累啊,GD和ST的32bit的mcu电压都是最高3.3v的也没有个5v的,如果换这样的mcu还需要加LDO成本又上去了

难道N76E003芯片串口接收连续数据是,只能在发送每个字节上加延时了吗?

coleyao 发表于 2018-6-23 09:34:19

新唐的东东真难用啊,N76E003不是Keil官方支持的芯片,装了驱动接仿真器之后一通乱跑,调试都没头绪了啊,也不知道是Nulink的问题还是windows10兼容性的问题!
后面还有人在跟着催进度,伤不起啊!

zhcj66 发表于 2018-6-23 09:40:46

coleyao 发表于 2018-6-23 09:34
新唐的东东真难用啊,N76E003不是Keil官方支持的芯片,装了驱动接仿真器之后一通乱跑,调试都没头绪了啊 ...

乱跑倒是还没有遇到,刚刚测试,串口打断点,发送一个数据,半天才中断,有点伤不起.

不知道这种8bit的mcu 除了发送数据中间加延时 还有什么好的办法没>?

OneRain 发表于 2018-6-23 10:42:04

我不知道你们为啥那么多问题,我几乎没啥问题,串口什么得,都妥妥得。。。多看看手册,按照官方资料来配置,一般情况都没事情!!!当然了要说没事情,也不对,就遇到了keil编译器对于C51个人优化后NC得算法,不太遵守C标准。。。其他得,目前没啥大问题,包括捕捉,adc等等!!!

zhcj66 发表于 2018-6-23 10:47:31

OneRain 发表于 2018-6-23 10:42
我不知道你们为啥那么多问题,我几乎没啥问题,串口什么得,都妥妥得。。。多看看手册,按照官方资料来配置 ...

串口115200速率 接收多个数据 中间不加延时 不丢数据?

LearningASM 发表于 2018-6-23 11:40:16

参考以前51的接收方案,在中断里面接收到缓存

zhcj66 发表于 2018-6-23 13:42:35

LearningASM 发表于 2018-6-23 11:40
参考以前51的接收方案,在中断里面接收到缓存

已经加了缓冲的,还会出现丢数据问题,所以才上来问问,有没有更好的办法的

void UART0_INT(void) interrupt 4
{
        if (RI==1)
    {                                       /* if reception occur */
      clr_RI;                           /* clear reception flag for next reception */
                buf = SBUF;
                kpp++;
        }
}

OurWay 发表于 2018-6-23 14:06:31

115200 这个得把N76E003 内部时钟修正了16.6M,手册UART里有说明的


手册131页内容
但在大部分的应用中波特率115200是最常用的数值,所以我们提供调整HIRC到16.6MHz的方法,用来产生较为准确的波特率。下列表格列出,当HIIRC为16.6 MHz 时,产生波特率数值及误差。

这类便宜的东西,多看看手册还是比较好的哈

rei1984 发表于 2018-6-23 14:22:58

76e003bug 还是有的,   要便宜,就要多动脑了。

目前也在跳坑中ing

zhcj66 发表于 2018-6-23 14:30:35

rei1984 发表于 2018-6-23 14:22
76e003bug 还是有的,   要便宜,就要多动脑了。

目前也在跳坑中ing

楼上的 掉入哪个坑了?

eaglelpx 发表于 2018-6-23 14:42:58

楼主可以试试先接收后clr_ri

fsmcu 发表于 2018-6-23 14:54:15

这个芯片还是挺好用的,自从ST的003涨价后,公司产品都转成了新唐的

zhcj66 发表于 2018-6-23 15:06:25

eaglelpx 发表于 2018-6-23 14:42
楼主可以试试先接收后clr_ri

我是先接收一定数据,接收完成,单独在发送接收完成的数据,目的为了不上发送影响接收,可是还是不行啊,

zhcj66 发表于 2018-6-23 15:06:51

superAFE 发表于 2018-6-23 15:01
dma的功能已经深入人心了,现在国产的mcu一般都是没有这功能,换国产的mcu只能将就点了。 ...

不知道GD的芯片稳定性咋样

zhcj66 发表于 2018-6-23 15:33:59

superAFE 发表于 2018-6-23 15:11
gd的芯片用得好应该行,我跑过不过客户,三四年前就用它来代替st的了。现在中低端的mcu用国产的代替进口 ...

st坑了 ,害了不少电工门

modbus 发表于 2018-6-23 15:55:14

就一个串口还用得着DMA

zhcj66 发表于 2018-6-23 16:51:55

modbus 发表于 2018-6-23 15:55
就一个串口还用得着DMA

当然不需要,用过这么多mcu的串口,都没有问题 第一次用E003 不知道是什么原因造成的

anjiyifan 发表于 2019-5-30 23:43:08

楼主问题解决了吗?你的原因应该是计算波特率的时候多加了一个1导致的。试试这样:
#ifdef FOSC_166000                // if Fsys = 16.6MHz
        RH3    = HIBYTE(65536 - (1037500/u32Baudrate));                /*16.6 MHz */
        RL3    = LOBYTE(65536 - (1037500/u32Baudrate));                        /*16.6 MHz */
#endif

zhcj66 发表于 2019-5-31 13:22:32

anjiyifan 发表于 2019-5-30 23:43
楼主问题解决了吗?你的原因应该是计算波特率的时候多加了一个1导致的。试试这样:
#ifdef FOSC_166000                //...

已经放弃这个芯片了

anjiyifan 发表于 2019-5-31 13:52:19

zhcj66 发表于 2019-5-31 13:22
已经放弃这个芯片了

我猜你之前是波特率计算出错了,官方例程的计算方法有误的,多加了一个1,在9600波特率下,偏差1没影响,但是115200波特率下,波特率计数器设置值很小,相差一个1,就占很大百分比了。
还是得看芯片手册上的计算方法才行,芯片手册上的是对的。

anjiyifan 发表于 2019-5-31 13:54:19

当然也有可能是中断优先级问题。高波特率下要把串口中断优先级设高一点,不然被别的中断抢占后,容易丢数据。

harvardx 发表于 2020-3-3 12:10:18

anjiyifan 发表于 2019-5-30 23:43
楼主问题解决了吗?你的原因应该是计算波特率的时候多加了一个1导致的。试试这样:
#ifdef FOSC_166000                //...

这个观点 很新颖

liyiui 发表于 2020-3-3 15:31:36

把波特率降低点可能会好些
页: [1]
查看完整版本: N76E003串口115200接收连续数据不完整怎么解决?