首页 > 其他分享 >stm32使用cubumx配置串口不定长接收

stm32使用cubumx配置串口不定长接收

时间:2024-09-11 20:51:37浏览次数:12  
标签:DMA HAL cubumx rx RX MAXBUFF stm32 串口 size

前言

此方法利用stm32的uart+dma来实现不定长接收,利用dma中的空闲中断。

设置USART1 为异步通信方式 使能串口1全部中断

设置USART1_RX的DMA中断接收 

速度设置最大(其实用115200没有影响 但为保证工程严谨性)

检查中断优先级 这两个中断是否开启  

生成代码后 

引入头文件

#include "stdio.h"
#include "string.h"

创建变量缓存和引用外部DMA的结构体

extern DMA_HandleTypeDef hdma_usart1_rx;
#define RX_MAXBUFF 64 //接收数组缓存最大值 64
uint8_t rx_buf[RX_MAXBUFF]; //接收缓存
uint8_t rx_sta=0; //接收状态 1:有数据   0:无数据
uint8_t rx_size=0; //接收数据大小

在main函数中 “MX_USART1_UART_Init();”后面加上使能DMA空闲中断和关闭DMA_IT_HT标志位

  MX_USART1_UART_Init(); ///这句由自动生成
  /* USER CODE BEGIN 2 */
		HAL_UARTEx_ReceiveToIdle_DMA(&huart1,rx_buf,RX_MAXBUFF*2);
	__HAL_DMA_DISABLE_IT(&hdma_usart1_rx,DMA_IT_HT);

while循环中用来打印显示收到的数据

 while (1)
  {
		if(rx_sta == 1)
		{
			rx_sta = 0;
			
			if(rx_size < 64)
				printf("rx_size:%d ;rx_buff:%s \r\n",rx_size,rx_buf);
			else
				printf("rxbuff_overflow!!\r\n");
			
			memset(rx_buf,0,RX_MAXBUFF);	
		}
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }

串口中断函数

/* USER CODE BEGIN 4 */
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{
	if(huart->Instance == USART1)
	{
		rx_sta = 1;
		rx_size = Size;
		HAL_UARTEx_ReceiveToIdle_DMA(&huart1,rx_buf,RX_MAXBUFF*2);
	}
}

printf打印函数 同时使MicroLIB库

int fputc(int ch,FILE *f)
{
	HAL_UART_Transmit(&huart1,(uint8_t *)&ch,1,100);
	return ch;
}

标签:DMA,HAL,cubumx,rx,RX,MAXBUFF,stm32,串口,size
From: https://blog.csdn.net/m0_67278762/article/details/142148422

相关文章

  • stm32单片机遥控美的空调
    一、硬件清单1.STM32F103核心板2.红外发射传感器(38Khz)二、空调遥控原理及应用空调主机内设有红外接收管,通过红外发射管按照特定协议向空调主机发射信号,即可实现对空调温度、风速、模式等的控制。普通遥控器便是采用这样的方式进行操控。而若将此模块集成于我们的项目当中,......
  • STM32学习笔记——中断
    中断:在主程序运行过程中,出现了特定事件(例如发生已经预知的一些情况),从而转入中断程序中,处理完成后再回到主程序中继续执行。(频繁的中断函数会影响主程序的运行,所以中断函数一边不处理特别复杂的逻辑)EXTI(ExternInterrupt)外部中断支持的触发方式:上升沿/下降沿/双边沿/软件触发支......
  • 超声波 HC-SR04 的使用 CubeMx + STM32F103C8T6 【含两个】
    HC-SR04的使用一、超声波模块介绍二、工作原理介绍三、接线方式四、驱动方式方法一方法二五、程序实现串口查看数据方法一HC_SR04.cHC_SR04.hmain.cmain.h串口数据显示方法二main.cmain.h六、数据处理一、超声波模块介绍HC-SR04是一种常用的超声波测距模块。......
  • vscode+eide配置stm32开发环境
    本博客记录本人使用Vsocde配合eide插件配置stm32的流程,纯小白,个人学习使用(OpenOCD)需要配合keil5使用先根据江科大的stm32视频在keil中配置工程。安装实用工具。打开eide的插件设置。更改这两个目录(此处已更改),即在自己的keil5安装目录下找到对应的文件地址,复制粘贴过......
  • stm32 I2C通信与MPU6050(软件I2C读写MPU6050)
    理论1.同步时序与异步时序同步时序和异步时序是信号传输和时序控制中的两种基本类型:同步时序:定义:所有信号变化都与一个共同的时钟信号同步。所有的数据传输和处理操作都在时钟信号的边沿触发。优点:时序控制较为简单,易于设计和调试。系统的整体时序一致性高,适用于高精度要......
  • FatFs文件系统的移植---(STM32标准库)
    官网最新版本:http://elm-chan.org/fsw/ff/00index_e.html一、下载最新版本FATFA文件系统在这里不多做介绍了,只展示移植过程和使用方法(结尾有修改好的代码)二、移植代码1.解压文件压缩包里面有两个文件:documents是一些帮助文档,不需要管;source里面是源码,把里面全部的文件复......
  • 最快最简单的使用gcc编译stm32
    在Windows下最快最简单的使用gcc编译stm32在Windows下使用gcc编译stm通常需要许多准备工作minGW(编译c文件)gcc-arm-none-eabi(翻译到arm)make(编译链接的工具)makefile(该项目编译链接的规则)如果想快捷的尝试使用gcc编译编译出软件并运行的话,我推荐一个简单快速的方案......
  • STM32获取温度3种方法
    在STM32微控制器上直接获取CPU温度并不像在一些包含内置温度传感器的高端微处理器(如某些ARMCortex-A处理器)上那样直接。STM32微控制器通常不内置专门的温度传感器。不过,你可以通过几种方法来估算或测量与CPU温度相关的数据。方法一:外部温度传感器添加温度传感器:使用如DS1......
  • STM32-ADC外设
    1.通道.规则通道.注入通道2.规则序列寄存器配置通道的采样顺序3.ADC周期4.ADC转换方式*单次转换:adc每次只采集某个通道的一个点,如果需要再次采集,就需要重新使能。*连续转换:adc采集某个通道一个点,转换完成后,再采集第二点。依次类推4.扫描模式*单次扫描模式:多个通道只扫......
  • STM32F7外设FMC控制LCD显示屏
    STM32F7外设FMC控制LCD显示屏,显示屏的点阵LCD控制器(DotMatrixLCDController/Driver)是ST7066U。配置在CubeMX中选择图1根据实际情况选择,Bank几,LCD片选引脚。图2FMC原理对于FMC如何控制LCD,我的理解:FMC能自动发送数据读写RAM,通过FMC读写LCD的显存就可以完成显示的......