我目前正在将 Code Composer 与嵌入式 MSP430F5659一起用于固件开发。 我的应用程序需要通过 UART (USCI A2)接口以115200波特率与主机可靠通信。
在这种波特率下,UART 会丢弃字符,且不会与主机保持同步。 我需要知道建议用于 USCI A2 UART 的可靠波特率是什么,以及在8个数据位,无奇偶校验,1个停止位为该波特率设置参数和相关控制寄存器是什么。
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.
我目前正在将 Code Composer 与嵌入式 MSP430F5659一起用于固件开发。 我的应用程序需要通过 UART (USCI A2)接口以115200波特率与主机可靠通信。
在这种波特率下,UART 会丢弃字符,且不会与主机保持同步。 我需要知道建议用于 USCI A2 UART 的可靠波特率是什么,以及在8个数据位,无奇偶校验,1个停止位为该波特率设置参数和相关控制寄存器是什么。
使用计算器计算参数。 全速(MCLK 24 MHz) UART 的 F5xx 可高达6 Mbps。 115200应该是1 MHz MCLK 的问题。
有可能。 因此,我想对 UART 进行编程,以获得较慢的波特率,但我不确定应该设置哪些参数和寄存器,以获得9600和9200波特率的值。
以下代码对11520,5760,38400波特率起作用,为 UCA2BRW 设置了正确的值。 但是,它不适用于9600和19200波特率:
作废 SerialUART::SetupUART (作废)
{
InfoAvail = 0;
txoverflow =0;
_DINT();
UCA2CTL1 |= UCSWRST;//将 USCI_A2置于重置状态
//注:对于 msp430f5x 系列,CTL 寄存器应以两个字节的形式访问。
UCA2CTL0 = 0;// UART 模式(8,n,1,lsb)
UCA2CTL1 = UCSSEL__SMCLK + UCRXEIE + UCBRKIE + UCSWRST;
UCA2BRW = 9;//波特率= 115200 //对于1.048 MHz
//UCA2BRW = 18;//波特率= 57600 //对于1.048 MHz
//UCA2BRW =27;//波特率=38400 // 1.048 MHz
//UCA2BRW = 3;//波特率= 19200 // 1.048 MHz
//UCA2BRW = 6;//波特率= 9600 //对于1.048 MHz
UCA2MCTL = 0x0002;//这适用于115200,57600,38400
UCA2CTL1 &=~(UCSWRST);//将 USCI_A2置于运行状态
UCA2IE |= UCTXIE + UCRXIE;//启用 TX-& RX-中断
_EINT();
}
感谢你的回复。 遗憾的是,表39-5中显示的寄存器与 Code Composer 提供的 msp430f5659.h 中的定义不匹配。
以下寄存器可从报头文件中获得,我需要知道其中哪一个寄存器应设置为支持9600和19200波特率的值:
/******************************
* USCI A2
《国家安全与发展报告》 /
#define __MSP4_SHA_USCI_A2__/*定义,显示模块可用*/
#define __MSP4A_BASEADDRESS_USCI_A2__ 0x0640
#define USCI_A2_BASE __MSP4P_BASEADDRESS_USI_A2
SFR_16BIT (UCA2CTLW0);/* USCI A2控制字寄存器0 */
SFR_8位(UCA2CTLW0_L);/* USCI A2控制字寄存器0 */
SFR_8位(UCA2CTLW0_H);/* USCI A2控制字寄存器0 */
#define UCA2A@CTL1 UCA2CTLW0_L /* USCI A2控制寄存器1 */
#define UCA2CTL0 UCA2CTLW0_H /* USCI A2控制寄存器0 */
SFR_16BIT (UCA2BRW);/* USCI A2波特率0 */
SFR_8位(UCA2BRW_L);/* USCI A2波特率0 */
SFR_8位(UCA2BRW_H);/* USCI A2波特率0 */
#define UCA2BR0 UCA2BRW_L/* USCI A2波特率0 */
#define UCA2BR1 UCA2BRW_H /* USCI A2波特率1 */
SFR_8位(UCA2MCTL);/* USCI A2调制控制*/
SFR_8位(UCA2STAT);/* USCI A2状态寄存器*/
SFR_8位(UCA2RXBUF);/* USCI A2接收缓冲区*/
SFR_8位(UCA2TXBUF);/* USCI A2传输缓冲区*/
SFR_8位(UCA2ABCTL);/* USCI A2 LIN 控制*/
SFR_16BIT (UCA2IRCTL);/* USCI A2 IrDA 传输控制*/
SFR_8位(UCA2IRCTL_L);/* USCI A2 IrDA 传输控制*/
SFR_8位(UCA2IRCTL_H);/* USCI A2 IrDA 传输控制*/
#define UCA2IRTCTL UCA2IRCTL_L /* USCI A2 IrDA 传输控制*/
#define UCA2IRRCTL UCA2IRCTL_H /* USCI A2 IrDA 接收控制*/
SFR_16BIT (UCA2ICTL);/* USCI A2中断启用寄存器*/
SFR_8位(UCA2ICTL_L);/* USCI A2中断启用寄存器*/
SFR_8位(UCA2ICTL_H);/* USCI A2中断启用寄存器*/
#define UCA2IE UCA2ICTL_L /* USCI A2中断启用寄存器*/
#define UCA2IFG UCA2ICTL_H /* USCI A2中断标志寄存器*/
SFR_16BIT (UCA2IV);/* USCI A2中断向量寄存器*/
在115200,57600和38400上工作前显示的代码样本 I 提供了与 UCA2BRW 一起使用的正确值。 但是,它在19200和9600中不起作用。