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.

[参考译文] MSP430F5419A:无法从具有115200BAUD 速率和1MHz 频率的 MSP430F5419A 控制器获得 AT 命令的响应

Guru**** 2538560 points
Other Parts Discussed in Thread: TXB0102

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/860412/msp430f5419a-not-able-to-get-response-of-at-commands-from-msp430f5419a-controller-with-115200baud-rate-and-1mhz-frequency

器件型号:MSP430F5419A
Thread 中讨论的其他器件:TXB0102

您好!

波特率为115200且频率为1MHz 时、无法在响应缓冲器中获取 AT 命令的响应

我为中断和 UART 初始化编写的代码如下所示

/***** 用于 UART 初始化

P3SEL |= BIT4+BIT5;             //分别选择 p3.4和 p3.5作为 TXD 和 RXD
P3DIR |= 0x1A;                  //将 TX、RTS 设置为输出。 P3.4 = 1且 P3.3 = 1
UCA0CTL1 |= UCSWRST;        //**将状态机置于重置中**
UCA0CTL1 |= UCSSEL_2;           // SMCLK
UCA0BR0 = 9;                   // 1MHz 115200 (请参阅用户指南)
UCA0BR1=0;               //1MHz 115200
UCA0MCTL |= UCBRS_1 + UCBRF_0;              //+ UCOS16;// Modln UCBRSx=0、UCBRFx=0、
//UCA0MCTL = UCBRS_0 + UCBRF_13+ UCOS16;
UCA0CTL1 &=~UCSWRST;                      //**初始化 USCI 状态机**
__no_operation();
UCA0IE |= UCTXIE;
UCA0IE |= UCRXIE;                       //启用 USCI_A3 RX 中断
//_bis_SR_register (LPM0_bits + GIE);

__no_operation();

/********* 中断代码*******

#pragma vector=USCI_A0_Vector
_interrupt void USCI_A0_ISR (void)

switch (__evo_in_range (UCA0IV、4))

情况0:中断;//向量0 -无中断
情况2:x = UCA0RXBUF;//向量2 - RXIFG

if ((gsmResponseFlag = 1)&&(gsmResponseIndex < 300)){
gsmRResponse[gsmResponseIndex]= x;
gsmResponseIndex++;

if (x ='{')){//检查服务器数据的开始
SERVER_DATA_FLAG = 1;//如果检测到启动{、则开始存储数据
SERVER_DATA_INDEX = 0;

if (((server_data_FLAG = 1)&&(server_data_index < Server_data_size-1)){
server_data[server_data_index]= x;//存储服务器数据
Server_data_index++;

//if (x ='}')//服务器字符串末尾
if ((x ='})

SERVER_DATA_FLAG = 0;
server_data[server_data_index]='\0';
Server_data_index++;
SERVER_DATA_FUNCENT();//解析数据并获取时间、网格 ID 等。

中断;

情况4:中断;//向量4 - TXIFG
默认值:break;


返回;

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

    您是否使用了示波器来确保器件完全响应?

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

    "无法获得响应"是什么意思? 没有收到任何信息? 半个响应? 是否缺少每个其他字节?

    1) 1)我看不到您"_enable_interrupt ()"的位置

    2) 2)在115200时、您可以期望每87usec 有一个 Rx 字节。 在1MHz 时、这是87个 CPU 时钟、或者可能是20条指令。 您的 ISR 可能使用的内容不止此。 (症状:丢弃的字节)。 我建议您只使用 ISR 来缓冲 Rx 字节(可能直到'\n')、然后让主程序自行整理到达的内容。

    3)> P3DIR |= 0x1A;                  //将 TX、RTS 设置为输出。 P3.4 = 1且 P3.3 = 1

    复位时未定义 P3OUT。 应确保正确设置 RTS 引脚(可能为=0)。

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

    您好!

    我是说每个字节都丢失了...现在我已经检查并认为中断生成有问题、

    您能不能为此提出建议。

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

    您好、Shreya、

    您需要通过以下代码启用中断:

    _bis_SR_register (LPM0_bits + GIE); 

    此致

    Johnson

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

    您好、Johnson、

     我启用了 RX 和 TX 位。

    UCA0IE |= UCTXIE;
    UCA0IE |= UCRXIE;    

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

    您好、Shreya、

    GIE 是通用中断使能、任何中断都需要此功能。

    此致

    Johnson

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

    您好、Johnson、

      您提到需要启用 GIE 才能进行任何中断、我已经启用了它、但在 使用 SIM 7600E 模块时波特率为115200时、我仍然无法在响应缓冲器中获得响应

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

    您好、Shreya、

    您能否使用示波器捕获 TX 和 RX 上的波形?

    此致

    Johnson

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

    您好、Shreya、

    您的问题如何?

    此致

    Johnson

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

    您好、Johnson、

     问题得到了解决、感谢您的响应和支持。

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

    您好!

     问题未得到解决 yet...no无法在 UART 接收缓冲区中获取数据。

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

    您好、Shreya、

    您之前回答过问题已得到解决。  现在是否遇到新问题?

    此致

    Johnson

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

    您好、Johnson、

      我想它已经解决了、这就是为什么、 但同样的问题仍然存在,有时在缓冲区中无法获得正确的数据,它会给出正确的响应,有时会丢失一些字母或数字,有时会出现一个时间空的缓冲区,因此请检查我在上面附加的代码。

    谢谢你。  

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

    您是否参考了原始帖子中的代码? 如果您进行了我建议的更改(在11月之前)、现在可能会有很大的不同。

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

    您好,

     更改只是因为现在我使用的波特率为9600、这就是为什么 UART 的寄存器值发生更改的原因...下面将对此进行介绍。

    void UART_init (void)

    P3SEL |= BIT4+BIT4;//分别选择 p3.4和 p3.5作为 TXD 和 RXD
    P3DIR |= 0x1A;//将 TX、RTS 设置为输出。 P3.4 = 1且 P3.3 = 1
    UCA0CTL1 |= UCSWRST;//**将状态机置于复位状态**
    UCA0CTL1 |= UCSSEL_2;// SMCLK
    UCA0BR0 = 6;// 1MHz 9600 (请参阅用户指南)
    UCA0BR1 = 0;// 1MHz 9600
    UCA0MCTL = UCBRS_0 + UCBRF_13 + UCOS16;//模块化 UCBRSx=0、UCBRFx=0、
    UCA0CTL1 &=~UCSWRST;//**初始化 USCI 状态机**
    __no_operation();
    UCA0IE |= UCTXIE;
    UCA0IE |= UCRXIE;//启用 USCI_A3 RX 中断

    __no_operation();

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

    您好!

    任何更新都请

    谢谢你。

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

    您好、Shreya、

    请参阅这些示例代码、您的问题将得到解决。

    http://dev.ti.com/tirex/explore/node?node=AMeniTJMh0RHZCGVNwzJsw__IOGqZri__LATEST

    此致

    Johnson

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

    谢谢 Johnson

     您的回答很有帮助、 您是否对电平转换有任何想法、因为我对 GSM 模块 UART 的电平转换还有一个疑问、那就是1.8V、控制器的电压为3.3V、这可能是因为有时缓冲器会丢失数据、所以如果您有任何想法、也可能是因为这个问题 如何处理代码中的电平转换请告诉我。

    谢谢

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

    您好、Shreya、

    您可以使用 TXB0102芯片来实现电平转换。

    http://www.ti.com/product/TXB0102?keyMatch=TXB0102&tisearch=Search-EN-everything&usecase=part-number

    此致

    Johnson