初级会员

- 积分
- 190
- 金钱
- 190
- 注册时间
- 2018-11-14
- 在线时间
- 51 小时
|
20金钱
//初始化QSPI接口
//返回值:0,成功;
// 1,失败;
u8 QSPI_Init(void)
{
u32 tempreg=0;
RCC->AHB1ENR|=1<<1; //使能PORTB时钟
RCC->AHB1ENR|=1<<4; //使能PORTE时钟
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(GPIOC,1<<11,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU); //PC11复用功能输出
GPIO_Set(GPIOE,0XF<<7,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU); //PE7-10复用功能输出
GPIO_AF_Set(GPIOB,2,9);
GPIO_AF_Set(GPIOC,11,10);
GPIO_AF_Set(GPIOE,9,9);
GPIO_AF_Set(GPIOE,10,9);
GPIO_AF_Set(GPIOE,8,10);
GPIO_AF_Set(GPIOE,7,10);
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|=1<<7; //选择FLASH2
tempreg|=0<<6; //禁止双闪存模式
tempreg|=1<<4; //采样移位半个周期(DDR模式下,必须设置为0)
QUADSPI->CR=tempreg; //设置CR寄存器
tempreg=(25-1)<<16; //设置FLASH大小为2^25=32MB
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;
}
|
最佳答案
查看完整内容[请看2#楼]
解决了,端口复用这样改就好了
GPIO_AF_Set(GPIOB,2,9);
GPIO_AF_Set(GPIOC,11,9);
GPIO_AF_Set(GPIOE,9,10);
GPIO_AF_Set(GPIOE,10,10);
GPIO_AF_Set(GPIOE,8,10);
GPIO_AF_Set(GPIOE,7,10);
|