/***************************************************
*作 者:温子祺
*联系方式:wenziqi@hotmail.com
*说 明 :高级串口函数模板
*开发环境:RealView MDK
*处理器 :LPC2103
***************************************************/
对于经常编程的技术员来说,printf函数再熟悉不过了,功能强大,能够随心所欲地输出任何打印信息,虽然printf函数是很好用,但是存在一定的局限性,只能够用于固定的串口进行打印信息。一旦打印的信息不是通过串口而是通过网络、USB、LCD进行打印,那么咋办?只能修改开发环境内部函数了,这样动不动就对开发环境的函数动手脚,可不是我们要想要的。 为了不对开发环境内部函数动手脚,我们可以引用头文件,#include <stdarg.h>头文件。串口打印函数如下:
![ContractedBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
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
转载请注明出处,谢谢!