发 帖  

MSP430串口在接收到电脑发送数据后,再发送给电脑时会多两个固定的字节。

2257
2019-5-27 09:48:09   评论 分享淘帖 邀请回答 举报
3个回答
2019-5-27 09:48:10 3 评论

举报

3 条评论
  • 2019-5-27 16:10

    调试的时候,接收到的就有

    人中狼 回复 huyu: 2019-5-27 16:13

    最好把相关部分的程序贴上来

    huyu 回复 人中狼: 2019-5-27 16:42

    #include "driverlib.h"
    //#include "Board.h"

    uint16_t i;
    uint8_t RXData = 0, TXData = 0;
    uint8_t check = 0;

    void main(void)
    {
        //Stop Watchdog Timer
        WDT_A_hold(WDT_A_BASE);

        //Set ACLK = REFOCLK with clock divider of 1
        CS_initClockSignal(CS_ACLK,CS_REFOCLK_SELECT,CS_CLOCK_DIVIDER_1);
        //Set SMCLK = DCO with frequency divider of 1
        CS_initClockSignal(CS_SMCLK,CS_DCOCLKDIV_SELECT,CS_CLOCK_DIVIDER_1);
        //Set MCLK = DCO with frequency divider of 1
        CS_initClockSignal(CS_MCLK,CS_DCOCLKDIV_SELECT,CS_CLOCK_DIVIDER_1);


        //Configure UART pins
        GPIO_setAsPeripheralModuleFunctionInputPin(
            GPIO_PORT_P1,
            GPIO_PIN6 + GPIO_PIN7,
            GPIO_PRIMARY_MODULE_FUNCTION
            );

        /*
         * Disable the GPIO power-on default high-impedance mode to activate
         * previously configured port settings
         */
        PMM_unlockLPM5();

        //Configure UART
        //SMCLK = 1MHz, Baudrate =9600
        //UCBRx =6, UCBRFx = 8, UCBRSx = 17, UCOS16 = 1
        EUSCI_A_UART_initParam param = {0};
        param.selectClockSource = EUSCI_A_UART_CLOCKSOURCE_SMCLK;
        param.clockPrescalar = 6;
        param.firstModReg = 8;
        param.secondModReg = 17;
        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 = EUSCI_A_UART_OVERSAMPLING_BAUDRATE_GENERATION;

        if (STATUS_FAIL == EUSCI_A_UART_init(EUSCI_A0_BASE, &param)) {
            return;
        }

        EUSCI_A_UART_enable(EUSCI_A0_BASE);

        EUSCI_A_UART_clearInterrupt(EUSCI_A0_BASE,
            EUSCI_A_UART_RECEIVE_INTERRUPT);

        // Enable USCI_A0 RX interrupt
        EUSCI_A_UART_enableInterrupt(EUSCI_A0_BASE,
            EUSCI_A_UART_RECEIVE_INTERRUPT);

        // Enable global interrupts
        __enable_interrupt();

        EUSCI_A_UART_transmitData(EUSCI_A0_BASE, TXData);

        while (1)
        {
    //         Increment TX data
            TXData = TXData+1;
    //         Load data onto buffer
            EUSCI_A_UART_transmitData(EUSCI_A0_BASE, TXData);
            while(check != 1);
            check = 0;
        }
    }
    //******************************************************************************
    //
    //This is the USCI_A0 interrupt vector service routine.
    //
    //******************************************************************************
    #if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
    #pragma vector=USCI_A0_VECTOR
    __interrupt
    #elif defined(__GNUC__)
    __attribute__((interrupt(USCI_A0_VECTOR)))
    #endif
    void EUSCI_A0_ISR(void)
    {
        switch(__even_in_range(UCA0IV,USCI_UART_UCTXCPTIFG))
        {
            case USCI_NONE: break;
            case USCI_UART_UCRXIFG:
          RXData = EUSCI_A_UART_receiveData(EUSCI_A0_BASE);


                EUSCI_A_UART_transmitData(EUSCI_A0_BASE, RXData);
                // Check value
                if(!(RXData == TXData))
                {
                    while(1);
                }
                check =1;
             //   UCA0IFG = 0;
                break;
           case USCI_UART_UCTXIFG: break;
           case USCI_UART_UCSTTIFG: break;
           case USCI_UART_UCTXCPTIFG: break;
        }
    }

2019-5-27 20:08:39 3 评论

举报

3 条评论
  • 2019-5-28 09:29

    我把这句给屏蔽了,比如发送个01 会返回01 0D 0A 然后0D 0A是固定返回的值

    韩丽 回复 huyu: 2019-12-10 14:27

    把串口调试助手里的发送新行之类的勾去掉应该就好了

  • 2019-5-28 09:38

    上面我发了个直接用数组接收RXData的值,然后这个板子自己做得,没有外部晶振,会不会是没有晶振的问题呢

评分

参与人数 1积分 +3 收起 理由
1021587537 + 3

查看全部评分

2019-5-28 10:50:30 4 评论

举报

4 条评论

撰写答案

你正在撰写答案

如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。

您需要登录后才可以回帖 登录/注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
快速回复 返回顶部 返回列表
关注微信公众号

电子发烧友网

电子发烧友论坛

社区合作
刘勇
联系电话:15994832713
邮箱地址:liuyong@huaqiu.com
社区管理
elecfans短短
微信:elecfans_666
邮箱:users@hauqiu.com
关闭

站长推荐 上一条 /5 下一条

快速回复 返回顶部 返回列表