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/MSP-EXP430F5529LP:通过中断读取 RX UART 数据时出现问题

Guru**** 2595800 points
Other Parts Discussed in Thread: BOOSTXL-PGA460, PGA460, MSP430F5529

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/823659/ccs-msp-exp430f5529lp-problems-reading-rx-uart-data-by-interrupt

器件型号:MSP-EXP430F5529LP
主题中讨论的其他器件:BOOSTXL-PGA460PGA460MSP430WAREMSP430F5529

工具/软件:Code Composer Studio

您好!

我在企业中从事一个项目、我有带 MSP430 MCU 的 TI Launchpad 套件和一个模拟评估模块- BOOSTXL-PGA460。

我使用在 Code compose studio 中制作的程序与 PGA460进行通信。

为了开发程序、我快速使用 了驱动程序库中软件 MSP430ware 中的程序、并根据我的情况进行调整。

使用的微控制器是 MSP430F5529。

以下是我用于程序的代码:

//
//! 此示例展示了如何将 UART 模块配置为回送至
//! 验证接收到的数据是否已发送。
//!
//! MSP430F5438A
//! --------
//! RST -| P3.4/UCA0TXD|--|
//! | ||
//! | ||
//! | P3.5/UCA0RXD|--|
//! | |
//!
//!
//! 此示例使用以下外设和 I/O 信号。 您必须
//! 查看这些内容并根据您自己的董事会需要进行更改:
//! - UART 外设
//! - GPIO 端口外设(用于 UART 引脚)
//! - UCA0TXD
//! - UCA0RXD
//!
//! 此示例使用以下中断处理程序。 要使用此示例
//! 在您自己的应用程序中、您必须将这些中断处理程序添加到
您的//! 矢量表。
//! - USCI_A0_Vector。
//
#include "driverlib.h"

//*********
//////
选择波特率
//
//*********
#define BAUD_RATE 9600 //JS--

//#define BAUD_RATE 2400 //JS++// nota:se EU alterar
está variável // o d é bito binário observado no osciloscópio é sempre 9600 bps - para já vou deixar como
//*********
//////
初始化接收到的数据
//
//***************
uint8_t receivedData = 0x00;
//*********
////////
初始化传输数据
//
//*********
uint8_t transmitData = 0x00;

uint8_t check = 0;

uint8_t i1 = 0;//js++
uint8_t i2 = 0;//js++
uint8_t i3 = 0;//js++

void main (void)
{
//停止 WDT
WDT_A_HOLD (WDT_A_base);



GPIO_setAsOutputPin (GPIO_PORT_P2、GPIO_PIN2);// PD como saída

GPIO_setAsOutputPin (GPIO_PORT_P7、GPIO_PIN4);//Porto SEL COMO saída

GPIO_setOutputLowOnPin (GPIO_PORT_P2、GPIO_PIN2);//coloca Pino 为零

GPIO_setOutputLowOnPin (GPIO_PORT_P7、GPIO_PIN4);//coloca Pino 为零

// FIM JS++


//JS--
GPIO_setPeripheralModuleFunctionInputPin (
GPIO_PORT_P3、
GPIO_PIN3 + GPIO_PIN4
);

//FIM JS++


//FIM JS++


P3.4中的//上拉电阻器// JS++
GPIO_setAsInputPinWithPullUpResistor (GPIO_PORT_P3、GPIO_PIN4);//JS++



USCI_A_UART_initParam param ={0};
param.selectClockSource = USCI_A_UART_CLOCKSOURCE_SMCLK;
param.clockPrescalar = 109;
param.firstModReg = 0;
param.secondModReg = 2;
param.parity = USCI_A_uart_no_parity;
param.msborLsbFirst = USCI_A_UART_LSB_FIRST;
// param.numberofStopBits = USCI_A_UART_One_stop_bit;//JS--
param.numerofStopBits = USCI_A_UART_Two_stop_bits;//JS--

param.uartMode = USCI_A_UART_MODE;
param.oversaming= USCI_A_UART_LOW_FREQUENCY BAUDRATE_generation;

if (STATUS_FAIL = USCI_A_UART_init (USCI_A0_BASE、&param)){
返回;
}

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

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

_enable_interrupt ();//JS--



transmitData = 0x55;
//将数据加载到缓冲区中
USCI_A_UART_transmitData (USCI_A0_BASE、
传输数据);

transmitData = 0x0A;
//将数据加载到缓冲区中
USCI_A_UART_transmitData (USCI_A0_BASE、
传输数据);

transmitData = 0x68;
//将数据加载到缓冲区中
USCI_A_UART_transmitData (USCI_A0_BASE、
传输数据);

transmitData = 0x42;
//将数据加载到缓冲区中
USCI_A_UART_transmitData (USCI_A0_BASE、
传输数据);

transmitData = 0x4B;
//将数据加载到缓冲区中
USCI_A_UART_transmitData (USCI_A0_BASE、
transmitData);

for (i2=0;i2<20;i2++)
{
// for (i3=0;i3<255;i3++)
// {
for (i1=0;i1<255;i1++);//JS++
//}
}

transmitData = 0x55;
//将数据加载到缓冲器
USCI_A_UART_transmitData (USCI_A0_BASE、
transmitData);

transmitData = 0x09;
//将数据加载到缓冲区
USCI_A_UART_transmitData (USCI_A0_BASE、
transmitData);

transmitData = 0x68;
//将数据加载到缓冲区
USCI_A_UART_transmitData (USCI_A0_BASE、
transmitData);

transmitData = 0x8E;
//将数据加载到缓冲区
USCI_A_UART_transmitData (USCI_A0_BASE、
传输数据);

USCI_A_UART_clearInterrupt (USCI_A0_BASE、
USCI_A_UART_Receive_interrupt_FLAG);




while (1)
{

transmitData = 0x55;
//将数据加载到缓冲区中
USCI_A_UART_transmitData (USCI_A0_BASE、
传输数据);

transmitData = 0x09;
//将数据加载到缓冲区中
USCI_A_UART_transmitData (USCI_A0_BASE、
传输数据);

transmitData = 0x68;
//将数据加载到缓冲区中
USCI_A_UART_transmitData (USCI_A0_BASE、
传输数据);

transmitData = 0x8E;
//将数据加载到缓冲区中
USCI_A_UART_transmitData (USCI_A0_BASE、
传输数据);

for (i2=0;i2<20;i2++)
{
// for (i3=0;i3<255;i3++)
// {
对于(i1=0;i1<255;i1++);//JS++
//}
}



}






#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__(interrupt (USCI_A1_vector)#USCI_A0

编译器#A0)(void)(不支持 USCI_A0!
#endif



{
I3 = 0;

开关(_偶数_IN_RANGE (UCA0IV、4)){
//Vector 2 - RXIFG
案例2:
receivedData = USCI_A_UART_receiveData (USCI_A0_BASE);
// if (!(receivedData = transmitData)) //检查值//JS--
// { //JS-/
while (1); //JS-//
} //JS--
支票=1;
中断;
默认值:break;
}
}




//--- 我的程序结束 

在调试模式下、我在_interrupt void USCI_A0_ISR (void)旋转内放置了一个断点(在指令 i3=0中)、程序从不会在这里停止。

我分别发送 RXD 和 TXD (在 PGA460上)中看到的信号:

最后一个信号是 PGA 的 UART 发送到 MSP430的信号、其中包含我在微控制器中从未检测到的3个字节。 为什么?

请帮帮我。

何塞·西莫斯

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

    您好 Jose、

    对于将来的帖子、请在发布代码时使用语法突出显示器。 否则、很难读取。 我已继续并设置了格式。

    此外、您的图像未附加。 请使用"插入/编辑媒体"按钮。

    您使用了哪个 UART 代码示例? 我建议返回到该代码示例、只做一些小的更改、例如调整波特率、以开始。

    此致、

    James

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

    感谢您的建议。 这是我第一次使用此论坛。 将来我会听从你的意见。

    何塞·西莫斯

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

    我们很高兴您使用了该论坛。 这是一种丰富的知识、尤其是在搜索它时。 您的问题似乎已在以下主题中得到解决、因此我将此主题标记为已解决。 谢谢。

    CCS/MSP-EXP430F5529LP:在 MSP430微控制器中接收 UART 信号

    此致、

    James