在嵌入式开发中,调试是一个非常重要的环节。而通过串口输出调试信息是一种常用的调试方法。在 STM32F103 中,我们可以使用标准库实现串口 1 的 printf
打印功能,方便我们在开发过程中输出调试信息。
一、准备工作
- STM32F103C8T6 开发板。
- 安装 Keil MDK 等开发工具。
- 了解 STM32F103C8T6 的串口 1 相关知识。
二、原理分析
printf
是 C 语言标准库中的一个函数,通常用于向标准输出设备(如控制台)输出格式化的文本。在嵌入式系统中,我们可以通过重定向 printf
的输出目标,使其通过串口输出,从而实现在串口上打印调试信息的功能。
三、实现步骤
(一)创建工程
- 打开 Keil MDK,创建一个新的工程。
- 选择 STM32F103C8T6 芯片型号。
(二)配置串口 1
- 在工程中打开
stm32f10x_conf.h
文件,取消对#include "stm32f10x_usart.h"
的注释,使能串口相关的头文件。 - 打开
stm32f10x.h
文件,找到串口 1 的相关定义,如USART1
。 - 在工程的初始化文件中,配置串口 1 的参数,包括波特率、数据位、停止位、校验位等。
void USART1_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);
// Configure USART1 Tx (PA9) as alternate function push-pull
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
// Configure USART1 Rx (PA10) as input floating
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
USART_InitStructure.USART_BaudRate = 115200;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
USART_Init(USART1, &USART_InitStructure);
USART_Cmd(USART1, ENABLE);
}
(三)重定向 printf
- 创建一个新的文件,例如
my_printf.c
。 - 在
my_printf.c
文件中,实现重定向printf
的函数。#include <stdio.h> #include "stm32f10x.h" int fputc(int ch, FILE *f) { USART_SendData(USART1, (uint8_t)ch); while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); return ch; }
- 在工程的主文件中,调用
USART1_Init
函数初始化串口 1,并在需要输出调试信息的地方使用printf
函数int main(void) { USART1_Init(); printf("Hello, STM32F103C8T6!\n"); while (1) { } }
(四)编译和下载
- 编译工程,确保没有错误和警告。
- 将生成的二进制文件下载到 STM32F103C8T6 开发板上。
四、测试结果
当程序运行后,打开串口调试助手,可以看到输出了 “Hello, STM32F103C8T6!” 字符串。这表明我们成功地实现了串口 1 的 printf
打印功能。
五、总结
通过以上步骤,我们成功地在 STM32F103C8T6 上使用标准库实现了串口 1 的 printf
打印功能。这个功能在嵌入式开发中非常实用,可以帮助我们快速定位问题和调试程序。在实际应用中,我们可以根据需要进一步扩展和优化这个功能,以满足不同的调试需求。
希望这篇博客对你在 STM32F103C8T6 开发中实现串口 1 的 printf
打印功能有所帮助。如果在实现过程中遇到任何问题,欢迎在评论区留言交流。
。