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.

[参考译文] CCS/MSP430FR4133:使用 msp430fr4133的串行通信

Guru**** 1144270 points
Other Parts Discussed in Thread: MSP430FR4133, LMT86
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/831175/ccs-msp430fr4133-serial-communication-using-msp430fr4133

器件型号:MSP430FR4133
主题中讨论的其他器件: LMT86

工具/软件:Code Composer Studio

我尝试使用 msp430fr4133和 LMT86创建小型可编程恒温器。 我有一个 Java 应用程序,其中有两个按钮,一个用于 get (刷新显示的温度)和 set (将温度设置为 MSP)。

我从 Java 发送命令、但在微控制器中不接收。   

Java Send 函数:  

void writeData (字符串温度){ 
尝试{
字节 A;
for (char ch:temature.toCharArray()){
a =(字节)通道;
output.write (a);
output.flush();

}捕捉(例外 e){
logText ="写入数据失败:"+ e.toString();
system.out.println (logText);



具有 UART 中断例程、因此不起作用。 在每个步骤中、此例程都会被 skyped。

空 initClockTo16MHz()

FRCTL0 = FRCTLPW | NWAITS_1;

_bis_SR_register (SCG0);
CSCTL3 |= SELREF_REFOCLK;
CSCTL0 = 0;
CSCTL1 &=~(DCORSEL_7);
CSCTL1 |= DCORSEL_5;
CSCTL2 = FLLD_0 + 487;

_DELAY_CYCLES (3);
_BIC_SR_register (SCG0);
while (CSCTL7 &(FLLUNLOCK0 | FLLUNLOCK1));

CSCTL4 = SELMS_DCOCLKDIV | SELA_REFOCLK;

void Init_PIN(){
// UART 引脚
GPIO_setPeripheralModuleFunctionOutputPin (GPIO_PORT_UCA0TXD、GPIO_PIN_UCA0TXD、GPIO_FUNCTION_UCA0TXD);
GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_UCA0RXD、GPIO_PIN_UCA0RXD、GPIO_FUNCTION_UCA0RXD);

// ADC 引脚
GPIO_setAsInputPin (GPIO_PORT_P8、GPIO_PIN0);
GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P8、GPIO_PIN0、GPIO_PRIMARY_MODULE_Function);

PM5CTL0 &=~LOCKLPM5;

void Init_UART (){
UCA0CTLW0 |= UCSWRST;

UCA0CTLW0 |= UCSSEL_SMCLK;
UCA0BRW = 104;
UCA0MCTLW |= UCOS16 | UCBRF_2 | 0xD600;

UCA0CTLW0 &=~UCSWRST;
UCA0IE |= UCRXIE;

void configurateadc (){
ADC_INIT (ADC_base、ADC_SAMPLEHOLDSOURCE_SC、ADC_CLOCKSOURCE_ADCOSC、ADC_CLOCKDIVIDER_1);
ADC_ENABLE (ADC_base);
ADC_setupSamplingTimer (ADC_base、ADC_CYCLEHOLD_256_cycles、ADC_MULTIPLESAMPLESDISABLE);
ADC_setResolution (ADC_base、ADC_resolution_10BIT);
ADC_configureMemory (ADC_base、ADC_INPUT_A8、ADC_VREFPOS_AVCC、ADC_VREFNEG_AVSS);
_delay_cycles (5000);

int main (空)

WDT_A_HOLD (WDT_A_base);

init_PIN();
initClockTo16MHz();
init_uart();

configurateADC();

while (1){
ADC_startConversion (ADC_base、ADC_SINGLECHANNEL);
adcInt = ADC_getResults (ADC_base);

if (readCommand[0]='s'&& readCommand[1]='e'&& readCommand[2]='t'){
//pars 命令并获取温度
//命令结构:set:12
//当12是摄氏度时

memset (readCommand、0、sizeof (readCommand));
FREE (温度);

}否则、if (readCommand[0]='g'&& readCommand[1]='e'&& readCommand[2]='t'){
//将温度发送到串行

sendTemp();
memset (readCommand、0、sizeof (readCommand));

FREE (温度);

//
//\/ UART 中断例程\/
//

#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));
strcat (readCommand、(char *) UCA0RXBUF);
__no_operation();
中断;
案例 USCI_UART_UCTXIFG:中断;
案例 USCI_UART_UCSTTIFG:中断;
案例 USCI_UART_UCTXCPTIFG:中断;
默认值:break;

这些都是使用的引信。 CS 16MHz、BoundRate 9600 bit/s