打印

使用最快的速度开发一款和单片机串口连接的上位机!

[复制链接]
1147|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
沙发
wangjiahao88|  楼主 | 2017-2-25 15:05 | 只看该作者
数据1界面

1.png (142.55 KB )

1.png

使用特权

评论回复
板凳
wangjiahao88|  楼主 | 2017-2-25 15:06 | 只看该作者
数据2界面

2.png (150.33 KB )

2.png

使用特权

评论回复
地板
wangjiahao88|  楼主 | 2017-2-25 15:07 | 只看该作者
数据3界面

3.png (173.97 KB )

3.png

使用特权

评论回复
5
wangjiahao88|  楼主 | 2017-2-25 15:09 | 只看该作者
以上是运行界面,下面是开发界面、单片机程序、

使用特权

评论回复
6
wangjiahao88|  楼主 | 2017-2-25 15:11 | 只看该作者
开发界面1

1.png (281.03 KB )

1.png

使用特权

评论回复
7
wangjiahao88|  楼主 | 2017-2-25 15:12 | 只看该作者
开发界面2

2.png (296.84 KB )

2.png

使用特权

评论回复
8
wangjiahao88|  楼主 | 2017-2-25 15:12 | 只看该作者
开发界面3

3.png (308.43 KB )

3.png

使用特权

评论回复
9
wangjiahao88|  楼主 | 2017-2-25 15:14 | 只看该作者
界面程序

4.png (381.84 KB )

4.png

使用特权

评论回复
10
wangjiahao88|  楼主 | 2017-2-25 15:16 | 只看该作者
软件代码

代码.png (401.65 KB )

代码.png

使用特权

评论回复
11
wangjiahao88|  楼主 | 2017-2-25 15:17 | 只看该作者
由此可见,软件代码极其简单。

大多数电子工程师的计算机编程并不是特别精通的情况下,可以快速使用Labview来搞开发。

使用特权

评论回复
12
wangjiahao88|  楼主 | 2017-2-25 15:17 | 只看该作者
#include <stdio.h>
#include "M0518.h"

#define PLL_CLOCK       50000000


/*---------------------------------------------------------------------------------------------------------*/
/* Define Function Prototypes                                                                              */
/*---------------------------------------------------------------------------------------------------------*/
void SYS_Init(void);
void UART0_Init(void);
void AdcSingleCycleScanModeTest(void);

unsigned int T0_cnt=0;
unsigned int T0_flag=0;

int32_t  i32ConversionData0;
int32_t  i32ConversionData1;
int32_t  i32ConversionData2;

void SYS_Init(void)
{
    /*---------------------------------------------------------------------------------------------------------*/
    /* Init System Clock                                                                                       */
    /*---------------------------------------------------------------------------------------------------------*/

    /* Enable Internal RC 22.1184MHz clock */
    CLK_EnableXtalRC(CLK_PWRCON_OSC22M_EN_Msk);

    /* Waiting for Internal RC clock ready */
    CLK_WaitClockReady(CLK_CLKSTATUS_OSC22M_STB_Msk);

    /* Switch HCLK clock source to Internal RC and HCLK source divide 1 */
    CLK_SetHCLK(CLK_CLKSEL0_HCLK_S_HIRC, CLK_CLKDIV_HCLK(1));

    /* Enable external XTAL 12MHz clock */
    CLK_EnableXtalRC(CLK_PWRCON_XTL12M_EN_Msk);

    /* Waiting for external XTAL clock ready */
    CLK_WaitClockReady(CLK_CLKSTATUS_XTL12M_STB_Msk);

    /* Set core clock as PLL_CLOCK from PLL */
    CLK_SetCoreClock(PLL_CLOCK);

    /* Enable UART module clock */
    CLK_EnableModuleClock(UART0_MODULE);
    CLK_EnableModuleClock(TMR0_MODULE);

    /* Enable ADC module clock */
    CLK_EnableModuleClock(ADC_MODULE);

    /* Select UART module clock source */
    CLK_SetModuleClock(UART0_MODULE, CLK_CLKSEL1_UART_S_PLL, CLK_CLKDIV_UART(1));
    CLK_SetModuleClock(TMR0_MODULE, CLK_CLKSEL1_TMR0_S_HXT, 0);

    /* ADC clock source is 22.1184MHz, set divider to 7, ADC clock is 22.1184/7 MHz */
    CLK_SetModuleClock(ADC_MODULE, CLK_CLKSEL1_ADC_S_HIRC, CLK_CLKDIV_ADC(7));

    /*---------------------------------------------------------------------------------------------------------*/
    /* Init I/O Multi-function                                                                                 */
    /*---------------------------------------------------------------------------------------------------------*/

    /* Set GPB multi-function pins for UART0 RXD and TXD */
    SYS->GPB_MFP &= ~(SYS_GPB_MFP_PB0_Msk | SYS_GPB_MFP_PB1_Msk);
    SYS->GPB_MFP |= SYS_GPB_MFP_PB0_UART0_RXD | SYS_GPB_MFP_PB1_UART0_TXD;

    /* Disable the GPA0 - GPA3 digital input path to avoid the leakage current. */
    GPIO_DISABLE_DIGITAL_PATH(PA, 0x07);

    /* Configure the GPA0 - GPA3 ADC analog input pins */
    SYS->GPA_MFP &= ~(SYS_GPA_MFP_PA0_Msk  |SYS_GPA_MFP_PA1_Msk  | SYS_GPA_MFP_PA2_Msk) ;
    SYS->GPA_MFP |= SYS_GPA_MFP_PA0_ADC0  | SYS_GPA_MFP_PA1_ADC1| SYS_GPA_MFP_PA2_ADC2 ;

}

/*---------------------------------------------------------------------------------------------------------*/
/* Init UART                                                                                               */
/*---------------------------------------------------------------------------------------------------------*/
void UART0_Init()
{
    /* Reset IP */
    SYS_ResetModule(UART0_RST);

    /* Configure UART0 and set UART0 Baudrate */
    UART_Open(UART0, 9600);
}

void TIM0_Init()
{
    TIMER_Open(TIMER0, TIMER_PERIODIC_MODE, 1000);
    TIMER_EnableInt(TIMER0);
    NVIC_EnableIRQ(TMR0_IRQn);
    TIMER_Start(TIMER0);

}

/*---------------------------------------------------------------------------------------------------------*/
/* Function: AdcSingleCycleScanModeTest                                                                    */
/*                                                                                                         */
/* Parameters:                                                                                             */
/*   None.                                                                                                 */
/*                                                                                                         */
/* Returns:                                                                                                */
/*   None.                                                                                                 */
/*                                                                                                         */
/* Description:                                                                                            */
/*   ADC single cycle scan mode test.                                                                      */
/*---------------------------------------------------------------------------------------------------------*/
void AdcSingleCycleScanModeTest()
{

}

void TMR0_IRQHandler(void)
{
    if(TIMER_GetIntFlag(TIMER0) == 1)
    {
        /* Clear Timer0 time-out interrupt flag */
        TIMER_ClearIntFlag(TIMER0);

        T0_cnt++;
        if(T0_cnt>50)
        {
            T0_cnt=0;
            T0_flag=1;
        }
    }
}

使用特权

评论回复
13
wangjiahao88|  楼主 | 2017-2-25 15:19 | 只看该作者
/*---------------------------------------------------------------------------------------------------------*/
/* MAIN function                                                                                           */
/*---------------------------------------------------------------------------------------------------------*/

int main(void)
{

    /* Unlock protected registers */
    SYS_UnlockReg();

    /* Init System, IP clock and multi-function I/O */
    SYS_Init();

    /* Lock protected registers */
    SYS_LockReg();

    /* Init UART0 for printf */
    UART0_Init();

    TIM0_Init();

    GPIO_SetMode(PA,BIT9,GPIO_PMD_OUTPUT);
    /*---------------------------------------------------------------------------------------------------------*/
    /* SAMPLE CODE                                                                                             */
    /*---------------------------------------------------------------------------------------------------------*/

//    printf("\nSystem clock rate: %d Hz", SystemCoreClock);

        /* Set the ADC operation mode as single-cycle, input mode as single-end and
             enable the analog input channel 0, 1, 2 and 3 */
        ADC_Open(ADC, ADC_ADCR_DIFFEN_SINGLE_END, ADC_ADCR_ADMD_SINGLE_CYCLE, 0x07);

        /* Power on ADC module */
        ADC_POWER_ON(ADC);



    while(1)
    {
        /* Clear the A/D interrupt flag for safe */
        ADC_CLR_INT_FLAG(ADC, ADC_ADF_INT);

        /* Start A/D conversion */
        ADC_START_CONV(ADC);

        /* Wait conversion done */
        while(!ADC_GET_INT_FLAG(ADC, ADC_ADF_INT));

        i32ConversionData0 = ADC_GET_CONVERSION_DATA(ADC, 0);
        i32ConversionData1 = ADC_GET_CONVERSION_DATA(ADC, 1);
        i32ConversionData2 = ADC_GET_CONVERSION_DATA(ADC, 2);

        if(T0_flag==1)
        {
            T0_flag=0;
            PA9=~PA9;
            printf("$ADC,%d,%d,%d,\r\n", i32ConversionData0, i32ConversionData1,i32ConversionData2);
        }

    }

}

使用特权

评论回复
14
wangjiahao88|  楼主 | 2017-2-25 15:19 | 只看该作者
希望各位 经常搞labview 与单片机开发的 可以借鉴一下!

我们一起探讨。

多谢支持!

使用特权

评论回复
15
l科科1987| | 2017-2-25 19:49 | 只看该作者
labview确实开发快,但是有些处理,不是图形就可以搞定的。

使用特权

评论回复
16
dongbaohui| | 2017-2-25 20:09 | 只看该作者
我觉得QT好,兼容性比较强。

使用特权

评论回复
17
wangjiahao88|  楼主 | 2017-4-7 14:08 | 只看该作者
QT 还是不如labview吧!感觉 labview 开发迅速

使用特权

评论回复
18
plmplmokn| | 2017-10-14 18:51 | 只看该作者
不错,感谢楼主分享

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

473

主题

7517

帖子

30

粉丝