问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

STM32串口配置与使用详解:从基本配置到printf重定义

创作时间:
作者:
@小白创作中心

STM32串口配置与使用详解:从基本配置到printf重定义

引用
CSDN
1.
https://blog.csdn.net/weixin_60324241/article/details/139352303

本文将详细介绍STM32微控制器中串口的配置和使用方法,包括基本配置、发送接收函数、串口重定义以及printf函数的使用等。通过本文的学习,读者将能够掌握STM32串口通信的基本原理和具体实现方法。

1. 串口的基本配置

在CubeMX中配置串口时,首先需要选择USART1,并选择异步通信模式。接下来设置波特率,这将影响串口通信的速度和稳定性。

配置完成后,串口将在右侧显示为点亮状态。串口引脚主要用于与其他设备进行通信,例如在程序中通过串口打印信息时,可以在电脑上的串口助手软件中接收到这些信息。

2. 串口的发送接收函数

STM32提供了多种串口发送和接收函数,以满足不同的应用场景需求:

  • HAL_UART_Transmit(): 使用超时管理机制发送数据
  • HAL_UART_Receive(): 使用超时管理机制接收数据
  • HAL_UART_Transmit_IT(): 中断模式发送数据
  • HAL_UART_Receive_IT(): 中断模式接收数据
  • HAL_UART_Transmit_DMA(): DMA模式发送数据
  • HAL_UART_Receive_DMA(): DMA模式接收数据

例如,使用HAL_UART_Transmit()函数发送数据的示例代码如下:

HAL_UART_Transmit(&huart1, (uint8_t *)"hello windows!\r\n", 16 , 0xffff);

3. 串口重定义

在需要使用printf函数发送数据时,可以在源文件中添加串口重定义代码:

#include "stdio.h"
#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif
PUTCHAR_PROTOTYPE
{
    HAL_UART_Transmit(&huart1 , (uint8_t *)&ch, 1, 0xFFFF);
    return ch;
}

4. printf串口使用卡死问题

在实际使用中,可能会遇到配置了串口并重定义了printf函数后,程序下载运行时出现死机的问题。这通常是由于某些编译器选项未正确设置导致的。解决方案是在CubeMX中勾选相应的选项,以确保printf函数能够正常工作。

5. 串口发送

使用HAL_UART_Transmit_IT()函数可以实现中断模式下的串口发送。如果已经对printf函数进行了重定义,也可以直接使用printf函数发送数据:

printf("ddd\r\n");

6. 串口接收

串口接收需要定义串口接收回调函数。首先在main()函数中添加串口接收函数调用:

HAL_UART_Receive_IT(&huart1,(uint8_t *)&rxbuff1,1);

然后在主文件中定义串口接收回调函数:

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
    if (huart->Instance == USART1)
    {
        if (rxbuff1 == '\n')
        {
            printf("发送的数据是:%s\r\n",uart1_txbuff);   //发送回显语句
            uart1_rx_cnt = 0;
        }
        else
        {
            uart1_txbuff[uart1_rx_cnt]=rxbuff1;
            uart1_rx_cnt ++;
        }
        HAL_UART_Receive_IT(&huart1,(uint8_t *)&rxbuff1,1);
    }
}

通过以上步骤,可以实现STM32串口的完整配置和使用。希望本文能够帮助读者更好地理解和掌握STM32串口通信的相关知识。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号