|

楼主 |
发表于 2021-3-6 13:52:35
|
显示全部楼层
谢谢,是编译错误不是运行错误,第一次遇到只知道有错误就不能烧录 对于buf示例是char buf[16];运行后错误更多就改为char bu;了。
/*
*函数名:USART1_printf
*描述 :格式化输出,类似于C库中的printf,但这里没有调用C库
*输入 :USARTx 串口通道,这里只用到了串口1,即USART1
* -Data 要发送到串口的内容指针
* :-... 其它参数
*输出 :无
*返回 :无
*调用 :外部调用USART1_printf(USART1,"\r\n this is a demo \r\n");
* USART1_printf(USART1,"\r\n %d \r\n",i);
* USART1_printf(USART1,"\r\n %s \r\n",j);
*/
void USART1_printf(USART_TypeDef* USARTx, uint8_t *Data,...)
{
const char *s;
int d;
char buf;
va_list ap;
va_start(ap,Data);
while(*Data !=0) //判断是否到达字符串结束符
{
if(*Data==0x5c) // '\'
{
switch( *++Data)
{
case 'r': //回车符
USART_SendData(USARTx,0x0d);
Data ++;
break;
case 'n': //换行符
USART_SendData(USARTx,0x0a);
Data ++;
break;
default:
Data ++;
break;
}
}
else if(*Data=='%')
{
switch( *++Data)
{
case 's': //字符串
s=va_arg(ap,const char *);
for(;*s ;s++)
{
USART_SendData(USARTx,*s);
whil(USART_GatFlagStatus(USARTx,USART_FLAG_TC)==RESET);
}
Data ++;
break;
case 'd': //十进制
d =va_arg(ap,int);
intoa(d,buf,10);
for(s=buf;*s;s++)
{
USART_SendData(USARTx,*s);
whil(USART_GatFlagStatus(USARTx,USART_FLAG_TC)==RESET);
}
Data ++;
break;
default:
Data ++;
break;
}
}
/* end of else if */
else USART_SendData(USARTx,*Data++);
whil(USART_GatFlagStatus(USARTx,USART_FLAG_TC)==RESET);
}
}
|
|