97色伦色在线综合视频,无玛专区,18videosex性欧美黑色,日韩黄色电影免费在线观看,国产精品伦理一区二区三区,在线视频欧美日韩,亚洲欧美在线中文字幕不卡

有沒有做翻譯賺錢的網(wǎng)站什么是網(wǎng)站黑鏈

鶴壁市浩天電氣有限公司 2026/01/24 11:09:23
有沒有做翻譯賺錢的網(wǎng)站,什么是網(wǎng)站黑鏈,科技網(wǎng)站建設(shè)+長沙,jpress和wordpress哪個好前言#xff1a;在前面的文章中#xff0c;我們已經(jīng)系統(tǒng)介紹了 SPI 通信原理 以及 W25Q64 的存儲結(jié)構(gòu)和操作特性。 本篇文章將進入實戰(zhàn)階段#xff0c;基于 STM32F103C8T6#xff0c;通過 軟件 SPI#xff08;GPIO 模擬 SPI#xff09; 的方式#xff0c;實現(xiàn)對 W25Q64 …前言在前面的文章中我們已經(jīng)系統(tǒng)介紹了SPI 通信原理以及W25Q64 的存儲結(jié)構(gòu)和操作特性。本篇文章將進入實戰(zhàn)階段基于STM32F103C8T6通過軟件 SPIGPIO 模擬 SPI的方式實現(xiàn)對W25Q64 外部 Flash 的初始化、ID 讀取、扇區(qū)擦除、頁寫入和數(shù)據(jù)讀取并通過 OLED 顯示結(jié)果進行驗證。目錄一、接線圖二、硬件連接說明三、軟件 SPI 分層設(shè)計思想四、軟件 SPI 底層實現(xiàn)五、W25Q64 指令宏定義六、W25Q64 驅(qū)動實現(xiàn)七、主函數(shù)測試與實驗現(xiàn)象八、總結(jié)一、接線圖二、硬件連接說明本實驗使用 STM32F103C8T6 與 W25Q64 通過 SPI 方式連接引腳定義如下W25Q64STM32CSPA4SCKPA5MISOPA6MOSIPA7VCC3.3VGNDGNDSPI 工作模式Mode 0CPOL 0CPHA 0三、軟件 SPI 分層設(shè)計思想為了讓代碼結(jié)構(gòu)清晰本工程將軟件 SPI 分為兩層1.引腳配置層GPIO 操作只關(guān)心SS / SCK / MOSI / MISO提供“寫引腳 / 讀引腳”的接口2. 協(xié)議層SPI 時序基于引腳操作實現(xiàn)SPI 起始 / 終止字節(jié)交換8 位時序W25Q64 驅(qū)動層完全不關(guān)心 GPIO 細節(jié)只調(diào)用 SPI 接口結(jié)構(gòu)非常清晰。四、軟件 SPI 底層實現(xiàn)1. SPI 引腳操作函數(shù)#include stm32f10x.h // Device header /*引腳配置層*/ void MySPI_W_SS(uint8_t BitValue) { GPIO_WriteBit(GPIOA, GPIO_Pin_4, (BitAction)BitValue); } void MySPI_W_SCK(uint8_t BitValue) { GPIO_WriteBit(GPIOA, GPIO_Pin_5, (BitAction)BitValue); } void MySPI_W_MOSI(uint8_t BitValue) { GPIO_WriteBit(GPIOA, GPIO_Pin_7, (BitAction)BitValue); } uint8_t MySPI_R_MISO(void) { return GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_6); }2. SPI GPIO 初始化void MySPI_Init(void) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Pin GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; GPIO_Init(GPIOA, GPIO_InitStructure); GPIO_InitStructure.GPIO_Mode GPIO_Mode_IPU; GPIO_InitStructure.GPIO_Pin GPIO_Pin_6; GPIO_Init(GPIOA, GPIO_InitStructure); MySPI_W_SS(1); // CS 默認拉高 MySPI_W_SCK(0); // SPI Mode0SCK 空閑為低 }3. SPI 起始 / 終止void MySPI_Start(void) { MySPI_W_SS(0); } void MySPI_Stop(void) { MySPI_W_SS(1); }4. SPI 字節(jié)交換Mode 0uint8_t MySPI_SwapByte(uint8_t ByteSend) { uint8_t i, ByteReceive 0x00; for (i 0; i 8; i) { MySPI_W_MOSI(ByteSend (0x80 i)); MySPI_W_SCK(1); if (MySPI_R_MISO()) { ByteReceive | (0x80 i); } MySPI_W_SCK(0); } return ByteReceive; }說明上升沿發(fā)送數(shù)據(jù)上升沿采樣 MISO完全符合 SPI Mode 0 時序五、W25Q64 指令宏定義#ifndef __W25Q64_INS_H #define __W25Q64_INS_H #define W25Q64_WRITE_ENABLE 0x06 #define W25Q64_READ_STATUS_REGISTER_1 0x05 #define W25Q64_PAGE_PROGRAM 0x02 #define W25Q64_SECTOR_ERASE_4KB 0x20 #define W25Q64_READ_DATA 0x03 #define W25Q64_JEDEC_ID 0x9F #define W25Q64_DUMMY_BYTE 0xFF #endif六、W25Q64 驅(qū)動實現(xiàn)1. 初始化void W25Q64_Init(void) { MySPI_Init(); }2. 讀取芯片 ID驗證通信是否成功void W25Q64_ReadID(uint8_t *MID, uint16_t *DID) { MySPI_Start(); MySPI_SwapByte(W25Q64_JEDEC_ID); *MID MySPI_SwapByte(W25Q64_DUMMY_BYTE); *DID MySPI_SwapByte(W25Q64_DUMMY_BYTE); *DID 8; *DID | MySPI_SwapByte(W25Q64_DUMMY_BYTE); MySPI_Stop(); }3. 寫使能與忙等待void W25Q64_WriteEnable(void) { MySPI_Start(); MySPI_SwapByte(W25Q64_WRITE_ENABLE); MySPI_Stop(); } void W25Q64_WaitBusy(void) { uint32_t Timeout 100000; MySPI_Start(); MySPI_SwapByte(W25Q64_READ_STATUS_REGISTER_1); while (MySPI_SwapByte(W25Q64_DUMMY_BYTE) 0x01) { if (--Timeout 0) break; } MySPI_Stop(); }4. 扇區(qū)擦除4KBvoid 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(); }5. 頁寫入不跨頁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(); }6. 數(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(); }七、主函數(shù)測試與實驗現(xiàn)象uint8_t ArrayWrite[] {0x01, 0x02, 0x03, 0x04}; uint8_t ArrayRead[4]; int main(void) { OLED_Init(); W25Q64_Init(); W25Q64_ReadID(MID, DID); W25Q64_SectorErase(0x000000); W25Q64_PageProgram(0x000000, ArrayWrite, 4); W25Q64_ReadData(0x000000, ArrayRead, 4); while (1) {} }實驗現(xiàn)象OLED 正確顯示 MID / DID寫入數(shù)組與讀取數(shù)組完全一致說明軟件 SPI W25Q64 讀寫擦除功能完全正常八、總結(jié)通過本實驗我們完整實現(xiàn)了軟件 SPI 的 GPIO 模擬W25Q64 的 ID 讀取扇區(qū)擦除、頁寫入、數(shù)據(jù)讀取STM32 與外部 Flash 的穩(wěn)定通信
版權(quán)聲明: 本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請聯(lián)系我們進行投訴反饋,一經(jīng)查實,立即刪除!

做元器件上什么網(wǎng)站四川建設(shè)網(wǎng)站公司

做元器件上什么網(wǎng)站,四川建設(shè)網(wǎng)站公司,競價排名是什么,網(wǎng)站廣告賺錢嗎導(dǎo)語#xff1a;在醫(yī)療行業(yè)的“寒冬”論調(diào)下#xff0c;如何破局#xff1f;當大家都還在談?wù)揅hatGPT的概念時#xff0c;

2026/01/22 21:23:01

圖庫網(wǎng)站建設(shè)wordpress自動備份

圖庫網(wǎng)站建設(shè),wordpress自動備份,衡陽市住房建設(shè)局網(wǎng)站,php藍色大氣科技企業(yè)網(wǎng)站一、本文介紹 ?本文給大家介紹使用ADSF自適應(yīng)特征融合模塊改進 YOLOv13網(wǎng)絡(luò)模型,可有效改進其多尺度

2026/01/23 09:46:01