# STM32F103 串口打印配置(HAL库)

06-01 1523阅读

下面是在STM32F103上配置串口打印的完整步骤(使用HAL库):

1. 硬件准备

  • STM32F103系列开发板
  • USB转TTL模块(如CH340、CP2102等)
  • 连接线(TX、RX、GND)

    2. CubeMX配置

    1. 打开STM32CubeMX,新建工程选择对应型号

    2. 在"Pinout & Configuration"标签页中:

      • 启用USART1(或其他USART)
      • 模式选择"Asynchronous"
      • 配置引脚(通常PA9-TX, PA10-RX)
      • 参数配置:

        • Baud Rate: 115200
        • Word Length: 8 bits
        • Parity: None
        • Stop Bits: 1
        • Flow Control: None
        • NVIC设置:

          • 启用USART全局中断(如果需要中断接收)
          • 生成代码(选择工具链为MDK-ARM/IAR/其他)

    3. 代码实现

    方法一:使用HAL库直接打印

    #include "main.h"
    #include 
    UART_HandleTypeDef huart1;  // 假设使用USART1
    // 重定向printf到串口
    int __io_putchar(int ch)
    {
        HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, HAL_MAX_DELAY);
        return ch;
    }
    // 或者使用更完整的实现
    int _write(int file, char *ptr, int len)
    {
        HAL_UART_Transmit(&huart1, (uint8_t *)ptr, len, HAL_MAX_DELAY);
        return len;
    }
    // 在主函数初始化后使用
    int main(void)
    {
        HAL_Init();
        SystemClock_Config();
        MX_GPIO_Init();
        MX_USART1_UART_Init();
        
        printf("System initialized!\r\n");
        
        while (1)
        {
            printf("Hello World!\r\n");
            HAL_Delay(1000);
        }
    }
    

    方法二:直接使用HAL_UART_Transmit函数

    void send_string(UART_HandleTypeDef *huart, char *str)
    {
        HAL_UART_Transmit(huart, (uint8_t *)str, strlen(str), HAL_MAX_DELAY);
    }
    // 使用示例
    send_string(&huart1, "Hello via UART\r\n");
    

    4. 项目设置(针对Keil MDK)

    1. 确保在"Options for Target" -> “Target"中勾选了"Use MicroLIB”
    2. 如果使用标准库,需要实现_write或__io_putchar

    5. 常见问题解决

    1. 没有输出:

      • 检查TX/RX接线是否正确(开发板TX接模块RX,开发板RX接模块TX)
      • 检查波特率是否匹配
      • 检查时钟配置是否正确
      • 乱码:

        • 通常是波特率不匹配或时钟配置错误
        • 检查系统时钟和USART时钟配置
        • 只能发送一次:

          • 确保没有在中断服务程序中阻塞
          • 检查硬件流控制设置

    6. 高级功能

    接收数据(中断方式)

    // 在main.c中添加缓冲区
    uint8_t rx_buffer[1];
    // 在初始化后启动接收
    HAL_UART_Receive_IT(&huart1, rx_buffer, 1);
    // 实现接收回调函数
    void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
    {
        if(huart->Instance == USART1)
        {
            // 处理接收到的数据(rx_buffer[0])
            // 重新启动接收
            HAL_UART_Receive_IT(&huart1, rx_buffer, 1);
        }
    }
    

    DMA传输(高效方式)

    // 在CubeMX中启用USART DMA
    // 发送通道选择Memory to Peripheral
    // 接收通道选择Peripheral to Memory
    // 发送数据示例
    uint8_t data[] = "DMA Transfer\r\n";
    HAL_UART_Transmit_DMA(&huart1, data, sizeof(data));
    

    以上配置适用于STM32F103系列大多数型号,根据具体硬件可能需要进行微调。

    # STM32F103 串口打印配置(HAL库)
    (图片来源网络,侵删)
    # STM32F103 串口打印配置(HAL库)
    (图片来源网络,侵删)
    # STM32F103 串口打印配置(HAL库)
    (图片来源网络,侵删)
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

目录[+]

取消
微信二维码
微信二维码
支付宝二维码