Answers:
您正在使用哪个MSP430?不同的系列具有不同的时钟结构和功能。
DCO将随温度变化频率,导致USART波特率超出规格。MSP有一个温度传感器(不是很准确)。您可以更改DCO控制寄存器中的值以使DCO频率回到范围内,但这将需要校准的查找表来涵盖您希望看到的温度范围。一些MSP器件在制造时已将DCO校准表编程到其中一个闪存扇区中,但是仅当它们覆盖了您希望使用的频率时才有用,并且我认为它们没有温度补偿值。
您是否有可以用作校准源的参考晶体振荡器?我将始终在32kHz晶体中进行设计,并将其用于ACLK。对于高达9600的波特率,可以直接使用。对于更高的波特率,您将不得不针对ACLK信号校准DCO。较新的部件具有硬件FLL,它将自动执行此操作。
所以这是答案:
该产品具有一个32 kHz的晶体,我已经编写了一个例程来调整DCO频率。频率调整使用了两个定时器,一个来自DCO,一个来自32kHz ACLK。它是由捕获/比较系统的中断驱动的,因此它可以在运行期间定期重新校准。
不幸的是,我将初始校准插入了我的启动代码的错误部分,其中中断被关闭。因此,在首次使用串行端口之前就不会进行校准,并且初始化会挂起,等待串行端口上的响应。
DCO频率从出厂校准值开始,这就是为什么它在室温下工作的原因。
这些剧情讲述了这个故事:
首先,DCO温度曲线:
现在,校准后的曲线实际上正在工作: