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

相关文章

利用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

Python实现文件下载、Cookie以及重定向的方法代码

《Python实现文件下载、Cookie以及重定向的方法代码》本文主要介绍了如何使用Python的requests模块进行网络请求操作,涵盖了从文件下载、Cookie处理到重定向与历史请求等多个方面,... 目录前言一、下载网络文件(一)基本步骤(二)分段下载大文件(三)常见问题二、requests模块处理

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

【STM32】SPI通信-软件与硬件读写SPI

SPI通信-软件与硬件读写SPI 软件SPI一、SPI通信协议1、SPI通信2、硬件电路3、移位示意图4、SPI时序基本单元(1)开始通信和结束通信(2)模式0---用的最多(3)模式1(4)模式2(5)模式3 5、SPI时序(1)写使能(2)指定地址写(3)指定地址读 二、W25Q64模块介绍1、W25Q64简介2、硬件电路3、W25Q64框图4、Flash操作注意事项软件SPI读写W2

vue2 组件通信

props + emits props:用于接收父组件传递给子组件的数据。可以定义期望从父组件接收的数据结构和类型。‘子组件不可更改该数据’emits:用于定义组件可以向父组件发出的事件。这允许父组件监听子组件的事件并作出响应。(比如数据更新) props检查属性 属性名类型描述默认值typeFunction指定 prop 应该是什么类型,如 String, Number, Boolean,

STM32(十一):ADC数模转换器实验

AD单通道: 1.RCC开启GPIO和ADC时钟。配置ADCCLK分频器。 2.配置GPIO,把GPIO配置成模拟输入的模式。 3.配置多路开关,把左面通道接入到右面规则组列表里。 4.配置ADC转换器, 包括AD转换器和AD数据寄存器。单次转换,连续转换;扫描、非扫描;有几个通道,触发源是什么,数据对齐是左对齐还是右对齐。 5.ADC_CMD 开启ADC。 void RCC_AD

STM32内部闪存FLASH(内部ROM)、IAP

1 FLASH简介  1 利用程序存储器的剩余空间来保存掉电不丢失的用户数据 2 通过在程序中编程(IAP)实现程序的自我更新 (OTA) 3在线编程(ICP把整个程序都更新掉) 1 系统的Bootloader写死了,只能用串口下载到指定的位置,启动方式也不方便需要配置BOOT引脚触发启动  4 IAP(自己写的Bootloader,实现程序升级) 1 比如蓝牙转串口,