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.

[参考译文] MSP430F479:UART 数据不正确

Guru**** 2513185 points
Other Parts Discussed in Thread: MSP430F479

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/748517/msp430f479-uart-data-not-correct

器件型号:MSP430F479

您好!

我尝试以115200Hz 的波特率通过 UART 发送一个字节的数据。 我正在使用 BM70 BLE 模块传输数据、BM70模块的波特率也是115200Hz。 我已经连接了 BM70模块 RX 和 TX 引脚的 MSP430的 TX 和 RX 引脚。 我只是将我想要发送的字节放入 MSP430的 Txbuffer 中、以便在不使用任何中断的情况下查看数据。 但是、当我通过 UART 发送数据时、它会发送垃圾数据、我可以从移动应用程序中看到这些数据。 请告诉我我在这里发生了什么错误吗?

谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您可以共享您的代码吗? 没有这一点、我们就不能做太多了。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    当然。 该代码在 IAR 环境中完成、该环境随附在下面:


    #include
    ;------------------------------------------------------------------
    ; RSEG CSTACK ;定义堆栈段
    ;------------------------------------------------------------------
    ; RSEG 代码 ;汇编到闪存
    org) 01100h ;程序启动
    ;------------------------------------------------------------------
    复位 MOV.w #0A00h、SP ;初始化 stackpointer
    StopWDT MOV.w #WDTPW+WDTHOLD、&WDTCTL;停止 WDT
    SetupFLL bis.b #XCAP11PF、&FLL_CTL0 ;配置负载电容器

    OFIFGcheck BIC.b #OFIFG、&IFG1 ;清除 OFIFG
    MOV.w #047FFh、R15 ;如果发生这一情况,请等待 OFIFG 再次置位
    OFIFGWAIT 解码 w R15 ;ORG 01100h ;程序启动尚未稳定
    Jnz OFIFG 等待
    bit.b #OFIFG、&IFG1 ;是否再次设置?
    Jnz OFIFGcheck ;如果是,请等待更多

    设置 P1 BIS.b #07h、&P1DIR
    BIS.b #07h、&P1OUT

    设置 P2 BIS.b #BIT4+BIT2、和 P2SEL ;P2.4、5 USCI 选项选择
    SetupUSCIA0 bis.b #UCSSEL_2、&UCA0CTL1 ;SMCLK
    MOV.b #09、&UCA0BR0 ;1MHz 115200
    MOV.b #00、&UCA0BR1 ;1MHz 115200
    MOV.b #02、&UCA0MCTL ;调制
    BIC.b #UCSWRST、和 UCA0CTL1 ;**初始化 USCI 状态机**
    BIS.b #UCA0RXIE、&IE2 ;启用 USCI_A0 RX 中断

    主程序 MOV.b #85h、R6 ;要发送的数据
    ; MOV.w #56ACh、R7 ;要发送的数据

    TZ1 位.b #UCA0TXIFG、&IFG2 ; USCI_A0 TX 缓冲器准备好了吗?
    JZ TZ1 ;如果 TX 缓冲区未就绪则跳转
    MOV.b R6、&UCA0TXBUF
    ; SWpb R7

    ;TZ2 位.b #UCA0TXIFG、&IFG2 ; USCI_A0 TX 缓冲器准备好了吗?
    ; JZ TZ2 ;如果 TX 缓冲区未就绪则跳转
    ; MOV.b R7、&UCA0TXBUF
    ; SWpb R7

    ;Mainloop bis.b #LPM3+GIE、SR ;进入 LPM3,中断被启用
    NOP ;仅用于调试器
    ;------------------------------------------------------------------
    USCIA0RX_ISR;回显 RXed 字符、确认 TX 缓冲区已准备就绪
    ;------------------------------------------------------------------
    TX0 位.b #UCA0TXIFG、&IFG2 ; USCI_A0 TX 缓冲器准备好了吗?
    JZ TX0 ;如果 TX 缓冲区未就绪则跳转
    MOV.b &UCA0RXBUF、&UCA0TXBUF;TX -> RXED 字符
    TI ;

    ;------------------------------------------------------------------
    ; 常见的 INTVEC ;中断矢量
    ;------------------------------------------------------------------
    org) 0FFF2h ;USCI_A0 Rx 矢量
    DW USCIA0RX_ISR ;
    org) 0FFFEh ;复位向量
    DW 复位 ;
    结束
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否还将 BM70的 GND 与 MSP430板 GND 相连?
    最小 UART 连接必须具有 GND、TX 和 RX。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Sadique、

    首先、我们应确保硬件按预期工作。   

    您使用的硬件是什么?  它是 连接到 BLE 模块的 TI LaunchPad 吗?   请检查电路板是否按照社区的建议共享 GND 连接。  

    您使用的汇编代码示例似乎来自 MSP430F79示例代码包:  

    如上所述、该示例应 通过 RX 进行接收、并从 TX 中回显。   您能否测试原始示例以确认您的硬件是否按预期工作?   是否可以从 BLE 模块或其他来源进行 TX 并检查响应?

    如果可以、我们可以将其缩小为软件问题。   

    谢谢、

    JD

     

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

    是的、我将 BM70的 GND 与 MSP430板 GND 相连、BM70模块获得从板运行所需的适当电压。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    否、我没有使用 TI Launchpad。 我使用自己的板、其中包含 MSP430F479。 是的、我已将电路板的公共 GND 连接到 BLE 的公共 GND。 是的、我已经检查了中断是否工作正常。 我已从移动应用程序向 BLE 模块发送了一个数字、代码在使用中断的断点停止。 但它在其 RX 缓冲区中未提供正确的数据。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您是否在 USCIA0RX_ISR 处断点?

    MOV.b R6、&UCA0TXBUF
    nop;仅调试
    器 USCIA0RX_ISR 需要;回显 RXed 字符、确认 TX 缓冲器已就绪第一
    个 TX0位。b #UCA0TXIFG、&IFG2;USCI_A0 TX 缓冲器是否就绪?
    JZ TX0;如果 TX 缓冲区未就绪则跳转
    mov.b &UCA0RXBUF,&UCA0TXBUF;TX -> RXed 字符
    串 ti;
    

    在发送#85字节后、您会立即从那里跌倒。 我怀疑尚未收到任何资料。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    大家好、我在那里附加的代码就是我尝试接收数据的代码。 中断检查是使用德州仪器提供的不同代码完成的。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    [引用 USER="MD Sadique Hasan "]我使用自己的板和 MSP430F479

    [引用 user="MD Sadique Hasan "],但它没有在其 RX 缓冲区中提供正确的数据。

    感谢您确认硬件设置。  如果您看不到随提供的示例接收到的正确数据、则可能仍然存在与硬件相关的问题。  其中一个器件的时钟频率或波特率可能关闭。    

    下面是一些需要检查的事项:

    请检查您的振荡器 频率。  该示例假设晶振为32kHz。   

    请确认 您的 SMCLK 速度符合您的预期。  您应该能够在 P1.4上输出并测量它。  根据示例软件、我认为它应该是1MHz。

    最后、请使用逻辑分析仪/o 示波器来示波 UART 线、以确认 BLE 模块以正确的波特率发送预期数据。  

    希望这将缩小问题的范围。  

    谢谢!

    J.D.