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

  一。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);

  }

  }

  }

  

通过串口利用printf函数输出数据
分享些串口方面的资料便于学习参考

(stm32串口应用)
http://www.makeru.com.cn/live/1392_1164.html?s=45051
PWM脉宽调制技术
http://www.makeru.com.cn/live/4034_2146.html?s=45051
基于STM32讲解串口操作
http://www.makeru.com.cn/live/1758_490.html?s=45051
通过Z-stack协议栈实现串口透传
http://www.makeru.com.cn/live/1758_330.html?s=45051

posted @ 2019-11-11 15:59  国产零零柒  阅读(3359)  评论(0编辑  收藏  举报