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.

[参考译文] MSP430FR2532:为MSP430设置波特率11.52万

Guru**** 2535750 points
Other Parts Discussed in Thread: MSP430FR2532

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/639930/msp430fr2532-setting-baudrate-115200-for-msp430

部件号:MSP430FR2532

您好,

我的系统(MSP430FR2532)在波特率9600方面运行良好。 但是当我将波特率更改为11.52万时,它不起作用;我检查范围,发现1位的持续时间是10us (而不是波特率11.52万的正确位的8.6us)。 请帮助检查我是否遗漏了任何内容? 谢谢你。

#定义MCLK (800万L)/* MCLK频率(以Hz为单位)*/
#define CONFIG_CI_PHYDL_UART_BAUDRATE (11.52万)

#IF (MCLK=800万)
# IF (CONFIG_CI_PHYDL_UART_BAUDRATE == 9600)
# 定义UCOS16_VAL 1#
定义UCBRX_VAL 52
# 定义UCBRSx_VAL 0x49
# 定义UCBRFx_VAL 1
# Elif (config_CI_PHYDL_UART_BAUDRATE == 5.76万)
# 定义UCOS16_VAL 1#
定义UCBRX_VAL 8#
定义UCBRSx_VAL 0xF7
# 定义UCBRFx_VAL 10#
Elif (config_CI_PHYDL_UART_BAUDRATE == 11.52万)
# 定义UCOS16_VAL 1#
定义UCBRX_VAL 4#
定义UCBRSx_VAL 0x55
# 定义UCBRFx_VAL 5#
Else
# 错误"Baudrate is not supported (不支持Baudrate)"
# endif
#else
#error "Frequency is not supported (不支持频率)
"#endif

/**********************************************************************************************
*
**@brief初始化UART
*
*@Return none
***************************************************************************************** /
//内联静态void Clock_init(void)

void TI_MSPBoot_CI_PHYDL_Init(t_CI_Callback * CI_Callback)
{
UCA0CTLW0 = UCSWRST | UCSSEL_2; //在RESET中保留USCI并使用SMCLK

//P1SEL0 &=~(BIT4 | BIT5); //为USI_A0 UART模式启用P4[2:3]
//P1SEL1 ||(BIT4 | BIT5); //
P1SEL0 || BIT4 | BIT5;

UCA0BR0 =(UCBRX_VAL和0xFF); //设置低波特率字节
UCA0BR1 =(UCBRX_VAL >> 8); //设置高波特率字节
UCA0MCTLW = UCOS16_VAL | //设置调制值
(UCBRSx_VAL << 1)|
(UCBRFx_VAL < 4);
/*UCA0BR0 = 4; //UCBR = INT (N/16)= 4
UCA0BR1 = 0;
UCA0MCTLW |= 0x5500 + UCBRF_5 + UCOS16;*/

UCA0CTLW0 &=~UCSWRST; //清除软件重置,恢复操作

//初始化所有回调
CI_Callback_PTR = CI_Callback;
//初始化状态机
CI_State_Machine = USCI_State_IDLE;
}/******************************************************************************


*
**@brief初始化MSP430时钟
*
*@返回NONE
************************************************************************************************* //
内联静态void clock_init(void)

静态void clock_init(void)
{
//根据MCLK设备数据表的要求配置一个FRAM等待状态
//在配置时钟系统之前运行超过8MHz。
/************************************************** /
WDTCTL = WDTPW | WDTHOLD;
//FRCTL0 = FRCTLPW | NWITS_1;

__bis_sr_register (SCG0); //禁用FLL
CSCTL3 |= SELREF_REFCLK; //将REFO设置为FLL参考源
CSCTL0 = 0; //清除DCO和MOD寄存器
CSCTL1 &=~(DCORSEL_7); //首先清除DCO频率选择位
CSCTL1 |= DCORSEL_3; //设置DCO = 8MHz
CSCTL2 = FLLD_0 + 242; // DCOCLKDIV = 8MHz
__DELAY周期(3);
__BIC_SR_REGISTER (SCG0); //启用FLL
While (CSCTL7和(FLLUNLOCK0 | FLLUNLOCK1)); // FLL已锁定

CSCTL4 = SELMS__DCOCLKDIV |拉美经济体系__REFOCLK; //将默认的REFO(~3.2768万Hz)设置为ACLK源,ACLK =3.2768万Hz
//默认DCOCLKDIV为MCLK和SMCLK源
PM5CTL0 &=~LOCKLPM2; //禁用GPIO开机默认高阻抗模式
//以激活先前配置的端口设置

__delay_cycles(1000);

} 

此致,

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

    您好,Quang

    在TI_MSPBoot_CI_PHYDL_Init函数中,应该将UCBRSx_VAL移动8而不是1,以便在UCA0MCTLW中设置正确的位。

    所以

    UCA0MCTLW = UCOS16_VAL | //设置调制值
    
    (UCBRSx_VAL << 1)|
    
    (UCBRFx_VAL < 4); 

    应该成为

    UCA0MCTLW = UCOS16_VAL | //设置调制值
    
    (UCBRSx_VAL << 8)|
    
    (UCBRFx_VAL < 4); 

    当我使用此更新测试您的代码时,代码能够以11.52万波特进行通信。 9600波特似乎足够慢,使 初始代码中的UCA0MCTLW值对时钟速率的影响不足以导致错误。

    此致,

    Ryan

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

    非常感谢您的快速回答。 现在,系统可以与波特率11.52万完美配合。

    谢谢,