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.

[参考译文] CCS/MSP430F5438A:UART 配置

Guru**** 2589280 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/836344/ccs-msp430f5438a-uart-configuration

器件型号:MSP430F5438A

工具/软件:Code Composer Studio

嘿、我是一名新编程人员、我想将 MSP430配置为通过 UART 使 LED 闪烁。 我在设置寄存器、引脚端口(IO) 和 DCO 时遇到问题。 我知道波特率应该是57600bps、时钟频率 应该是16MHz。 是否有一种简单的方法来实现此目的? 将沿着正确的路径行进? 使用下面的代码、我能否实现我的目标、如果是、我接下来应该怎么做?

/**

*使用 UART 使 LED 永远闪烁

* blink.c

*

#include

int ReadRegister (void);

void TestBlinkingLight (void);

int x;

int main (空)

while (1)

x = ReadRegister();

开关(x)

情况0x03:

TestBlinkingLight();

中断;

默认值:

中断;

//初始化 UART

//设置 DCO

//配置 IO

TestBlinkingLight ()

WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器

P1DIR |= 0x01;//将 P1.0配置为输出

volatile unsigned int i;// volatile 以阻止优化

while (1)

P1OUT ^= 0x01;//切换 P1.0

for (i=10000;i>0;i--);//延迟

int ReadRegister()

X = UCA0STAT;

如果(0x01 = UCA0STAT)

X = UCA0RXBUF;

返回 x;

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

    您需要对 UART 执行一些配置。 我建议您从以下位置的"uscia0_uart"示例之一开始:

    http://dev.ti.com/tirex/explore/node?node=AMG0G4bDkAUNjJAhdKxRYA__IOGqZri__LATEST

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

    你好 Bruce

    感谢您的评论! 代码示例应该是在开始时研究 MSP430外设使用情况的好方法。

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

    感谢大家 的回答。 在这些示例的帮助下、我开发了更好的代码、但我认为有问题。 我希望通过 UART 发送命令、以触发闪烁的 LED1和稳定的 LED2。 请问您是不是在查看我开发的最新代码的。

    #include
    /**
     * blink.c
     *

    //int ReadRegister (void);
    void TestBlinkingLight (void);
    //int x;

    int main (空)

       WDTCTL = WDTPW + WDTHOLD;                //停止 WDT

       P3SEL = 0x30;                            // P3.4、5 = USCI_A0 TXD/RXD
       UCA0CTL1 |= UCSWRST;                     //**将状态机置于复位状态**
       UCA0CTL1 |= UCSSEL_2;                    // SMCLK
       UCA0BR0 = 109;                             // 1MHz 57600 (请参阅用户指南)
       UCA0BR1 = 0;                             // 1MHz 57600
       UCA0MCTL |= UCBRS_1 + UCBRF_0;           //调制 UCBRSx=1、UCBRFx=0
       UCA0CTL1 &=~UCSWRST;                    //**初始化 USCI 状态机**
       UCA0IE |= UCRXIE;                        //启用 USCI_A0 RX 中断

       _bis_SR_register (LPM0_bits + GIE);      //输入 LPM0、中断被启用
       __no_operation();
       TestBlinkingLight();

    空 TestBlinkingLight (空)

       WDTCTL = WDTPW | WDTHOLD;      //停止看门狗计时器
       P1DIR |= 0x01;                 //将 P1.0配置为输出

       volatile unsigned int i;       // volatile 以阻止优化

       while (1)
       {
           P1OUT ^= 0x01;             //切换 P1.0
           for (i=10000;i>0;i--);    //延迟
       }

    /*
    int ReadRegister()

       X = UCA0STAT;
       如果(0x01 = UCA0STAT)
           X = UCA0RXBUF;

       返回 x;

    *

    //回显 RXed 字符,确认 TX 缓冲区已准备就绪
    #if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
    #pragma vector=USCI_A0_Vector
    _interrupt void USCI_A0_ISR (void)
    #Elif defined (_GNU_)
    void __attribute__((中断(USCI_A0_Vector)) USCI_A0_ISR (void)
    其他
    错误编译器不受支持!
    #endif

     switch (__evo_in_range (UCA0IV、4))
     {
     情况0:中断;                            //向量0 -无中断
     情况2:                                  //向量2 - RXIFG
       while (!(UCA0IFG&UCTXIFG));            // USCI_A0 TX 缓冲器准备就绪?
       UCA0TXBUF = UCA0RXBUF;                 // TX -> RXED 字符
       P1DIR |= 0x02;                         //配置 P1.1端口方向
       P1OUT = 0x02;                          //打开 P1.1 LED2
       中断;
     情况4:中断;                            //向量4 - TXIFG


         中断;

     默认值:break;
     }

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

    你好、Snow

    很抱歉迟到了、因为我不在办公室。 我今天回到办公室。 我将研究您的代码并在稍后分享我的评论。

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

    您好、Snow、

     http://dev.ti.com/tirex/explore/node?node=AMG0G4bDkAUNjJAhdKxRYA__IOGqZri__LATEST 中提供了 UART 增强型代码示例"msp430x54xA_uart_standard_transc.c"

    请帮您学习并尝试使用此代码作为调试代码的参考。 谢谢!

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

    谢谢、我将对其进行回顾