一 串口配置
Uart.c
#include <stdio.h>
#include "lpc11xx.h"
#pragma import(__use_no_semihosting)
struct __FILE
{
int handle;
};
FILE __stdout;
//改写了fputc,因为printf函数会调用fputc函数,在fputc函数中将字符输出到串口。
int fputc(int ch, FILE *f)
{
LPC_UART->THR = ch;
while((LPC_UART->LSR&0x40)==0);
return 0;
}
/************************************************/
/* 函数功能:初始化UART口 */
/************************************************/
void uartInit(u32 baudrate)
{
u32 DL_value,Clear=Clear; // (用这种方式定义变量解决编译器的Warning)
LPC_SYSCON->SYSAHBCLKCTRL |= (1<<16); // 使能IOCON时钟
LPC_IOCON->PIO1_6 &= ~0x07;
LPC_IOCON->PIO1_6 |= 0x01; //把P1.6脚设置为RXD
LPC_IOCON->PIO1_7 &= ~0x07;
LPC_IOCON->PIO1_7 |= 0x01; //把P1.7脚设置为TXD
LPC_SYSCON->SYSAHBCLKCTRL &= ~(1<<16); // 禁能IOCON时钟
LPC_SYSCON->UARTCLKDIV = 0x1; //时钟分频值为1
LPC_SYSCON->SYSAHBCLKCTRL |= (1<<12);//允许UART时钟
LPC_UART->LCR = 0x83; //8位传输,1个停止位,无几偶校验,允许访问除数锁存器
DL_value = (SystemCoreClock/LPC_SYSCON->UARTCLKDIV/16)/baudrate ; //计算该波特率要求的除数锁存寄存器值
LPC_UART->DLM = DL_value / 256; //写除数锁存器高位值
LPC_UART->DLL = DL_value % 256; //写除数锁存器低位值
LPC_UART->LCR = 0x03; //DLAB置0
LPC_UART->FCR = 0x07; //允许FIFO,清空RxFIFO 和 TxFIFO
Clear = LPC_UART->LSR; //读UART状态寄存器将清空残留状态
}
二 增加LogCat宏定义
在lpc11xx.h文件中增加LogCat宏定义,然后就可以为所欲为的使用LogCat进行打印了。可以在工程的配置中增加一个CODE_DEBUG宏,这样就可以轻松的开关log了。
lpc11xx.h
#ifdef CODE_DEBUG
#define LogCat(format,...) printf("Line: %d: "format"\n", __LINE__, ##__VA_ARGS__)
#else
#define LogCat(format,...)
#endif
.......
三 使用案例
main.c
void main()
{
.....
uartInit(115200);
.....
LogCat("打印信息");
}