请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:MSP430G2553 工具/软件:Code Composer Studio
如果我搞砸了,我就会在这里发表第一篇文章,很抱歉。
我来自 Arduino 背景、因此许多较低级的功能对我来说都是全新的。 我一直在使用一些代码示例并对其进行修改、以尝试了解如何通过虚拟 COM 端口发送和接收命令字符串和数据。
我有以下代码:
#include "msp430g2553.h" #include #include char outputstring[7]="test\r\n"; char inputbuffer[5]; char cmdwore[5]; char rxchar; unsigned int i = 0; unsigned int rxindex = 0; unsigned int cmdflag = 0; void main (void) { WDTCTL = WDTPW + WDTHOLD;//停止看门狗/-------------- 配置时钟--- // DCOCTL = 0; //选择最低 DCOx 和 MODx 设置 BCSCTL1 = CALBC1_1MHZ;//设置范围 DCOCTL = CALDCO_1MHZ;//设置 DCO 阶跃+调制 /--- 配置 LED 的--- // P1DIR |= BIT0 + BIT6;// P1.0和 P1.6输出 P1OUT &=~BIT0 + BIT6;// P1.0和 P1.6 = 0 /--- 设置 P1.1和 P1.2的 UART 功能--- // P1SEL |= BIT1 + BIT2;// P1.1 UCA0RXD 输入 P1SEL2 |= BIT1 + BIT2;// P1.2 UCA0TXD 输出 /--- 配置 UART (USCI_A0)--- // UCA0CTL1 |= UCSSEL_2 + UCSWRST;// USCI 时钟= SMCLK、USCI_A0禁用 UCA0BR0 = 104; //数据表表中的104 - UCA0BR1 = 0; //-选择波特率=9600、clk = SMCLK UCA0MCTL = UCBRS_1; //数据表中的调制值= 1 UCA0CTL1 &=~UCSWRST; //清除 UCSWRST 以启用 USCI_A0 //--- 使能中断--- // IE2 |= UCA0TXIE; //启用发送中断 IE2 |= UCA0RXIE; //启用接收中断 _BIS_SR (LPM0_Bits + GIE); } #pragma vector = USCIAB0TX_vector __interrupt void TransmitInterrupt (void) { if (i < sizeof (inputbuffer))(如果(i < sizeof (inputbuffer)) { UCA0TXBUF = inputbuffer[i++]; } 其他 { cmdflag = 0; I=0; } } #pragma vector = USCIAB0RX_vector __interrupt void ReceiveInterrupt (void) { rxchar = UCA0RXBUF; inputbuffer[rxindex++]= rxchar; if (rxchar == 13) { cmdflag = 1; } IFG2 &=~UCA0RXIFG; }
这似乎是触发的
USCIAB0TX_VECTOR
代码的目的是接收一个命令字、将其放入"inputbuffer"中、一旦收到字符13、它应该会发出"cmdflag"、以便主循环可以再次开始传输它。
我已经取出了其中的一些代码来尝试计算正在发生的情况、我在发送中断中放置了一个断点、它似乎一直在关闭。
我确信我错过了一些非常明显的东西、因为我对所有这些都很陌生。 如果有任何帮助、我们将不胜感激!