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/MSP430F4152:MSP430F4152

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/921536/ccs-msp430f4152-msp430f4152

器件型号:MSP430F4152

工具/软件:Code Composer Studio

您好,

我遇到了一个简单的问题、

请帮我解决这个问题。

我希望接收多个数据、

但我无法接收它。

我还尝试了不同的数据类型。

您能解决这个问题吗?

我的计划是 :  

CHAR OLD; // int old 
int main (void) { WDTCTL = WDTPW | WDTHOLD; //停止看门狗计时器 FLL_CTL0 |= XCAP11PF; //配置负载电容 ------------------------------------------------------- P1DIR |= BIT4; // P5.1输出 CCTL0 = CCIE; //启用 CCR0中断 // CCR0 = 50000; // TACTL = tassel_2 + MC_2; // SMCLK、连续模式 工作 TACTL = tassel_1 + MC_2; //======================================== ======================================================================== lcd_init(); UART_INIT(); while (1) { LCD[0]= digit[2]; //=========================================================================== OLD = getchar(); =我的问题就在这里。我无法接收多个(100个)数据。只有一个数据('1':在开关条件下可以看到) // putchar (旧); 开关(OLD) { 情况 "1": /"100" TACTL = tassel_1 + MC_2; old1='1'; putchar ('a'); // CCR0 = 50000; //100ms CCR0 = 1638; //////// 1638=10Hz _bis_SR_register (LPM0_bits + GIE); 中断; 案例"2": TACTL = tassel_1 + MC_2; old1 ='2'; putchar ('B'); CCR0 = 8000; /////500msec //////8000 =2Hz _bis_SR_register (LPM0_bits + GIE); 中断; 案例"3": TACTL = tassel_1 + MC_2; old1 ='3'; putchar ('B'); CCR0 = 32768; /////1000msec _bis_SR_register (LPM0_bits + GIE); 中断; 案例"4": TACTL = tassel_2 + MC_2; old1 ='4'; putchar ('B'); // CCR0 = 25000; /////2000msec _bis_SR_register (LPM0_bits + GIE); 中断; 默认值: TACTL = tassel_2 + MC_0; 中断; } } //返回0; } 如果我使用单个变量..它是可以的。
我其余的工作正常(中断、UART、LCD 功能)。 我还尝试使用其他方法(尝试使用环形缓冲器) ,您能为我提供解决方案的帮助吗?

请帮帮我。

情况紧急。

此致、

Srijit

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

    您好 Srijit、

    您的帖子显示您没有通过 UART 接收多个字符。 是这样吗? 如果是、您还可以共享 UART Rx 中断处理程序的代码吗?

    这是一个代码示例、可能会让您对用法有所了解: http://dev.ti.com/tirex/explore/node?node=AJJlcCxl2-X.IDr5z0pwvw__IOGqZri__LATEST

    Srinivas

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

    您好、Shivam、

    非常感谢您的回复。

    我正在获取 数据,也可以通过 Tx 和 Rx 发送数据。

    但我有不同的问题、

    1)

    我正在接收数据(通过中断或使用输出中断)、  

    通过发送 function..it 传输数据(例如:1234)正在进行传输。
    2)
    但我希望接收数据( 通过中断或输出中断)、
    并希望使用计时器中断传输数据。
    (如果我接收 ex:1234,并使用计时器 interrupt....it 发送,则仅发送'4')
    您能帮 我解决这个问题吗?
    (因为我的逻辑是 :接收数据...然后在计时器中断中...将有一个 counter++...  当计数器将等于接收到的数据时..... 然后输出部分将执行... 这是第二步...首先我想通过计时器中断发送完整数据。
    能不能给我提供解决方案。
    [
    #在我的程序中:我没有使用 Rx 中断...只有 Rx 函数 希望将值存储在缓冲区中...这也不起作用  
    getchar ():

    char getchar()

    while (!(IFG2&UCA0RXIFG));
    返回 UCA0RXBUF;

    UART:  

    空 UART_INIT()

    P6SEL |= BIT5+BIT6;// P6.5、6 = USCI_A0 RXD/TXD
    UCA0CTL1 |= UCSWRST;
    UCA0CTL1 |= UCSSEL_1;//UCSSEL_2;//UCSSEL_1;// CLK = ACLK

    UCA0BR0 = 3;// 32k/9600 - 3.41
    UCA0BR1 = 0x00;//
    UCA0MCTL = 0x06;
    UCA0CTL1 &=~UCSWRST;//**初始化 USCI 状态机**
    IE2 |= UCA0RXIE;//启用 USCI_A0 RX 中断

    putchar():  

    空 putchar (无符号 char 数据)

    while (!(IFG2&UCA0TXIFG));
    UCA0TXBUF =数据;

    ]

    此致、
    Srijit。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    >              old = getchar();        
    getchar()正在阻止,因此您可能需要以下简单的操作:
    >           byte0 = getchar();      // First byte of pair
    >           byte1 = getchar();      // Second byte of pair
    然后在计时器 ISR 中:
    >           putchar(byte0);      // First byte of pair
    >           putchar(byte1);      // Second byte of pair
    确保您的定时器周期至少为2ms (2个9600bps 的字节)、这样它就不会溢出。