This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430fr5992时钟系统

Guru**** 2213890 points
Other Parts Discussed in Thread: MSP430FR5992
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/868698/msp430fr5992-clock-system

主题中讨论的其他器件:MSP430FR5992

问题现象:通常情况下,产品的波特率在加电后为9600,但有时波特率在加电后变为4800。


产品描述:MCU 为 msp430fr5992、LF 为外部32.768k、HF 为外部12M、aclk = LF、smclk = HF、MCLK = DCO (21mhz、由于大量程序计算、不得使用21m)。 LF 和 HF 未连接到接地电容。 上电后、产品的波特率固定为9600。 上电后、可通过命令将波特率修改为480096001920038400。 但是、不会节省断电。

现象:有时,在产品通电后,无法以9600波特率解析串行端口输出的数据。 发现原因是波特率不是9600。 大多数实际波特率为4800、比实际值小两倍。 偶尔会有其他值、一旦它是1920、它比9600小5倍。 但在电源故障后可恢复到9600并重新启动。

我自己的测试流程:

1、通过串行端口输出寄存器 uca0brw、uca0ctlw0和 csctl3的值、并检查配置值是否已修改。

结果:当上电后波特率为4800时、uca0brw 的值仍然是相应的9600。 uca0ctlw0的值还表示串行端口的时钟源是 smclk、csctl3的值还表示 smclk 的分频值为1、实时时钟没有分频。 这些值与正常上电的值完全相同。

2.当较高的射频特殊速率为4800时,通过修改产品中的波特率命令来修改波特率。 发送将9600波特率设置为4800以下的命令后、实际波特率仍为4800。 发送设置4800波特率的命令后、实际波特率变为2400 (程序中没有配置2400波特率的代码)。 发送设置38400波特率的命令后、实际波特率为19200、也就是说、设置后的实际波特率比预期低一半。

产品上有一个闪烁周期为1的 LED、由计时器完成。 计时器的时钟源最初为32.768、而计时器的时钟源更改为 smclk。 上电后、当产品的波特率为4800时、发现 LED 的闪烁周期更改为2S。

4、加电后波特率为4800时、使用示波器测量高频值、即12m。

5.使用串行端口输出时钟的所有寄存器 csctl1-csctl6。 当加电正常且加电射频为4800时、值之间没有差异。

6.添加测试程序,通过命令调用时钟初始化和串行端口初始化。 当上电后波特率为4800时、发送命令以重新初始化时钟和串行端口、而不进行任何更改。

7、加电后波特率为4800时、执行命令 pmmctl0 = pmpw + pmmswPOR (即、通过软件触发 POR)、波特率可恢复为9600


根据上述测试、我个人认为 smclk 的值除以2、但我不知道它在哪里。 通过观察频率分频寄存器显示、不存在频率分频。 此外、还有一个5频分频。 即使是通过分频器实现的、分频倍数也不是5倍。 它是2/4/8。 此外、即使修改了时钟设置或串行端口设置、复位初始化函数也不起作用。 为什么软件 POR 可以将波特率恢复为9600? 它相当于再次上电。


void CLK init (void)//时钟初始化




FRCTL0=0XA500+NWAITS0+NWAITS1+NWAITS2;

PJDIR=0x00;

PJOUT=0;

PJREN=0xFF;

Pjsel0 = pjsel04 + pjsel05 + pjsel06 + pjsel07;/低频晶体振荡器选择

PJDIR|=(BIT5+BIT7);

CSCTL0=0xA500;//密码

CSCTL1=DCOFSEL0+DCOFSEL2+DCORSEL;

CSCTL2=0;

CSCTL2=SELS0+SELS2+SELM0+SELM1;//ACK_LFXT 01=MCLK=DCOCLK

Csctl3 = 0;// divm0;// ACK smclk smclk 频率分频数为1

Csctl4 = vlooff + lfxtdrive0 + lfxtdrive1 + hfxtdrive0 + hfxtdrive1 + hffreq1;/关闭 VLO


CSCTL5=0;

CSCTL6=ACLKREQEN+MCLKREQEN+SMCLKREQEN+MODCLKREQEN;//

操作



PM5CTL0 &=~LOCKLPM5;

CSCTL0=0xA500;//密码

CSCTL0_H=0xA5;

CSCTL5 &=~(LFXTOFFG+HFXTOFFG);

SFRIFG1&=~OFIFG;

延迟(0xFF);



while (SFRIFG1&OFIFG);




此外、还生产了数百套此产品。 目前、在一个电路板上发现了此问题。


请指出专家的原因是什么、几天的困惑、谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    UART 的时钟源是 SMCLK

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    大家好、感谢您的详细问题、我想我需要找到带宽来检查详细信息。 我稍后会回复您

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    大家好、我想知道您对此问题是否有任何更新、是否有权解决此问题? 谢谢!