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.

[参考译文] MSP430FR5972:UART

Guru**** 2539500 points
Other Parts Discussed in Thread: MSP430FR5972

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/574030/msp430fr5972-uart

部件号:MSP430FR5972

您好,

我正在使用CCS v7,设备MSP430FR5972。 我只是想运行UART。 只需从PC键盘发送任何想要接收相同但无法正常工作的内容。

我的编码如下:

#include <MSP4S.h>

内部主(无效)

WDTCTL = WDTPW | WDTHOLD;//停止看门狗

//配置GPIO
P2SEL0 || BIT0 | BIT1;// USI_A0 UART操作
P2SEL1 &=~(BIT0 | BIT1);

//禁用GPIO开机默认高阻抗模式以激活
//以前配置的端口设置
PM5CTL0 &=~LOCKLPM2;

//启动时钟系统,最大DCO设置为~8MHz
CSCTL0_H = CSOKEY >> 8;//解锁时钟寄存器
CSCTL1 = DCOFSEL_3 | DCORSEL;//将DCO设置为8MHz

CSCTL2 =拉美_ VLOCLK | SESS__DCOCLK | SELM__DCOCLK;
CSCTL3 = DIVA__1 | DIVs__1 | DIVM__1;//设置所有分隔线
CSCTL0_H = 0;//锁定CS寄存器

//为UART模式配置USI_A0
UCA0CTLW0 = UCSWRST;//重置eUSCI

UCA0CTLW0 |= UCSSEL__SMCLK;// CLK = SMCLK

//波特率计算
// 80万/(16*9600)=9600= 52.083
//分数部分= 0.083
//用户指南表21-4:UCBRSx = 0x04
// UCBRFx = int ((52.083 -52)*16)= 1
UCA0BR0 = 52;// 80万/16/9600</s>9600
UCA0BR1 = 0x00;
FRCTL0 = FRCTLPW | NWAITS_1;//更改naccess-x值以添加正确数量的等待

UCA0MCTLW || UCOS16 | UCBRF_1 | 0x4900;
UCA0CTLW0 &=~UCSWRST;//初始化eUSCI
UCA0IE |= UCRXIE;//启用USI_A0 RX中断

__bis_sr_register(LPM3_bits | GIE);//输入LPM3,中断已启用
__no_operation();//用于调试器
}

#if defined(__TI_Compiler_version__)|| defined(__IAR_SYSTEMS _ICC__)
#pragma vector=USI_A0_vector
__interrupt void USI_A0_ISR(void)
#Elif已定义(__GMNU__)
void __attribute__((interrupt (USI_A0_vector))) USI_A0_ISR (void)
#否则
错误编译器不受支持!
#endif

Switch(__偶 数_in_range(UCA0IV, USI_UART_UCTXCPTIFG))

案例USI_NONE:中断;
案例USI_UART_UCRXIFG:

while (!(UCA0IFG和UCTXIFG));

UCA0TXBUF = UCA0RXBUF;

__no_operation();
中断;
案例USI_UART_UCTXIFG:中断;
案例USI_UART_UCSTIFG:中断;
案例USI_UART_UCTXCPTIFG:中断;
}
}

也使用USB-TTL设备并连接Rx-Tx,Tx-Rx和GND公共。 在Hyper终端上设置波特率9600。  

 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果您删除"while (!(UCA0IFG&UCTXIFG)"行,它是否有效?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    不工作,删除此行之后...
    现在该怎么做???
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    首先,您应该仔细检查系统时钟。 执行此行

    CSCTL1 = DCOFSEL_3 | DCORSEL;//将DCO设置为8MHz

    是否确实需要8MHz或太远而无法获取UART? 您可以在微控制器的引脚上输出时钟。

    Dennis
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好,Dennis,

    我检查了reg.的这个设置,它选择了8MHz,但没有运行...
    任何其他建议。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您应该使用示波器测量时钟。 您是否有一个可以确定确切频率的系统?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Dennis,

    我有点信任,因为我在示波器上测量,结果正常。

    我想你只需要检查一次…