zoukankan      html  css  js  c++  java
  • 串口函数模板(普通+高级串口函数模板)

    /***************************************************
     *作     者:温子祺
     *联系方式:wenziqi@hotmail.com
     *说   明 :串口函数模板
    (普通+高级串口函数模板)

     *开发环境:RealView MDK 

     *处理器  :LPC2103

     ***************************************************/

    普通串口函数模板地址:http://www.cnblogs.com/wenziqi/archive/2010/07/14/1777199.html

    高级串口函数模板地址:http://www.cnblogs.com/wenziqi/archive/2010/07/14/1777259.html

    首先为什么要整合这两个模板呢?

    (1)普通串口函数模板虽然占用空间小,但是只能打印普通字符串、10/16进制值。

    (2)高级串口函数模板虽然占用空间大,但是打印功能异常强大。

    所以,为了方便在各种不同类型的单片机上使用,即资源充足的使用高级串口函数模板,资源贫乏的使用普通串口函数模板。

    整合后的代码模板如下:

    UARTDef.h

    代码
    #define EN_DEBUG (0)
    #define EN_SYS_STR_LIB (1)
    #if EN_DEBUG

    #if EN_SYS_STR_LIB
    #define DbgPrintf UARTPrintf
    #else
    #define DbgPrintf UARTPrintfString
    #endif

    #define DEBUGMSG DbgPrintf
    #define DEBUGMSGEx UARTPrintfVal

    #else

    #define DEBUGMSG(x) (void)0
    #define DEBUGMSGEx(x,y,z) (void)0

    #endif

    UART.h

    代码
    /*
    ---------------------------------------------------------------
    文件名称:UART.h
    说 明:提供串口打印信息
    作 者:温子祺
    创建时间:2010-06-10
    ---------------------------------------------------------------
    */
    #ifndef __UART_H__
    #define __UART_H__



    #if EN_SYS_STR_LIB
    #include
    <stdarg.h>

    extern void UARTPrintf(CHAR *fmt, ...);

    extern int vsprintf(char *string, char *format, va_list param);

    #endif

    extern void UARTInit(UINT32 unFpclk,UINT32 unBaud);
    extern void UARTSendByte(UINT8 ucByte);
    extern void UARTSendNBytes(UINT8 *pucBytes,UINT32 unSendLength);
    extern void UARTPrintfString(CHAR *pcStr);
    extern void UARTPrintfVal (CHAR *pstr,
    UINT32 val,
    UINT32 DecOrHex);
    extern UINT8 UARTGetByte(void);

    #define EN_UART_DEBUG (1)

    #if EN_UART_DEBUG
    #define UARTMSG DEBUGMSG
    #define UARTMSGEx DEBUGMSGEx
    #else
    #define UARTMSG(x) ((void)0)
    #define UARTMSGEx(x,y,z) ((void)0)
    #endif





    #endif


    UART.c

    代码
    /*
    ---------------------------------------------------------------
    文件名称:UART.c
    说 明:提供串口打印信息
    作 者:温子祺
    创建时间:2010-06-10
    ---------------------------------------------------------------
    */
    #include
    "LPC2294.h"
    #include
    "Global.h"
    #include
    "UART.h"

    /******************************************************
    *文件名称: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);
    }
    /******************************************************
    *文件名称:UARTSendNBytes
    *输 入:pucBytes 数据缓冲区
    unSendLength 发送数据长度
    *输 出:无
    *功能说明:串口 发送多个字节
    ******************************************************
    */
    void UARTSendNBytes(UINT8 *pucBytes,UINT32 unSendLength)
    {
    while(unSendLength--)
    {
    UARTSendByte(
    *pucBytes++);
    }
    }
    /******************************************************
    *文件名称:UARTPrintf
    *输 入:pcStr 字符串
    *输 出:无
    *功能说明:串口 打印字符串
    ******************************************************
    */
    void UARTPrintfString(CHAR *pcStr)
    {
    while(pcStr && *pcStr)
    {
    UARTSendByte(
    *pcStr++);
    }
    }
    /******************************************************
    *文件名称:UARTPrintf
    *输 入:pcStr
    *输 出:无
    *功能说明:串口 打印字符串
    ******************************************************
    */
    #if EN_SYS_STR_LIB
    void UARTPrintf(CHAR *fmt, ...)
    {
    va_list ap;
    CHAR
    string[256];

    va_start(ap,fmt);
    vsprintf(
    string,fmt,ap);
    UARTPrintfString(
    string);
    va_end(ap);
    }

    #endif
    /******************************************************
    *文件名称:UARTGetByte
    *输 入:无
    *输 出:单个字节
    *功能说明:串口 获取字节
    ******************************************************
    */
    UINT8 UARTGetByte(
    void)
    {
    UINT8 ucRecvByte;

    while((U0LSR & 0x01) == 0);

    ucRecvByte
    =U0RBR;

    return ucRecvByte;
    }
    /*************************************************************
    * 函数名称:UARTPrintfVal
    * 输 入:pstr 字符串
    val 变量值
    DecOrHex 10/16进制
    * 输 出:无
    * 说 明:从串口打印字符串,支持10/16进制数据打印
    *************************************************************
    */
    void UARTPrintfVal(CHAR *pstr,
    UINT32 val,
    UINT32 DecOrHex)
    {
    INT32 i
    =0;
    INT8 buf[
    10]={0};

    UARTPrintfString((
    char *)pstr);

    if(10 == DecOrHex)
    {
    for(i=0; i<10 ;i++)
    {
    buf[i]
    =(UINT8)('0'+val%10);
    val
    /=10;
    }

    for(i=9;i>=0;)
    {
    if('0' == buf[i])
    {
    if(i)i--;
    else break;
    }
    else
    {
    break;
    }
    }

    while(1)
    {

    UARTSendByte(buf[i]);

    if(!i)
    {
    break;
    }

    i
    --;
    }

    }
    else if(16 == DecOrHex)
    {
    UARTSendByte(
    '0');
    UARTSendByte(
    'x');

    i
    =28;

    while(i)
    {
    if(0 == ((val>>i) &0x0f))
    {
    i
    =i-4;

    }
    else
    {
    break;
    }
    }

    while(1)
    {
    UARTSendByte(g_cHexTbl[(val
    >>i) &0x0f]);

    if(!i)
    {
    break;
    }

    i
    =i-4;
    }

    }

    UARTPrintfString(
    " ");
    }


    转载请注明出处,谢谢! 

  • 相关阅读:
    MySQL整理碎片
    华为云容器引擎 单实例模式部署 NACOS DOCKER
    NACOS DOCKER 官方镜像启动失败 No Datasource set
    nginx docker官方镜像使用自定义启动命令启动失败
    windows docker desktop配置国内镜像仓库
    SAP AUFM 针对订单的货物移动
    css 子元素margin-top影响了父元素
    HighCharts 嵌套仪表盘
    JAVA 使用JCO3调用SAP RFC函数
    线下WINDOWS主机挂载华为云存储
  • 原文地址:https://www.cnblogs.com/wenziqi/p/1777291.html
Copyright © 2011-2022 走看看