STM32系列(HAL库) ——使用串口打印的3种方式

这篇具有很好参考价值的文章主要介绍了STM32系列(HAL库) ——使用串口打印的3种方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、前期准备

1、硬件:

  • STM32C8T6最小系统板
  • USB-TTL串口模块
  • ST-Link下载器

2、软件:

  • keil5-IDE
  • cubeMX

二、cubeMX配置

1、配置RCC——选择外部时钟源

stm32串口打印,STM32进阶(CubeMX),stm32,单片机,arm

2、配置SYS—— Serial Wire模式 

stm32串口打印,STM32进阶(CubeMX),stm32,单片机,arm

 3、时钟树拉满72M 

        ......

 4、配置串口1    

stm32串口打印,STM32进阶(CubeMX),stm32,单片机,arm

 5.创建工程

        ......

三、keil5代码

1.方式一:使用微库(Use MicroLIB)

①:需要在 usrat.c 文件中添加如下代码

#include <stdio.h>
/*********************************************************
*
*重定义 fputc 函数
*
*********************************************************/
int fputc(int ch,FILE *f)
{
	HAL_UART_Transmit (&huart1 ,(uint8_t *)&ch,1,HAL_MAX_DELAY );
	return ch;
}

 ②:在Keil5中勾选如下选项

stm32串口打印,STM32进阶(CubeMX),stm32,单片机,arm

 ③调用 printf 函数打印

    注意:在任意需要使用printf函数打印的C文件中,都需要引用#include <stdio.h>头文件

2.方式二:

        从原子哥那边直接搬过来的,无需改动

①:需要在 usrat.c 文件中添加如下代码

#include <stdio.h>
#pragma import(__use_no_semihosting)             
//标准库需要的支持函数                 
struct __FILE 
{ 
	int handle; 

}; 

FILE __stdout;       
//定义_sys_exit()以避免使用半主机模式    
void _sys_exit(int x) 
{ 
	x = x; 
} 
//重定义fputc函数 
int fputc(int ch, FILE *f)
{      
    //二选一,功能一样
    HAL_UART_Transmit (&huart1 ,(uint8_t *)&ch,1,HAL_MAX_DELAY );
	return ch;
    
//	while((USART1->SR&0X40)==0);//循环发送,直到发送完毕   
//    USART1->DR = (uint8_t) ch;      
//	return ch;
}

②调用 printf 函数打印

   注意:在任意需要使用printf函数打印的C文件中,都需要引用#include <stdio.h>头文件

3.方式三

        适合多个串口打印,也是从原子哥那边搬过来的,但是在HAL需要修改,具体修改细节不赘述,下面是直接给出修改后的代码。

①:需要在 usrat.c 文件中添加如下代码

#include <stdarg.h>
#include <string.h>
#include <stdio.h>
void UsartPrintf(UART_HandleTypeDef USARTx, char *fmt,...)
{

	unsigned char UsartPrintfBuf[296];
	va_list ap;
	unsigned char *pStr = UsartPrintfBuf;
	
	va_start(ap, fmt);
	vsnprintf((char *)UsartPrintfBuf, sizeof(UsartPrintfBuf), fmt, ap);							//格式化
	va_end(ap);
	
	while(*pStr != NULL)
	{
        HAL_UART_Transmit (&USARTx ,(uint8_t *)pStr++,1,HAL_MAX_DELAY );		
	}

}

②:需要在 usrat.h文件中添加如下代码

#define USART_DEBUG		huart1

void UsartPrintf(UART_HandleTypeDef USARTx, char *fmt,...);

③使用方法,直接调用函数,C文件无需引用#include <stdio.h>头文件

UsartPrintf(USART_DEBUG, "The USART1 is OK!\r\n");

注意:函数参数中 USART_DEBUG 参数为在 usrat.h 中重定义的 huart1 。

        如果您同时打开了USART1和USART2,那么在 usrat.h 中还会有一个 huart2 ,您可以像huart1 一样重定义 huart2 ,可以自定义成其它名字如 COM2 以和其它串口区分开来。

        显然,方法3适用与使用多个串口的情况,比如在使用esp01-s互联网模块时,一个串口用来调试,另外一个用于和模块通信。

stm32串口打印,STM32进阶(CubeMX),stm32,单片机,arm文章来源地址https://www.toymoban.com/news/detail-824649.html

到了这里,关于STM32系列(HAL库) ——使用串口打印的3种方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32-HAL库串口DMA空闲中断的正确使用方式+解析SBUS信号

    能够点进这篇文章的小伙伴肯定是对STM32串口DMA空闲中断接收数据感兴趣的啦,今天用这一功能实现串口解析航模遥控器sbus信号时,查阅了很多网友发布的文章(勤劳的搬运工~),包括自己之前写过一篇博客 STM32_HAL库_CubeMx串口DMA通信(DMA发送+DMA空闲接收不定长数据)。本文

    2024年02月09日
    浏览(64)
  • STM32(HAL库)驱动SHT30温湿度传感器通过串口进行打印

    目录 1、简介 2、CubeMX初始化配置 2.1 基础配置 2.1.1 SYS配置  2.1.2 RCC配置 2.2 软件IIC引脚配置 2.3 串口外设配置  2.4 项目生成  3、KEIL端程序整合 3.1 串口重映射 3.2 SHT30驱动添加 3.3 主函数代 3.4 效果展示 本文通过STM32F103C8T6单片机通过HAL库方式对SHT30传感器进行数据的读取,并

    2024年02月16日
    浏览(40)
  • HAL库_STM32与陶晶驰T1系列串口屏通讯

           利用陶晶驰串口屏设计软件、Kei以及STM32CubeMX软件结合硬件,完成串口屏与单片机之间的简单通信。 32单片机与串口屏连接 串口屏与电源板连接 1.点击新建 2. 选择保存工程的位置,并设置文件名,点击保存 3. 选择串口屏型号,在串口屏的背面可以看到屏幕的型号或者

    2024年02月03日
    浏览(73)
  • 【STM32通讯系列--串口通讯】使用标准库、HAL库实现任意长度数据的收发(包含帧头、帧尾校验,配套完整开源程序)

    【数据组成】串口的通讯协议由开始位,数据位,校验位,结束位构成。 【数据结构】一般以一个低电平作为一帧数据的起始,接着跟随 8 位或者 9 位数据位,之后为校验位,分为奇校验,偶校验和无校验,最后以一个先高后低的脉冲表示结束位,长度可以设置为 0.5,1,

    2024年02月14日
    浏览(43)
  • STM32 HAL库 STM32CubeMx -- 串口的使用(USART/UART)

    在上一篇博客里面写了串口通信的理论知识,在这一篇中将讲述串口通信在STM32CubeMx里面的配置,以及在函数里面怎么使用。 对于串口发送信息,分为三种方法: 串口阻塞方式收发 、 串口中断方式收发 、 串口DMA方式收发 。(DMA方式在之后的DMA章节讲解) 关于STM32CubeMx的基

    2024年02月06日
    浏览(68)
  • 【STM32学习5】STM32使用printf函数 打印到电脑串口助手

    本文所使用的方法与代码参考自正点原子,如果想要详细了解这方面的知识,请阅读正点原子官方提供的文档。 在开发STM32应用时,将一些信息通过串口打印到电脑上是常用的调试手段。C语言标准库中的printf函数是我们常用的打印函数。但是在STM32应用下一般无法直接使用这

    2024年02月02日
    浏览(45)
  • STM32F4_HAL库_串口阻塞/中断/DMA三种方式发送数据的配置

    串口阻塞发送的意思就是,发送一段数据,在没有发送完所有数据之前,一直停留在此发送函数(可设定阻塞时间),这个过程中会阻塞别的程序运行; HAL库的配置分为两个层次,一个是HAL库内部调用的、与MCU硬件相关的初始化xxx_MspInit,一个是我们外部调用的初始化xxx_In

    2023年04月25日
    浏览(49)
  • stm32使用HAL库配置串口中断收发数据(保姆级教程)

    最近在学习使用hal库,之前都是用标准库来写32代码,所以发个帖子记录一下学习过程,同时也希望能帮助到一些也在学习HAL库的同学。 接下来进入正题 串口中断是指当单片机收到一个串口数据时,单片机会产生一个中断信号,通知处理器中断服务程序去处理这个接收到的数

    2024年02月07日
    浏览(40)
  • STM32使用printf重定向到USART(串口)并打印数据到串口助手

    我们知道我们在进行编程的时候,遇到问题,经常通过打印信息进行调试,在java中使用的是System.out.println打印到输出窗口。在C语言中使用的是printf打印到输出窗口。而我们用keil进行编程的时候也是使用的C语言所以也可以使用printf,但是我们知道,keil中没有输出窗口。那我

    2024年02月15日
    浏览(41)
  • STM32在Keil中使用串口助手打印中文字符出现乱码问题

     问题如下,中文字符显示乱码,但数字正常。 通常这种在串口助手打印出现乱码情况: 无非是 波特率设置错误 ,不对应。就像一个滴水的水龙头,水滴进一个循环开合的容器,双方速率不能很好匹配,一定会出现水滴不能完全滴进容器,或者完全滴进或者完全滴不进的情

    2024年02月09日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包