*********************************************************************************************************/
#include "LPC17xx.h" /* LPC17xx外设寄存器 */
/********************************************************************************************************
变量与宏定义
*********************************************************************************************************/
extern uint32_t SystemFrequency; /* Clock Variable 时钟变量 */
#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 < 5000; i++);
}
}
/*********************************************************************************************************
** Function name: uartInit
** Descriptions: 串口初始化,设置为8位数据位,1位停止位,无奇偶校验,波特率为9600
** input parameters: 无
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
void uart0Init (void)
{
uint16_t usFdiv;
LPC_PINCON->PINSEL0 |= (0x01 << 4)|(0x01 << 6); /* 设置P0.2(TXD0)为串口,P0.3(RXD0)为串口 */
LPC_SC->PCONP = LPC_SC->PCONP|0x08; /* 打开串口0功能 */
LPC_UART0->LCR = 0x83; /* 设置串口数据格式,8位字符长度,1个停止位,无校验,
使能访问除数锁存器 ,设定波特率 */
usFdiv = (SystemFrequency/4 / 16) / UART_BPS; /* 设置波特率 */
LPC_UART0->DLM = usFdiv / 256; /*除数高8位,没有小数点情况 */
LPC_UART0->DLL = usFdiv % 256; /*除数低8位,没有小数点情况 */
LPC_UART0->LCR = 0x03; /* 锁定波特率 */
LPC_UART0->FCR = 0x06; /* 复位TxFIFO和RXFIFIO */
}
/*********************************************************************************************************
** Function name: uart0GetByte
** Descriptions: 从串口接收1字节数据,使用查询方式接收
** input para
meters: 无
** output parameters: 无
** Returned value: ucRcvData: 接收到的数据
*********************************************************************************************************/
uint8_t uart0GetByte (void) //查询法
{
uint8_t ucRcvData;
while ((LPC_UART0->LSR & 0x01) == 0); //UnLSR[0] 该位是否置一,决定能否从FIFO中读取数据
//UnLSR[0]为0 :RBR为空 ; UnLSR[0]为1:RBR中包含有效数据,从FIFO中读走所有数据后,恢复为0
ucRcvData = LPC_UART0->RBR; //UnRBR为接收缓存寄存器 /* 读取数据 */
return (ucRcvData);
}
/*********************************************************************************************************
** Function name: uart0GetStr
** Descriptions: 串口接收字符串
** input parameters: puiStr: 指向接收数据数组的指针
** ulNum: 接收数据的个数
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
void uart0GetStr (uint8_t *puiStr, uint32_t ulNum)
{
for (; ulNum > 0; ulNum--) {
*puiStr++ = uart0GetByte ();
}
}
/*********************************************************************************************************
** Function name: uart0SendByte
** Descriptions: 向串口发送子节数据,并等待数据发送完成,使用查询方式
** input parameters: ucDat: 要发送的数据
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
void uart0SendByte (uint8_t ucDat)
{
LPC_UART0->THR = ucDat; //UnTHR为发送缓存寄存器 /* 写入数据 * /
while ((LPC_UART0->LSR & 0x40) == 0); // UnLSR[6] 为0 时,表明UnTHR包含数据;
} // UnLSR[6]为1时,则UnTHR已空 /* 等待数据发送完毕*/
/*********************************************************************************************************
** Function name: uart0SendStr
** Descriptions: 向串口发送字符串
** input parameters: puiStr: 要发送的字符 串指针
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
void uart0SendStr (uint8_t const *puiStr, uint32_t len)
{
while (len -- > 0) {
uart0SendByte (*puiStr++);
}
}
/*********************************************************************************************************
** Function name: main
** Descriptions: 串口查询方式接收发送数据。
** 全速运行程序用串口调试软件发送字符串,并在接收窗口查看返回数据,波特率为9600,
** 上位机一次需要发送20个字符。
** input parameters: 无
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
int main (void)
{
uint8_t ucBuf[30];
SystemInit(); /* 初始化目标板 */
uart0Init (); /* 串口初始化 */
while (1){
uart0GetStr(ucBuf, 20); /* 从串口接收字符串 */
delayNS(1);
uart0SendStr(ucBuf, 20); /* 向串口发送字符串 */
delayNS(1);
}
}
/*********************************************************************************************************
End Of File
*********************************************************************************************************/
LPC1768之串口UART0
最新推荐文章于 2023-08-10 08:30:21 发布