今天试了下M7的QSPI,在初始化的这里就卡住了,用示波器卡QSPI_BK1_CLK信号都不正常(看图片).程序配置和原子大神的一样
u32 tempreg=0;
RCC->AHB1ENR|=1<<1; //使能PORTB时钟
RCC->AHB1ENR|=1<<5; //使能PORTF时钟
RCC->AHB3ENR|=1<<1; //QSPI时钟使能
GPIO_Set(GPIOB,1<<2,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU); //PB2复用功能输出
GPIO_Set(GPIOB,1<<6,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU); //PB6复用功能输出
GPIO_Set(GPIOF,0XF<<6,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU); //PF6~9复用功能输出
GPIO_AF_Set(GPIOB,2,9); //PB2,AF9
GPIO_AF_Set(GPIOB,6,10); //PB6,AF10
GPIO_AF_Set(GPIOF,6,9); //PF6,AF9
GPIO_AF_Set(GPIOF,7,9); //PF7,AF9
GPIO_AF_Set(GPIOF,8,10); //PF8,AF10
GPIO_AF_Set(GPIOF,9,10); //PF9,AF10
RCC->AHB3RSTR|=1<<1; //复位QSPI
RCC->AHB3RSTR&=~(1<<1); //停止复位QSPI
if(QSPI_Wait_Flag(1<<5,0,0XFFFF)==0)//等待BUSY空闲
{
tempreg=(3-1)<<24; //设置QSPI时钟为AHB时钟的1/3,即216M/3=72Mhz,13.8ns
tempreg|=(4-1)<<8; //设置FIFO阈值为4个字节(最大为31,表示32个字节)
tempreg|=0<<7; //选择FLASH1
tempreg|=0<<6; //禁止双闪存模式
tempreg|=1<<4; //采样移位半个周期(DDR模式下,必须设置为0)
QUADSPI->CR=tempreg; //设置CR寄存器
tempreg=(23-1)<<16; //设置FLASH大小为2^25=8MB
tempreg|=(4-1)<<8; //片选高电平时间为4个时钟(13.8*4=55.2ns),即手册里面的tSHSL参数
tempreg|=1<<0; //Mode3,空闲时CLK为高电平
QUADSPI->DCR=tempreg; //设置DCR寄存器
QUADSPI->CR|=1<<0; //使能QSPI
}else return 1;
return 0;
请各位兄弟,帮帮忙看哪里问题
IC是W25Q64
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
下你们板子是正常的。我换了flash芯片(W25Q64)。刚开始看了这个clk波形,以为是硬件问题(QPI的clk高频下怎么是这样的波形!!!关键问题,它还工作正常,估计内部有整形电路)我的问题已经解决了,谢谢原子这么晚还在回答我的问题,辛苦了。
换了flash芯片(W25Q64),需要仔细看其数据手册,与W25Q256最大差别是:
1,只有2个状态寄存器(没有状态寄存器3,也就没有所谓的4字节地址模式,因为容量只有8M)
2,只支持一个写状态寄存器命令,它一次写2个状态寄存器,如果只修改其中一个,还得全部先读后改。
一周热门 更多>