主题中讨论的其他器件: 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