[MSP-EXP430G2ET] [MSP430G2 LaunchPad入门系列] 第7篇 - 串行通信

[复制链接]

2

主题

17

帖子

96

积分

一粒轻沙

Rank: 1

积分
96
楼主
发表于 2019-8-1 15:06:16   只看该作者
Shuyang 发表于 2019-3-5 13:45
7.3 USCI的UART模式

MSP430的串行通信外设叫做USCI(universal serialcommunication interface)。USCI又 ...

为什么前面都有例程,到这里就没有了呢?最关键的部分没了?

2

主题

17

帖子

96

积分

一粒轻沙

Rank: 1

积分
96
沙发
发表于 2019-8-2 08:55:01   只看该作者
本帖最后由 木叶留春 于 2019-8-2 08:56 编辑
Shuyang 发表于 2019-8-1 19:04
楼上贴了例程
也可以参照mspware里的例程

void main(void)
{
    WDT_A_hold(WDT_A_BASE);
      

        CS_setDCOFreq(CS_DCORSEL_1, CS_DCOFSEL_3 );//本来想在这里设置16Mhz的,但是8m以下才能正常工作,16m时钟系统直接崩溃了,我也郁闷了半天,所以设成了8m的!
       CS_initClockSignal(CS_SMCLK,CS_DCOCLK_SELECT,CS_CLOCK_DIVIDER_1);
       CS_initClockSignal(CS_MCLK,CS_DCOCLK_SELECT,CS_CLOCK_DIVIDER_1);


//      CS_setDCOFreq(CS_DCORSEL_1, CS_DCOFSEL_4 );
       PM5CTL0 &= ~LOCKLPM5;                           //解锁单片机io口
//
//
// //   CS_bypassHFXT();
//    CS_setDCOFreq(CS_DCORSEL_1 ,CS_DCOFSEL_4 );     //设置系统时钟16m
//    CS_setExternalClockSource(32768,0);             //辅助时钟
//
//
//    delay(1);
//
//    CS_initClockSignal(CS_MCLK,CS_DCOCLK_SELECT,CS_CLOCK_DIVIDER_1 );//配置系统时钟
//    CS_initClockSignal(CS_SMCLK,CS_DCOCLK_SELECT,CS_CLOCK_DIVIDER_1 );//配置辅助时钟
    CS_turnOnSMCLK();
////    CS_initClockSignal(CS_MCLK,CS_DCOCLK_SELECT,CS_CLOCK_DIVIDER_1 );//配置系统时钟


    Init_LCD();
    display(CS_getSMCLK()/100);

//    CS_setExternalClockSource(32768,0);             //设置aclk时钟
                                                               //串口io口初始化
    GPIO_setAsPeripheralModuleFunctionInputPin(
        GPIO_PORT_P4,
        GPIO_PIN2 + GPIO_PIN3,
        GPIO_SECONDARY_MODULE_FUNCTION
        );
    GPIO_setAsPeripheralModuleFunctionInputPin(
    GPIO_PORT_P2,
    GPIO_PIN0 + GPIO_PIN1,
    GPIO_SECONDARY_MODULE_FUNCTION
    );











    EUSCI_A_UART_initParam param = {0};
    //115200
    param.selectClockSource = EUSCI_A_UART_CLOCKSOURCE_SMCLK;
    param.clockPrescalar = 4;
    param.firstModReg = 3;
    param.secondModReg = 5;
    param.parity = EUSCI_A_UART_NO_PARITY;
    param.msborLsbFirst = EUSCI_A_UART_LSB_FIRST;
    param.numberofStopBits = EUSCI_A_UART_ONE_STOP_BIT;
    param.uartMode = EUSCI_A_UART_MODE;
    param.overSampling = 1;

    EUSCI_A_UART_init(EUSCI_A0_BASE, ¶m);

    EUSCI_A_UART_enable(EUSCI_A0_BASE);

    EUSCI_A_UART_clearInterrupt(EUSCI_A0_BASE,EUSCI_A_UART_RECEIVE_INTERRUPT_FLAG|EUSCI_A_UART_TRANSMIT_INTERRUPT_FLAG);

    EUSCI_A_UART_enableInterrupt(EUSCI_A0_BASE,EUSCI_A_UART_RECEIVE_INTERRUPT_FLAG|EUSCI_A_UART_TRANSMIT_INTERRUPT_FLAG);

    __enable_interrupt();



    GPIO_setAsOutputPin(GPIO_PORT_P1,GPIO_PIN0);



//
//    Init_LCD();
//    displayScrollText("WELCOME TO THE FR6989 LAUNCHPAD");
    for(;;)
    {
        GPIO_setOutputHighOnPin(GPIO_PORT_P1,GPIO_PIN0);
        delay(100);
        GPIO_setOutputLowOnPin(GPIO_PORT_P1,GPIO_PIN0);
        delay(100);
        EUSCI_A_UART_transmitData(EUSCI_A0_BASE,'a');
    }
}

#pragma vector=USCI_A0_VECTOR
__interrupt void uarl(void)
{
    uint8_t sta;
    uint8_t dat;
//    sta=EUSCI_A_UART_getInterruptStatus(EUSCI_A0_BASE,EUSCI_A_UART_TRANSMIT_COMPLETE_INTERRUPT_FLAG);
//    EUSCI_A_UART_clearInterrupt(EUSCI_A0_BASE,EUSCI_A_UART_RECEIVE_INTERRUPT_FLAG|EUSCI_A_UART_TRANSMIT_INTERRUPT_FLAG);
    if(EUSCI_A_UART_getInterruptStatus(EUSCI_A0_BASE,EUSCI_A_UART_RECEIVE_INTERRUPT_FLAG)==EUSCI_A_UART_RECEIVE_INTERRUPT_FLAG)
    {

        EUSCI_A_UART_clearInterrupt(EUSCI_A0_BASE,EUSCI_A_UART_RECEIVE_INTERRUPT_FLAG);





        dat=EUSCI_A_UART_receiveData(EUSCI_A0_BASE);
        EUSCI_A_UART_transmitData(EUSCI_A0_BASE,dat);

    }
    if(EUSCI_A_UART_getInterruptStatus(EUSCI_A0_BASE,EUSCI_A_UART_TRANSMIT_INTERRUPT_FLAG)==EUSCI_A_UART_TRANSMIT_INTERRUPT_FLAG)
    {
        EUSCI_A_UART_clearInterrupt(EUSCI_A0_BASE,EUSCI_A_UART_TRANSMIT_INTERRUPT_FLAG);



    }


}

这是我写的,但是就是串口不出数据,这是哪里的问题?求大神指导
快速回复 返回顶部 返回列表