主题中讨论的其他部件:MSP430F5438A
工具/软件:Code Composer Studio
尊敬的社区成员:
大家好,我是TI主板MSP430F5438A的初学者,现在我正在测试通过USB与UCA1进行的UART通信。
我(认为I)正确配置并设置了UART通信的所有寄存器,因此我启动了CCS提供的终端,并使用我所做的设置。
我所做的设置写在函数'halUsbInit()'中,它在下面的代码中,我也为你们写了一些评论。
使用这些设置,我启动终端时使用:波特率=5.76万,数据位=7 ,奇偶校验位=无,停止位=1,控制流=无。
但是,问题是,当我运行下面的代码时,终端不打印任何内容,而奇怪的是,它有时会打印出'@'字符!
您会为我建议一些原因或解决方案吗?
我所检查的是:
UCA1TXBUF注册并发现它能精确地存储我需要的数据。
通过在LCD上打印这些值来注册值,以检查是否对其进行了精细修改-->是否正常。
非常感谢你能抽出时间。
void halUsbInit(void)
{
无符号字符I;
(i = 0;i < 255;I++)
halUsbReceiveBuffer[i]='\0";
缓冲区大小=0;
USB_PORT_SEL || USB_PIN_RXD + USB_PIN_TXD;
USB_PORT_DIR || USB_PIN_TXD;// port_DIR (HI):TXD
USB_PORT_DIR &=~USB_PIN_RXD;// port_DIR (LO):RXD
UCA1CTL1 |= 0x00//UCSWRST;//重置状态,UCSI_A1控制1,此操作修改最低位
UCA1CTL0 = UMODE_0;// UCSI A1 Control 0 = UCUMODE_0;UCUMODE_0表示UART模式
//此模式。最后第二位,第三位只能在UCSWRST=1时修改,并且似乎是UART模式,因为UCMODE_0是0x00宏
UCA1CTL0 || UC7BIT;// 7位通信。 ,UCA1CTL0:UCSI_A1控制0 --> 1:7位,0:8位
UCA1CTL1 |= UCSSEL_2;//时钟选择:SMCLK
//UCSSEL:宏用于:0x80 =1000 0000:表示SMCLK------- /
UCA1BR0 = 138;// 8MHz/5.76万=138,UCAxBR0:USIC_AX波特率控制0,
UCA1BR1 = 0;// UCAxBR1:USI_AX波特率控制1
// br0:低字节时钟和BR1:高字节时钟-->格式16位val (UCAxBR0 + UCAxBR1 * 256)
//对于此情况,即0000 0001 0001 0000
UCA1MCTL = 0xE;//14 -> 1110:超采样已禁用,第二调制(11)
UCA1CTL1 &=~UCSWRST;//重置模式关闭
UCA1IE |= 0x01;//接收启用的中断
__bis_sr_register(GIE);//启用中断
__no_operation();
}
void halUsbShutDown (void)
{
UCA1IE &=~UCRXIE;//禁用后RX中断
UCA1CTL1 = UCSWRST;//重置状态
USB_PORT_SEL &=~(USB_PIN_RXD + USB_PIN_TXD);//删除分配的RX,TX引脚
USB_PORT_DIR || USB_PIN_TXD;
USB_PORT_DIR || USB_PIN_RXD;
USB_PORT_OUT &=~(USB_PIN_TXD + USB_PIN_RXD);
}
void halUsbSendChar(Char* Character,int I)
{
CHAR* ERRC="循环";
CHAR* NEXTOPC ="PR ";
IF (UCA1IFG和UCTXIFG)
halLcdPrintLine(NEXTOPC, 5+I, 0);
同时(!(UCA1IFG和UCTXIFG))
{
halLcdPrintLine (ERRC,1,0);
}
//UCA1IFG:中断标志寄存器,UCTXIFG:来自UCA1IFG的1位,0:无中断,1:中断
//在这种情况下,如果两个是相同的->离开时,如果diff ->进入while循环永久,这意味着发生了一些不希望出现的错误
UCA1TXBUF =*字符;//UCA1TXBUF:8位寄存器,存储8位字符。
}
/**
主要c
*/
内部主(无效)
{
WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器
P1DIR || BIT1;
CHAR REG_BUF[15]={0},";
halLcdInit();
halLcdBackLightInit();
halLcdClearScreen();
halLcdBackLightInit();
halLcdClearScreen();
// halLcdPrintLine ("Baudrate = 5.76万",0,0);
// halUsbInit();
int i;
字符[17]={'E','F',0};
对于(I =0;I < 3;I++)
{
halUsbInit();
halUsbSendChar((Character + I),i);
char buf[3]={0},";
buf[0]=UCA1TXBUF;
halLcdPrint (buf,0);
__DELAY周期(10万);
halUsbShutDown();
volatile unsigned int k;
P1OUT ^= BIT1;
K =2万;
执行k--;
while (k!= 0);
}
//halUsbShutDown();
返回0;
}