这两天在捉摸SPI FLASH的DMA方式接收数据,其实论坛也有相关例程,但是因为是寄存器版本的,所有我只能望洋兴叹。思路很简单,就是从SST25064C(8M串行FLASH)中读取10个字节的数据, 这些数据我之前就通过普通方式写入了。不过程序一直卡在配置完DMA之后的 while(DMA_GetFlagStatus(DMA1_FLAG_TC2) == RESET); 里面。示波器上看,发送了读取命令和地址之后,CLK就莫名消失了,当然 在配置过程中我参考了一位高手的程序 http://blog.csdn.net/chenwei2002/article/details/49722373,将SPI先关闭,再配置为 SPI_Cmd(SPI1, DISABLE); SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_RxOnly;
SPI_Init(SPI1, &SPI_InitStructure);
SPI_Cmd(SPI1, ENABLE);
昨天看STM32的中文手册,看的我是晕乎乎的,(STM32中文参考手册_V10),发现在PDF中有这么一段,
单向只接收模式(BIDIMODE=0并且RXONLY=1)
在此模式下,传输过程可以简要说明如下(见):
1. 在SPI_CR2寄存器中,设置RXONLY=1;
2. 设置SPE=1,使能SPI模块:
a) 主模式下,立刻产生SCK时钟信号,在关闭SPI(SPE=0)之前,不断地接收串行数据;
立刻产生SCK信号,不过示波器上完全没有看到有SCK信号产生, 特发帖求助各位,还望有高手点播一二,不慎感激。
SPI肯定是启动了,只是发送完读取命令码和地址后,我更改了SPI的工作方式,改为了双向只接收。然后启动了DMA,打断点发现DMA压根儿就没有执行,因为发送完读取地址后,SCK脉冲就没了,意思是我的SPI的RXNE永远不会置位,手册上讲了设为双向只接收且MCU做主机模式的话,SCK是一直持续存在的。(中文的手册我怕有错误,还专门看了英文的手册)
Unidirectional receive-only procedure (BIDIMODE=0 and RXONLY=1)
In this mode, the procedure can be reduced as described below (see Figure 244):
1. Set the RXONLY bit in the SPI_CR2 register.
2. Enable the SPI by setting the SPE bit to 1:
a) In master mode, this immediately activates the generation of the SCK clock, and
data are serially received until the SPI is disabled (SPE=0).
b) In slave mode, data are received when the SPI master device drives NSS low and
generates the SCK clock.
3. Wait until RXNE=1 and read the SPI_DR register to get the received data (this clears
the RXNE bit). Repeat this operation for each data item to be received.
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>