欢迎来到天天文库
浏览记录
ID:37553496
大小:172.50 KB
页数:14页
时间:2019-05-25
《STM32驱动SPI接口FLASH》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、SPI总线与IIC类似,SPI也是一种通信协议。今天我们就以WX25X16芯片为例来介绍SPI.首先我们来看下硬件连接。、从原理图可以看到该芯片需要单片机控制的管脚有4个,非别是CS,DO,DIO,CLK.其中CS是片选信号,只有将该位拉低才能选中该芯片。DO,DIO分别是输出和输入。CLK是时钟信号。SPI通信的步骤如下所示:1)获取地址12)获取地址23)擦除扇区4)写入数据好的,下面我们对每个步骤进行分析(1)在对芯片操作前先要对端口及SPI外设进行相应的设置:/*函数名:SPI_FLASH_Init(void)功能:对端口和SPI初始化输入:无输出:无调用:被主函数调用*/voidSP
2、I_FLASH_Init(void){SPI_InitTypeDefSPI_InitStructure;GPIO_InitTypeDefGPIO_InitStructure;/*EnableSPI1andGPIOclocks*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA
3、RCC_APB2Periph_GPIOD,ENABLE);/*!4、_InitStructure.GPIO_Pin=GPIO_Pin_5;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;GPIO_Init(GPIOA,&GPIO_InitStructure);/*将PA6(DO)设置成浮空输入*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;GPIO_Init(GPIOA,&GPIO_InitStructure);/将PA7(DIO)设为浮空输入/GPIO_InitStructure.GPIO_5、Pin=GPIO_Pin_7;GPIO_Init(GPIOA,&GPIO_InitStructure);/将PA4(CS)设为推挽输出/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_Init(GPIOA,&GPIO_InitStructure);/拉高CS,失能芯片,该语句是宏定义,就是置高PA4/SPI_FLASH_CS_HIGH();/*SPI配置///W25X16:datainputontheDIOpinissampledontherisingedgeof6、theCLK.//DataontheDOandDIOpinsareclockedoutonthefallingedgeofCLK./*将SPI设为全双工模式*/SPI_InitStructure.SPI_Direction=SPI_Direction_2Lines_FullDuplex;/*将SPI设为主模式*/SPI_InitStructure.SPI_Mode=SPI_Mode_Master;/*将SPI通信的数据大小设为8位*/SPI_InitStructure.SPI_DataSize=SPI_DataSize_8b;/*将CLK的高电平设为空闲*/SPI_InitStructure.7、SPI_CPOL=SPI_CPOL_High;/*设置在第二个时钟沿捕获数据*/SPI_InitStructure.SPI_CPHA=SPI_CPHA_2Edge;/*指定NSS信号由软件管理*/SPI_InitStructure.SPI_NSS=SPI_NSS_Soft;/SPI_BaudRatePrescaler用来定义波特率预分频的值,这个值用以设置发送和接收的SCK时钟/SPI_InitStructure.SPI_BaudRatePrescaler=SPI_BaudRatePrescaler_4;/SPI_FirstBit指定了数据传输从高位还是低位开始/SPI_InitStructu8、re.SPI_FirstBit=SPI_FirstBit_MSB;/SPI_CRCPolynomial定义了用于CRC值计算的多项式/SPI_InitStructure.SPI_CRCPolynomial=7;SPI_Init(SPI1,&SPI_InitStructure);/*EnableSPI1*/SPI_Cmd(SPI1,ENABLE);}(2)获取器件地址1因为SPI总线上可以挂很多的器
4、_InitStructure.GPIO_Pin=GPIO_Pin_5;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;GPIO_Init(GPIOA,&GPIO_InitStructure);/*将PA6(DO)设置成浮空输入*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;GPIO_Init(GPIOA,&GPIO_InitStructure);/将PA7(DIO)设为浮空输入/GPIO_InitStructure.GPIO_
5、Pin=GPIO_Pin_7;GPIO_Init(GPIOA,&GPIO_InitStructure);/将PA4(CS)设为推挽输出/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_Init(GPIOA,&GPIO_InitStructure);/拉高CS,失能芯片,该语句是宏定义,就是置高PA4/SPI_FLASH_CS_HIGH();/*SPI配置///W25X16:datainputontheDIOpinissampledontherisingedgeof
6、theCLK.//DataontheDOandDIOpinsareclockedoutonthefallingedgeofCLK./*将SPI设为全双工模式*/SPI_InitStructure.SPI_Direction=SPI_Direction_2Lines_FullDuplex;/*将SPI设为主模式*/SPI_InitStructure.SPI_Mode=SPI_Mode_Master;/*将SPI通信的数据大小设为8位*/SPI_InitStructure.SPI_DataSize=SPI_DataSize_8b;/*将CLK的高电平设为空闲*/SPI_InitStructure.
7、SPI_CPOL=SPI_CPOL_High;/*设置在第二个时钟沿捕获数据*/SPI_InitStructure.SPI_CPHA=SPI_CPHA_2Edge;/*指定NSS信号由软件管理*/SPI_InitStructure.SPI_NSS=SPI_NSS_Soft;/SPI_BaudRatePrescaler用来定义波特率预分频的值,这个值用以设置发送和接收的SCK时钟/SPI_InitStructure.SPI_BaudRatePrescaler=SPI_BaudRatePrescaler_4;/SPI_FirstBit指定了数据传输从高位还是低位开始/SPI_InitStructu
8、re.SPI_FirstBit=SPI_FirstBit_MSB;/SPI_CRCPolynomial定义了用于CRC值计算的多项式/SPI_InitStructure.SPI_CRCPolynomial=7;SPI_Init(SPI1,&SPI_InitStructure);/*EnableSPI1*/SPI_Cmd(SPI1,ENABLE);}(2)获取器件地址1因为SPI总线上可以挂很多的器
此文档下载收益归作者所有