/***************************************************
*作 者:温子祺
*联系方式:wenziqi@hotmail.com
*说 明 :高级串口函数模板
*开发环境:RealView MDK
*处理器 :LPC2103
***************************************************/
对于经常编程的技术员来说,printf函数再熟悉不过了,功能强大,能够随心所欲地输出任何打印信息,虽然printf函数是很好用,但是存在一定的局限性,只能够用于固定的串口进行打印信息。一旦打印的信息不是通过串口而是通过网络、USB、LCD进行打印,那么咋办?只能修改开发环境内部函数了,这样动不动就对开发环境的函数动手脚,可不是我们要想要的。 为了不对开发环境内部函数动手脚,我们可以引用头文件,#include <stdarg.h>头文件。串口打印函数如下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include <stdarg.h>
extern int vsprintf(char *string, char *format, va_list param);/******************************************************
*文件名称:UARTInit
*输 入:unFpclk 外设时钟频率
unBaud 波特率
*输 出:无
*功能说明:串口初始化
*******************************************************/
void UARTInit(UINT32 unFpclk,UINT32 unBaud)
{
UINT16 usFdiv;
PINSEL0&=~0x0F;
PINSEL0|= 0x05;
U0LCR = 0x83;
usFdiv = (unFpclk / 16) / unBaud;
U0DLM = usFdiv / 256;
U0DLL = usFdiv % 256;
U0LCR = 0x03;
}
/******************************************************
*文件名称:UARTSendByte
*输 入:ucByte 字节
*输 出:无
*功能说明:串口 发送单个字节
*******************************************************/
void UARTSendByte(UINT8 ucByte)
{
U0THR = ucByte;
while ((U0LSR & 0x40) == 0);
}/******************************************************
*文件名称:UARTPrintf
*输 入:pcStr
*输 出:无
*功能说明:串口 打印字符串
*******************************************************/
void UARTPrintf(CHAR *pcStr, ...)
{
va_list ap;
CHAR string[256];
va_start(ap,pcStr);
vsprintf(string,pcStr,ap);
UARTPrintfString(string);
va_end(ap);
}
注意事项:
(1)一定要外部声明vsprintf函数。
(2)调用 stdarg.h头文件时,编译出的代码会默认增加4KB左右。
使用方法:
该UARTPrintf与默认的printf使用方法一样。
示例:UARTPrintf("i=%d,j=%x",i,j);
普通串口打印函数模板地址:http://www.cnblogs.com/wenziqi/archive/2010/07/14/1777199.html
转载请注明出处,谢谢!