STM32CubeMX | STM32 串口通信以及串口重定向

2024-06-18 14:32

本文主要是介绍STM32CubeMX | STM32 串口通信以及串口重定向,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、串口配置

  1. 管脚以及参数配置
    羽墨志 | STM32 串口配置
  2. 使能串口中断
    羽墨志 | STM32 使能串口中断
    配置完成并保存后,点击【GENERATE CODE】重新生成代码。

二、串口发送

串口发送调用HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)函数即可。

  1. 定义一个存放串口数据发送的缓冲区:

    /* USER CODE BEGIN 0 */
    uint8_t tx_buff[]="Welcome to 羽墨志\n";
    /* USER CODE END 0 */
    

    【注】自定义添加的代码请放置于/* xx CODE BEGIN xx *//* xx CODE END xx */之间,以免在STM32CubeMX重新生成代码时被覆盖掉。

  2. 串口数据发送
    在while循环中添加如下代码:

/* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */HAL_UART_Transmit(&huart1,(uint8_t *)tx_buff,sizeof(tx_buff)-1,0xffff);HAL_Delay(1000);}/* USER CODE END 3 */

编译下载后,可以看到每隔一秒钟收到一次数据: 羽墨志 | STM32 串口数据发送

三、串口接收

  1. 定义串口数据接收缓冲区

    /* USER CODE BEGIN 0 /
    uint8_t tx_buff[]="Welcome to 羽墨志\n"; // 串口数据发送缓冲区
    uint8_t rx_buffer;  // 串口数据接收缓冲区
    / USER CODE END 0 */
    
  2. 使能串口中断
    main()的初始化部分添加串口中断使能函数:

     /* USER CODE BEGIN 2 */HAL_UART_Receive_IT(&huart1,(uint8_t *)&rx_buffer,1); //使能接收中断/* USER CODE END 2 */
    
  3. 重写串口中断服务函数

    /*** @brief Rewrite callback function for USART1* @retval None*/
    void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
    {UNUSED(huart);if(huart->Instance == USART1)//判断串口号{HAL_UART_Transmit(&huart1,(uint8_t *)&rx_buffer,1,100); // 将接收到的数据再通过串口发送出去HAL_UART_Receive_IT(&huart1, (uint8_t *)&rx_buffer, 1);   //重新使能接收中断}
    }
    

    每次串口接收数据时会自动关闭串口中断,因此在中断回调函数中需要再次使能串口接收中断,一边等待下一次数据接收中断。
    羽墨志 | STM32 串口中断接收

四、串口重定向

  1. 添加标准库头文件
    usart.h文件中添加标准库头文件stdio.h:

    /* USER CODE BEGIN Includes */
    #include <stdio.h>
    /* USER CODE END Includes */
    
  2. 添加重定义函数
    usart.h文件中添加相关的重定向函数:

    /* USER CODE BEGIN 1 */int fputc(int ch, FILE *fp)
    {HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff);return ch;
    }int fgetc(FILE *fp)
    {uint8_t ch = 0;HAL_UART_Receive(&huart1, &ch, 1, 0xffff);return ch;
    }/* USER CODE END 1 */
    
  3. 添加函数声明
    usart.h文件中添加相关的函数声明:

    /* USER CODE BEGIN Prototypes */
    int fputc(int ch, FILE *fp);
    int fgetc(FILE *fp);
    /* USER CODE END Prototypes */
    
  4. 测试
    main函数的while(1)循环中添加如下代码:

     /* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */printf("Hi,yomo!\n");HAL_Delay(1000);}/* USER CODE END 3 */
    

    编译下载后就可以在串口看到一秒打印一次的串口数据了。羽墨志 | STM32 串口重定向

这篇关于STM32CubeMX | STM32 串口通信以及串口重定向的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1072255

相关文章

Nginx 重写与重定向配置方法

《Nginx重写与重定向配置方法》Nginx重写与重定向区别:重写修改路径(客户端无感知),重定向跳转新URL(客户端感知),try_files检查文件/目录存在性,return301直接返回永久重... 目录一.try_files指令二.return指令三.rewrite指令区分重写与重定向重写: 请求

RabbitMQ工作模式中的RPC通信模式详解

《RabbitMQ工作模式中的RPC通信模式详解》在RabbitMQ中,RPC模式通过消息队列实现远程调用功能,这篇文章给大家介绍RabbitMQ工作模式之RPC通信模式,感兴趣的朋友一起看看吧... 目录RPC通信模式概述工作流程代码案例引入依赖常量类编写客户端代码编写服务端代码RPC通信模式概述在R

在Spring Boot中实现HTTPS加密通信及常见问题排查

《在SpringBoot中实现HTTPS加密通信及常见问题排查》HTTPS是HTTP的安全版本,通过SSL/TLS协议为通讯提供加密、身份验证和数据完整性保护,下面通过本文给大家介绍在SpringB... 目录一、HTTPS核心原理1.加密流程概述2.加密技术组合二、证书体系详解1、证书类型对比2. 证书获

Python模拟串口通信的示例详解

《Python模拟串口通信的示例详解》pySerial是Python中用于操作串口的第三方模块,它支持Windows、Linux、OSX、BSD等多个平台,下面我们就来看看Python如何使用pySe... 目录1.win 下载虚www.chinasem.cn拟串口2、确定串口号3、配置串口4、串口通信示例5

基于C#实现MQTT通信实战

《基于C#实现MQTT通信实战》MQTT消息队列遥测传输,在物联网领域应用的很广泛,它是基于Publish/Subscribe模式,具有简单易用,支持QoS,传输效率高的特点,下面我们就来看看C#实现... 目录1、连接主机2、订阅消息3、发布消息MQTT(Message Queueing Telemetr

Nginx部署React项目时重定向循环问题的解决方案

《Nginx部署React项目时重定向循环问题的解决方案》Nginx在处理React项目请求时出现重定向循环,通常是由于`try_files`配置错误或`root`路径配置不当导致的,本文给大家详细介... 目录问题原因1. try_files 配置错误2. root 路径错误解决方法1. 检查 try_f

利用Python调试串口的示例代码

《利用Python调试串口的示例代码》在嵌入式开发、物联网设备调试过程中,串口通信是最基础的调试手段本文将带你用Python+ttkbootstrap打造一款高颜值、多功能的串口调试助手,需要的可以了... 目录概述:为什么需要专业的串口调试工具项目架构设计1.1 技术栈选型1.2 关键类说明1.3 线程模

如何使用Nginx配置将80端口重定向到443端口

《如何使用Nginx配置将80端口重定向到443端口》这篇文章主要为大家详细介绍了如何将Nginx配置为将HTTP(80端口)请求重定向到HTTPS(443端口),文中的示例代码讲解详细,有需要的小伙... 目录1. 创建或编辑Nginx配置文件2. 配置HTTP重定向到HTTPS3. 配置HTTPS服务器

如何使用C#串口通讯实现数据的发送和接收

《如何使用C#串口通讯实现数据的发送和接收》本文详细介绍了如何使用C#实现基于串口通讯的数据发送和接收,通过SerialPort类,我们可以轻松实现串口通讯,并结合事件机制实现数据的传递和处理,感兴趣... 目录1. 概述2. 关键技术点2.1 SerialPort类2.2 异步接收数据2.3 数据解析2.

nginx中重定向的实现

《nginx中重定向的实现》本文主要介绍了Nginx中location匹配和rewrite重定向的规则与应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下... 目录一、location1、 location匹配2、 location匹配的分类2.1 精确匹配2