1:平台 STM32F413 + GD5F4(spi nand flash)(没开启DMA中断,读写操作NAND 都是单片机发起,所以知道什么时候读,什么时候写)

2: 问题(STM32 SPI+DMA机制发送,接收理解不到位)
能狗发送数据,但是接收数据不对且接收后,SCK时钟一直存在

在不使用DMA情况下,正常读写


使用DMA后,DMA接收数据后一直有时钟存在

当时思想是单写和单读数据;

Direction_CfgSpiHard(SPI_Direction_1Line_Tx); //设置SPI工作模式及方向
NAND0_CS_0();

// bsp_spiWrite1(PROGRAM_LOAD);
// bsp_spiWrite1( 0x0f & ((0&0xff00)>>8)); //读内存块+地址
// bsp_spiWrite1(0&0xff);
SPI_DMACmd(SPI2,SPI_DMAReq_Tx,ENABLE); //使能串口1的DMA发送
MYDMA_Enable(SPI2_TX_DMA_STREAM,20); //开始一次DMA传输!
while(DMA_GetFlagStatus(SPI2_TX_DMA_STREAM,DMA_FLAG_TCIF4)==RESET)
{

 printf("\r\n write err! %d",DMA_GetCurrDataCounter(SPI2_TX_DMA_STREAM));  //得到当前还剩余多少个数据
};

//等待 DMA1_Steam4 传输完成

NAND0_CS_1();

单独写

void read_test(void)
{

  NAND0_CS_0();  Direction_CfgSpiHard(SPI_Direction_2Lines_FullDuplex);   //设置SPI工作模式及方向bsp_spiWrite1(READ_FROM_CACHE); //写入读命令bsp_spiWrite1(Byte_16 | ((0&0xff00)>>8)); //读内存块+地址            bsp_spiWrite1(0&0xff);bsp_spiWrite1(0x00);  //虚拟字节

//等待 DMA1_Steam4 传输完成

  Direction_CfgSpiHard(SPI_Direction_2Lines_RxOnly);   //设置SPI工作模式及方向  SPI_DMACmd(SPI2,SPI_DMAReq_Rx,ENABLE);  //使能串口1的DMA发送     MYDMA_Enable(SPI2_RX_DMA_STREAM,20);     //开始一次DMA传输!while(DMA_GetFlagStatus(SPI2_RX_DMA_STREAM,DMA_FLAG_TCIF3)==RESET){printf("\r\n read err! %d",DMA_GetCurrDataCounter(SPI2_RX_DMA_STREAM));  //得到当前还剩余多少个数据};DMA_ClearFlag(SPI2_RX_DMA_STREAM,DMA_FLAG_TCIF3);//清除DMA1_Steam3传输完成标志  DMA_Cmd(SPI2_RX_DMA_CHANNEL,DISABLE);SPI_DMACmd(SPI2,SPI_DMAReq_Rx,DISABLE);  //使能串口1的DMA发送     NAND0_CS_1();

}
单独读;数据不对,后用SPI读设备ID,发现ID号滞后一个字节(估计是DMA接收后,读ID时没有清除标准位的原因);

后在网上查找说DMA操作SPI时读写同时进行的


参考这位博主的这段话 及 参考了官方的例程

现在收发同时进行
数据OK,波形正常

思考:DMA为什么不能通过SPI的单线收发工作模式,来接收收数据(难道是发送时需要清楚接收标准,接收时需要清楚发送标准?)

STM32F413 SPI+DMA接收错误(SCK时钟接收后一直存在)【后参考网上论坛及F4官方例程:收发同时进行】相关推荐

  1. [SPI+DMA] 驱动WS2812B显示时钟

    [SPI+DMA] 驱动WS2812B显示时钟 实现原理 本人一个大学萌新,偶然间发现RGB时钟这神奇的玩意,就想试试.目前初步实现时钟显示,第一次写博客,只是为了记录自己的学习成果方便以后查看,大家 ...

  2. micropython stm32f107_stm32f107 USART3数据接收错误问题

    stm32f107 USART3数据接收错误问题 [复制链接] 芯片用的是stm32f107vb,使用USART3,PB10.PB11,不需要重映射 一开始用的原来103的启动文件startup_st ...

  3. outlook发送接收错误_如何在Outlook 2013中为RSS源创建发送/接收组

    outlook发送接收错误 If you choose to manually update your RSS feeds on demand, there is a way to do this w ...

  4. STM32 SPI+DMA 驱动 SRAM LY68L6400SLIT 应用笔记

    关键词:库函数,STM32F407,SPI+DMA ,SPI-DMA,SRAM , LY68L6400SLIT,STM32CubeMX 编 辑:大黄蜂 说明:本笔记记录 基于 STM32F407 + ...

  5. 【SPI总线常见错误】

    SPI总线常见错误 1 SPR设定错误 在从器件时钟频率小于主器件时钟频率时,如果SCK的速率设得太快,将导致接收到的数据不正确(SPI接口本身难以判断收到的数据是否正确,要在软件中处理). 整个系统 ...

  6. GD32 SPI DMA收发

    由于需求用到GD32 SPI, 故做相关实验记录分享,本实验为 SPI DMA 发送与接收 16bit 数据, GD32 相关配置如下 GD32 F30x系列 DMA配置如下 SPI DMA 发:使用 ...

  7. GD32F103配置SPI+DMA收发数据

      GD32是国产的32位单片机,它和STM32非常非常像,就连以前的库函数都差不多(现在从GD官网下载的库函数换了一种风格).配置SPI和DMA的方法和STM32差不多.   上图是DMA0各通道请 ...

  8. GD32F303调试小记(二)之SPI(软件SPI、硬件SPI、硬件SPI+DMA)

    前言 目前有一个项目中用到了TFT-LCD,其驱动芯片为ILI9341.为更好的达到显示效果,在最终的代码中我们会使用单片机自带的硬件SPI+DMA模块(由于调试过程中SPI+DMA输出的波形没能驱屏 ...

  9. STM32F4 SPI DMA

    文章目录 STM32F4 SPI DMA 自己整理(存储器到外设模式) SPI结构体 SPI引脚编号 SPI配置 DMA结构体 DMA请求映射 DMA传输模式 SPI 发送DMA配置 DMA发送中断服 ...

最新文章

  1. 写了一个puppet web 管理界面,打算开源
  2. BufferedReader 和BufferedWriter
  3. spring boot 服务器常用
  4. 台式电脑一般价钱多少_看完才明白,电脑一体机和台式机哪个好?
  5. 合法C标识符(信息学奥赛一本通-T1134)
  6. C++_函数_函数的占位参数_函数重载---C++语言工作笔记034
  7. HNU 实验五松雅的旅馆
  8. java填吧_请高手为我填上JAVA代码吧
  9. Coolite的Combobox智能检索应用指南
  10. 【cc2541历程】APP更改蓝牙设备名称
  11. PHP的威胁函数与PHP代码审计
  12. 人工势场法脱离极小值点
  13. 手把手教你安装Sketch破解版和measure插件 1
  14. java加锁_JAVA最好的加锁方法是什么
  15. 拆t460拆机图解_雷神st pro怎么拆机?雷神st pro拆解详细评测图解
  16. undefined运算
  17. Oracle Audit
  18. 台式计算机睡眠了怎么唤醒,分享大家几种电脑深度睡眠怎么唤醒方法
  19. JVM内存模型以及JVM内存模型图
  20. 密码学归约证明——哈希签名范式的安全性

热门文章

  1. 【Java】函数式编程学习笔记——Stream流
  2. 25家往昔明星网站“血泪史” 教你如何过冬
  3. python mongodb_Python操作MongoDB文档数据库
  4. xp计算机无法远程桌面连接,XP系统远程桌面开了连接不上如何解决?
  5. Redis Guava 布隆过滤器实现和准确率测试
  6. 像素鸟html代码,flappy-bird方块版(用小方块替代像素鸟)
  7. 腾讯与香港大学合作开展金融科技
  8. 一缕黑暗中的火光-----------用例图--------------优雅的建模语
  9. 预备篇 I :范畴与函子
  10. 如何在微信上直接打开淘宝,解决微信屏蔽淘宝链接的方法