请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:MSP430FR2311 我遇到了将引脚1.6和1.7连接在一起的简单 UART 回波问题。 我从各种示例中将该代码组合在一起。 当我单步执行代码时、我可以通过调用发送中断(UCTXCPTIFG)来确认传输完成。 当我将中断配置为 UCRXIFG 并单步执行代码时、接收中断永远不会被调用。 我 仅使用 CCS 9.0.0.00004。 以下是我的代码:
#include #include #define ENABLE_PINS 0xFFFE //需要使用输入和输出 /** * main.c */ int main (void) { WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器 P1DIR = BIT0; //使 P1.0成为红色 LED 的输出 P1OUT = 0x00; //红色 LED 最初熄灭 //配置 UART 引脚 P1SEL0 |= BIT6 | BIT7; //将2个 UART 引脚设置为第二个功能 //解锁 GPIO PM5CTL0 &=~LOCKLPM5; //根据 MCLK 的器件数据表的要求配置一个 FRAM 等待状态 //在配置时钟系统之前在8MHz 以上运行。 FRCTL0 = FRCTLPW | NWAITS_1; _bis_SR_register (SCG0);//禁用 FLL CSCTL3 |= SELREF_REFOCLK;//将 REFO 设置为 FLL 基准源 CSCTL0 = 0; //清除 DCO 和 MOD 寄存器 CSCTL1 &=~(DCORSEL_7); //首先清除 DCO 频率选择位 CSCTL1 |= DCORSEL_5; //设置 DCO = 16MHz CSCTL2 = FLLD_0 + 487; //设置为 fDCOCLKDIV =(FLLN + 1)*(fFLLREFCLK/n) // =(487 + 1)*(32.768 kHz/1) // = 16MHz _DELAY_CYCLES (3); _BIC_SR_register (SCG0); //启用 FLL while (CSCTL7 &(FLLUNLOCK0 | FLLUNLOCK1)); // FLL 锁定 CSCTL4 = SELMS_DCOCLKDIV | SELA_REFOCLK; //配置 UART //从用户指南波特率表中,BRCLK = 16000000时为9600波特 // UCBRx = 104; // UCBRSx = 0xD6 // UCOS16 = 1 // UCBRFx = 2 //分数部分= 0.1667 //用户指南表21-5:UCBRSx = 0xD6 // UCBRFx = 2 UCA0CTLW0 |= UCSWRST; UCA0CTLW0 |= UCSSEL_SMCLK; UCA0BRW = 104; UCA0MCTLW = 0xD600 | UCOS16_1 | UCBRF_2; UCA0CTLW0 &=~UCSWRST; //初始化 eUSCI //源= ACLK = 32768Hz,除以16 (2048Hz) SYSCFG2 |= RTCCKSEL; //选择 ACLK 作为 RTC 时钟 RTCCTL = RTCSS_1 | RTCSR | RTCPS__16; UCA0IE = UCTXCPTIFG; //接收到 RX 时中断 UCA0TXBUF = 0x56; _BIS_SR (GIE); while (1); } #pragma vector=USCI_A0_vector __interrupt void port1_ISR (void) { if (UCA0RXBUF > 0x25) { P1OUT = BIT0; //打开红色 LED } 其他 { P1OUT = 0x00; } UCA0IFG = UCA0IFG &(~UCTXCPTIFG); //清除 TX 完成中断标志 UCA0TXBUF = 0x56; }