msp430fr6989 uart问题

设置MSP430FR6989的P2.0和P2.1口作为uart的串行输入输出口,应怎么与电脑连接, 是用RX232模块来连接吗?顺便看一下这个程序有没有问题

#include <msp430.h>

#include <driverlib.h>

 

/*

 * main.c

 */

 

uint8_t ReceiveData = 0;   //定义接收数据变量

 

int main(void) {

    WDTCTL = WDTPW | WDTHOLD;    // Stop watchdog timer

        

    PM5CTL0 &= ~LOCKLPM5;       //Unlock LPM5

 

    //设置内部DCO频率为1MHz

    CS_setDCOFreq(CS_DCORSEL_0,CS_DCOFSEL_0);

    //设置我们的SMCLK时钟源为来自DCO,其他的时钟我们都默认不改变

    CS_initClockSignal(CS_SMCLK,CS_DCOCLK_SELECT,CS_CLOCK_DIVIDER_1);

 

    //设置GPIO口作为复用输出端口

    GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P2,GPIO_PIN1,GPIO_SECONDARY_MODULE_FUNCTION);

    GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P2,GPIO_PIN0,GPIO_SECONDARY_MODULE_FUNCTION);

 

    EUSCI_A_UART_initParam EUSCI_A_UART_initStucture = {0};

    //选择时钟源,这里我们选择的是SMCLK

    EUSCI_A_UART_initStucture.selectClockSource = EUSCI_A_UART_CLOCKSOURCE_SMCLK;

    //同样这里可以设置时钟的分频值,设置的为是UCBRx这个的值,对应表格就是6,直接写数字6也是可以的

    EUSCI_A_UART_initStucture.clockPrescalar = 6;

    //选择模式,是低频率模式,还是过采样模式,在这里就是设置UCOS16这个位,假设我们这里使用的过采样模式,即设置为1

    EUSCI_A_UART_initStucture.overSampling = EUSCI_A_UART_OVERSAMPLING_BAUDRATE_GENERATION;

    //这里就是设置我们UCBRFx这几个标志位,查表得这个值为8

    EUSCI_A_UART_initStucture.firstModReg = 8;

    // 这里设置的是我们的UCBRSx这几个标志位,查表得这个值为0x20

    EUSCI_A_UART_initStucture.secondModReg = 0x20;

 

    //这里设置的是校验位,分为奇校验和偶校验或者没有校验位,这里我们配置的没有校验位

    EUSCI_A_UART_initStucture.parity = EUSCI_A_UART_NO_PARITY;

    //这里配置的最低位有效还是最高位有效,具体解释看下面

    //EUSCI_A_UART_initStucture.msborLsbFirst = EUSCI_A_UART_LSB_FIRST;

    //设置停止位的个数,这里我们设置为1位停止位

    EUSCI_A_UART_initStucture.numberofStopBits = EUSCI_A_UART_ONE_STOP_BIT;

    //这里选择的我们手工的配置的UART模式,它还有很多其他的模式,自动波特率检测等等。

    EUSCI_A_UART_initStucture.uartMode = EUSCI_A_UART_MODE;

 

    EUSCI_A_UART_init(EUSCI_A0_BASE,&EUSCI_A_UART_initStucture);

 

    EUSCI_A_UART_enable(EUSCI_A0_BASE);

    //这里我们开启UART的中断,在中断中进行相关的数据接收

    EUSCI_A_UART_enableInterrupt(EUSCI_A0_BASE,EUSCI_A_UART_RECEIVE_INTERRUPT);

 

    __enable_interrupt();

         while(1);

}

 

#pragma vector =  USCI_A0_VECTOR;

__interrupt void UART_ISR(void)

{

         ReceiveData = EUSCI_A_UART_receiveData(EUSCI_A0_BASE);

         EUSCI_A_UART_transmitData(EUSCI_A0_BASE,ReceiveData);

}

 

 

 

1 个回复