STM32F413 SPI+DMA接收错误(SCK时钟接收后一直存在)【后参考网上论坛及F4官方例程:收发同时进行】
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官方例程:收发同时进行】相关推荐
- [SPI+DMA] 驱动WS2812B显示时钟
[SPI+DMA] 驱动WS2812B显示时钟 实现原理 本人一个大学萌新,偶然间发现RGB时钟这神奇的玩意,就想试试.目前初步实现时钟显示,第一次写博客,只是为了记录自己的学习成果方便以后查看,大家 ...
- micropython stm32f107_stm32f107 USART3数据接收错误问题
stm32f107 USART3数据接收错误问题 [复制链接] 芯片用的是stm32f107vb,使用USART3,PB10.PB11,不需要重映射 一开始用的原来103的启动文件startup_st ...
- outlook发送接收错误_如何在Outlook 2013中为RSS源创建发送/接收组
outlook发送接收错误 If you choose to manually update your RSS feeds on demand, there is a way to do this w ...
- STM32 SPI+DMA 驱动 SRAM LY68L6400SLIT 应用笔记
关键词:库函数,STM32F407,SPI+DMA ,SPI-DMA,SRAM , LY68L6400SLIT,STM32CubeMX 编 辑:大黄蜂 说明:本笔记记录 基于 STM32F407 + ...
- 【SPI总线常见错误】
SPI总线常见错误 1 SPR设定错误 在从器件时钟频率小于主器件时钟频率时,如果SCK的速率设得太快,将导致接收到的数据不正确(SPI接口本身难以判断收到的数据是否正确,要在软件中处理). 整个系统 ...
- GD32 SPI DMA收发
由于需求用到GD32 SPI, 故做相关实验记录分享,本实验为 SPI DMA 发送与接收 16bit 数据, GD32 相关配置如下 GD32 F30x系列 DMA配置如下 SPI DMA 发:使用 ...
- GD32F103配置SPI+DMA收发数据
GD32是国产的32位单片机,它和STM32非常非常像,就连以前的库函数都差不多(现在从GD官网下载的库函数换了一种风格).配置SPI和DMA的方法和STM32差不多. 上图是DMA0各通道请 ...
- GD32F303调试小记(二)之SPI(软件SPI、硬件SPI、硬件SPI+DMA)
前言 目前有一个项目中用到了TFT-LCD,其驱动芯片为ILI9341.为更好的达到显示效果,在最终的代码中我们会使用单片机自带的硬件SPI+DMA模块(由于调试过程中SPI+DMA输出的波形没能驱屏 ...
- STM32F4 SPI DMA
文章目录 STM32F4 SPI DMA 自己整理(存储器到外设模式) SPI结构体 SPI引脚编号 SPI配置 DMA结构体 DMA请求映射 DMA传输模式 SPI 发送DMA配置 DMA发送中断服 ...
最新文章
- 写了一个puppet web 管理界面,打算开源
- BufferedReader 和BufferedWriter
- spring boot 服务器常用
- 台式电脑一般价钱多少_看完才明白,电脑一体机和台式机哪个好?
- 合法C标识符(信息学奥赛一本通-T1134)
- C++_函数_函数的占位参数_函数重载---C++语言工作笔记034
- HNU 实验五松雅的旅馆
- java填吧_请高手为我填上JAVA代码吧
- Coolite的Combobox智能检索应用指南
- 【cc2541历程】APP更改蓝牙设备名称
- PHP的威胁函数与PHP代码审计
- 人工势场法脱离极小值点
- 手把手教你安装Sketch破解版和measure插件 1
- java加锁_JAVA最好的加锁方法是什么
- 拆t460拆机图解_雷神st pro怎么拆机?雷神st pro拆解详细评测图解
- undefined运算
- Oracle Audit
- 台式计算机睡眠了怎么唤醒,分享大家几种电脑深度睡眠怎么唤醒方法
- JVM内存模型以及JVM内存模型图
- 密码学归约证明——哈希签名范式的安全性
热门文章
- 【Java】函数式编程学习笔记——Stream流
- 25家往昔明星网站“血泪史” 教你如何过冬
- python mongodb_Python操作MongoDB文档数据库
- xp计算机无法远程桌面连接,XP系统远程桌面开了连接不上如何解决?
- Redis Guava 布隆过滤器实现和准确率测试
- 像素鸟html代码,flappy-bird方块版(用小方块替代像素鸟)
- 腾讯与香港大学合作开展金融科技
- 一缕黑暗中的火光-----------用例图--------------优雅的建模语
- 预备篇 I :范畴与函子
- 如何在微信上直接打开淘宝,解决微信屏蔽淘宝链接的方法