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介绍、下载与安装
Ⅰ、写在前面相信很多人都知道STM32CubeMX这个工具,也是近年来开发STM32比较流行的一个工具。这个工具从两年前第一版到现在已经有多个版本了,功能也从简单越来越强大了。 STM32CubeMX是一个配置STM32代码的工具,它把很多东西封装的比较好,硬件抽象层、中间层、示例代码等。 现在ST公司升级和维护的库主要就是STM32CubeMX的HAL库和标准外设库,使用这两种库开发STM32各有各的好处,下面简单描述一下。 如果你是一名刚学STM32的初学者,想要把硬件底层相关的东西搞明白,不建议使用STM32CubeMX这个工具,建议使用之前经典的标准外设库来开发(先学习标准外设库,但有必要
发表于 2020-11-26
<font color='red'>STM32CubeMX</font>介绍、下载与安装
STM32CubeMX使用方法及功能介绍
Ⅰ、写在前面主要讲述STM32CubeMX菜单及相关功能,简单讲述一下新建工程,后面结合实际例子讲述新建工程配置的具体细节。Ⅱ、STM32CubeMX主界面描述 打开安装好的STM32CubeMX,看到其主界面如下:主要看到信息有:1.菜单栏:打开软件只有4个主菜单,在新建工程后有5个菜单;2.快捷按钮栏:这些按钮在菜单栏里面都能找到;3.新建工程:我们打开软件,新建工程就是点击该按钮;4.导入工程:如果之前有建好的工程,可以点击该处导入工程;5.帮助:帮助功能都应该知道,可点击菜单help或按F1键打开帮助文档。 1.菜单栏打开软件时有四个菜单:文件File、工程Project、Window窗口、Help帮助
发表于 2020-11-26
<font color='red'>STM32CubeMX</font>使用方法及功能介绍
STM32——利用STM32CubeMX来点亮GPIO口的led
_GPIO_Init(GPIOF, &GPIO_InitStruct);   HAL_GPIO_WritePin(GPIOF,GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10, GPIO_PIN_SET);} 调用的HAL函数解析: void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx , uint16_t GPIO_Pin, GPIO_PinState PinState);该函数其实是对BSRR 寄存器进行操作,第一个参数传的是GPIO所在的组,第二个是操作第几个管脚,第三个是对管脚进行置位。利用STM32CubeMX来架构程序
发表于 2020-08-31
<font color='red'>STM32</font>——利用<font color='red'>STM32CubeMX</font>来点亮GPIO口的led
STM32】HAL库 STM32CubeMX教程九---ADC
前言:本系列教程将 对应外设原理,HAL库与STM32CubeMX结合在一起讲解,使您可以更快速的学会各个模块的使用所用工具:1、芯片: STM32F407ZET6/ STM32F103ZET62、STM32CubeMx软件3、IDE: MDK-Keil软件4、STM32F1xx/STM32F4xxHAL库知识概括:通过本篇博客您将学到:ACD工作原理STM32CubeMX创建ADC例程HAL库定时器ADC函数库什么是ADCAnalog-to-Digital Converter的缩写。指模/数转换器或者模拟/数字转换器。是指将连续变量的模拟信号转换为离散的数字信号的器件。典型的模拟数字转换器将模拟信号转换为表示一定比例电压值
发表于 2020-08-27
【<font color='red'>STM32</font>】HAL库 <font color='red'>STM32CubeMX</font>教程九---ADC
STM32】HAL库 STM32CubeMX教程十---DAC
前言:本系列教程将 对应外设原理,HAL库与STM32CubeMX结合在一起讲解,使您可以更快速的学会各个模块的使用所用工具:1、芯片: STM32F407ZET6/ STM32F103ZET62、STM32CubeMx软件3、IDE: MDK-Keil软件4、STM32F1xx/STM32F4xxHAL库知识概括:通过本篇博客您将学到:DAC工作原理STM32CubeMX创建DAC例程HAL库定时器DAC函数库DACDigital-to-Analog Converter的缩写。数模转换器。又称D/A转换器,简称DAC,是指将离散的数字信号转换为连续变量的模拟信号的器件。典型的数字模拟转换器将表示一定比例电压值的数字信号转换
发表于 2020-08-27
【<font color='red'>STM32</font>】HAL库 <font color='red'>STM32CubeMX</font>教程十---DAC
STM32】HAL库 STM32CubeMX教程十二---IIC(读取AT24C02 )
前言:本系列教程将HAL库与STM32CubeMX结合在一起讲解,使您可以更快速的学会各个模块的使用在之前的标准库中,STM32的硬件IIC非常复杂,更重要的是它并不稳定,所以都不推荐使用。但是在我们的HAL库中,对硬件IIC做了全新的优化,使得之前软件IIC几百行代码,在HAL库中,只需要寥寥几行就可以完成 那么这篇文章将带你去感受下它的优异之处这可能是目前关于STM32CubeMX的硬件iic 讲的最全面和详细的一篇文章之一了所用工具:1、芯片: STM32F103ZET62、STM32CubeMx软件3、IDE: MDK-Keil软件4、STM32F1xx/STM32F4xxHAL库5、IIC: 使用硬件IIC1
发表于 2020-08-27
【<font color='red'>STM32</font>】HAL库 <font color='red'>STM32CubeMX</font>教程十二---IIC(读取AT24C02 )
小广播
何立民专栏 单片机及嵌入式宝典

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

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