欢迎光临散文网 会员登陆 & 注册

STM32CUBEMX(2)--USART通过DMA方式接收不定长数据

2021-05-26 12:55 作者:记帖  | 我要投稿


概述

    直接存储器访问(DMA)用于在外设与存储器之间以及存储器与存储器之间提供高速数据传输。可以在无需任何CPU操作的情况下通过DMA快速传输传输。这样节省的CPU资源可供其它操作使用。

    DMA允许在后台执行数据传输,无需Cortex-MO处理器干预。在此操作过程中,主处理器可以执行其它任务,仅当整个数据块需要处理时,才会中断主处理器。这样即使传输大量数据也不会对系统性能造成太大影响。

    DMA主要用于为不同的外设模块实现集中数据缓冲存储(通常在系统SRAM中)。与分布式解决方案(其中每个外设都需要实现自己的本地数据存储)相比,DMA解决方案在硅片成本和功耗方面的成本较低。

    根据使用的产品型号的不同,有一个或两个DMA模块。

    STM32F0XX DMA控制器总共有5个通道用于DMA1,每个通道都专门管理来自一个或多个外设的存储器访问请求。它具有一个仲裁器,用于处理不同的DMA请求的优先级。

    本篇文章主要介绍如何使用STM32CubeMX实现串口DMA读取,并且打印出去。

硬件准备

    首先需要准备一个开发板,这里我准备的是NUCLEO-F030R8的开发板:

选择芯片型号

    使用STM32CUBEMX选择芯片stm32f030r8,如下所示:

配置时钟源

   HSE与LSE分别为外部高速时钟和低速时钟,在本文中使用内置的时钟源,故都选择Disable选项,如下所示:

配置时钟树

    STM32F0的最高主频到48M,所以配置48即可:

串口配置

    本次实验使用的串口1进行串口通信,波特率配置为115200。

    配置DMA

    中断

生成工程设置

代码生成设置

最后设置生成独立的初始化文件:

生成代码

配置keil

代码

    在main.c中,添加头文件,若不添加会出现 identifier “FILE” is undefined报错。

/* USER CODE BEGIN Includes */

#include "stdio.h"

/* USER CODE END Includes */

    变量定义:

    函数声明和串口重定向:

    开启串口IDLE中断:

    主循环:

    串口DMA获取:

    #include "stm32f0xx_it.c"文件中断外部变量引用:

    串口1中断函数:

演示效果

教学视频




STM32CUBEMX(2)--USART通过DMA方式接收不定长数据的评论 (共 条)

分享到微博请遵守国家法律