如图,左边是 6723 的 技术参考手册,左下角页码916页。 右边是debug时候出来的寄存器内容——MCTL这个寄存器明显对不上啊。
我现在在32768hz下设置9600波特率, 整数部分是 3 ,小数部分必须是5300才可以(不过采样 ucos == 0),为什么最高4位必须害的有5啊 不是round((32768/9600-3)) = 3吗,那个5是干嘛的。
还有4800波特率 怎么还是0x5300(实践)才准,0x5600(理论推测)不准。
望官方给出答复!
灰小子:
不是ti官方。建议楼主提供下代码。
不知道楼主用的什么开发软件?UCAxMCTL是一个字节的长度,这里确显示两个字节0x0000
澐碁:
回复 灰小子:
P1SEL |= (BIT4 + BIT5);// P1.4,P1.5 = USCI_A1 RXD,TXD// PMAP_CONTROL->PMAPKEYID = PMAPKEY;;P1MAP->P1MAP45 |=( PM_UCA1RXD| ((u16)PM_UCA1TXD <<8));// P1MAP->P1MAP45 |=( PM_UCA1TXD| ((u16)PM_UCA1RXD <<8)); //PMAP_CONTROL->PMAPKEYID = 0;//用完记得Lock上P1DIR &= ~BIT4;P1REN |= BIT4;P1OUT |= BIT4;P1DIR |=BIT5;P1DS|= BIT5;P1OUT |= BIT5;// P1DS|= (BIT4 + BIT5);UART1->CTLW0 |= UCSWRST;UART1->CTLW0 |= UCSSEL_1 ;// UART1->CTLW0 |= UCSSEL_1 |UCMODE0 |UCPEN | UCPAR ;//Dormant、ACLK、IDLE,,带偶检验UART1->BRW= 32768/2400;//鸟玩意不能9600,4800也不稳定UART1->MCTLW= 0x5300;UART1->CTLW0 &= ~UCSWRST;//关闭复位UART1->IE|= UCRXIE;// Enable USCI_A1 RX interrupt
Jacky Xu:
关于在32.768khz下来配置UART好还是采用高频的内部时钟好。不是不可以,而是官方给出的参考误码率,已经可以说明一些问题。即使是在2400这么低的频率下,采用32.768k所可能产生的误码率也是大大高于高频时钟的。采用内部高频时钟,虽然可能由于电压的变化和温湿度环境不同可能也会有误差。但即使将所有这些DCO的频率变化因素考虑进去,其实误码率也是要大大小于采用低频时钟时所造成的误码的。
对于计算值不准,实践值准的问题,这个是基于你的实验测试板来说。并不能cover所有的问题。
澐碁:
回复 Jacky Xu:
我是问问,那个小数怎么算啊。手册给的和Debug明显不一样啊
灰小子:
回复 澐碁:
例如,用32768的晶振频率,配置9600波特率
32768/9600=3.41
取整就是3,所以UCBRx=3
(3.41-3)*8=3.31
取整是3,所以UCBRSx=3
澐碁:
回复 灰小子:
是的。但是还是不对。必须是0x5300. 没有5还是乱码。
我用的6723.不止这个,其他6723的设备也是
灰小子:
回复 澐碁:
你用的什么开发软件?
灰小子:
回复 灰小子:
另外,建议上传下代码
Jacky Xu:
回复 澐碁:
32.768K时钟,根本不适合做9600波特率通讯的时钟
20% 40%的误码率。。。
这应该是为什么你按照理论值收不准的原因。