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.

[参考译文] MSP-EXP430FR2311:UART波特配置

Guru**** 2614265 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/659802/msp-exp430fr2311-uart-baudrate-configuration

部件号:MSP-EXP430FR2311
我在设置9600波特率以从MSP430与ZigBee模块进行通信时遇到问题,我正在另一个模块上获取垃圾数据。 我的XBee模块连接到引脚1.6 和1.7 ,3.3V和GND。 
关于UCA0MCTL2值应设置为什么的任何帮助,或者可能存在问题的任何其他帮助?

谢谢


#include <MSP40.0> unsigned char RXData =0; unsigned char TXData =1; int main(void){ WDTCTL = WDTPW | WDTHOLD; //停止看门狗计时器 PM5CTL0 &=~LOCKLPM2; //禁用GPIO开机默认高阻抗模式 //以激活先前配置的端口设置 P1DIR || BIT0; P1OUT &=~BIT0; // WFP 1.0 输出过低 //配置UART引脚 P1SEL0 || BIT6 | BIT7; //将2-UART引脚设置为第二个功能 //配置UART UCA0CTLW0 |= UCSWRST; //重置eUSCI UCA0CTLW0 |= UCSSEL__ACLK; //波特率计算 UCA0BR0 = 3; // 3.2768万/9600 =9600 = 3.4.1333万 UCA0MCTLW = 0x06; // 3.4.1333万 - INT (3.4133)= 0.4133 // UCBRSx值=? (不确定) UCA0BR1 = 0; UCA0CTLW0 &=~UCSWRST; //初始化eUSCI UCA0IE |= UCRXIE; //启用USI_A0 RX中断 同时(1) { while (!(UCA0IFG和UCTXIFG)); UCA0TXBUF = TXData; //将数据加载到缓冲区 __bis_sr_register(LPM0_bits|GIE); //输入LPM0 __no_operation(); //用于调试器 } } #if defined(__TI_Compiler_version__)|| defined(__IAR_systems_icc__) #pragma vector=USI_A0_vector __interrupt void USI_A0_ISR(void) #Elif defined(__GNUC__) void __attribute__((interrupt (UA0_void_SCI_vector)) UISI_vector)) UA0_else不 支持错误#else #endif { Switch(__偶 数_in_range(UCA0IV,USI_UART_UCTXCPTIFG)) { 案例USI_NONE:中断; 案例USI_UART_UCRXIFG: UCA0IFG &=~ UCRXIFG; //清除中断 RXData = UCA0RXBUF; //清除缓冲区 IF (RXData!= TXData) //检查值 { P1OUT |= BIT0; //如果错误,打开WFP 1.0 同时(1); //陷阱CPU } TXData++; //增量数据字节 __BIC_SR_REGISTER_ON_EXIT (LPM0_bits);//在RETI上退出LPM0 中断; 案例USI_UART_UCTXIFG:中断; 案例USI_UART_UCSTIFG:中断; 案例USI_UART_UCTXCPTIFG:中断; } }

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

    嗨,Sparrow,

    您是否检查过此示例代码,它是否可以在您的主板上工作?  e2e.ti.com/.../msp430fr231x_5F00_euscia0_5F00_uart_5F00_01.c

    此致,

    现金Hao

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

    您好,

    此示例 回送 通过PC串行端口接收的数据,但是我想通过UART将数据直接从MSP430发送到与它相连的ZigBee。

    但是,我确实尝试将此程序中的波特率配置用于我自己的程序,但我仍然没有收到任何数据。  

    #include <MSP40.0>
    unsigned char RXData =0;
    unsigned char TXData =1;
    
    
    int main(void){
    
    WDTCTL = WDTPW | WDTHOLD; //停止看门狗计时器
    
    PM5CTL0 &=~LOCKLPM2; //禁用GPIO开机默认高阻抗模式
    //以激活先前配置的端口设置
    P1DIR || BIT0;
    P1OUT &=~BIT0; // WFP 1.0 输出过低
    
    //配置UART引脚
    P1SEL0 || BIT6 | BIT7; //将2-UART引脚设置为第二个功能
    
    //配置UART
    UCA0CTLW0 |= UCSWRST; //重置eUSCI
    UCA0CTLW0 |= UCSSEL__SMCLK;
    //波特率计算
    UCA0BR0 = 52; // 3.2768万/9600 =9600 = 3.4.1333万
    UCA0BR1 = 0x00;
    UCA0MCTLW = 0x4900 | UCOS16 | UCBRF_1; // 3.4.1333万 - INT (3.4133)= 0.4133
    // UCBRSx值=? (不确定)
    
    UCA0CTLW0 &=~UCSWRST; //初始化eUSCI
    UCA0IE |= UCRXIE; //启用USI_A0 RX中断
    
    同时(1)
    {
    while (!(UCA0IFG和UCTXIFG));
    UCA0TXBUF = TXData; //将数据加载到缓冲区
    __bis_sr_register(LPM0_bits|GIE); //输入LPM0
    __no_operation(); //用于调试器
    }
    }
    
    #if defined(__TI_Compiler_version__)|| defined(__IAR_systems_icc__)
    #pragma vector=USI_A0_vector
    __interrupt void USI_A0_ISR(void)
    #Elif defined(__GNUC__)
    void __attribute__((interrupt (UA0_void_SCI_vector)) UISI_vector)) UA0_else不
    
    支持错误#else
    #endif
    {
    Switch(__偶 数_in_range(UCA0IV,USI_UART_UCTXCPTIFG))
    {
    案例USI_NONE:中断;
    案例USI_UART_UCRXIFG:
    UCA0IFG &=~ UCRXIFG; //清除中断
    RXData = UCA0RXBUF; //清除缓冲区
    IF (RXData!= TXData) //检查值
    {
    P1OUT |= BIT0; //如果错误,打开WFP 1.0
    同时(1); //陷阱CPU
    }
    TXData++; //增量数据字节
    __BIC_SR_REGISTER_ON_EXIT (LPM0_bits);//在RETI上退出LPM0
    中断;
    案例USI_UART_UCTXIFG:中断;
    案例USI_UART_UCSTIFG:中断;
    案例USI_UART_UCTXCPTIFG:中断;
    }
    } 

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

    while (!(UCA0IFG & UCTXIFG));UCA0TXBUF = TXData;//将数据加载到缓冲区

    这将不会提供“可见数据,直到TXData变量达到ASCII 33 '!'。 只需确保您正在观看此视频。

    另外,ZigBee模块是否工作正常? 如果它支持AT命令,您可以尝试使用终端测试它以确认其功能。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我已经验证了我的zigbees在ZigBee软件中是否正常工作。 我已将值设置为超过ASCII 33,现在我正在接收随机变量,但不接收我正在发送的变量。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    嗨,Sparrow,
    尝试此配置,
    UCA0CTLW0 |= UCSSEL__ACLK;
    //波特率计算
    UCA0BR0 = 3; // 3.2768万/9600 =9600 = 3.4.1333万
    UCA0BR1 = 0x00;
    UCA0MCTLW = 0x9200; // 3.4.1333万 - INT (3.4133)=基于用户指南的0.4133 表21-4

    此致,
    现金Hao