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

相关文章

系统架构师考试学习笔记第三篇——架构设计高级知识(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 比如蓝牙转串口,

FreeRTOS-基本介绍和移植STM32

FreeRTOS-基本介绍和STM32移植 一、裸机开发和操作系统开发介绍二、任务调度和任务状态介绍2.1 任务调度2.1.1 抢占式调度2.1.2 时间片调度 2.2 任务状态 三、FreeRTOS源码和移植STM323.1 FreeRTOS源码3.2 FreeRTOS移植STM323.2.1 代码移植3.2.2 时钟中断配置 一、裸机开发和操作系统开发介绍 裸机:前后台系

寻迹模块TCRT5000的应用原理和功能实现(基于STM32)

目录 概述 1 认识TCRT5000 1.1 模块介绍 1.2 电气特性 2 系统应用 2.1 系统架构 2.2 STM32Cube创建工程 3 功能实现 3.1 代码实现 3.2 源代码文件 4 功能测试 4.1 检测黑线状态 4.2 未检测黑线状态 概述 本文主要介绍TCRT5000模块的使用原理,包括该模块的硬件实现方式,电路实现原理,还使用STM32类

linux中使用rust语言在不同进程之间通信

第一种:使用mmap映射相同文件 fn main() {let pid = std::process::id();println!(

STM32 ADC+DMA导致写FLASH失败

最近用STM32G070系列的ADC+DMA采样时,遇到了一些小坑记录一下; 一、ADC+DMA采样时进入死循环; 解决方法:ADC-dma死循环问题_stm32 adc dma死机-CSDN博客 将ADC的DMA中断调整为最高,且增大ADCHAL_ADC_Start_DMA(&hadc1, (uint32_t*)adc_buffer, ADC_Buffer_Size); 的ADC_Bu

【vue3|第28期】 Vue3 + Vue Router:探索路由重定向的使用与作用

日期:2024年9月8日 作者:Commas 签名:(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释:如果您觉在这里插入代码片得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方,还望各位大佬不吝赐教,谢谢^ - ^ 1.01365 = 37.7834;0.99365 = 0.0255 1.02365 = 1377.4083;0.98365 = 0.0006 说