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.

[参考译文] MSP430FR2676:共背通道 UART 和8x8共按钮阵列故障

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1073599/msp430fr2676-mutual-backchannel-uart-and-troubles-with-8x8-mutual-button-array

部件号:MSP430FR2676
《线程: Captivate - FR2676》中讨论的其他部件

这主要是另一篇链接如下的文章的延续: https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1067078/msp430fr2676-backchannel-uart-for-8x8-mutual-capacitance-array/3948322#3948322

我认为我的所有问题都得到了解决。

我目前有两个问题。

1)我无法让8x8共阵列工作,而我却能让2x2,4x4和6x6正常工作。 我注意到,当我使用8x8时,我的 CPU 使用率会达到100%,所以我假设我的计算机根本无法处理迷人设计工作室中的数据可视化效果? (这是一个与所附的 zip 不同的项目,用于调整)(我希望所附的后声道 UART 能够正常工作,因为如果我的计算机是限制因素,它不会通过设计中心显示信息,而只是在不显示可视化的情况下发送数据)  

2)这是上述帖子的问题延续,我的预定义符号中有 UART_ENABLE =true,并且在 include 选项中包含演示文件夹,但仍在这些符号上出现未解决的符号错误。 我附加了 CCS 项目的 zip 文件。 设计中心的布局与上一个帖子相同。 (我使用示例后通道 UART 来确保我具有相同的预定义符号和包含的路径)

e2e.ti.com/.../MSP430FR2676_5F00_8X8_5F00_Mutual_5F00_UART.zip

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

    亚历克斯:

    您能否发布您遇到的错误?

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

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

    亚历克斯:

    我不知道您为什么会遇到这些错误。  有些东西设置不正确,因此,我已经附加了一个“正常工作”的8x8触控板项目,您可以看到如何使其正常工作,而不是继续跟踪这一项目。

    我从头开始,在 Captivate 设计中心 GUI 中生成了项目。

    我在 DEMO.C 中创建了回调

    然后,我进行了以下更改,以便通过 UART 发送回叫中我选择的任何内容。

    在 UART_Definitions.h 中,我没有评论第69行,并为 UART 添加新定义。  请注意,它们基于2MHz SMCLK

    接下来,在 main.c 中,我添加#include "demon.h"和对 trackpad_Demo_Init()的调用;

    查看我在 DEMO.C 中的回调,了解如何获取传感器参数并通过 UART 发送。

    我附加了我的项目。

    e2e.ti.com/.../TP8X8_5F00_FR2676_5F00_01_5F00_83_5F00_00_5F00_08.zip

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

    它运行正常,没有任何错误,但仍然没有通过终端看到任何东西,我知道它运行正常,因为我可以看到在触摸阵列后 LED2指示灯亮起(尽管似乎是23秒延迟)。 我的电流传感器设计可能会导致我的延迟。 我的设备管理器告诉我 MSP UART 是 com13,因此我的串行端口为19200波特,无奇偶校验,数据大小为8,并且在终端中看不到任何东西弹出。

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

    Alex,如果您在调试模式下运行 MSP430,UART 数据将出现长时间延迟。  对 MSP430进行编程以实现正常操作(不在调试模式下),并看到它能起到帮助作用。

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

    我要运行>load>project,我假设这只是将代码加载到芯片上,而不是分开调试?

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

    是的,这应该是好的。  您是否在把握时机使用 Captivate FR2676 EVM 模块?  如果是这样,则必须对 PCB 进行小幅修改,然后才能使用后通道 UART 发送数据。  您是否已安装 R24/R25?

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

    R24和 R25当前未填充。 R24和 R25的焊接电阻器是否会消除其他功能? 应该在此处放置什么值电阻器?

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

    亚历克斯:

    通常,MSP430 UART 信号 P1.4/UCA0TXD 和 P1.4/UCA0RXD 穿过跳线 J2,然后分别到达20针连接器 J1的引脚8和7。 这是 MSP430与编程器 PCB 上的 HID 桥接器设备之间的主要通信路径,它将 UART 转换为 USB HID 并发送到 GUI。  

    默认情况下,电阻器 R24和 R25为 DNP,但如果您用0欧姆电阻器(或线片)填充它们,则 TXD 和 RXD 信号现在也将路由到 J2引脚9和10 (EZFET_TXD 和 EZFET_RXD)。  这是 MSP430和编程器上的后通道 UART 之间的通信路径。  但是,您需要先卸下 J1 (1-2)和(3-4)上的两个跳线,以断开 UART 与 GUI 的连接。

    这一点是否明确?

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

    我用电线焊接了 R24和 R25。 您是否打算卸下 J2上的两个跳线,TXD 和 RXD 是否正确? 我是这样做的,现在在终端上看到了信息,但这种信息只是一堆随机的符号和字符。  

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

    亚历克斯:

    准确地说。  这是因为您正在通过 HID_Bridge_UART 发送通常传输到 GUI 的数据,但现在正在通过编程器的后通道 UART。  如果要在使用 UART 作为应用程序数据时将 GUI 数据发送到 GUI,则需要修改 CAPT_UserConfig.h 并将 Capt_interface 设置为 no 或 BULKI2C (提示-打开此线程前面附加的 zip 文件) 并按照此线程顶部的说明使用 UART 来获取数据。

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

    我在 CAPT_UserConfig.h 中将 Capt_interface 设置为(__Capt_no_interface__),我不打算接收 GUI 数据,而只是我所接收的数据。 我认为如果它正在传输 GUI 数据,那么它将是一个稳定的数据流,而不仅仅是在传感器检测到绿色 LED 指示灯所指示的触摸时发送数据?

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

    亚历克斯:

    好的,如果您只看到在触摸时传输的数据,这是好的。  这意味着您正在将数据发送到 PC,尽管数据已被加密。  这告诉我 MSP430和 PC 使用的波特率不同。  你可以确认吗?

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

    我不确定您的意思,我知道您在 UART_Definitions.h 中定义了波特率,并将其设置为19200。 我打开的串行终端也设置为19200,我也尝试了9600 (将 UART_Definitions 和 terminal 中定义的值更改为9600)。 我还将编码设置为 ASCII。

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

    您在 PC 上使用的是什么终端应用程序?  确保奇偶校验=无。  此外,如果您有逻辑探头或示波器,请查看 TXD 引脚,您将看到一系列从3.3V 到 GND 的脉冲。  一些脉冲将比其他脉冲窄。  找到最窄的脉冲。  如果您测量的是周期,则应为52uS @ 19200。

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

    我使用的设置包括波特率19200,数据大小8,奇偶校验无,停止位1和 ASCII 编码。 我已经尝试过 CCS 终端,tera 术语,并使用命令提示符打开串行终端。 我将尝试并抓住示波器。

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

    亚历克斯:

    只需检查一下您是否有机会使用示波器测量 TXD 引脚上的波特率?

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

    嗨,丹尼斯,

    我现在就检查了,这就是我对52us 的观察。

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

    很棒  52us 是19200波特,它应该是这样的。 我们已经没有东西可以尝试了,但这里还有一个。  缩小范围,以便捕获字节数据包。  您应该会看到它们每隔33毫秒或20毫秒(无论您为传感器扫描速率设置了什么)出现一次。  测量从数据包开始到结束的时间。 它有多少毫秒?

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

    它显示为33毫秒

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

    亚历克斯:

    这就是我的意思。  什么是??ms

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

    丹尼斯

    我明白你现在的意思,我正在测量440人  

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

    好的,好的。  如果我们使用440us/52us,则为~8.46,这接近向 GUI 传输的8个字节,这表明 Capt_interface设置为(__Capt_no_interface__)。

    [引用用户名="495317" url="~ë/support/microcontrollers/MSP-low-Power-microcontroller-group/MSP430/f/MSP-low-Power-microcontroller-forum/1073599/msp430fr2676-Mut-backChannel-UART-and_probers-Config-8x8-Mut-button-array/3997400 接口(#capt_in_interface_n__n__f_74004)]

    因此,最简单的解决方法是使用回调函数以及准备使用 UART 发送 ASCII 数据的位置,对使用 UART_SENSTBuffer 函数的行进行注释。 这意味着您不应该发送任何数据,也不应该看到范围上的任何内容。  

    请尝试一下,让我知道您看到的内容。

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

    好的,我在 DEMO.c 中评论了 UART_ANTBuffer 功能,但不再将任何内容打印到终端上,而在示波器上什么也没有。  

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

    亚历克斯:

    好的,让我们回顾一下。  您每隔33毫秒测量一次从 UART 发送的数据包。  我们确认 UART 波特率为19200。  您刚刚确认发送的数据是回叫数据,而不是发送到 GUI 的传感器数据。  这一切都表明,如果您只是获得随机的垃圾符号,接收(PC)端的某些内容将不正确。

    最后一件事是,如果您要绝对确保数据正确,请使用逻辑探测器来捕获数据包并解码 ASCII 字符以查看实际发送的内容。

    是否确定使用的是我的“DEMO.c”示例文件?  您不是在发送原始二进制传感器值,是吗?  您能否在回叫中发布传输数据的部分代码?

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

    我正在使用您发送给我的代码,我认为最好在进行任何更改之前让代码生效。 下面是代码:

    /*
    * trackpad_demon.c.
    *
    *此文件包含传感器回调,UART 和从 I2C 通信处理程序
    *支持与主机的通信。
    *注:请参阅对 CAPT_commConfig.h 的修改(第84行)以启用 I2C 和 UART
    *要控制和数据格式及接口(HID,UART 或 I2C),请参阅 setup.h
    *
    *创建日期:2017年2月9日
    作者:A0272918
    *
    #包括"captate.h"
    #include "Capt_UserConfig.h"
    #include "Capt_BSP.h"
    #include "UART.h"
    #include <stdio.h>

    //========================= 定义=========================================
    #define first_sensor_touch (pSensor->bSensorTouch == true)&&(pSensorPrevTouch == false)
    #define sensor_touch (pSensor->bSensorTouch == true)&&(pSensor->bSensorPrevTouch == true)
    #define exit_touch (pSensorTouch ==false)和&(pSensorPrevTouch ==true )
    #define no_touch (pSensorTouch==false)和&(pSensorPrevTouch==false)

    //========================= 变量=================================
    UINT8_t asciBuffer[32];
    UINT16_t ui16Position_X;
    UINT16_t ui16Position_Y;
    UINT8_t ui8Gesture;

    //添加了此项,因此当切换回 GUI 界面时,此代码不会导致编译器警告
    #if Capt_interface !=(__Capt_UART_INTERFACE _)
    /*
    *创建 UART 参数的本地实例
    *
    静态连接 tUART 端口 UART 端口=

    .pbReceiveCallback = NULL,
    .pbErrorCallback = 0,
    .peripheralParameters.selectClockSource = EUSCI_A_UART_CLOCKSOURCE_SMCLK,
    .PeripheralParameters.clockPrescalar = UART __prescaler,
    .PeripheralParameters.firstModReg = UART_FIRST_STAGE 模块,
    .peripheralParameters.secondModReg = UART_second_stage,
    .PeripheralParameters.Parity = EUSCI_A_UART_NO_Parity,
    .PeripheralParameters.msborLsb 第一个= EUSCI_A_UART_LSA_FIRST,
    .PeripheralParameters.NumberofStopBits = EUSCI_A_UART_On_STOP_Bit,
    .PeripheralParameters.uartMode = EUSCI_A_UART_MODE,
    周边参数。过采样= UART_Pampling_mode
    };
    #endif

    //========================= 回调=================================
    /*
    *触控板回调
    *传感器处理后自动调用
    *在此处添加特定于应用程序的代码
    *
    无效触控板回调(TSENSOR* pSensor)

    tTrackPadSensorParams* pSensorParams =(tTrackPadSensorParams*) pSensorParams;
    UINT8_t ui16BufferLength;

    //如果使用 MSP430FR2676 EVM 模块,请显示何时触碰
    IF (FIRST_SENSOR_TOUCH == TRUE)
    LED2_ON;

    否则,如果(sensor_touch == true)

    /*获取报告的手势*/
    ui8Gesture =((tTrackPadSensorParams*)(pSensorParams -> pSensorParams)-> ui8Gesture;

    /*读取后清除手势(设置= 0xFF)以重置下一个手势*/
    (tTrackPadSensorParams*)(pSensorParams))->ui8Gesture = 0xFF;

    ui16Position_X = pSensorParams->Position_X.ui16Natural;
    ui16Position_Y = pSensorParams->Position_Y.ui16Natural;

    ui16BufferLength = sprintf(((char*) asciBuffer,“%d %d %d\r\n\0",ui8Gesture,ui16Position_X,ui16Position_Y);

    UART 传输缓冲器(asciBuffer,ui16BufferLength);

    }
    否则

    LED2_OFF;


    }


    无效触控板演示版初始化(无效)

    //
    //在此处注册触控板回拨
    //注册这些回调允许用户执行功能
    //每次测量传感器后都要调用 REGARDLESSS
    //如果传感器被触摸或未被触摸

    map_Capt_registerCallback (&TKP00,&trackpad_callback);


    #if Capt_interface !=(__Capt_UART_INTERFACE _)
    UART_openPort (&UARTPort);
    #endif

    }

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

    亚历克斯:

    我们来试试吧...  下面是供参考的代码。

    #include <msp430.h>                      // Generic MSP430 Device Include
    #include "driverlib.h"                   // MSPWare Driver Library
    #include "captivate.h"                   // CapTIvate Touch Software Library
    #include "CAPT_App.h"                    // CapTIvate Application Code
    #include "CAPT_BSP.h"                    // CapTIvate EVM Board Support Package
    #include "UART.h"
    #include <stdio.h>
    
    #define UART__EUSCI_A_PERIPHERAL                                (EUSCI_A0_BASE)
    #define UART__LPMx_bits                                             (LPM0_bits)
    // These values are base on SMCLK = 2MHz
    #ifdef UART__SAMPLING_MODE
    #undef UART__SAMPLING_MODE
    #endif
    #define UART__SAMPLING_MODE    (EUSCI_A_UART_OVERSAMPLING_BAUDRATE_GENERATION)
    #ifdef UART__PRESCALER
    #undef UART__PRESCALER
    #endif
    #define UART__PRESCALER                                                  (0x06)
    #ifdef UART__FIRST_STAGE_MOD
    #undef UART__FIRST_STAGE_MOD
    #endif
    #define UART__FIRST_STAGE_MOD                                            (0x08)
    #ifdef UART__SECOND_STAGE_MOD
    #undef UART__SECOND_STAGE_MOD
    #endif
    #define UART__SECOND_STAGE_MOD                                           (0x17)
    static const tUARTPort UARTPort =
    {
        .pbReceiveCallback = NULL,
        .pbErrorCallback = 0,
        .peripheralParameters.selectClockSource = EUSCI_A_UART_CLOCKSOURCE_SMCLK,
        .peripheralParameters.clockPrescalar = UART__PRESCALER,
        .peripheralParameters.firstModReg = UART__FIRST_STAGE_MOD,
        .peripheralParameters.secondModReg = UART__SECOND_STAGE_MOD,
        .peripheralParameters.parity = EUSCI_A_UART_NO_PARITY,
        .peripheralParameters.msborLsbFirst = EUSCI_A_UART_LSB_FIRST,
        .peripheralParameters.numberofStopBits = EUSCI_A_UART_ONE_STOP_BIT,
        .peripheralParameters.uartMode = EUSCI_A_UART_MODE,
        .peripheralParameters.overSampling = UART__SAMPLING_MODE
    };
    
    extern void TrackPad_Demo_Init(void);
    void main(void)
    {
    
    	WDTCTL = WDTPW | WDTHOLD;
    	BSP_configureMCU();
    	UART_openPort(&UARTPort);
    	__bis_SR_register(GIE);
    
    	while(1)
    	{
    	    UART_transmitBuffer("hello world\n", 12);
    	    _delay_cycles(10000000);
    	}
    
    } // End main()
    

    复制您的项目(或我之前提供的项目)并使用此代码替换 main.c。  如果您将 PC 连接并将 COM 端口配置为19200,8N1,请重建和编程 MSP430。  您应该看到如下内容:

    如果没有,则说明您的设置或 PC 配置有问题。

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

    尽管格式略有不同,但这种方法仍然有效。