注:用的是串口1,波特率9600
#include "LPC17xx.h" /* LPC17xx外设寄存器 */
/*********************************************************************************************************
变量与宏定义
*********************************************************************************************************/
volatile uint8_t GucRcvNew; /* 串口接收新数据的标志 */
uint8_t GucRcvBuf[10]; /* 串口接收数据缓冲区 */
uint32_t GulNum; /* 串口接收数据的个数 */
#define UART_BPS 9600 /* 串口通信波特率 */
/*********************************************************************************************************
** Function name: delayNS
** Descriptions: 延时函数
** input parameters: ulDly: 值越大,延时时间越长
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
void delayNS (uint32_t ulDly)
{
uint32_t i;
for (; ulDly > 0; ulDly--) {
for (i = 0; i < 50000; i++);
}
}
/*********************************************************************************************************
** Function name: uart1Init
** Descriptions: 串口初始化,设置为8位数据位,1位停止位,无奇偶校验,波特率为9600
** input parameters: ulDly: 值越大,延时时间越长
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
void uart1Init (void)
{
uint16_t usFdiv;
LPC_PINCON->PINSEL0 |= (1 << 30);
LPC_PINCON->PINSEL1 |= (1 << 0);
LPC_SC->PCONP |= (1<<4); /* 开启串口1功能模块 */
LPC_UART1->LCR = 0x83; /* 允许设置波特率 */
usFdiv = (SystemFrequency / 4 / 16) / UART_BPS; /* 设置波特率 */
LPC_UART1->DLM = usFdiv / 256;
LPC_UART1->DLL = usFdiv % 256;
LPC_UART1->LCR = 0x03; /* 锁定波特率 */
LPC_UART1->FCR = 0x87; /* 使能FIFO,设置8个字节触发点 */
NVIC_EnableIRQ(UART1_IRQn);
NVIC_SetPriority(UART1_IRQn, 5);
LPC_UART1->IER = 0x01; /* 使能接收中断 */
}
/*********************************************************************************************************
** Function name: uart1SendByte
** Descriptions: 向串口发送子节数据,并等待数据发送完成,使用查询方式
** input parameters: ucDat: 要发送的数据
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
void uart1SendByte (uint8_t ucDat)
{
LPC_UART1->THR = ucDat; /* 写入数据 */
while ((LPC_UART1->LSR & 0x20) == 0); /* 等待数据发送完毕 */
}
/*********************************************************************************************************
** Function name: uart1SendStr
** Descriptions: 向串口发送字符串
** input parameters: pucStr: 要发送的字符串指针
** ulNum: 要发送的数据个数
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
void uart1SendStr (uint8_t const *pucStr, uint32_t ulNum)
{
uint32_t i;
for (i = 0; i < ulNum; i++){ /* 发送指定个字节数据 */
uart1SendByte (*pucStr++);
}
}
/*********************************************************************************************************
* Function Name: UART1_IRQHandler
* Description: UART1中断服务函数
* Input: 无
* Output: 无
* Return: 无
*********************************************************************************************************/
void UART1_IRQHandler (void)
{
GulNum = 0;
while ((LPC_UART1->IIR & 0x01) == 0){ /* 判断是否有中断挂起 */
switch (LPC_UART1->IIR & 0x0E){ /* 判断中断标志 */
case 0x04: /* 接收数据中断 */
GucRcvNew = 1; /* 置接收新数据标志 */
for (GulNum = 0; GulNum < 8; GulNum++){ /* 连续接收8个字节 */
GucRcvBuf[GulNum] = LPC_UART1->RBR;
}
break;
case 0x0C: /* 字符超时中断 */
GucRcvNew = 1;
while ((LPC_UART1->LSR & 0x01) == 0x01){ /* 判断数据是否接收完毕 */
GucRcvBuf[GulNum] = LPC_UART1->RBR;
GulNum++;
}
break;
default:
break;
}
}
}
/*********************************************************************************************************
** Function name: main
** Descriptions: 中断方式测试UART1,短接JP20中RXD与P0.16,TXD与P0.15,串口线连接CON10(UART1)
** 波特率为9600
** input parameters: 无
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
int main(void)
{
SystemInit(); /* 系统初始化,切勿删除 */
GucRcvNew = 0;
uart1Init (); /* 串口初始化 */
GulNum=5;
while (1){
{ /* 判断是否有新数据 */
uart1SendStr("LPC1766,我喜欢!\r\n",16);
delayNS(300);
}
}
}
/*********************************************************************************************************
End Of File
*********************************************************************************************************/
效果图:
阅读(6598) | 评论(0) | 转发(0) |