Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2007545
  • 博文数量: 356
  • 博客积分: 8284
  • 博客等级: 中将
  • 技术积分: 4580
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-15 20:25
个人简介

天行健,君子以自强不息

文章分类

全部博文(356)

文章存档

2018年(1)

2016年(4)

2015年(13)

2014年(14)

2013年(2)

2012年(25)

2011年(43)

2010年(65)

2009年(189)

分类: C/C++

2011-11-20 14:41:00

1、串口发送
注:用的是串口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) |
0

上一篇:ARM7TDMI基本操作

下一篇:ADC0(P0.23)

给主人留下些什么吧!~~