news 2026/7/17 21:03:26

QJ32F407 USART串口_DMA发送和接收

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
QJ32F407 USART串口_DMA发送和接收

CubeMx设置串口

设置PB11和PB10为串口3的GPIO

设置波特率

设置中断

开启发送接收DMA

编写测试代码

/* USER CODE BEGIN Header *//** ****************************************************************************** * @file : main.c * @brief : Main program body ****************************************************************************** * @attention * * Copyright (c) 2026 STMicroelectronics. * All rights reserved. * * This software is licensed under terms that can be found in the LICENSE file * in the root directory of this software component. * If no LICENSE file comes with this software, it is provided AS-IS. * ****************************************************************************** *//* USER CODE END Header *//* Includes ------------------------------------------------------------------*/#include"main.h"#include"dma.h"#include"usart.h"#include"gpio.h"/* Private includes ----------------------------------------------------------*//* USER CODE BEGIN Includes *//* USER CODE END Includes *//* Private typedef -----------------------------------------------------------*//* USER CODE BEGIN PTD *//* USER CODE END PTD *//* Private define ------------------------------------------------------------*//* USER CODE BEGIN PD *//* USER CODE END PD *//* Private macro -------------------------------------------------------------*//* USER CODE BEGIN PM *//* USER CODE END PM *//* Private variables ---------------------------------------------------------*//* USER CODE BEGIN PV */uint8_tRX_Buff_FLAG=0;uint8_tRX_Buff[300]={0};uint8_tTX_Buff[300]={0};intRX_Length=0;/* USER CODE END PV *//* Private function prototypes -----------------------------------------------*/voidSystemClock_Config(void);/* USER CODE BEGIN PFP *//* USER CODE END PFP *//* Private user code ---------------------------------------------------------*//* USER CODE BEGIN 0 */// 串口接收空闲函数voidHAL_UARTEx_RxEventCallback(UART_HandleTypeDef*huart,uint16_tSize){if(huart==&huart3){RX_Buff_FLAG=1;RX_Length=300-__HAL_DMA_GET_COUNTER(huart->hdmarx);HAL_UARTEx_ReceiveToIdle_DMA(&huart3,RX_Buff,300);}}/* USER CODE END 0 *//** * @brief The application entry point. * @retval int */intmain(void){/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_DMA_Init();MX_USART3_UART_Init();/* USER CODE BEGIN 2 */// 启动串口DMA接收HAL_UARTEx_ReceiveToIdle_DMA(&huart3,RX_Buff,300);/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while(1){HAL_GPIO_WritePin(GPIOF,GPIO_PIN_6,GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOF,GPIO_PIN_7,GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOF,GPIO_PIN_8,GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOF,GPIO_PIN_9,GPIO_PIN_SET);HAL_Delay(100);HAL_GPIO_WritePin(GPIOF,GPIO_PIN_6,GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOF,GPIO_PIN_7,GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOF,GPIO_PIN_8,GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOF,GPIO_PIN_9,GPIO_PIN_RESET);HAL_Delay(100);// 发送数据TX_Buff[0]=0x01;TX_Buff[1]=0x02;TX_Buff[2]=0x03;TX_Buff[4]=RX_Buff[0];TX_Buff[5]=RX_Buff[1];TX_Buff[6]=RX_Buff[2];HAL_UART_Transmit_DMA(&huart3,TX_Buff,10);/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */}/** * @brief System Clock Configuration * @retval None */voidSystemClock_Config(void){RCC_OscInitTypeDef RCC_OscInitStruct={0};RCC_ClkInitTypeDef RCC_ClkInitStruct={0};/** Configure the main internal regulator output voltage */__HAL_RCC_PWR_CLK_ENABLE();__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);/** Initializes the RCC Oscillators according to the specified parameters * in the RCC_OscInitTypeDef structure. */RCC_OscInitStruct.OscillatorType=RCC_OSCILLATORTYPE_HSE;RCC_OscInitStruct.HSEState=RCC_HSE_ON;RCC_OscInitStruct.PLL.PLLState=RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource=RCC_PLLSOURCE_HSE;RCC_OscInitStruct.PLL.PLLM=4;RCC_OscInitStruct.PLL.PLLN=168;RCC_OscInitStruct.PLL.PLLP=RCC_PLLP_DIV2;RCC_OscInitStruct.PLL.PLLQ=4;if(HAL_RCC_OscConfig(&RCC_OscInitStruct)!=HAL_OK){Error_Handler();}/** Initializes the CPU, AHB and APB buses clocks */RCC_ClkInitStruct.ClockType=RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;RCC_ClkInitStruct.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK;RCC_ClkInitStruct.AHBCLKDivider=RCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDivider=RCC_HCLK_DIV4;RCC_ClkInitStruct.APB2CLKDivider=RCC_HCLK_DIV2;if(HAL_RCC_ClockConfig(&RCC_ClkInitStruct,FLASH_LATENCY_5)!=HAL_OK){Error_Handler();}}/* USER CODE BEGIN 4 *//* USER CODE END 4 *//** * @brief This function is executed in case of error occurrence. * @retval None */voidError_Handler(void){/* USER CODE BEGIN Error_Handler_Debug *//* User can add his own implementation to report the HAL error return state */__disable_irq();while(1){}/* USER CODE END Error_Handler_Debug */}#ifdefUSE_FULL_ASSERT/** * @brief Reports the name of the source file and the source line number * where the assert_param error has occurred. * @param file: pointer to the source file name * @param line: assert_param error line source number * @retval None */voidassert_failed(uint8_t*file,uint32_tline){/* USER CODE BEGIN 6 *//* User can add his own implementation to report the file name and line number, ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) *//* USER CODE END 6 */}#endif/* USE_FULL_ASSERT */

代码运行结果

串口工具接收和发送数据

01 02 03 00 00 00 00 00 00 00 01 02 03 00 00 00 00 00 00 00 01 02 03 00 00 00 00 00 00 00 01 02 03 00 00 00 00 00 00 00 01 02 03 00 00 00 00 00 00 00 01 02 03 00 00 00 00 00 00 00 01 02 03 00 00 00 00 00 00 00 01 02 03 00 00 00 00 00 00 00 01 02 03 04 05 06 01 02 03 00 01 02 03 00 00 00 01 02 03 00 01 02 03 00 00 00 01 02 03 00 01 02 03 00 00 00 01 02 03 00 01 02 03 00 00 00 01 02 03 00 01 02 03 00 00 00 01 02 03 00 01 02 03 00 00 00 01 02 03 00 01 02 03 00 00 00 01 02 03 00 01 02 03 00 00 00 01 02 03 00 01 02 03 00 00 00 01 02 03 00 01 02 03 00 00 00

示例工程

https://download.csdn.net/download/hmxm6/93126339

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/17 20:59:17

YOLO26涨点改进| ECCV 2026 | 下采样涨点改进篇 | 引入FSD-Down频域-空间动态下采样,在下采样过程中保留小目标的高频信息,助力小目标检测、图像分类、图像分割任务,有效涨点

一、本文介绍 🔥本文给大家介绍使用 FSD-Down频域-空间动态下采样 改进YOLO26网络模型,FSD-Down利用小波分解显式保留低频语义以及水平、垂直和对角方向的高频细节,并通过分组卷积、动态通道权重和可学习缩放因子,自适应强化目标边缘、纹理与局部对比度,同时减轻传统步长…

作者头像 李华
网站建设 2026/7/17 20:58:54

omni-note 使用指南(二) quick-start

一、运行说明 ubuntu 22.04 系统下运行 # 解压 tar -xf omni-note-linux-x64.tar.xz1 准备 instance 运行时数据 启动前需准备好 instance/ 运行时数据(配置、模型、工具、字体、PPT 模板、研究输出目录等)。统一的数据准备步骤见 数据准备。 2 启动…

作者头像 李华
网站建设 2026/7/17 20:57:27

Claude公开分享与多人协作功能详解:企业级AI团队应用指南

这次我们来看 Anthropic 推出的 Claude 公开分享与多人协作功能。作为 AI 领域的头部企业,Anthropic 这次更新主要面向团队和企业用户,让 Claude 从个人助手升级为团队协作平台。如果你在寻找团队内部的知识管理、项目协作和 AI 助手共享方案&#xff0c…

作者头像 李华
网站建设 2026/7/17 20:57:04

GPT-Live实时语音交互:双工通信与上下文管理技术解析

在实际语音交互项目中,实现自然流畅的实时对话一直是个技术难点。传统的语音模型往往采用轮流发言的模式,用户必须等待AI回应结束后才能继续说话,这种交互方式缺乏真人对话的连贯性和自然感。OpenAI最新推出的GPT-Live语音模型突破了这一限制…

作者头像 李华
网站建设 2026/7/17 20:56:36

java基础入门技术笔记

概述 本次Java基础学习面向编程小白,核心掌握Java基础核心知识点,包含常用数据类型、变量定义、两大核心循环语句(while循环、for循环)、分支判断、关键字以及基础运算符等内容。通过实操代码案例,熟悉基础语法的使用规…

作者头像 李华