STM32F103程序串口调用printf打印数据

发布者:shmilyde最新更新时间:2018-06-10 来源: eefocus关键字:STM32F103  串口调用  printf  打印数据 手机看文章 扫描二维码
随时随地手机看文章

程序开发过程中调试必不可少,一种简单直接的调试方式是使用串口发送数据,并使用串口助手进行观测。以前使用MSP430做项目时也同样使用printf打印数据,所以现在想在stm32 上实现。

通常串口发送单字节库函数:USART_SendData(USART1, (uint8_t) ch);对显示小数等数据比较复杂,如果能够直接使用C语言 stdio.h中的printf直接输出就可以省去大部分格式输出转化时间。下面将介绍如何调用printf打印串口数据。

建立USART.C和USART.H两个文件,分别编写串口设置程序与头文件

USART.C中需要添加如下代码:


  1. int fputc(int ch, FILE *f)  

  2. {  

  3.  /* e.g.给USART写一个字符 */  

  4.  USART_SendData(USART1, (uint8_t) ch);  

  5.   

  6.  /* 循环直到发送完成 */  

  7.  while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);  

  8.   

  9.  return ch;  

  10. }  


对printf进行重定向;

USART.H中需要添加如下代码:

添加stdio.h头文件,其次,声明int fputc(int ch, FILE *f);


最后一步,在设置中勾选Use MicroLIB选项;


完成以上步骤后,便可在程序中直接调用printf打印串口数据。


关键字:STM32F103  串口调用  printf  打印数据 引用地址:STM32F103程序串口调用printf打印数据

上一篇:STM32输出调试信息-printf重定向到串口
下一篇:Keil重定向printf到串口UART输出

推荐阅读最新更新时间:2024-03-16 16:05

stm32f103定时器中断
stm32为我们提供了8个定时器,分为:通用是定时器(TIM2~TIM5),高级定时器(TIM1和TIM8),基本定时器(TIM6和TIM7)。 至于三者之间的区别可以参考以下博客:https://blog.csdn.net/dukai392/article/details/72058041 本次我们主要讨论的是通用定时器的基本知识以及更新中断的配置过程。 通用定时器框图如下: 由于stm32的定时器十分复杂,功能特多而本次我们只讨论他的计数跟新功能(定时)。 时钟的选择: 由框图中红色部分可知定时器的时钟来源有三个:内部时钟(CK_INT),外部时钟(TIMx_ETR),其他定时器的时钟(ITR0-ITR
[单片机]
<font color='red'>stm32f103</font>定时器中断
使用变参函数实现STM32串口的简易printf功能
第一,去掉了原来使用的goto语句,因为C语言中除了错误处理之外,不建议使用goto语句; 第二,fmt和pnt的含义更加明确,它们始终指向下一个需要处理的字符和变参; 第三,整理了程序结构,使它更加清晰。 void uart_printf(USART_TypeDef *USARTx, char *fmt, ...) { char *pnt = (char *)&fmt + sizeof(fmt); int len; while (*fmt != '') { if (*fmt == '%') { if (*(fmt + 1) == 'c') { uart_send_byte(
[单片机]
基于STM32F103的四路PWM配置程序及个人见解
平台:STM32F103系列 内容:生成四路PWM波 1、初始化配置 void Pwmpin_init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); GPIO_InitStructure.GPIO_Speed = GPIO_Spee
[单片机]
ch32f103c8t6与stm32f103c8t6的区别
STM32F103C8T6是一款32位微处理器,属于STM32F1系列中的一员。它是一款廉价而且高性能的微处理器,被广泛应用于工控、通讯以及嵌入式系统等领域。ch32f103c8t6与STM32F103C8T6这两个型号都是STM32F1系列中的微处理器,在外形上基本一致,但是在性能方面其实还是存在一些区别的。本文将为您详细介绍ch32f103c8t6与STM32F103C8T6这两款微处理器的区别,以及它们各自的特点和应用场景。 一、外观区别 从外观上来看,ch32f103c8t6与STM32F103C8T6两款微处理器几乎是一样的,都是28引脚的芯片,采用的都是LQFP封装。不过它们的logo是不一样的,ch32f103c8t
[单片机]
STM32F103单片机系统时钟部分归纳
STM32F103系列增强型微控制器 ——时钟控制(RCC) 三种不同的时钟源可用作系统时钟(SYSCLOCK): HIS振荡器时钟(由芯片内部RC振荡器提供) HSE振荡器时钟(由芯片外部晶体振荡器提供) PLL时钟(通过倍频HIS或HSE振荡器倍频得到) 另外还有两个时钟源: LSI内部40kHz低速RC振荡器时钟,用于驱动独立看门狗或选择驱动RTC LSE外部32.768kHz低速外部输入时钟,用于驱动RTC 时钟模块框图如下: 图1 时钟树框图 1.当HSI被用于作为PLL时钟的输入时,系统时钟能得到的最大频率是64MHz。 2.用户可通过多个 预分频器 配置
[单片机]
<font color='red'>STM32F103</font>单片机系统时钟部分归纳
STM32F103系列USB问题
1. usb和can公用512B的RAM,但是RAm地址为0x40006000-0x40006400,分明为1KB啊,为什么还是说512B. 2. 若PC机读RAM中数据时,我同时对RAM进行写操作,怎么办,我感觉库中并没有对这种操作进行处理啊。 3. 对于缓冲区,不理解为什么给了个地址,又同时给了个USB本地地址,并且我认为,地址偏移应该为 *2+n*16+(0,4,8,12),也就是缓冲区描述表也应该扩大2倍,不知道是不是 4.不理解为什么USB_BTABLE设置成13+3位的,反正一共就512B(我理解为1K),8位就够了 1)这个缓冲区是个双端口RAM,CPU一端是以32位宽访问,而USB一端是以16位宽访问,因此从CPU
[单片机]
STM32 printf重定向
STM32串口通信中使用printf发送数据配置方法(开发环境 Keil RVMDK) 在STM32串口通信程序中使用printf发送数据,非常的方便。可在刚开始使用的时候总是遇到问题,常见的是硬件访真时无法进入main主函数,其实只要简单的配置一下就可以了。 下面就说一下使用printf需要做哪些配置。 有两种配置方法: 一、对工程属性进行配置,详细步骤如下 1、首先要在你的main 文件中 包含“stdio.h” (标准输入输出头文件)。 2、在main文件中重定义 fputc 函数 如下: // 发送数据 int fputc(int ch, FILE *f) { USART_SendData(
[单片机]
基于CAN总线的一体化两相步进电机驱动器的设计
0 引言 当前,步进电机已经在工业应用,如自动剥线机、工业机器人、雕刻机、植毛机工作台等涉及到精确定位的场合,得到广泛的应用。常用的步进电机控制系统由驱动模块和控制器模块组成。驱动模块实现功率放大,控制器模块用于产生电机转动的控制信号,上述控制方法将会大量占用控制核心的资源,影响控制系统的实时性及灵活性。本文设计的步进电机驱动器,将控制电路和驱动模电路集成在同一个模块上,减少系统中主控核心的负担,提高系统的实时性、可靠性,可以使系统设计变得更加灵活、方便。 1 CAN中继器硬件的设计 1.1 系统的硬件结构 本文设计的基于CAN总线的一体化两相步进电机驱动器系统框图如图1所示,包括CAN收发器L9616、MCU STM3
[单片机]
基于CAN总线的一体化两相步进电机驱动器的设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved