加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

通过串口利用printf函数输出数据

(2017-11-10 09:39:51)
分类: STM32F103技术文档
一。printf函数格式
printf函数具有强大的输出功能

%表示格式化字符串输出
目前printf支持以下格式的输出,例如:
printf("%c",a);输出单个字符。
printf("%d",a);输出十进制整数。
printf("%f",a);输出十进制浮点数.
printf("%o",a);输出八进制数。
printf("%s",a);输出字符串。
printf("%u",a);输出无符号十进制数。
printf("%x",a);输出十六进制数。

例如:
n = 15
printf("The result is %d", n);   //通过屏幕输出十进制数15

n = 15.2
printf("The result is %f", n);   //通过屏幕输出十进制浮点数15

二。实现方法
在uart.c文件中加入

#include  "stdio.h"

//////////////////////////////////////////////////////////////////
//加入以下代码,支持printf函数,而不需要选择use MicroLIB  
#if 1
#pragma import(__use_no_semihosting)             
//标准库需要的支持函数                 
struct __FILE 
int handle; 

}; 

FILE __stdout;       
//定义_sys_exit()以避免使用半主机模式    
_sys_exit(int x) 
x = x; 
//重定义fputc函数 
int fputc(int ch, FILE *f)
{      
while((USART1->SR&0X40)==0);//把数据通过串口1循环发送,直到发送完毕 ,如果使用串口2,则改成             USART2 
    USART1->DR = (u8) ch;      
return ch;
}
#endif 

三。主函数中调用printf函数
int main(void)
 {
  u16 t;  
u16 len;
u16 times=0;
delay_init();     //延时函数初始化  
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
uart_init(115200); //串口初始化为115200
  LED_Init();     //LED端口初始化
KEY_Init();          //初始化与按键连接的硬件接口
  while(1)
{
if(USART_RX_STA&0x8000)
{   
len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度
printf("\r\n您发送的消息为:\r\n\r\n"); //\r\n为回车换行
for(t=0;t
{
USART_SendData(USART1, USART_RX_BUF[t]);//向串口1发送数据
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
}
printf("\r\n\r\n");//插入换行
USART_RX_STA=0;
}else
{
times++;
if(timesP00==0)
{
printf("\r\n战舰STM32开发板 串口实验\r\n");
printf("正点原子@ALIENTEK\r\n\r\n");
}
if(times 0==0)printf("请输入数据,以回车键结束\n");  
if(times0==0)LED0=!LED0;//闪烁LED,提示系统正在运行.
delay_ms(10);   
}
}  
 }

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有