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.
您好!感谢您的帮助,按照您的提示,现在串口助手可以接收到MCU发送的消息了,但是一个问题就是消息只能在我单步调试的时候才可以收到,然而当全速运行时就收不到数据,我还特意增加了延时,效果还是这样,现在不知道问题出在哪里?还麻烦向您请教!
#include "msp430.h" #include <stdbool.h> #include <stdint.h> #define DRE485_out P2DIR |= BIT7 #485方向选择 unsigned char buffer0[] = {"\nA!545445\n"}; unsigned char buffer1[] = {"\r\n12121212!\r\n"}; unsigned char c[]={"ready for receive!"}; void initUART() { DRE485_out; P2OUT &= ~BIT7; //初始化485为输入 // Configure USCI_A3 for UART mode 配置串口通信 UCA3CTLW0 = UCSWRST; // Put eUSCI in reset UCA3CTLW0 |= UCSSEL__ACLK; // CLK = ACLK UCA3BRW = 3; UCA3MCTLW = 0x9200; // UCBRSx = 0x92, UCOS16 = 0 UCA3CTLW0 &= ~UCSWRST; // Initialize eUSCI UCA3IE |= UCRXIE + UCTXIE; // Enable USCI_A3 interrupt 打开收发中断 } void initGPIO() { // Setup P4.1 UCA0RXD, P4.2 UCA0TXD P4SEL0 |= BIT2 + BIT1; // Set P3.0, P3.1 to non-IO } void clockSet() { UCSCTL6 &= ~(XT1OFF); // XT1 On UCSCTL6 |= XCAP_1; // Internal load cap // Loop until XT1 fault flag is cleared do { UCSCTL7 &= ~(XT2OFFG | XT1LFOFFG | DCOFFG); // Clear XT2,XT1,DCO fault flags SFRIFG1 &= ~OFIFG; // Clear fault flags } while (SFRIFG1 & OFIFG); UCSCTL6 &= ~(XT1DRIVE_3); } void send_buf(unsigned char *ptr) //发送字符串 { P2OUT |= BIT7; //485发出 while(*ptr != '\0') { UCA3TXBUF = *ptr++; while(!(UCA3IFG&UCTXIFG)); __delay_cycles(5000); 5ms延时 } while(UCA3STATW & UCBUSY) ; P2OUT &= ~BIT7; //485接收 } void main( void ) { // Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; P5DIR |= BIT0 + BIT1; //发送,接收指示灯 P5OUT |= BIT0 + BIT1; initUART();//初始化 initGPIO(); clockSet(); unsigned char *p0; p0 = c; send_buf(p0); // 发送 开始指令 __bis_SR_register(LPM3_bits + GIE); } #pragma vector=USCI_A3_VECTOR __interrupt void USCI_A3_ISR(void) { unsigned char *p0,*p1; p0 = buffer0; p1 = buffer1; unsigned char rxData; switch(__even_in_range(UCA3IV,4)) { case 0:break; // Vector 0 - no interrupt case 2: P5OUT ^= BIT0; rxData = UCA3RXBUF; // Vector 2 - RXIFG 接收中断 if(rxData == 'A') { P2OUT |= BIT7; //先发出 while(*p0 != '\0') { while(UCA3STATW & UCBUSY) ; //此处用 while(!(UCA3IFG&UCTXIFG));不行,不知道为啥 UCA3TXBUF = *p0++; __delay_cycles(5000); //再接收 } P2OUT &= ~BIT7; } else { P2OUT |= BIT7; while(*p1 != '\0') { while(UCA3STATW & UCBUSY) ; UCA3TXBUF = *p1++; __delay_cycles(5000); } P2OUT &= ~BIT7; } break; case 4: P5OUT ^= BIT1; __delay_cycles(50000); P5OUT ^= BIT1; break; // Vector 4 - TXIFG 发送指示灯 default: break; } } 需要的朋友们可以参考,不足之处也请提出