STM32F407 pritnf 重定向代码

printf重定向,是指之前指定给USART1输出的,移植过后,需要重定向给USART2代码

    问题:仿照原子的探索者STM32F407板子USART1代码写的USART2代码,但是不能正常通信,可以正常接收数据,但是无法发送数据;

             USART2中断可以进入,接收数据正常,但是无法使用printf发送数据,可以使用USART_SendData发送数据。

            if(USART_RX_STA2&0x8000)
{   
len=USART_RX_STA2&0x3fff;//µÃµ½´Ë´Î½ÓÊÕµ½µÄÊý¾Ý³¤¶È
printf("\r\nÄú·¢Ë͵ÄÏûϢΪ:\r\n");   //无法显示
for(t=0;t<len2;t++)
{
USART_SendData(USART2, USART_RX_BUF2[t]);         //Ïò´®¿Ú1·¢ËÍÊý¾Ý   //可以发送数据
while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);//µÈ´ý·¢ËͽáÊø
}
printf("\r\n\r\n");//²åÈë»»ÐÐ      //无法显示
USART_RX_STA2=0;
}

              

之所以无法使用printf格式化输出,是由于printf重定向,是指之前指定给USART1输出的,移植过后,需要重定向给USART2代码。printf调用fputc发送数据,但是fputc只是针对USART1了,需要自己修改这个函数,如下:

//USART1
int fputc(int ch, FILE *f)
{
while((USART1->SR&0X40)==0);//Ñ­»··¢ËÍ,Ö±µ½·¢ËÍÍê±Ï   
USART1->DR = (u8) ch;      
return ch;
}
//USART2
//int fputc(int ch, FILE *f)
//{
// while((USART2->SR&0X40)==0);//Ñ­»··¢ËÍ,Ö±µ½·¢ËÍÍê±Ï   
// USART2->DR = (u8) ch;      
// return ch;
//}

修改fputc函数后,printf输出格式化数据成功。


实际上,完全可以用USART_SendData函数实现各种格式控制,使用USART_SendData输出回车换行符如下:

USART_SendData(USART2, '\r');         //
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//
USART_SendData(USART2, '\n');         //
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值