Keil 及 IAR 的 printf 重映射到UART的实现方法 IAR 版本小于 9030001的串口 printf重映射实现intputchar(intch){UART_SendData(UART2,(uint8_t)ch);while(RESETUART_GetFlagStatus(UART2,UART_FLAG_TXEMPTY)){}return(ch);}IAR版本大于等于9030001的串口 printf重映射实现#includestddef.h#includeLowLevelIOInterface.hsize_t__write(inthandle,constunsignedchar*buf,size_tbufSize){size_tnChars0;/* Check for the command to flush all handles */if(-1handle){return(0);}/* Check for stdout and stderr (only necessary if FILE descriptors are enabled.) */if((_LLIO_STDOUT!handle)(_LLIO_STDERR!handle)){return(-1);}for(/* Empty */;bufSize0;--bufSize){UART_SendData(UART2,(uint8_t)*buf);while(RESETUART_GetFlagStatus(UART2,UART_FLAG_TXEMPTY)){}buf;nChars;}return(nChars);}Keil 的串口 printf重映射实现intfputc(intch,FILE*f){UART_SendData(UART2,(uint8_t)ch);while(RESETUART_GetFlagStatus(UART2,UART_FLAG_TXEMPTY)){}return(ch);}GCC 的串口 printf重映射实现int_write(intfile,char*ptr,intlen){inti;(void)file;for(i0;ilen;i){UART_SendData(UART2,(uint8_t)ch);while(RESETUART_GetFlagStatus(UART2,UART_FLAG_TXEMPTY)){}}returnlen;}在同一个文件中通过宏定义判断统一实现方法#ifdefined(__ICCARM__)#if(__VER__9030001)/* Files include */#includestddef.h#includeLowLevelIOInterface.h/*********************************************************************************************************************** * brief redefine __write function * note for printf * param handle * param *buf * param bufSize * retval nChars *********************************************************************************************************************/size_t__write(inthandle,constunsignedchar*buf,size_tbufSize){size_tnChars0;/* Check for the command to flush all handles */if(-1handle){return(0);}/* Check for stdout and stderr (only necessary if FILE descriptors are enabled.) */if((_LLIO_STDOUT!handle)(_LLIO_STDERR!handle)){return(-1);}for(/* Empty */;bufSize0;--bufSize){UART_SendData(UART2,(uint8_t)*buf);while(RESETUART_GetFlagStatus(UART2,UART_FLAG_TXEMPTY)){}buf;nChars;}return(nChars);}#else/*********************************************************************************************************************** * brief redefine fputc function * note for printf * param ch * param f * retval ch *********************************************************************************************************************/intputchar(intch){UART_SendData(UART2,(uint8_t)ch);while(RESETUART_GetFlagStatus(UART2,UART_FLAG_TXEMPTY)){}return(ch);}#endif#elifdefined(__GNUC__)/*********************************************************************************************************************** * brief redefine GCC _write function * note for printf * param file * param ptr * param len * retval written length *********************************************************************************************************************/int_write(intfile,char*ptr,intlen){inti;(void)file;for(i0;ilen;i){UART_SendData(UART2,(uint8_t)ch);while(RESETUART_GetFlagStatus(UART2,UART_FLAG_TXEMPTY)){}}returnlen;}#else/*********************************************************************************************************************** * brief redefine Keil fputc function * note for printf * param ch * param f * retval ch *********************************************************************************************************************/intfputc(intch,FILE*f){UART_SendData(UART2,(uint8_t)ch);while(RESETUART_GetFlagStatus(UART2,UART_FLAG_TXEMPTY)){}return(ch);}#endif

本月热点