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.
工具/软件:Code Composer Studio
尊敬的所有人:
我想通过 UART 发送字符串、问题是它只发送第一个字符、我非常希望在这方面能提供一些帮助。 此代码附在下面:
//初始化位: //UART P1SEL0 |= BIT2 | BIT3; // P1.2/3 eUSCI_A 函数 P1SEL1 &=~(BIT2 | BIT3); UCA0CTL1 |= UCSWRST; //保持 eUSCI 处于复位状态 UCA0CTL1 |= UCSSEL_2; // SMCLK UCA0BR0 = 0xAA; // 9600波特 UCA0BR1=0x06; UCA0MCTLW = 0xD600; // 16.384MHz/9600 = 1706.6667 (请参阅 UG) UCA0CTL1 &=~UCSWRST; //从复位中释放 UCA0IE |= UCRXIE; //启用 RX 中断 //将 DCO 设置为使用内部电阻器。 DCO 将处于16.384MHz CS_setupDCO (CS_internal_voltageR); CS_initClockSignal (CS_SMCLK、CS_clock_divider);
//中断例程 void USCI_A0_ISR (void) { switch (__evo_in_range (UCA0IV、USCI_UART_UCTXCPTIFG)){ USCI_NONE 案例:中断; USCI_UART_UCRXIFG 案例: U = 0; while (!(UCA0IFG&UCTXIFG));// USCI_A0 TX 缓冲器准备就绪? { sprintf (randomstr、"%d"、p_results_2);//将 p_result_2转换为字符串 while (Randrstr[u]!='\0') { UCA0TXBUF =随机数[u]; U++; //UCA0TXBUF = 0x0a; } UCA0TXBUF = 0x0a; UCA0TXBUF = 0x0d; U = 0; } 中断; 案例 USCI_UART_UCTXIFG:中断; 案例 USCI_UART_UCSTTIFG:中断; 案例 USCI_UART_UCTXCPTIFG:中断; 默认值:break; } }
此致
Neal
嗨、Subhronil、
我想您在尝试写入字符串其余部分之前、不会再次等待 TX 缓冲区清除。 这个 while 循环应该只写入1个字符、然后等待 TX 缓冲区准备就绪、然后再写入更多内容。
while (Randrstr[u]!='\0') { UCA0TXBUF =随机数[u]; U++; //UCA0TXBUF = 0x0a; }
此致、
JD
尊敬的 JD:
非常感谢。 添加复选标记;"while (UCA0STATW 和 UCBUSY)"执行该操作
while (currentstr[u]!='\0') { UCA0TXBUF = currentstr[u]; while (UCA0STATW&UCBUSY); U++; //UCA0TXBUF = 0x0a; }
此致
Neal