STM32F103 标准库实现串口 1 printf 打印

        在嵌入式开发中,调试是一个非常重要的环节。而通过串口输出调试信息是一种常用的调试方法。在 STM32F103 中,我们可以使用标准库实现串口 1 的 printf 打印功能,方便我们在开发过程中输出调试信息。

一、准备工作

  1. STM32F103C8T6 开发板。
  2. 安装 Keil MDK 等开发工具。
  3. 了解 STM32F103C8T6 的串口 1 相关知识。

二、原理分析

  printf 是 C 语言标准库中的一个函数,通常用于向标准输出设备(如控制台)输出格式化的文本。在嵌入式系统中,我们可以通过重定向 printf 的输出目标,使其通过串口输出,从而实现在串口上打印调试信息的功能。

三、实现步骤

(一)创建工程

  1. 打开 Keil MDK,创建一个新的工程。
  2. 选择 STM32F103C8T6 芯片型号。

(二)配置串口 1

  1. 在工程中打开 stm32f10x_conf.h 文件,取消对 #include "stm32f10x_usart.h" 的注释,使能串口相关的头文件。
  2. 打开 stm32f10x.h 文件,找到串口 1 的相关定义,如 USART1
  3. 在工程的初始化文件中,配置串口 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

  1. 创建一个新的文件,例如 my_printf.c
  2. 在 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;
    }
  3. 在工程的主文件中,调用 USART1_Init 函数初始化串口 1,并在需要输出调试信息的地方使用 printf 函数
    int main(void)
    {
        USART1_Init();
    
        printf("Hello, STM32F103C8T6!\n");
    
        while (1)
        {
        }
    }

(四)编译和下载

  1. 编译工程,确保没有错误和警告。
  2. 将生成的二进制文件下载到 STM32F103C8T6 开发板上。

 

四、测试结果

        当程序运行后,打开串口调试助手,可以看到输出了 “Hello, STM32F103C8T6!” 字符串。这表明我们成功地实现了串口 1 的 printf 打印功能。

五、总结

        通过以上步骤,我们成功地在 STM32F103C8T6 上使用标准库实现了串口 1 的 printf 打印功能。这个功能在嵌入式开发中非常实用,可以帮助我们快速定位问题和调试程序。在实际应用中,我们可以根据需要进一步扩展和优化这个功能,以满足不同的调试需求。

        希望这篇博客对你在 STM32F103C8T6 开发中实现串口 1 的 printf 打印功能有所帮助。如果在实现过程中遇到任何问题,欢迎在评论区留言交流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值