打印
[技术问答]

N76E003 UART模式3,波特率是250K,收到的都是错误包

[复制链接]
2332|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
使用N76E003接收DMX512的信号,用的是串口0模式3,定时器1,波特率是250K,时钟是系统默认的16M,接收到的包都是错误的0XC0,下面是初始化代码,请教下解决方法:
void hwUart_Uart0Init(void)
{
        P05_PushPull_Mode;
        P06_Quasi_Mode;
        P07_Quasi_Mode;

        SCON = 0xD0;                        // Special setting the mode 3 and
        TMOD |= 0x20;            //Timer1 Mode1
       
        set_SMOD;                //UART0 Double Rate Enable
        set_T1M;
        clr_BRCK;                //Serial port 0 baud rate clock source = Timer1
        TH1 = 256 - (1000000/u32Baudrate+1);               /*16 MHz */
        set_TR1;

        set_RB8;                                        //This bit is for setting the stop bit 2 high/low status,

        clr_TI;
        set_ES;           //enable UART interrupt
        set_EA;           //enable global interrupt
        P05=0;
}
沙发
smallboy2005| | 2019-3-8 21:42 | 只看该作者
仔细看PDF,他不是普通的51,003驱动512一直用了一年,而且我把它与UCS512C作成兼容,功能一样,在同一条线写码。

使用特权

评论回复
板凳
pigluffy| | 2019-3-8 23:27 | 只看该作者
因為你使用默認的系統時鐘16MHz所造成的誤差,如下所示



把系統時鐘改成16.6MHz應該就能解決,改成16.6MHz的比較表如下所示



裡面提到的算式4與算式5如下所示



以上圖片從使用手冊上擷取

使用特权

评论回复
地板
HBZZwing|  楼主 | 2019-3-9 09:36 | 只看该作者
pigluffy 发表于 2019-3-8 23:27
因為你使用默認的系統時鐘16MHz所造成的誤差,如下所示

原来是这样,谢了,问题已解决

使用特权

评论回复
5
小明的同学| | 2019-4-9 23:26 | 只看该作者
UART通信非常依赖时钟。

使用特权

评论回复
6
小明的同学| | 2019-4-9 23:26 | 只看该作者
UART没有SPI抗干扰能力强。

使用特权

评论回复
7
heisexingqisi| | 2019-4-10 21:53 | 只看该作者
如果有示波器那就好办了,直接看图。

使用特权

评论回复
8
yiyigirl2014| | 2019-4-11 12:01 | 只看该作者
250K太高了吧

使用特权

评论回复
9
eleven8888| | 2020-9-2 21:42 | 只看该作者
我也遇到同样问题,楼主是怎么解决的?可以说说吗?

使用特权

评论回复
10
tianxj01| | 2020-9-3 09:15 | 只看该作者
eleven8888 发表于 2020-9-2 21:42
我也遇到同样问题,楼主是怎么解决的?可以说说吗?

修改默认系统时钟为16.6MHz
在高波特率时候,默认的16MHz时钟误差非常大,大到不可用程度,只有38400以下才算正常。
所以,高波特率串口时候,必须修改默认时钟。关于系统默认时钟修改,你可以参考003官方手册。

使用特权

评论回复
11
lidi911| | 2020-9-3 21:26 | 只看该作者
如果串口能收发数据,但是数据是错误的,那说明波特率没对啊,用示波器看下信号就知道了

使用特权

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

本版积分规则

2

主题

6

帖子

0

粉丝