论坛元老
 
- 积分
- 10653
- 金钱
- 10653
- 注册时间
- 2017-4-14
- 在线时间
- 2780 小时
|
发表于 2018-5-12 10:30:32
|
显示全部楼层
何必给自己找麻烦,串口一同样代码
void USART1_printf (char *fmt, ...)
{
u8 i = 0;
va_list arg_ptr;
va_start(arg_ptr, fmt);
vsnprintf(USART1_TX_BUF, USART1_MAX_SEND_LEN+1, fmt, arg_ptr);
va_end(arg_ptr);
while ((i < USART1_MAX_SEND_LEN) && USART1_TX_BUF)
{
USART_SendData(USART1, (u8) USART1_TX_BUF[i++]);
while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
}
}
或者串口1重定义用printf就可以了呀
#pragma import(__use_no_semihosting)
struct __FILE {int handle;}; //标准库需要的支持函数
FILE __stdout;
//_sys_exit(int x) {x = x;} //定义_sys_exit()以避免使用半主机模式 未开启c99
void _sys_exit(int x){x = x;}//定义_sys_exit()以避免使用半主机模式 开启c99时 c99取消了函数返回类型默认为 int 的规定
int fputc(int ch, FILE *f)//重定义fputc函数
{
while((USART1->SR&0X40)==0);//循环发送,直到发送完毕
USART1->DR = (u8) ch;
return ch;
} |
|