一、前期准备
1、硬件:
- STM32C8T6最小系统板
- USB-TTL串口模块
- ST-Link下载器
2、软件:
- keil5-IDE
- cubeMX
二、cubeMX配置
1、配置RCC——选择外部时钟源
2、配置SYS—— Serial Wire模式
3、时钟树拉满72M
......
4、配置串口1
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中勾选如下选项
③调用 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互联网模块时,一个串口用来调试,另外一个用于和模块通信。文章来源:https://www.toymoban.com/news/detail-824649.html
文章来源地址https://www.toymoban.com/news/detail-824649.html
到了这里,关于STM32系列(HAL库) ——使用串口打印的3种方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!