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.

[参考译文] MSP430F5659:UART 初始化问题

Guru**** 2538950 points
Other Parts Discussed in Thread: MSP430F5659

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/600370/msp430f5659-uart-initialization-problem

器件型号:MSP430F5659

您好!

我正在使用 msp430f5659并尝试连接 UART。 我无法传输任何字符。 我的 UCS 代码是:

空时钟()

   UCSCTL3 |= SELREF_2;                     //设置 DCO FLL 基准= REFO

       UCSCTL4 |= SELA_2;                       //设置 ACLK = REFO

       _bis_SR_register (SCG0);                 //禁用 FLL 控制循环

       UCSCTL0 = 0x0000;                        //设置可能的最低 DCOx、MODx

       UCSCTL1 = DCORSEL_4;                     //选择 DCO 范围8MHz 运行

       UCSCTL2 = FLLD_1 + 121;               //将 DCO 乘法器设置为4MHz

                                                 //(N + 1)* FLLRef = Fdco

                                                 //(121 + 1)* 32768 = 4MHz

                                                 //设置 FLL Div = fDCOCLK/2

       _BIC_SR_register (SCG0);                 //启用 FLL 控制环路



       // DCO 范围位已经存在时、DCO 的最坏情况稳定时间

       //已更改 n x 32 x 32 x f_MCLK / f_FLL_reference。 请参阅5xx 中的 UCS 一章

       // UG 进行优化。

       // 32 x 32 x 4 MHz/32、768Hz = 125000 = DCO 稳定的 MCLK 周期

       _DELAY_CYCLES (125000);//

       //循环直到 XT1、XT2和 DCO 故障标志被清除

       操作

       {

         UCSCTL7 &=~(XT2OFFG + XT1LFOFFG + DCOFFG);

                                                 //清除 XT2、XT1、DCO 故障标志

         SFRIFG1 &=~OFIFG;                     //清除故障标志

       } while (SFRIFG1&OFIFG);                  //测试振荡器故障标志

UART 初始化代码为:

void UART(){

 P9SEL |= RXD + TXD;                           //分别为 P9.2和 P9.3分配 TX 和 RX 功能

   UCA2CTL1 |=UCSWRST;
   UCA2CTL1 |= UCSSEL_ACLK;             //选择 USCI 模块的 SMCLK 1MHz 时钟源
   UCA2CTL0 = 0x00;                //无奇偶校验,8位模式,lsb 优先,UART 异步模式,停止位=1

   UCA2BR0=416;                   //波特率发生器的预取值9600bps
   UCA2BR1=0;
   UCA2MCTL=UCBRS_5 + UCBRF_0;                //调制 UCBRSx=5、UCBRFx=0
   UCA2CTL1 &=~UCSWRST;              //初始化 USCI 状态机


   UCA2IE |= UCRXIE;                //启用 USCI_A0 RX 中断
   _bis_SR_register (GIE);         //全局中断使能

我无法确定问题的位置。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我也尝试了这个、使用 xt1clk 作为 FLL 的基准。 但它不会在我的 UART 上传输任何字符。
    void UCS_init()

    UCSCTL3 = SELREF_0;// 1MHz
    UCSCTL4 = SEL_0 + SELS_3 + SELM_3;
    _bis_SR_register (SCG0); //禁用 FLL 控制环路
    UCSCTL0= 0x00;
    UCSCTL1=DCORSEL_3;

    UCSCTL2 = FLLD_0 + 121;// 4MHz
    _BIC_SR_register (SCG0); //启用 FLL 控制环路
    _DELAY_CYCLES (125000);
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Harish、

    我将回顾您的代码、但同时、您能否通读 MSP430 MCU 上 eUSCI 和 USCI 串行通信常见问题解决方案的"一般"和"UART"部分。 顾名思义、本文档将向您介绍最常见的串行通信问题及其解决方法。 阅读完它后、请告诉我。  

    此致、  

    Caleb Overbay

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

    您好 Harish、

    查看您的代码后、我有一些意见:

    1. UCA2CTL1 |= UCSSEL_ACLK;          //选择 USCI 模块的 SMCLK 1MHz 时钟源
      1. 您要将 UART 时钟源设置为 ACLK 而不是 SMCLK。 ACLK = 32768
    2. UCA2BR0=416;             //波特率发生器的预取值9600bps
      1. 这将无法正确实现您所需的9600波特率。 我们在 这里关闭波特率生成计算器。 我建议使用它来正确设置您的寄存器

    此致、

    Caleb Overbay

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

    您好!

    我已按如下方式更改设置:

      P9SEL |= RXD + TXD;                           //分别为 P9.2和 P9.3分配 TX 和 RX 功能
       UCA2CTL1 |=UCSWRST;
       UCA2CTL1 |= UCSSEL_SMCLK;             //选择 USCI 模块的 SMCLK 4MHz 时钟源、因为我的时钟频率为4MHz
       UCA2CTL0 = 0x00;                //无奇偶校验,8位模式,lsb 优先,UART 异步模式,停止位=1
       UCA2BR0=26;                   //波特率发生器的预取值9600bps (4MHz/9600/16=26)
       UCA2BR1=0;
       UCA2MCTL=UCBRS_0 + UCBRF_1 + UCOS16;                //针对过采样调制 UCBRSx=5、UCBRFx=0、uCOS=1
       UCA2CTL1 &=~UCSWRST;              //初始化 USCI 状态机
       UCA2IE |= UCRXIE;                //启用 USCI_A0 RX 中断
       _bis_SR_register (GIE);         //全局中断使能

    但在终端上仍不接收任何字符。

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

    您好 Harish、

    如果您要在4MHz 下使用 SMCLK、则预分频器设置仍然不正确。 将数字插入 波特率计算器时 、我得到以下结果:

    您可以看到非过采样方法的最大位误差较低、因此我建议将这些数字用于您的寄存器。  

    此外、如何将 MSP430F5659连接到 PC? 您是否也在定制板上使用该器件? 您能否将逻辑分析仪连接到 TX/RX 线路并监控波特率?

    此致、  

    Caleb Overbay