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

相关文章

零基础STM32单片机编程入门(一)初识STM32单片机

文章目录 一.概要二.单片机型号命名规则三.STM32F103系统架构四.STM32F103C8T6单片机启动流程五.STM32F103C8T6单片机主要外设资源六.编程过程中芯片数据手册的作用1.单片机外设资源情况2.STM32单片机内部框图3.STM32单片机管脚图4.STM32单片机每个管脚可配功能5.单片机功耗数据6.FALSH编程时间,擦写次数7.I/O高低电平电压表格8.外设接口

通信系统网络架构_2.广域网网络架构

1.概述          通俗来讲,广域网是将分布于相比局域网络更广区域的计算机设备联接起来的网络。广域网由通信子网于资源子网组成。通信子网可以利用公用分组交换网、卫星通信网和无线分组交换网构建,将分布在不同地区的局域网或计算机系统互连起来,实现资源子网的共享。 2.网络组成          广域网属于多级网络,通常由骨干网、分布网、接入网组成。在网络规模较小时,可仅由骨干网和接入网组成

ROS话题通信流程自定义数据格式

ROS话题通信流程自定义数据格式 需求流程实现步骤定义msg文件编辑配置文件编译 在 ROS 通信协议中,数据载体是一个较为重要组成部分,ROS 中通过 std_msgs 封装了一些原生的数据类型,比如:String、Int32、Int64、Char、Bool、Empty… 但是,这些数据一般只包含一个 data 字段,结构的单一意味着功能上的局限性,当传输一些复杂的数据,比如:

使用JWT进行安全通信

在现代Web应用中,安全通信是至关重要的。JSON Web Token(JWT)是一种流行的安全通信方式,它允许用户和服务器之间安全地传输信息。JWT是一种紧凑的、URL安全的表示方法,用于在两方之间传输信息。本文将详细介绍JWT的工作原理,并提供代码示例帮助新人理解和实现JWT。 什么是JWT? JWT是一种开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间以JSO

STM32CubeMX的使用、库、stm32CubeIDE的使用

1.下载和安装 STM32CubeMX的下载和安装: 小白STM32CubeMX的安装与使用_cubemx安装教程-CSDN博客 2.添加库文件 STM32Cube使用的是HAL库和LL库,标准库不知道 下载HAL和LL库 STM32Cube MCU和MPU包: 相关产品 https://www.st.com.cn/zh/embedded-software/stm32

407串口01发送

实验一: 工程。 链接:https://pan.baidu.com/s/1g8DV4yZWOix0BbcZ08LYDQ?pwd=2176 提取码:2176 串口1的使用。发送功能。 单片机发送信息到电脑。 通过串口进行通信。 首先单片机这边。 单片机这边,需要对单片机的串口模块进行使能初始化,设置串口的格式。 单片机和电脑的串口收发格式要配置一致。不然A和B肯定通信不成功,鸡和鸭讲,

STM32单片机PWR电源控制详解

文章目录 1. PWR概述 2. 电源结构框图 3. 上电复位和掉电复位 4. 可编程电压监测器 5. 低功耗模式 6. 模式选择 6.1 睡眠模式 6.2 停止模式 6.3 待机模式 7. 代码示例 1. PWR概述 PWR(Power Control)电源控制,负责管理STM32内部的电源供电部分,可以实现可编程电压监测器和低功耗模式的功能。 可编程电压监测器

xilinx FPGA 串口设计笔记

xilinx FPGA  串口设计笔记 在设计中,需要用 FPGA 读取 GPS 内部的信息,GPS 的通信方式为串口,所以在 FPGA 中移植了串口程序。 本次移植的程序源代码是特权的串口程序,本以为移植应该很快就能完成, 但其中还是 出了一写小问题,耽误了不少的时间,下面将问题进行一个总结! 以下是串口的时序: 在设计中,耽误时间最长的问题就是数据老是出错,为了找出问题

ROS话题通信机制实操C++

ROS话题通信机制实操C++ 创建ROS工程发布方(二狗子)订阅方(翠花)编辑配置文件编译并执行注意订阅的第一条数据丢失 ROS话题通信的理论查阅ROS话题通信流程理论 在ROS话题通信机制实现中,ROS master 不需要实现,且连接的建立也已经被封装了,需要关注的关键点有三个: 发布方(二狗子)订阅方(翠花)数据(此处为普通文本) 创建ROS工程 创建一个ROS工程

毫米波移动通信系统中的波束赋形

在毫米波移动通信系统中,系统的频点较高,因此毫米波系统的射频器件易于小型化,然而同时也带来绕射能力差、穿透损耗大、路径损耗大[4][5]等缺点,这将大大降低了毫米波通信系统的接收功率,其中阻挡效应被认为是制约毫米波应用于移动通信系统的关键因素之一。为了对抗毫米波移动通信系统的噪声受限问题,目前普遍认为在毫米波移动通信系统中将会在发射端和接收端上同时使用天线阵列进行发送和接收[4][5],因此必须要