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配置(DMA同时收发)
- STM32:DMA方式接收SPI总线数据,并按照协议进行处理
- 关于串口开启DMA进行收发的配置
- 430F4时钟输出引脚官方例程
- stm8 RM0016 中文参考手册 – 输入捕获章节-存在错误翻译
- 参考网上别人的经验,IIS无法启动:发生意外错误0x8ffe2740的原因
- SPI 的DMA接收
- 也谈Asp.Net编译错误CS0433 类型XXX同时存在于…
- 编译器错误信息: CS0433: 类型 同时存在于
- nodejs中使用async来对异步操作进行同步,避免多个异步同时启动引发连接错误
- 通过ajax,向后台传对象时,@RequestBody 接收对象,一直报415的错误
- 无法加载oracle in oradb10g_home2 odbc驱动程序的安装例程,因为存在系统错误代码998 解决方法
- win7 系统无法加入域---提示1058错误--同时netlogon服务一直无法启动的解决办法
- 无法加载oracle in oradb10g_home2 odbc驱动程序的安装例程,因为存在系统错误代码998 解决方法
- 错误 1 类型“System.Web.UI.ScriptManager”同时存在于“c:\windows\assembly\GAC_MSIL\System.Web.Extensions\3.5.0.0
- 微擎:存在错误,不能自动更新,错误详情:微擎自动更新时发生错误, 请访问论坛并获取最新的更新程序后重试
- 新建MVC3项目时出错:错误 2 类型“System.Web.Mvc.ModelClientValidationRule”同时存在于“C:\Program Files\Microsoft ASP.NET\ASP.NET Web Pages\v2.0\Assemblies\System.Web.WebPages.dll”和“C:\Program Files\Microsoft ASP.NET\ASP.NET MVC 3\Assembli
- 错误 1 类型“System.Web.Mvc.ModelClientValidationRule”同时存在于“c:\Progra
- 无法加载oracle in oradb10g_home2 odbc驱动程序的安装例程,因为存在系统错误代码998 解决方法
- 编译器错误信息: CS0433: 类型 同时存在于