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-EXP430F5529LP:DLP-7970abp NFC BoosterPack UART 弹劾

Guru**** 2553260 points
Other Parts Discussed in Thread: TRF7970A, CC2650

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/591212/msp-exp430f5529lp-dlp-7970abp-nfc-boosterpack-uart-impementation

器件型号:MSP-EXP430F5529LP
Thread 中讨论的其他器件:CC2650

你好!

 我被 Ralph Jacobi 从 NFC/RFID 论坛重定向到这里。 我使用 的是 F5529LP_TRF7970A_All_NFC_modes(sloa192)这是 NFC P2P 的示例项目 、我希望(通过 NFC)将接收到的数据发送到具有 UART 的 CC2650 LaunchPad。 此项目与"MSP430F5xx 6xx 器件的 MSP430 DriverLib 搭配使用"、我已开始使用 USCI_A_UART.C.

我的问题是如何使用 UART 从 P2P 缓冲区等缓冲区传递数据?  

/*
* myuart.c
*
*创建日期:2017。 ápr μ A。 25.
* 作者:Mayer Tamas
*/



#include" driverlib.h"

uint8_t 输入;

void myUART_Init (void)
{


//P3.4 = USCI_A0 TXD
GPIO_setPeripheralModuleFunctionInputPin (
GPIO_PORT_P3、
GPIO_PIN3| GPIO_PIN4
);



//USCI_A_UART_initAdvance (
// USCI_A0_BASE、
// USCI_A_UART_CLOCKSOURCE_SMCLK、
// UCS _getSMCLK (USCI_A0_BASE)、
//13、
// 0、
// USCI_A_UART_NO_奇 偶校验、
// USCI_A_UART_LSB_FIRST、
// USCI_A_UART_One_stop_bit、
// USCI_A_UART_MODE、
// USCI_A_UART_overSAMPLING_BAUDRATE_generation);

if (STATUS_FAIL = USCI_A_UART_initAdvance (
USCI_A0_BASE、
USCI_A_UART_CLOCKSOURCE_SMCLK、
UCS_getSMCLK (USCI_A0_BASE)、
13、
0、
USCI_A_UART_NO_奇 偶校验、
USCI_A_UART_LSB_FIRST、
USCI_A_UART_One_stop_bit、
USCI_A_UART_MODE、
USCI_A_UART_overSAMPLING_BAUDRATE_GEN))
{
返回;
}

//启用 UART 模块以进行操作
USCI_A_UART_ENABLE (USCI_A0_BASE);


//启用接收中断
USCI_A_UART_enableInterrupt (USCI_A0_BASE、UCRXIE);

USCI_A_UART_transmitData (USCI_A0_BASE、输入);

//进入 LPM3、中断被启用
_bis_SR_register (LPM3_bits + GIE);
__NO_OPERATION ();


}



#pragma vector=USCI_A0_VECTOR
__INTERRUPT void USCI_A0_ISR (void)
{

switch (_evo_in_range (UCA0IV、4))
{
//向量2 - RXIFG
案例2:
//回显 RXed 字符,确认 TX 缓冲区已准备就绪
// USCI A0 TX 缓冲器就绪?
while (!USCI_A_UART_getInterruptStatus (USCI_A0_BASE、UCTXIFG));
//接收回显数据
输入= USCI_A_UART_receiveData (USCI_A0_BASE);
//发送下一个数据
USCI_A_UART_transmitData (USCI_A0_BASE、输入);
中断;
默认值:break;
}
} 

这是我的第一次尝试,但我不能正常工作。

我已经认识到、为了传输数据、我不需要启用 UART 中断、

我是对的吗?

总之,我已经了解到该程序始终停留在以下行中:

_bis_SR_register (LPM3_bits + GIE); 

我注意到 、在该项目中、USCI_A_UART.c 文件与其他项目中的文件稍有不同、

例如  、USCI_A_UART_init 函数为 USCI_A_UART_initAdvance。

也许这就是为什么不起作用的原因。

此致、

Mayer Tamás

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

    尊敬的 Mayer:
    是否确定在 initParam 中正确设置了波特率? 您的目标波特率是多少?

    此外、您能否在启用中断之前尝试清除中断?

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

    你好、Cameron!

    幸运的是、有了这个代码、它看起来工作正常、但波特率不好。

    代码为:

    /*-版权所有-、BSD
    *版权所有(c) 2012、德州仪器(TI)公司
    *保留所有权利。
    *
    *
    只要
    符合以下条件*、允许以源代码和二进制形式重新分发和使用:
    *
    *源代码的重新分发必须保留上述版权
    声明*、此条件列表和以下免责声明。
    *
    ***二进制形式的再发行必须在
    
    *随发行提供的文档和/或其他材料中复制上述版权声明、本条件列表和以下免责声明。
    *
    ***未经
    
    事先书面许可、不得使用德州仪器公司的名称或*其贡献者的名称认可或推广从本软件衍生的产品*。
    *
    *本软件由版权所有者和贡献者"按原样"提供
    *、
    
    不承担任何明示或暗示的保证、包括但不限于*适销性和特定用途适用性的暗示保证*。 在任何情况下、版权所有者或
    *贡献者都不对任何直接、间接、偶然、特殊、
    *模范、 或相应的损害(包括但不限于
    *采购替代产品或服务;丧失使用、数据或利润;
    *或业务中断)、但出于任何责任理论
    、*无论是在合同中、严格责任还是由于
    使用本软件而以任何方式产生的侵权行为(包括疏忽或*其他)
    、*即使已获悉可能会发生此类损坏。
    *-/copyrights-*/
    
    #include "msp430.h"
    #include "myuart.h"
    
    // UART 的接收缓冲区。 传入字节需要一个立即进入的位置、
    //否则下一个字节进入时可能会出现溢出。 USCI ISR
    //将它们放在这里。
    uint8_t bcUartRcvBuf[BC_RXBUF_SIZE];
    
    // bcUartRcvBuf 内的索引,其中下一个字节将被写入。
    uint16_t bcUartRcvBufIndex = 0;
    
    //指示 bcUartRcvBufIndex 是否已达到
    //阈值 BC_RX_WAKE_THRESH 的布尔标志。 0 = false、1 = true
    uint8_t bcUartRxThreshed = 0;
    
    
    //使用
    // bcUart.h 中的波特率设置将 USCI_A1模块初始化为 UART 波特率取决于 SMCLK 速度。
    void bcUartInit (void)
    {
    //始终使用的 USCI 一章中列出的分步初始化过程
    // F5xx 系列用户指南
    UCA1CTL1 |= UCSWRST; //将 USCI 状态机复位
    UCA1CTL1 |= UCSSEL_SMCLK;//使用 SMCLK 作为位时钟
    
    //设置波特率
    UCA1BR0 = UCA1_br0;
    UCA1BR1 = UCA1_BR1;
    UCA1MCTL =(UCA1_BRF << 4)|(UCA1_BRS << 1)|(UCA1_OS);
    
    P4SEL |= BIT4+BIT5; //将这些引脚配置为 TXD/RXD
    
    UCA1CTL1 &=~UCSWRST; //使 USCI 退出复位状态
    UCA1IE |= UCRXIE; //启用 RX 中断。 现在、当字节为时
    // rcv'ed、将生成 USCI_A1矢量
    。}
    
    
    //发送'len'字节,从'buf'
    void bcUartSend (uint8_t * buf、uint8_t len)
    {
    uint8_t i = 0;
    
    //将 buf 中的每个字节写入 USCI TX 缓冲区、该缓冲区会将其发送出去
    while (I < len)
    {
    UCA1TXBUF =*(buf+(i++));
    
    //等待直到每个位都被计时输出...
    while (!(UCTXIFG==(UCTXIFG & UCA1IFG))&&((UCA1STAT & UCBUSY)=UCBUSY));
    }
    }
    
    
    //将
    自上次获取以来在 UART 上接收到的字节复制到'buf'中。 返回复制的字节数。
    uint16_t bcUartReceiveBytesInBuffer (uint8_t* buf)
    {
    uint16_t i、count;
    
    //在复制期间为传入数据保留输入
    UCA1IE &=~UCRXIE;
    
    对于(i=0;i = BC_RX_WAKE_THRESH)
    {
    bcUartRxThreshed = 1;
    _BIC_SR_REGISTER_ON_EXIT (LPM3_BITS); //退出 LPM0-3
    }
    }
    

    我已经检查  了 processors.wiki 中的 USCI UART 波特率生成模式选择、但它甚至没有我的时钟速度。

    我可以在哪里查看该信息以及其他相关信息?

    现在、我要获取这个。

     

    已修改:

    我发现了以下内容:


     频率似乎是25MHz、对吧?

     

    已修改:

    我已经使用示波器进行检查、在 p3.4上、逻辑"1"上的电压为30mV、而不是3.3V。

    此致、

    Mayer Tamás

     

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Mayer:
    第二条代码来自哪里? 我在 SLOA192中找不到它。

    它使用 SMCLK 来提供 UART。 您需要检查 UCS 以了解 SMCLK 是如何供源的(由 DCO、VLO 等)、以及分频器是如何发挥作用的。 这通常是1MHz 的默认值、但如果更改了、我无法从您粘贴的代码部分中看到它。

    您能否检查3V3引脚以排除故障的示波器设置?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好、Cameron!

    我还从 http://www.ti.com/tool/nfclink 下载了 NFCLink NFC/HF RFID 固件 。   

    正如您所说、我已经检查了示波器、我不会这么做。  

    void MCU_init (void)
    {
    WDT_A_HOLD (__MSP430_BASEADDRESS_WDT_A__);
    
    //设置 XT1和 XT2
    XT1_XT2_PORT_SEL |= XT1_ENABLE + XT2_ENABLE;
    
    //将 Vcore 设置为适应最大值 允许的系统速度
    SetVCore (3);
    
    //使用32.768kHz XTAL 作为参考
    LFXT_Start (XT1DRIVE_0);
    
    // MCU 频率= 25MHz
    Init_FLL_settle (MCLK_MS_COUNT、762);
    } 

    我已经有了这个代码。MCU clk 由此初始化。

    我已经认识到这些不是我初始化的正确引脚,但 当我使用 此代码 P3SEL |= BIT3+BIT4进行初始化时,它不起作用。

    此致、

    Mayer Tamás  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Mayer:
    是否有任何其他东西连接到 P3.4?
    您如何测试逻辑高电平?
    似乎是将该线保持在低电平
    您能否查看 P3SEL 寄存器以确保在连接到示波器时正确配置它们?

    有一点值得怀疑的是、您正在第二个代码中初始化 USCI_A1、并且您提到了设置 P3.4和 P3.3、它们属于 USCI_A0。 请确保您正在设置 USCI_A0。

    该代码片段正在设置您的时钟源。 您还需要检查您的时钟信号设置。 查看用户指南的第5部分、图5-1包含源和信号的图。
    这是一个信号流
    [CLK 源]-->[clk 信号]-->[外设]
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好,Cameron!

    感谢您告知 UART 正在工作。

    我最后想在 Putty 上检查这个、但现在我没有看到它。

    如何设置?

    此致

    Mayer Tamás

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

     检查设备管理器以查找应用 UART 的 COM+。

    在会话中、为连接类型选择"串行"、在"串行线路"框中键入 COM#、在"速度"框中键入波特率、然后单击"打开"、应该这样做。

    下面是我使用921600波特率连接的 MSP432示例。

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

    你好、Cameron!

    这不是问题。我现在已经设置了9600波特率

    UCA0BR0 = 0x2C;
    UCA0BR1 = 0x0A;
    UCA0MCTL = 0x84;
    

    (时钟25MHz)

    UART 正在工作,在示波器上我得到的是9.5933 KHz,所以9600波特是可以的,但是我没有在 VCP 上得到任何东西。

    我认为这可能是一个带有 UART USB 转换器的 probem,也许我只能在 putty 上看到来自端口5的 UART,也许我必须初始化端口3 UART 来提供 USB 上的数据。

    你怎么看? 我对此有点困惑。

    已修改:

    我已经连接了 MSP430和 cc2650、当尝试在输出中将0位 fromm mső430发送到 cc2650时、电压为2.7V、而不是接地。

    问题是什么冷? 我认为 MSP430的基础上可能存在一些问题、它无法下拉 cc2650的输入。

    最恰当的考虑

    Mayer Tamás

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Mayer:
    如果 COM5是您的应用 UART、那么它是正确的、听起来就像这样。

    CC2650引脚设置是否正确? 它听起来像是有人可能将其驱动到高电平。
    未连接到 cc2650时、MSP 引脚是否拉低?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好、Cameron!

    以下是 CC2650中的引脚配置:

    const PIN_Config BoardGpioInitTable[]={
    
    Board_RLED | PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_PushPull | PIN_DRVSTR_MAX、 /* LED 最初关闭 *
    Board_GLED | PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_PushPull | PIN_DRVSTR_MAX、 /* LED 最初关闭 *
    Board_BTN1 | PIN_INPUT_EN | PIN_PULLUP | PIN_IRQ_BOTHEDGES | PIN_迟滞、 /*按钮为低电平有效 *
    Board_BTN2 | PIN_INPUT_EN | PIN_PULLUP | PIN_IRQ_BOTHEDGES | PIN_迟滞、 /*按钮为低电平有效 *
    BOARD_SPI_FLASH_CS | PIN_GPIO_OUTP_EN | PIN_GPIO_HIGH | PIN_PushPull | PIN_DRVSTR_MIN、/*外部闪存芯片选择*
    BOART_UART_RX | PIN_INPUT_EN | PIN_PUL拉、 /*通过调试器反向通道的 UART RX */
    Board_UART_TX | PIN_GPIO_OUTP_EN | PIN_GPIO_HIGH | PIN_PushPull、 /*通过调试器反向通道的 UART TX */
    BOARD_SPI0_MOSI | PIN_INPUT_EN | PIN_PULLUDOWN、 /* SPI 主器件输出-从器件输入*/
    BOARD_SPI0_MISO | PIN_INPUT_EN | PIN_PUL拉、 /* SPI 主器件输入-从器件输出*/
    BOARD_SPI0_CLK | PIN_INPUT_EN | PIN_PUL拉、 /* SPI 时钟*/
    
    PIN_TERMINATE
    }; 

    它表明我的 RX 具有输入使能和下拉、我还尝试了上拉。

    当 MSP430未连接到 cc2650时、信号电平正确。

    在 MSP430上、这是 UART 配置的实际代码:

    UCA0CTL1 |= UCSWRST; //将 USCI 状态机复位
    UCA0CTL1 |= UCSSEL_SMCLK;//使用 SMCLK 作为位时钟
    
    //设置波特率//9600
    UCA0BR0 = 0x1B;//0x2C;
    UCA0BR1 = 0x00;//0x0A;
    UCA0MCTL = 0x08;//0x84;//UCBRS_3 + UCBRF_0;//(UCA1_BRF << 4)|(UCA1_BRS << 1)|(UCA1_OS);
    
    P3SEL |= BIT3+BIT4;
    P3REN |= BIT3+BIT4;//将这些引脚配置为 TXD/RXD
    //P3DIR |= BIT3;
    
    UCA0CTL1 &=~UCSWRST; //使 USCI 退出复位状态
    UCA0IE |= UCRXIE; 

    我还尝试设置 P3DIR。

    我想用示波器来确定、MSP430的 TX 是 p3.3、cc2650的 RX 是 DIO3 (因为 DIO2是 Tx)。

    我还在两个板之间使用公共 GND。我希望我为 UART Tx 和 Rx 使用正确的引脚、但我已经检查了很多次。

    此致、

    Mayer Tamás

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Mayer:
    只需确认一下、您将 P3.4连接到 DIO 2、将 P3.3连接到 DIO 3、对吧? 我无法用你的图片来形容。

    此外、为什么要使用 P3REN、这会启用一个上拉或下拉电阻器、而 UART 则不需要该电阻器。 这很可能是您的问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好、Cameron!

    我只使用 p3.3到 DIO3,p3.4没有连接到 DIO2。我只需要将数据从 MSP430发送到 cc2650,而另一个方向对我来说是无用的。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的。
    在这种情况下、我想指出的是、您的黑线连接到 MSP、而您的白线连接到您的 CC2650。 修复此问题是否可以使同一根导线连接两个 LaunchPad 来解决您的问题?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很抱歉、我是因为图片而立即连接的、我没有注意、但当我测试时、它是可以的。 我测量了 cc2650侧面的信号、因此我确信接线正常。

    我的问题是、这两根导线都没有连接、只是 MSP430 (TX)->cc2650 (Rx)、这不是问题吗?
    明天我将再次使用 P3REN=0进行测试、但我已经尝试过这种方法。
    输入下拉电阻是否正常?

    我假设 MSP430 p3.3->output->nopull 和 cc2650->input->pulldown 对于 UART 来说是可以的。
    可能有一些 GND 我不知道。

    此致、

    Mayer Tamás
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Mayer:
    我不确定 CC2650、但我们不会在具有 UART 的 MSP 上使用任何类型的上拉或下拉设置。 对于 BLE 论坛而言、这可能是一个更好的问题:
    e2e.ti.com/.../538
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你(们)好、Camer

    问题是 cc2650的 UART 也连接到调试器 MCU。 我用正确的跳线连接了它、现在它正在工作。
    再次感谢您的帮助。

    此致、

    Mayer Tamás
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Mayer、听得好。 我很高兴您能正常工作!