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.
我是嵌入式产品的新用户、我了解如何使用 i2c、UART、SPI。
我已经学习了这两个文档、并且在示例代码中看到了 UART 的示例。
以及如何了解传输和接收哪些数据。
写入 UCAxTXBUF (发送缓冲器)的数据将在被写入后被发送
一旦 UCAxIFG 寄存器内的接收中断标志 UCRXIFG 被置位、被读取的数据就可以在 UCAxRXBUF 中找到
SIR、您能给我提供用于显示 TX 和 RX 数据的任何 UART 示例代码吗?
下面是使用 ACLK 时波特率为9600的 UART 回波的示例代码。 它只是将接收到的内容发回。 因此、如果您在 PC 上使用超级终端程序并将其连接到 RS232或 USB UART 桥接器、您就可以与超级终端通信了。
// MSP430F552x 演示- USCI_A0、超低功耗 UART 9600回波 ISR、32kHz ACLK
//
// 说明:回显接收到的字符,使用 RX ISR。 正常模式为 LPM3、
// USCI_A0 RX 中断触发 TX 回波。
// ACLK = 32768Hz 晶振、MCLK = SMCLK = DCO ~1.045MHz
// 具有32768Hz XTAL @9600 = 32768Hz/9600 = 3.41的波特率分频器
// 请参阅用户指南以了解波特率分频器表
//
// MSP430F552x
// ------------
// /|\| XIN|-
// | || 32kHz
// --|RST XOUT|-
// | |
// | P3.3/UCA0TXD|--- >
// | | 9600 - 8N1
// | P3.4/UCA0RXD|<---
//
// Bhargavi Nisarga
// Texas Instruments Inc.
// 2009年4月
// 使用 CCSv4和 IAR Embedded Workbench 构建版本:4.21
//
#include
int main (空)
{
WDTCTL = WDTPW + WDTHOLD; //停止 WDT
P3SEL = BIT3+BIT4; // P3.4、5 = USCI_A0 TXD/RXD
//
// P5SEL |= BIT4+BIT5; //选择 XT1
//
// UCSCTL6 &=~(XT1OFF); // XT1打开
// UCSCTL6 |= XCAP_3; //内部负载电容
// UCSCTL3 = 0; // FLL 参考时钟= XT1
//
// //循环直到 XT1、XT2和 DCO 稳定-在本例中循环直到 XT1和 DCO 稳定
// 执行
// {
// UCSCTL7 &=~(XT2OFFG + XT1LFOFFG + DCOFFG);
// //清除 XT2、XT1、DCO 故障标志
// SFRIFG1 &=~OFIFG; //清除故障标志
// while (SFRIFG1&OFIFG); //测试振荡器故障标志
//
// UCSCTL6 &=~(XT1DRIVE_3); // XTAL 现已稳定,降低了驱动强度
//
// UCSCTL4 |= SELA_0 + SELS_4 + SELM_4; // ACLK = LFTX1
// //// SMCLK =默认 DCO
// // MCLK =默认 DCO
//
//..........
UCA0CTL1 |= UCSWRST; //**将状态机置于复位状态**
UCA0CTL1 |= UCSSEL_1; // CLK = ACLK
UCA0BR0 = 0x03; // 32kHz/9600=3.41 (请参阅用户指南)
UCA0BR1 = 0x00; //
UCA0MCTL = UCBRS_3+UCBRF_0; //调制 UCBRSx=3、UCBRFx=0
UCA0CTL1 &=~UCSWRST; //**初始化 USCI 状态机**
UCA0IE |= UCRXIE; //启用 USCI_A0 RX 中断
_bis_SR_register (LPM3_bits + GIE); //输入 LPM3、中断被启用
__no_operation(); //用于调试器
}
//回显 RXed 字符,确认 TX 缓冲区已准备就绪
#if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
#pragma vector=USCI_A0_Vector
_interrupt void USCI_A0_ISR (void)
#Elif defined (_GNU_)
void __attribute__((中断(USCI_A0_Vector)) USCI_A0_ISR (void)
其他
错误编译器不受支持!
#endif
{
switch (__evo_in_range (UCA0IV、4))
{
情况0:中断; //向量0 -无中断
情况2: //向量2 - RXIFG
while (!(UCA0IFG&UCTXIFG)); // USCI_A0 TX 缓冲器准备就绪?
UCA0TXBUF = UCA0RXBUF; // TX -> RXED 字符
中断;
情况4:中断; //向量4 - TXIFG
默认值:break;
}
}