STM32CubeMX学习笔记4:printf( )重定向到USART串口输出(参考官方例程)

2019-07-18来源: eefocus关键字:STM32CubeMX  printf(  )  重定向  USART  串口输出

MCU:STM32F103ZET6


IDE:  MDK-ARM V5 +STM32CubeMX5.0.0


串口调试助手:SSCOM3.2



功能描述:USART1收到PC机发来的数据后原封不动的返回给PC机显示,但是C语言中printf函数默认输出设备是显示器,要使用printf输出到串口,需要将fputc里面的输出指向串口,这一过程就叫重定向。


需要配置的只有USART1,配置过程非常简单。


一. 在 Pinout&Configuration---System Core中:

1. 首先设置时钟RCC的HSE(外部高速时钟)为晶振模式:Crystal/ceramic Resonator


2. 设置系统SYS的Debug为Serial Wire:


二. 在 Pinout&Configuration---Connectivity中:

1. 打开USART1,并设置模式为异步收发模式Asynchronous:


2. 设置USART1的参数,通用的“96-N-8-1”模式,即波特率9600,N校验位(无校验),数据位数为8,停止位为1位:


3. 串口通信方式有:查询、中断、DMA三种,因此要使能USART1的中断,在NVIC使能选项中打钩:


三.在 Clock Configuration中:

配置时钟为72 Mhz。



四.在 Project Manager---Project中:

1.设置项目的名称以及保存的位置,选择Toolchain/IDE为MDK-ARM V5,

Tips:最好把Linker Settings中的Minimum Heap Size设置为0x600。



2.在Code Generator选项中如下勾选:


最后点Generate Code生成代码,并选择“Open Project”:


五.代码分析与改写:

将printf()函数的输出功能映射到串口上:


1. 首先在main.c中进行宏定义:

 

/* Private function prototypes -----------------------------------------------*/

#ifdef __GNUC__

  #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)

#else

  #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)

#endif /* __GNUC__ */

2. 对于MDK-ARM编译器,在main.c中加入重定向函数:(此处与官方例程中不同,将&UartHandle改为&huart1)

/* USER CODE BEGIN 0 */

int fputc(int ch,FILE *f)

{

HAL_UART_Transmit(&huart1,(uint8_t *)&ch,1,0xFFFF);

return ch;

}

/* USER CODE END 0 */

此处附上标准库实现的printf重定向代码供参考:(仅供参考,无需添加)


int fputc(int ch,FILE *p)     //Printf重定向

{

USART_SendData(USART1,(u8)ch);

while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);

return ch;

}

3. 在main.c的while(1)循环中添加输出内容:

/* USER CODE BEGIN 3 */

  printf("zytjasper blog printf function USART1 output rn");

  HAL_Delay(1000);

如果不想一直输出,只输出一次就将输出内容放在循环外:


/* USER CODE BEGIN 2 */

printf("nr zytjasper blog nr");

/* USER CODE END 2 */

至此,编译后无错并下载到开发板中,就完成了通过STM32CubeMX调用HAL库实现printf函数串口通信的效果程序,实验结果如下:



这次只是按照官方例程实现了这个功能,但感觉理解USART还比较吃力,尤其是对中断方式串口通信还不是很清楚,Mark一下,以后学习懂了回头再讨论。


关键字:STM32CubeMX  printf(  )  重定向  USART  串口输出

编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic468395.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:STM32CubeMX学习笔记3:PWM呼吸灯
下一篇:STM32CubeMX学习笔记5:ADC模数转换电压至串口输出

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

STM32CubeMX系列教程01_STM32Cube产品介绍

一、写在前面之前开发STM32,大家常见的就是使用寄存器、或者标准外设库进行开发。但是,从15、16年开始,ST逐渐停止了对标准外设库的更新和维护,转向了HAL和LL库。·SPL:Standard Peripheral Library标准外设库·HAL:Hardware Abstraction Layer硬件抽象层库·LL:Low-layer底层库我写STM32CubeMX系列教程有两个原因:1.停止标准库更新,使用STM32CubeMX配置HAL/LL库是主流;2.网上关于STM32CubeMX的教程相对凌乱,没有系统的进行讲解。该系列教程会从基础开始写起,以及结合实例代码详细讲述。后面实例我计划另开分支,比如针对F1系列就开一
发表于 2019-09-18
STM32CubeMX系列教程01_STM32Cube产品介绍

STM32CubeMX系列教程02_STM32CubeMX工具、HAL库下载、安装说明

一、写在前面上一篇文章是对STM32CubeMX做了一个简单介绍,可能初学者看了之后也不是很理解。那么本文开始动手实践,实践也是快速掌握知识的一种办法。本文针对初学者,内容比较基础,主要是给大家起引导作用。包含:下载JRE、STM32CubeMX和HAL库三部分内容。HAL库的几种安装方式。二、下载本节主要下载内容:JRE、STM32CubeMX和HAL库。2.1 下载JRE由于 STM32CubeMX 软件是基于 JAVA 环境运行的,所以需要安装 JRE (Java Runtime Environment)才能使用, 建议到官网下载最新版本JRE。地址:https://www.java.com/en/download
发表于 2019-09-18
STM32CubeMX系列教程02_STM32CubeMX工具、HAL库下载、安装说明

STM32CubeMX系列教程03_创建并生成代码工程

一、写在前面本文面向初学者,使用STM32CubeMX一步一步配置一个可直接编译下载,并成功运行的代码。实践操作成功之后有了成就感,大家才会更加有信心继续学习下去。本文只提供LED闪烁的简单实例讲解,重点是引导初学者入门。更多实例(如UART、TIM、CAN...)我会单独整理一系列教程,并提供源码分析和下载。二、准备工作学习STM32CubeMX进行开发,需要有几样准备工作。2.1 下载安装STM32CubeMX及HAL库请参看文章《STM32CubeMX系列教程02_STM32CubeMX工具、HAL库下载、安装说明》提示:下载安装MCU对应的HAL库就行。 比如:你开发板MCU是STM32F1系列,对应
发表于 2019-09-18
STM32CubeMX系列教程03_创建并生成代码工程

STM32CubeMX系列教程04_STM32CubeMX各窗口界面描述

一、写在前面上一篇文章让你入门STM32CubeMX,你可能还是会觉得心里摸不到底。本文就从另外一个角度带你了解STM32CubeMX。本文讲述STM32CubeMX各主要界面内容,让你对STM32CubeMX这个工具有一个比较直观的认识。二、主界面打开STM32CubeMX,呈现的界面大致如下图,界面比较简洁。我把它划分为六大板块。1.菜单 STM32CubexMX V4版本(前面老版本)有很多功能做在菜单里面,但V5版本优化(删减)菜单,把一些常用功能做在相应界面里面了。菜单内容后面会单独详细讲述。2.社交链接 facebook(脸书)、youtube、twitter(推特)以及ST社区、官网信息等。相信大家都能理解,就像国内
发表于 2019-09-18
STM32CubeMX系列教程04_STM32CubeMX各窗口界面描述

STM32CubeMX系列教程05_File、Window、Help菜单说明

一、写在前面STM32CubeMX主界面菜单包含:File文件、Window窗口、Help帮助这三个菜单。STM32CubeMX V5和V4版本菜单有差异,V4版本有5个菜单:File文件、Project工程、Pinout引脚输出、Window窗口、Help帮助。大家可以看一下我16年在公众号写过的一篇讲解关于STM32CubeMX V4版本菜单的文章:STM32CubeMX使用方法及功能介绍相信使用过V4版本的朋友都知道,V5版本将Project工程、Pinout引脚输出这两个菜单做在工程内部去了。本文针对V5版本,详细讲述File、Window、Help这三个菜单。 二、File文件New Project:新建工程
发表于 2019-09-18
STM32CubeMX系列教程05_File、Window、Help菜单说明

STM32CubeMX系列教程06_Project Manager工程管理器详细说明

一、写在前面STM32CubeMX的Project Manager工程管理器包含:Project工程管理、 Code Generator代码生成、 Advanced Settings高级设置三部分内容。这三部分内容决定了工程的一些属性,相关的配置信息比较重要,也容易理解。初学者有必要掌握其中内容。二、Project工程管理Project工程管理包含三部分内容:Projcet Settings工程设置、 Linker Settings堆栈设置、 Mcu and Firmware Package MCU和固件包信息。2.1 Projcet Settings工程设置A.Project Name:工程名称比如:Demo.uvprojx
发表于 2019-09-18
STM32CubeMX系列教程06_Project Manager工程管理器详细说明

小广播

何立民专栏

单片机及嵌入式宝典

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

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved