尊敬的 Sirs:
无法使用此 LaunchPad 使 UART 运行。 我已经尝试过该帖子中的两个简单程序。
以下是 MSP430FR5994 LaunchPad 的 UART 回显程序的代码:
此版本 A 使用 P2和 UCA0 UART。 它将正确接收字符并生成接收中断。 但它不会传输任何内容 (范围为): 使用 LaunchPad UART 进行测试。
#include
/*
* main.c
*
int main (void){
WDTCTL = WDTPW | WDTHOLD; //停止看门狗计时器
//配置 GPIO
P2SEL0 |= BIT0 | BIT1; // USCI_A0 UART 操作
P2SEL1 &=~(BIT0 | BIT1);
//禁用 GPIO 上电默认高阻抗模式以激活
//先前配置的端口设置
PM5CTL0 &=~LOCKLPM5;
//最大 DCO 设置~8MHz 的启动时钟系统
CSCTL0_H = CSKEY >> 8; //解锁时钟寄存器
CSCTL1 = DCOFSEL_3 | DCORSEL; //将 DCO 设置为8MHz
CSCTL2 = SELA_VLOCLK | SELESS__DCOCLK | SELM_DCOCLK;
CSCTL3 = DIVA__1 | DIVM_1 | DIVM__1; //设置所有分频器
CSCTL0_H = 0; //锁定 CS 寄存器
//将 USCI_A0配置为 UART 模式
UCA0CTLW0 = UCSWRST;
UCA0CTLW0 |= UCSSEL_SMCLK; // CLK = SMCLK
//波特率计算
// 800000000 /(16*9600)= 52.083
//分数部分= 0.083
// UCBRFx = int ((52.083-52)*16)= 1.
UCA0BR0 = 52; // 8000000/16/9600
UCA0BR1 = 0x00;
UCA0MCTLW |= UCOS16 | UCBRF_1 | 0x4900;
UCA0CTLW0 &=~UCSWRST; //初始化 eUSCI
UCA0IE |= UCRXIE; //启用 USCI_A0 RX 中断
UCA3TXBUF = 0x41; //测试发送'A' 这没什么!
_bis_SR_register (LPM3_bits | GIE); //输入 LPM3、中断被启用
__no_operation(); //用于调试器
}
#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、USCI_UART_UCTXCPTIFG))
{
USCI_NONE 案例:中断;
USCI_UART_UCRXIFG 案例:
while (!(UCA0IFG&UCTXIFG));
UCA0TXBUF = UCA0RXBUF; //程序在接收到的字符上到达此处,但 TX 引脚没有输出任何内容
__no_operation();
中断;
案例 USCI_UART_UCTXIFG:中断;
案例 USCI_UART_UCSTTIFG:中断;
案例 USCI_UART_UCTXCPTIFG:中断;
}
}
--------------------------------------------------------------------
该版本 B 版本 使用 P6和 UCA3。 它可以发送出 P6.0、但不能在 P6.1上接收。 也不会产生中断:
#include
Int TempStat;
/
* main.c
*
(小部分 /
int main (void){
WDTCTL = WDTPW | WDTHOLD; //停止看门狗计时器
//配置 GPIO
P6SEL0 |= BIT0 | BIT1; // USCI_A0 UART 操作
P6SEL1 &=~(BIT0 | BIT1);
//禁用 GPIO 上电默认高阻抗模式以激活
//先前配置的端口设置
PM5CTL0 &=~LOCKLPM5;
//最大 DCO 设置~8MHz 的启动时钟系统
CSCTL0_H = CSKEY >> 8; //解锁时钟寄存器
CSCTL1 = DCOFSEL_3 | DCORSEL; //将 DCO 设置为8MHz
CSCTL2 = SELA_VLOCLK | SELESS__DCOCLK | SELM_DCOCLK;
CSCTL3 = DIVA__1 | DIVM_1 | DIVM__1; //设置所有分频器
CSCTL0_H = 0; //锁定 CS 寄存器
//为 UART 模式配置 USCI_A0 (int 标志30.3.15.4):
UCA3CTLW0 = UCSWRST; //软 rst 使能
UCA3CTLW0 |= UCSSEL_SMCLK; // CLK = SMCLK
//波特率计算
// 800000000 /(16*9600)= 52.083
//分数部分= 0.083
// UCBRFx = int ((52.083-52)*16)= 1.
UCA3BR0 = 52; // 8000000/16/9600
UCA3BR1 = 0x00;
UCA3MCTLW |= UCOS16 | UCBRF_1 | 0x4900;
UCA3CTLW0 &=~UCSWRST; //初始化 eUSCI
UCA3IE |= UCRXIE; //启用 USCI_A0 RX 中断(int 标志寄存器30.4.10)
TempStat=UCA3CTLW0; //read ctl word 0
TempStat=UCA3IFG; //读取 int 标志
UCA3TXBUF = 0x41; //测试发送'A'
_bis_SR_register (LPM3_bits | GIE); //输入 LPM3、中断被启用
__no_operation(); //用于调试器
}
#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 (UCA3IV、USCI_UART_UCTXCPTIFG))
{
USCI_NONE 案例:中断;
案例 USCI_UART_UCRXIFG: //2
TempStat=UCA3IFG; //读取 int 标志
while (!(UCA3IFG &~UCTXIFG)); //30.4.11
UCA3TXBUF = UCA3RXBUF; //echo
TempStat= UCA3TXBUF; //查看其中的内容
__no_operation();
中断;
USCI_UART_UCTXIFG 案例:
TempStat=UCA3IFG; //读取 int 标志
UCA3TXBUF = 0x42; //测试发送'b'
中断;
案例 USCI_UART_UCSTTIFG:中断;
案例 USCI_UART_UCTXCPTIFG:中断;
}
}