调试笔记2:SPI+DMA

2023-05-16

一、内容简介

说明:关于DMA,SPI的基本知识这里不做介绍。本文只讲述SPI+DMA的实现。这里仅实现从外设到内存。从内存到外设也可以参考修改。

目的:使用STM32作为SPI从机接收数据,使用DMA将SPI中接收的数据直接存入设置好的内存区。

外设:SPI。

DMA传输方向:外设到内存。

二、代码编写流程

1.SPI初始化函数

(1)先上代码:

 (2)代码编写说明

第一步,开启外设时钟,RCC_APB2PeriphClockCmd();

第二步,初始化对应IO口,GPIO_Init();

第三步,配置SPI中断的优先级,不使用可以不配置,我就没使用,忘删了(手动狗头)

第四步,SPI初始化

2.DMA初始化函数

(1)代码

 (2)说明

几个重要的,需要根据自己实际情况设置:外设基地址(spi就是这个dr寄存器地址)、内存基地址(想存在哪个数组,就粘过来)、数据传输方向、工作模式。其他的根据实际情况再说。

关于工作模式,如果只接收一次,可以选择单次模式。如果是多次且每次接收数据长度一致,可以用循环模式。如果是多次不定长,使用单次模式,每次接收完开启下一次接收并配置接收长度。

3.调用

配置完初始化函数便可以在轮询前调用他们。

 USER_SPI_Init();//SPI初始化

SPI_DMA_Config();//DMA初始化

SPI_I2S_DMACmd(SPI1, SPI_I2S_DMAReq_Rx, ENABLE); //使能spi1 dma接收

DMA_Cmd(DMA1_Channel2, ENABLE);//使能dma1通道2

为什么是dma1通道2?见参考手册,自己去查。

到这里SPI+DMA已经可以工作了,只要从SPI接收到数据,DMA便可以将此存入内存。其他地方仅需访问该内存,便可获取SPI接收到的数据。

4.如何判断数据是否传输完成?

DMA_GetFlagStatus(DMA1_FLAG_TC2);

粘一个我轮询里用到的:

这个传输完成标志需要程序清除,不然第一次传输完成后便一直是传输完成。

库函数里也有传输过半标志,传输出错标志。我没有使用就不粘了,感兴趣自行测试。

刚刚上班,欢迎交流。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

调试笔记2:SPI+DMA 的相关文章

  • STM32】 DMA原理,步骤超细详解,一文看懂DMA

    如需转载请注明地址 xff1a https blog csdn net as480133937 article details 104927922 DMA的基本介绍 什么是DMA DMA的基本定义 DMA xff0c 全称Direct Me
  • stm32HAL库 串口接收不定长数据(DMA传输)

    相信大家很多初学者都会遇到串口接收不定长数据的情况 对于初学者可能看着有点难理解 xff0c 多看几遍就好 xff0c 亲测能用 话不多说上菜上菜 xff01 xff01 xff01 xff01 此代码是本人在具体工程应用 xff0c 实测
  • 【STM32】HAL库-SPI

    3线全双工同步传输 带或不带第三根双向数据线的双线单工同步传输 8或16位传输帧格式选择 主或从操作 支持多主模式 8个主模式波特率预分频系数 最大为fPCLK 2 从模式频率 最大为fPCLK 2 主模式和从模式的快速通信 主模式和从模式
  • 16. GD32F103C8T6入门教程-adc 使用教程2-dma+连续扫描方式采集数据

    adc 使用教程2 dma 连续扫描方式采集数据 adc 的扫描模式就是把配置了规则或注入通道按照配置的顺序采集一轮 adc 的连续转换模式就是把配置了规则或注入通道按照配置的顺序采集N轮 注意 dma使用时存在一个外设映射到一个dam外设
  • Jlink使用技巧之烧写SPI Flash存储芯片

    文章目录 前言 准备 硬件连接 1 打开 2 连接SPI Flash芯片 3 打开程序文件 4 下载 5 程序文件的读取 6 程序文件的保存 7 命令行工具的使用 支持的芯片列表 速度说明 参考资料 JLink软件的下载 前言 大多数玩单片
  • FreeRTOS例程4-串口DMA收发不定长数据

    FreeRTOS例程4 串口DMA收发不定长数据 知乎 zhihu com
  • Raspberry Pi 与Arduino SPI通信

    本教程介绍了使用SPI 串行外围设备接口总线 进行Raspberry Pi与Arduino通讯和控制的基本框架 SPI代表了一种非常完善的芯片间通信方法 该方法在两种设备的硬件中均实现 在这里 我们将详细探讨SPI 讨论硬件和软件注意事项
  • DMA基本概念与常见寄存器设置

    什么是DMA DMA Direct Memory Access 即直接存储访问 DMA传输方式无需CPU直接控制传输 通过硬件为RAM I O设备开辟一条直接传输数据的通路 能使CPU的效率大为提高 每一种体系结构DMA传输不同 编程接口也
  • STM32通用定时器(原理、结构体、库函数、定时器中断每秒闪烁一次灯) —— 时钟源、分频值、重装载值

    参考 stm32定时器与定时器中断 作者 打酱油的 发布时间 2021 04 11 01 04 09 网址 https blog csdn net weixin 46098612 article details 115493737 参考 s
  • 难懂?这样理解SPI与CAN很简单!

    难懂 这样理解SPI与CAN很简单 什么是串行通讯 为什么仍需使用串行通讯 SPI与CAN SPI 接口特点 CAN现场总线特点 什么是串行通讯 在正式进入主题前 我么先来介绍一下什么叫做 串行通信 串行通信是计算机的一种数据传输通信方式
  • CH347读写SPI Flash

    前面耽搁了几天 今天终于把CH347 SPI接口调试好了 CH347动态库中SPI接口函数如下 typedef struct SPI CONFIG UCHAR iMode 0 3 SPI Mode0 1 2 3 UCHAR iClock 0
  • SD卡系列之---SD初始化(SPI)

    SD卡分为SDIO模式与SPI模式 SDIO模式使用SD总线协议 使用4根数据线进行数据传输 SPI使用1收1发2根数据线数据传输 理论上SDIO模式会比SPI模式速度快4倍 但SDIO模式还牵扯到CRC校验位的计算 所以 如果使用CPU有
  • STM32CubeMX HAL库串口+DMA+IDLE空闲中断不定长度数据接收和发送

    本文开发环境 MCU型号 STM32F103ZET6 IDE环境 MDK 5 29 代码生成工具 STM32CubeMx 5 3 0 HAL库版本 STM32Cube FW F1 V1 8 0 STM32Cube MCU Package f
  • Linux,spidev:为什么它不应该直接在设备树中?

    我想定义一个具有用户模式访问权限的 SPI 设备 如中所述http linux sunxi org SPIdev 按照这些示例 我在设备树中添加了以下内容 ecspi1 other stuff mydev 0 compatible spid
  • 数据缓存如何路由本例中的对象?

    考虑图示的数据缓存架构 ASCII 艺术如下 CPU core A CPU core B Devices Cache A1 Cache B1 with DMA Cache 2 RAM
  • 多核架构中的 CPU 和内存访问

    我想知道如果 例如 CPU 的 2 个核心尝试同时访问内存 通过内存控制器 一般 如何处理内存访问 实际上 当内核和启用 DMA 的 IO 设备尝试以相同方式访问时 同样适用 I think 内存控制器足够智能 可以利用地址总线并同时处理这
  • 树莓派 pico rfid rc522 (Micropython)

    我想使用 RPi Pico 从 mfrc522 Iduino RFID rc522 读卡器读取数据 但我不知道如何操作 我试图使用为此目的制作的 mfrc522 py MicroPython 库 阅读器正在通过 SPI 与 Pi 通信 我将
  • 在 ARM 处理器上执行存储在外部 SPI 闪存中的程序

    我有一个 ARM 处理器 能够与外部闪存芯片连接 写入芯片的是为 ARM 架构编译的程序 可供执行 我需要知道如何将这些数据从外部闪存获取到 ARM 处理器上以供执行 我可以提前运行某种复制例程 将数据复制到可执行内存空间吗 我想我可以 但
  • 如何用 C 语言从串行(SPI)连接读取数据?

    我正在尝试编写一个程序 该程序将安装在 Linux MCU Raspberry Pi 上 该程序将读取从另一个 MCU 我将自己构建的自制程序 发送到它的串行数据 我研究了如何做到这一点 并认为我有 大局 但仍然缺少一些东西 其一 我需要启
  • STM32 传输结束时,循环 DMA 外设到存储器的行为如何?

    我想问一下 在以下情况下 STM32 中的 DMA SPI rx 会如何表现 我有一个指定的 例如 96 字节数组 名为 A 用于存储从 SPI 接收到的数据 我打开循环 SPI DMA 它对每个字节进行操作 配置为 96 字节 是否有可能

随机推荐

  • cpptools占用率过高

    问题描述 使用vscode发现在系统中cpptools CPU占用率达到百分百 电脑发生严重卡顿 解决方案 xff1a 此问题的出现是因为使用了C C 43 43 这个插件 xff0c 如果直接禁用此插件就可以解决这个问题 如果希望使用这个
  • ROS话题的定义和使用

    ROS话题的定义和使用 自定义话题消息 自定义话题消息主要包括以下步骤 xff1a 定义msg文件在package xml中添加功能中依赖在CMakeList txt中添加编译规则编译生成语言相关文件 编写 msg文件 进入要定义 msg文
  • 如何在VScode中利用git来下载GitHub上的源码

    一 Git安装与下载 官网下载地址 xff1a Git Downloads https git scm com downloads xff08 注意安装时选择的默认编辑器选择vscode xff0c 然后修改安装路径其他默认下一步就ok了
  • PhpStorm 2018 安装及破解方法

    https blog csdn net u012278016 article details 81772566
  • mitmproxy笔记

    mitmproxy证书在http mitm it下载 或者在 mitmproxy ubuntu安装mitmproxy xff0e 可以到官网下载二进制文件 xff0e pip安装出了问题 xff0e Firfox和Chrome有各自独立的证
  • [Extensive Reading]目标检测(object detection)系列(十六)YOLOv4:平衡速度与精度

    简介 YOLOv4是YOLO之父Joseph Redmon宣布退出计算机视觉的研究之后推出的YOLO系列算法 xff0c 其作者Alexey Bochkovskiy也参与了YOLO之前系列算法 xff0c YOLOV4 Optimal Sp
  • 【Python】Python函数名后的->(横线和大于号)代表什么?

    目录 参考例子优点 参考 本文主要参考以下链接 xff1a 在def定义函数的时候 64 和 gt 代表什么 python中 gt 是什么意思python 定义函数 def 后面的 xff1e xff0c xff1a 表示的含义 例子 如下
  • Keil软件中使用“Go To Definition Of ”时提示“source browser:‘xxxx‘undefined definition/reference”

    在编写DMA的初始化函数时 xff0c 为了节约时间 xff0c 直接用了之前的模板 xff0c 但是在用DMA DeInit 函数时 xff0c 当右键点击此语句使用 Go To Definition Of 时 xff0c 该功能失效 x
  • 期末单片机复习题及答案(答案不保证全部正确95分)

    作者主页 xff1a 凉开水白菜 作者简介 xff1a 共同学习 xff0c 互相监督 xff0c 热于分享 xff0c 多加讨论 xff0c 一起进步 点赞 x1f44d 收藏 再看 xff0c 养成习惯 订阅的粉丝可通过PC端文末加我微
  • 带时间窗的车辆路径问题的多目标模因算法

    求解带时间窗车辆路径问题的多目标模因算法 1 问题描述和数学建模建立多目标模因算法 解的构造自适应局部搜索链 xff08 1 xff09 多方向局部搜索策略 xff08 2 xff09 强化的局部搜索链技术 xff08 3 xff09 自适
  • [嵌入式]stm32内部温度传感器实验

    实验概述 文章目录 实验概述一 概述二 实验平台 xff08 1 xff09 硬件平台ALIENTEK MiniSTM32 开发板 xff08 2 xff09 软件平台 三 实验过程1 STM32 内部温度传感器简介2 硬件设计3 软件设计
  • 用ipad的第一次写博客

    试着用用 用平板第一次写博客 练练手 张大炮到此一游
  • kazam的安装和使用

    kazam xff1a 介绍 xff1a 一款Linux端的录屏j兼具截图软件 主要是录屏有声音 软件 xff1a kazam 安装内容 xff1a 步骤如下 1 命令行执行语句sudo apt get install kazam 2 如果
  • VINS-Fusion 外参标定效果分析(一)

    测试流程 xff1a 在 EuRoC V1 01 easy 数据集上测试 VINS Fusion 在线外参估计效果 使用估计前后不同的外参得到两条完整轨迹 xff0c 使用 rpg trajectory evaluation 工具对比了两条
  • VINS-Fusion 外参标定效果分析(二)

    测试边缘化对外参标定的影响 参考VIN Fusion中原本的vector2double double2vector和optimization函数 xff0c 在代码中添加vector2double ex double2vector ex和o
  • keil遇到的警告汇总

    文章目录 警告 191 D 警告 191 D user Dataex c 500 warning 191 D type qualifier is meaningless on cast type 警告 xff1a 191 D xff1a 类
  • MOT:A Higher Order Metric for Evaluating Multi-object Tracking

    简介 HOTA A Higher Order Metric for Evaluating Multi object Tracking是IJCV 2020的paper xff0c 在此之前以MOTChallenge为主的多目标跟踪benchm
  • 如何更新Ubuntu系统、调整多系统启动顺序

    如何更新Ubuntu系统 调整多系统启动顺序 安装包 升级前系统前 xff0c 第一个命令或者说动作是 xff1a 以下命令需要在Ubuntu终端窗口内执行 xff0c 打开终端的快捷键是 xff1a CTRL 43 alt 43 T sp
  • git新建仓库,本地分支由master变为main

    由于一些众所周知的原因 xff0c github上传代码的默认分支由master变为了main 还是我昨天新建仓库的时候发现的 xff08 以前的仓库并不受影响 xff09 但本地分支仍旧为master xff0c 这就导致上传之后仓库有两
  • 调试笔记2:SPI+DMA

    一 内容简介 说明 xff1a 关于DMA xff0c SPI的基本知识这里不做介绍 本文只讲述SPI 43 DMA的实现 这里仅实现从外设到内存 从内存到外设也可以参考修改 目的 xff1a 使用STM32作为SPI从机接收数据 xff0