📄 main.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 + -