最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

江科大學(xué)習(xí)筆記 _14.軟件SPI

2023-06-28 20:07 作者:自閉選手的Z23  | 我要投稿



?


?


W25Q64:地址寬度24位,3字節(jié) 8M->塊->扇區(qū)->頁

??8 * 1024 *1024 范圍:00 00 00H--7F FF FFH (8MB)

?

8M分為128個(gè)塊,每個(gè)塊(64K) 塊0-塊127,

(8*1024 *1024 /64*1024) = 128 范圍:xx 00 00 H--xx FF FFH(64KB)

?

64K分為16個(gè)扇區(qū),每個(gè)扇區(qū)(4k),扇區(qū)0--扇區(qū)15

(64*1024/4*1024) = 16 范圍:xx x0 00h -- xx xF FFh (4KB)

?

4K分為16個(gè)頁,每個(gè)頁(256字節(jié)),頁0--頁15

(4*1024/256) = 16 范圍:xx xx 00h -- xx xx FFh (256)

?


STM32單片機(jī)為主機(jī),W25Q64為從機(jī)

CS:片選

DO:從機(jī)輸出

CLK:時(shí)鐘

DI:從機(jī)輸入

?

void MySPI_Init(void)//初始化

{

????RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

?

????GPIO_InitTypeDef GPIO_InitStruct;

????GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;

????GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_7;

????GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;

????GPIO_Init(GPIOA, &GPIO_InitStruct);

?

????GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;

????GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6;

????GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;

????GPIO_Init(GPIOA, &GPIO_InitStruct);

?

????MySPI_W_SS(1);

????MySPI_W_SCK(0);

}

?

?

封裝引腳

void MySPI_W_SS(uint8_t BitValue)

{

????GPIO_WriteBit(SPI_Port,SS,(BitAction)BitValue);

}

?

void MySPI_W_SCK(uint8_t BitValue)

{

????GPIO_WriteBit(SPI_Port,SCK,(BitAction)BitValue);

}

?

void MySPI_W_MOSI(uint8_t BitValue)

{

????GPIO_WriteBit(SPI_Port,MOSI,(BitAction)BitValue);

}

?

uint8_t MySPI_R_MISO(void)

{

???return (GPIO_ReadInputDataBit(SPI_Port,MISO));

}

?


void MySPI_Start(void)

{

????MySPI_W_SS(0);

}

?

void MySPI_Stop(void)

{

????MySPI_W_SS(1);

}




?


uint8_t MySPI_SwapByte(uint8_t ByteSend)

{

????uint8_t ByteReceive = 0x00;

?

????for(int8_t i = 7; i >= 0; i--)

????{

????????//上升沿前,主機(jī)移出數(shù)據(jù)

????????MySPI_W_MOSI(ByteSend & (1 << i));

????????MySPI_W_SCK(1);

????????//上升沿時(shí),從機(jī)會(huì)把MOSI數(shù)據(jù)讀走

(第一個(gè)邊沿移出數(shù)據(jù))

????????//下降沿前(第二個(gè)邊沿),主機(jī)讀入數(shù)據(jù)

(第二個(gè)邊沿移入數(shù)據(jù))

????????if(MySPI_R_MISO() == 1){ByteReceive |= (1 << i);}

????????MySPI_W_SCK(0);

????}

????return ByteReceive;

}

?


W25Q64

void W25Q64_Init(void)

{

????MySPI_Init();

}

?

void W25Q64_ReadID(uint8_t *MID, uint16_t *DID)

{

????MySPI_Start();

????MySPI_SwapByte(W25Q64_JEDEC_ID);//發(fā)W25Q64讀ID號(hào)指令

????//從機(jī)返回3個(gè)ID數(shù)據(jù)

????*MID = MySPI_SwapByte(W25Q64_DUMMY_BYTE);//用0XFF讀出寄存器中的廠商ID

????*DID = MySPI_SwapByte(W25Q64_DUMMY_BYTE);//用0XFF讀出寄存器中的設(shè)備ID高8位

????*DID = (*DID << 8)|MySPI_SwapByte(W25Q64_DUMMY_BYTE);//用0XFF讀出寄存器中的設(shè)備ID低8位,拼接

????MySPI_Stop();

}

?

void W25Q64_WriteEnable(void)

{

????MySPI_Start();

????MySPI_SwapByte(W25Q64_WRITE_ENABLE);

????MySPI_Stop();

}

?

void W25Q64_WaitBusy(void)

{

????uint32_t TimeOut = 10000;

?

????MySPI_Start();

????MySPI_SwapByte(W25Q64_READ_STATUS_REGISTER_1);

????while( (MySPI_SwapByte(W25Q64_DUMMY_BYTE) & 0x01) == 0x01)//等待BUSY位為0

????{ ??//超時(shí)檢測(cè)

????????TimeOut--;

????????if(TimeOut == 0)

????????break;

????}

????MySPI_Stop();

}

?

void W25Q64_PageProgram(uint32_t Address, uint8_t *DataArray, uint16_t Count)

{

????uint16_t i;

?

????W25Q64_WriteEnable();//寫使能

?

????MySPI_Start();

????MySPI_SwapByte(W25Q64_PAGE_PROGRAM);

????MySPI_SwapByte(Address >> 16);

????MySPI_SwapByte(Address >> 8);

????MySPI_SwapByte(Address);

????for(i = 0; i < Count; i++)

????{

????????MySPI_SwapByte(DataArray[i]);

????}

????MySPI_Stop();

?

????W25Q64_WaitBusy();//等待busy位

}

?


//擦除扇區(qū)

void W25Q64_SectorErase(uint32_t Address)

{

????W25Q64_WriteEnable();//寫使能

?

????MySPI_Start();

????MySPI_SwapByte(W25Q64_SECTOR_ERASE_4KB);

????MySPI_SwapByte(Address >> 16);

????MySPI_SwapByte(Address >> 8);

????MySPI_SwapByte(Address);

????MySPI_Stop();

?

????W25Q64_WaitBusy();//等待busy位

}


?

//讀數(shù)據(jù)

void W25Q64_ReadData(uint32_t Address, uint8_t *DataArray, uint32_t Count)

{

????uint32_t i;

?

????MySPI_Start();

????MySPI_SwapByte(W25Q64_READ_DATA);

????MySPI_SwapByte(Address >> 16);

????MySPI_SwapByte(Address >> 8);

????MySPI_SwapByte(Address);

?

????for(i = 0; i < Count; i++)

????{

????????DataArray[i] = MySPI_SwapByte(W25Q64_DUMMY_BYTE);

????}

?

????MySPI_Stop();

}

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?


江科大學(xué)習(xí)筆記 _14.軟件SPI的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
从化市| 拜城县| 夏津县| 镇远县| 万全县| 罗源县| 榕江县| 徐闻县| 沛县| 凤台县| 武强县| 鄂伦春自治旗| 綦江县| 海阳市| 织金县| 东乡族自治县| 英吉沙县| 井研县| 桓台县| 句容市| 合川市| 剑河县| 阿荣旗| 广州市| 泗洪县| 鹤峰县| 山东| 文成县| 永春县| 兴城市| 平原县| 建德市| 龙山县| 景德镇市| 绥芬河市| 崇阳县| 临泉县| 始兴县| 张家界市| 保山市| 余干县|