大家好!
我正在使用 EVM430FR6047评估板和另一个 Arduino 板、并尝试在两者之间使用 UART 通信。 我想做一个基本的任务、就是 从 EVM 板向 Arduino 发送一个"hello world"字符串。 我有以下代码、该代码是 TI 自己提供的、作为示例、我添加了字符串发送器件、但它不起作用。 我应该做什么才能成功发送?
#包含
#包含
int main (空)
{
WDTCTL = WDTPW | WDTHOLD;//停止看门狗
//配置 GPIO
P2SEL0 &=~(BIT0 | BIT1);
P2SEL1 |= BIT0 | BIT1;// USCI_A0 UART 操作
//禁用 GPIO 上电默认高阻抗模式以激活
//先前配置的端口设置
PM5CTL0 &=~μ A LOCKLPM5;
//启动最大 DCO 设置的时钟系统~8MHz
CSCTL0_H = CSKEY_H;//解锁 CS 寄存器
CSCTL1 = DCOFSEL_3 | DCORSEL;//将 DCO 设置为8MHz
CSCTL2 = SELM__VLOCLK | SELS__DCOCLK | SELM__DCOCLK;
CSCTL3 = DIVA__1 | DIVS__1 | DIVM__1;//设置所有分频器
CSCTL0_H = 0;//锁定 CS 寄存器
//针对 UART 模式配置 USCI_A0
UCA0CTLW0 = UCSWRST;//将 eUSCI 置于复位状态
UCA0CTLW0 |= UCSSEL_SMCLK;// CLK = SMCLK
//波特率计算
// 8000000/(16*9600)= 52.083
//分数部分= 0.083
//用户指南表24-4:UCBRSx=0x04
// UCBRFx= int ((52.083-52)*16)= 1
UCA0BRW = 52;// 800000/16/9600
UCA0MCTLW |= UCOS16| UCBRF_1 | 0x4900;
UCA0CTLW0 &=μ~UCSWRST;//初始化 eUSCI
UCA0IE |= UCRXIE;//启用 USCI_A0 RX 中断
//将"Hello World"写入串行端口
char HelloWorld[]="Hello World";
INT I;
对于(I = 0;I < strlen (HelloWorld);I++)
{
while (!(UCA0IFG 和 UCTXIFG));
UCA0TXBUF = HelloWorld[i];
}
__ bis_SR_register (LPM3_bits + GIE);//输入 LPM3、中断被启用
__ no_operation ();//表示调试器
}
#if defined (__TI_Compiler_version__)|| defined (__IAR_SYSTEMS_ICC__)
#pragma vector=EUSCI_A0_vector
__interrupt void USCI_A0_ISR (void)
#Elif 已定义(_ GNU _)
void __attribute_((interrupt (EUSCI_A0_vector)) USCI_A0_ISR (void)
#else
#错误编译器不受支持!
#endif
{
switch (__even_in_range (UCA0IV、USCI_UART_UCTXCPTIFG))
{
USCI_NONE:中止;
案例 USCI_UART_UCRXIFG:
while (!(UCA0IFG&UCTXIFG));
UCA0TXBUF = UCA0RXBUF;
___ no_operation();
中断;
USCI_UART_UCTXIFG 情况:中断;
案例 USCI_UART_UCSTTIFG:中断;
案例 USCI_UART_UCTXCPTIFG:中断;
默认值:中断;
}
}