国产免费AV|泡泡玛特欧洲总部将设在伦敦|中文天堂网www新版资源在线|一本久道综合在线中文|国精产品一二三产区的使用方法|香蕉鱼在线观看|www.27eee
ELEOK
標(biāo)題:
STM32F407讀寫SPI接口的flash W25Q128存儲芯片驅(qū)動程序
[打印本頁]
作者:
路漫漫
時間:
2020-6-4 16:59
標(biāo)題:
STM32F407讀寫SPI接口的flash W25Q128存儲芯片驅(qū)動程序
完整源碼.rar
(1.4 MB, 售價: 2 E幣)
2020-6-4 16:58 上傳
點擊文件名下載附件
售價: 2 E幣
[記錄]
[
購買
]
使用了固件庫,附件中用windows畫圖工具畫了幾幅示意圖幫助理解,圖畫得比較丑,希望能幫助到其他人
220013bw4mp4665541ljp5.png
(274.15 KB)
下載附件
2020-6-4 16:57 上傳
220027kgsazoyysra5bos6.png
(101.8 KB)
下載附件
2020-6-4 16:57 上傳
部分源程序如下:完整源碼請參考本文附件
#include "stm32f4xx.h"
#include "spi.h"
void spi1_init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
SPI_InitTypeDef SPI_InitStruct;
//開啟SPI1 和 GPIOB的時鐘
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
//設(shè)置引腳 PB3--SPI1_SCK PB4--SPI1_MISO PB5--SPI1_MOSI
//模式、推挽、是否上拉等等
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;//復(fù)用模式
GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;//推挽輸出
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 |GPIO_Pin_5; //3 4 5號引腳
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;//內(nèi)部上拉電阻
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;//快速
GPIO_Init(GPIOB, &GPIO_InitStruct);
//復(fù)用為SPI1
GPIO_PinAFConfig(GPIOB, GPIO_PinSource3, GPIO_AF_SPI1);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource4, GPIO_AF_SPI1);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource5, GPIO_AF_SPI1);
//PB14---作為 W25Q128的片選
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;//輸出模式
//GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;//推挽輸出
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_14; //14號引腳
//GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;//內(nèi)部上拉電阻
//GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;//快速
GPIO_Init(GPIOB, &GPIO_InitStruct);
//默認(rèn)先不選中W25Q128
CS = 1;
//關(guān)于主從模式 高低位那個先發(fā) 8或16bits 時鐘的頻率 極性和相位
SPI_InitStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_128;
//W25Q128 MODE 3
SPI_InitStruct.SPI_CPHA = SPI_CPHA_2Edge;//從機mode 3的需求
SPI_InitStruct.SPI_CPOL = SPI_CPOL_High;//從機mode 3的需求
SPI_InitStruct.SPI_CRCPolynomial = 7;//校驗和多項式有幾項
SPI_InitStruct.SPI_DataSize = SPI_DataSize_8b;//從機的需求
SPI_InitStruct.SPI_Direction = SPI_Direction_2Lines_FullDuplex;//兩線全雙工
SPI_InitStruct.SPI_FirstBit = SPI_FirstBit_MSB;//從機的需要
SPI_InitStruct.SPI_Mode = SPI_Mode_Master;
SPI_InitStruct.SPI_NSS = SPI_NSS_Soft;//軟件管理片選引腳
SPI_Init(SPI1, &SPI_InitStruct);
//使能SPI1
SPI_Cmd(SPI1, ENABLE);
}
unsigned char spi1_write_read_byte(unsigned char data)
{
//等上一次發(fā)送完成
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) != SET);
SPI_I2S_SendData(SPI1, data);
//等接收緩沖非空
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) != SET);
return SPI_I2S_ReceiveData(SPI1);
}
復(fù)制代碼
歡迎光臨 ELEOK (http://m.afoofa.cn/)
Powered by Discuz! X5.0