⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 LPC1700在线升级方案V1.00
💻 C
字号:
/****************************************Copyright (c)****************************************************
**                            Guangzhou ZLGMCU Development Co., LTD
**
**                                 http://www.zlgmcu.com
**
**--------------File Info---------------------------------------------------------------------------------
** File name:           main.c
** Last modified Date:  2010-09-28
** Last Version:        V1.0
** Descriptions:        The main() function example template
**
**--------------------------------------------------------------------------------------------------------
** Created by:          Lan wuqiang
** Created date:        2010-09-28
** Version:             V1.00
** Descriptions:        整理模板,添加用户应用程序
**
**--------------------------------------------------------------------------------------------------------
** Modified by:         
** Modified date:       
** Version:             
** Descriptions:        
**
**--------------------------------------------------------------------------------------------------------
** Modified by:        
** Modified date:      
** Version:            
** Descriptions:       
**
** Rechecked by:
*********************************************************************************************************/
#include "LPC17xx.h"                                                    /* LPC17xx外设寄存器            */

extern volatile uint8_t       GucRcvNew;                                /* 串口接收新数据的标志         */
extern          uint8_t       GucRcvBuf[10] ;                           /* 串口接收数据缓冲区           */
extern          uint32_t      GulNum;                                   /* 串口接收数据的个数           */

#define UART_BPS              115200                                    /* 串口通信波特率               */
volatile  uint8_t GucRcvNew;                                            /* 串口接收新数据的标志         */
uint8_t           GucRcvBuf[10] ;                                       /* 串口接收数据缓冲区           */
uint32_t          GulNum;                                               /* 串口接收数据的个数           */
extern uint32_t SystemFrequency;
/*********************************************************************************************************
** Function name:       delayNS
** Descriptions:    	延时函数
** input parameters:    uiDly:   值越大,延时时间越长
** output parameters:   无
** Returned value:      无
*********************************************************************************************************/
void delayNS (uint32_t ulDly)
{
    uint32_t i;
    
    for (; ulDly > 0; ulDly--) {
        for(i = 0; i < 50000; i++);
    }
}

 /*********************************************************************************************************
* Function Name:        UART0_IRQHandler
* Description:          UART0 中断处理函数
* Input:                None
* Output:               None
* Return:               None
*********************************************************************************************************/
void UART0_IRQHandler (void)
{
    GulNum = 0;
       
    while ((LPC_UART0->IIR & 0x01) == 0){                               /*  判断是否有中断挂起          */
        switch (LPC_UART0->IIR & 0x0E){                                 /*  判断中断标志                */
        
            case 0x04:                                                  /*  接收数据中断                */
                GucRcvNew = 1;                                          /*  置接收新数据标志            */
                for (GulNum = 0; GulNum < 8; GulNum++){                 /*  连续接收8个字节             */
                GucRcvBuf[GulNum] = LPC_UART0->RBR;
                }
                break;
            
            case 0x0C:                                                  /*  字符超时中断                */
                GucRcvNew = 1;
                while ((LPC_UART0->LSR & 0x01) == 0x01){                /*  判断数据是否接收完毕        */ 
                    GucRcvBuf[GulNum] = LPC_UART0->RBR;
                    GulNum++;
                }
                break;
                
            default:
                break;
        }
    } 
}

/*********************************************************************************************************
** Function name:     	uartInit
** Descriptions:	    串口初始化,设置为8位数据位,1位停止位,无奇偶校验,波特率为9600
** input parameters:    无
** output parameters:   无
** Returned value:      无
*********************************************************************************************************/
void uartInit (void)
{
    uint16_t ulFdiv;

    LPC_PINCON->PINSEL0 |= (0x01 << 4)|(0x01 << 6); 
    LPC_SC->PCONP |= 0x08;                                              /* 打开串口0功能                */    
    LPC_UART0->LCR  = 0x83;                                             /*  允许设置波特率              */
    ulFdiv = (SystemFrequency / 4 / 16) / UART_BPS;                     /*  设置波特率                  */
    LPC_UART0->DLM  = ulFdiv / 256;
    LPC_UART0->DLL  = ulFdiv % 256; 
    LPC_UART0->LCR  = 0x03;                                             /*  锁定波特率                  */
    LPC_UART0->FCR  = 0x87;                                             /*  使能FIFO,设置8个字节触发点 */
    NVIC_EnableIRQ(UART0_IRQn);
    NVIC_SetPriority(UART0_IRQn, 5);
    LPC_UART0->IER  = 0x01;                                             /*  使能接收中断                */
}

/*********************************************************************************************************
** Function name:	    uart0SendByte
** Descriptions:	    向串口发送子节数据,并等待数据发送完成,使用查询方式
** input parameters:    uiDat:   要发送的数据
** output parameters:   无
** Returned value:      无
*********************************************************************************************************/
void uart0SendByte (uint8_t ucDat)
{
    LPC_UART0->THR = ucDat;                                             /*  写入数据                    */
    while ((LPC_UART0->LSR & 0x20) == 0);                               /*  等待数据发送完毕            */
}

/*********************************************************************************************************
** Function name:	    uart0SendStr
** Descriptions:	    向串口发送字符串
** input parameters:    pucStr:  要发送的字符串指针
**                      ulNum:   要发送的数据个数
** output parameters:   无
** Returned value:      无
*********************************************************************************************************/
void uart0SendStr (uint8_t const *pucStr, uint32_t ulNum)
{
    uint32_t i;
    
    for (i = 0; i < ulNum; i++) {                                       /* 发送指定个字节数据            */
        uart0SendByte(*pucStr++);
    }
}

/*********************************************************************************************************
** Function name:       main
** Descriptions:        以中断方式接收上位机数据并将接收的数据回送给上位机。短接JP14,借助串口调试软件,
**                      并设置波特率为9600,8位数据位,1位停止位,注意不要选中"HEX显示"
** input parameters:    无
** output parameters:   无
** Returned value:      无
*********************************************************************************************************/
uint8_t num[40] = "Upgrade application is running!";
int main (void)
{
    SystemInit();                                                       /* 系统初始化                   */
    GucRcvNew = 0;
    uartInit ();                                                        /* 串口初始化                   */
    uart0SendStr(num,0x20);
    while (1){
// 				    uart0SendStr(num,0x20);

        if (GucRcvNew == 1){                                            /* 判断是否有新数据             */
            GucRcvNew = 0;                                              /* 清除标志                     */
            uart0SendStr (GucRcvBuf, GulNum);                           /* 向串口发送数据               */
        }
    }
}

/*********************************************************************************************************
  End Of File
*********************************************************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -