STM32F429IGT6使用CubeMX配置串口通信配置DMA

news2025/1/16 13:52:39

1、硬件电路

 

2、设置RCC,选择高速外部时钟HSE,时钟设置为180MHz

3、配置USART1引脚 

 

 

4、生成工程配置

 

5、部分代码

/* USER CODE BEGIN 0 */
volatile uint8_t rx_len = 0;  //接收一帧数据的长度
volatile uint8_t recv_end_flag = 0; //一帧数据接收完成标志
uint8_t rx_buffer[20]={0};  //接收数据缓存数组
uint8_t rx_buffer2[20]={0};  //接收数据缓存数组2
/* USER CODE END 0 */
void MX_USART1_UART_Init(void)
{

    /* USER CODE BEGIN USART1_Init 0 */

    /* USER CODE END USART1_Init 0 */

    /* USER CODE BEGIN USART1_Init 1 */

    /* USER CODE END USART1_Init 1 */
    huart1.Instance = USART1;
    huart1.Init.BaudRate = 115200;
    huart1.Init.WordLength = UART_WORDLENGTH_8B;
    huart1.Init.StopBits = UART_STOPBITS_1;
    huart1.Init.Parity = UART_PARITY_NONE;
    huart1.Init.Mode = UART_MODE_TX_RX;
    huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
    huart1.Init.OverSampling = UART_OVERSAMPLING_16;
    if (HAL_UART_Init(&huart1) != HAL_OK)
    {
        Error_Handler();
    }
    /* USER CODE BEGIN USART1_Init 2 */
    __HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE); //使能串口空闲中断
    HAL_UART_Receive_DMA(&huart1,rx_buffer,BUFFER_SIZE);    //设置DMA传输,将串口1的数据搬运到rx_buffer中,每次BUFFER_SIZE个字节
    /* USER CODE END USART1_Init 2 */
}
void USART1_IRQHandler(void)
{
    /* USER CODE BEGIN USART1_IRQn 0 */
    uint8_t temp_flag = 0; // 数据传输完成标志位
    uint8_t temp;          // DMA未传输的数据个数
    temp_flag = __HAL_UART_GET_FLAG(&huart1, UART_FLAG_IDLE);   //获取串口1是否处于空闲状态
    if (RESET != temp_flag)
    {
        memset(rx_buffer2, 0, BUFFER_SIZE);
        __HAL_UART_CLEAR_IDLEFLAG(&huart1); // 清除空闲中断标志位
        HAL_UART_DMAStop(&huart1);          // 停止DMA传输
        memcpy(rx_buffer2, rx_buffer, BUFFER_SIZE);
        temp = __HAL_DMA_GET_COUNTER(&hdma_usart1_rx);  //获取DMA传输期间剩余的数据量
        rx_len = BUFFER_SIZE - temp; // 接收到的字节数
        recv_end_flag = 1;           // 置位接收完成标志位
    }
    /* USER CODE END USART1_IRQn 0 */
    HAL_UART_IRQHandler(&huart1);
    /* USER CODE BEGIN USART1_IRQn 1 */

    /* USER CODE END USART1_IRQn 1 */
}
    while (1)
    {
        /* USER CODE END WHILE */

        /* USER CODE BEGIN 3 */
        if (1 == recv_end_flag)
        {
            HAL_UART_Transmit(&huart1, rx_buffer2, rx_len, 0xffff);
            printf("\r\n");
            HAL_UART_Transmit_DMA(&huart1, rx_buffer2, rx_len); // 之前此函数(DMA模式)在执行时还没有发送完数据数据就被下面的memset函数清零了(CPU清零),所以增加一个二级缓存数组rx_buffer2用来打印数据
                                                              // 当DMA再次接收到数据触发中断进入中断服务函数时,把rx_buffer2数组清空,这样就能保证代码正常运行。
            printf("\r\n");
            rx_len = 0;
            recv_end_flag = 0;
            memset(rx_buffer, 0, BUFFER_SIZE);
        }
        HAL_UART_Receive_DMA(&huart1, rx_buffer, BUFFER_SIZE); // 设置DMA传输,将串口1的数据搬运到rx_buffer中,每次BUFFER_SIZE个字节
        LED_TIME();
    }
    /* USER CODE END 3 */

6、实验现象

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/869248.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

42. range函数—生成器函数-更新

【目录】 文章目录 1. range( )函数是什么?2. 知识回顾-列表的切片3. range( )函数的语法3.1 range( )函数语法3.2 参数说明3.3 列表切片和range函数的区别 4. 实操练习4.1 参数为一个正整数4.2 参数为04.3 参数为一个负整数4.4 有2个参数4.5 有3个参数4.6 步长为负…

【Freertos基础入门】freertos任务的优先级

文章目录 前言一、任务优先级1.Tick2.修改任务优先级 总结 前言 本系列基于stm32系列单片机来使用freerots 任务管理是实时操作系统(RTOS)的核心功能之一,它允许开发者以并发的方式组织和管理多个任务。FreeRTOS 是一个流行的开源RTOS&…

使用关键词一站式精准搜索指定期刊或会议论文集中的论文

问题描述 如题,例如,想要找点某主题的相关文献,当然要看本领域权威刊物了,假如你想从CCF人工智能类A级期刊找点文本相似度的论文,逐个点开期刊主页进行搜索,那就有点繁琐,不是一站式。 解决方…

小程序商城开发制作

当开发一个商城小程序时,费用是一个非常重要的考虑因素。然而,准确回答这个问题是有一定困难的,因为开发商城小程序的费用取决于多个因素。以下是一些可能影响价格的主要因素: 1. 功能需求:商城小程序的复杂程度和功能…

华为:为员工提供高质量住宿和配套服务,不对外经营房地产业务

华为官方发布声明指出,东莞棠雅实业投资有限公司是一家专门负责建设和管理华为员工园区配套人才房的公司,而不是从事房地产业务的企业。这意味着该公司的主要职责是为华为数万名员工提供高质量的住宿和配套服务,为其创造舒适便利的工作和生活…

[SpringBoot3]基础篇

二、SpringBoot基础篇 2.1什么是SpringBoot SpringBoot是目前流行的微服务框架,倡导“约定优于配置”,其目的是用来简化新Spring应用的初始化搭建以及开发过程。SpringBoot提供了很多核心的功能,比如自动化配置starter(启动器&a…

【配置环境】Linux下安装MySQL

目录 一,环境 二,安装步骤 1.使用包管理器安装MySQL 2.配置MySQL的安全选项 3.设置root用户使用密码进行身份验证(可选) 三,拓展知识 1.如何修改MySQL的密码策略? 一,环境 VMware Workst…

Linux —— 文件系统

目录 一,背景 二,文件系统 一,磁盘简介 磁盘分为SSD、机械磁盘;机械磁盘,即磁盘高速转动,磁头移动到读写扇区所在磁道,让磁头在目标扇区上划过,即可完成对扇区的读写操作&#xff…

数字经济对产业结构升级和创业增长的影响(2011-2021年)

参照刘翠花(2022)的做法,对来自中国人口科学《数字经济对产业结构升级和创业增长的影响》一文中的基准回归部分进行复刻。文章从理论层面分析数字经济发展对产业结构升级、创业增长的影响及其机理,并利用2011-2021年中国省级面板数…

数据结构刷题训练:用栈实现队列(力扣OJ)

目录 前言 1. 题目:用栈实现队列 2. 思路 3. 分析 3.1 定义 “ 队列 ” 3.2 创建队列 3.3 入队 3.4 队头数据 3.5 出队 3.6 判空和销毁 4.题解 总结 前言 栈和队列是数据结构中的两个重要概念,它们在算法和程序设计中都有着广泛的应用。本文将带你深入了…

K8S系列文章之 Docker安装使用Kafka

通过Docker拉取镜像的方式进行安装 照例先去DockerHub找一下镜像源,看下官方提供的基本操作(大部分时候官方教程比网上的要清晰一些,并且大部分教程可能也是翻译的官方的操作步骤,所以直接看官方的就行) 老实说Kafka…

EVE-NG MPLS L2VPN BGP pw -- static route,static mpls lsp

1 拓扑 2 配置步骤 2.1 配置接口IP 和静态路由 PE1 interface LoopBack 0ip address 1.1.1.9 32 quitinterface GigabitEthernet 1/0ip address 10.1.1.1 255.255.255.0quitip route-static 2.2.2.9 32 10.1.1.2 ip route-static 3.3.3.9 32 10.1.1.2 P interface LoopBac…

AI绘图(4)stable diffusion如何写好prompt 二

在进行绘制时,会添加很多的风格或细节来进行描述土拍你,当然也会由一些专业的词汇,如广角、相片、3d模型等,下面我们就会具体进行介绍。 1、「风格」的提示词 相片(photshop)、3D建模(3d model)、装饰艺术(art deco)、石像(ston…

Matlab时频工具箱tftb下载及安装

Matlab 时频工具箱下载及安装 首先下载安装包安装包地址如下 链接: https://tftb.nongnu.org/ 点击下面的download 跳转到如下界面,选择下面的安装包下载 下载之后得到一个压缩包 然后找到Matlab的安装目录,右键桌面图标,打开文件所在位置…

怎么申请Tik Tok海外菲律宾公会呢?

2023年是承上启下的一年,对于TIKTOK来说是一个大的机遇和风口,是大势所趋;相对于其他的跨境电商平台,Y马逊、X皮、S卖通这些传统电商平台来说,TikTok是属于兴趣电商,和国内DY是一样的,它的平台运营规申请cm…

论文阅读:《Waymo Public Road Safety Performance Data》

文章目录 1 背景2 方法2.1 数据来源2.2 碰撞数据 3 碰撞事件分析4 讨论 1 背景 这篇文章是讲waymo道路安全性能数据分析的,主要想表达的是waymo自动驾驶系统在安全上面的出色表现,以向政府、大众提高自己产品的公信力。 这篇文章分析的数据是自从2019年到…

防火墙组建双击热备后,点击管理对端设备,老是打不开,怎么办?

环境: 防火墙 8.0.75 AF-2000-FH2130B-SC 问题描述: 防火墙组建双击热备后,点击管理对端设备,老是打不开,怎么办? 浏览器老是加载 解决方案: 1.打开设置查看双机连接的心跳接口是哪个端口 …

SpringBoot复习:(36)国际化

一、Resources目录下建立一个目录(比如international)来存储资源文件 message.properties 空的,但不能没有 message_zh_CN.properties hello您好message_en_us.properties hellohello world二、自动配置类MessageSourceAutoConfiguration 常量MESSAGE…

深度学习常用的python库学习笔记

文章目录 数据分析四剑客Numpyndarray数组和标量之间的运算基本的索引和切片数学和统计方法线性代数 PandasMatplotlibPIL 数据分析四剑客 Numpy Numpy中文网 ndarray 数组和标量之间的运算 基本的索引和切片 数学和统计方法 线性代数 Pandas Pandas中文网 Matplotlib Mat…

ThinkPHP成考学员管理平台

有需要请加文章底部Q哦 可远程调试 ThinkPHP成考学员管理平台 一 介绍 成考学员管理平台基于FastAdmin框架开发,数据库mysql,是一款针对学员,教师,专业,课程,成绩,学费等信息管理的系统&#…