国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

stm32(SPI讀寫W25Q18)

這篇具有很好參考價(jià)值的文章主要介紹了stm32(SPI讀寫W25Q18)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

SPI 是什么?

SPI是串行外設(shè)接口(Serial Peripheral Interface)的縮寫,是一種高速的,全雙工,同步的通信總 線,并且在芯片的管腳上只占用四根線,節(jié)約了芯片的管腳,同時(shí)為PCB的布局上節(jié)省空間,提 供方便,正是出于這種簡(jiǎn)單易用的特性,越來(lái)越多的芯片集成了這種通信協(xié)議,比如 AT91RM9200 。

stm32(SPI讀寫W25Q18),STM32開(kāi)發(fā),stm32,嵌入式硬件,單片機(jī)

SPI 包含 4 條總線,SPI 總線包含 4 條總線,分別為SS、SCK、MOSI、MISO。它們的作用介紹如 下 :

  • (1) MISO – Master Input Slave Output,主設(shè)備數(shù)據(jù)輸入,從設(shè)備數(shù)據(jù)輸出
  • (2) MOSI – Master Output Slave Input,主設(shè)備數(shù)據(jù)輸出,從設(shè)備數(shù)據(jù)輸入
  • (3) SCK – Serial Clock,時(shí)鐘信號(hào),由主 設(shè)備產(chǎn)生
  • (4) CS – Chip Select,片選信號(hào),由主設(shè)備控制?

SPI 工作原理?

stm32(SPI讀寫W25Q18),STM32開(kāi)發(fā),stm32,嵌入式硬件,單片機(jī)

?SPI 工作模式

時(shí)鐘極性(CPOL): 沒(méi)有數(shù)據(jù)傳輸時(shí)時(shí)鐘線的空閑狀態(tài)電平

0:SCK在空閑狀態(tài)保持低電平 1:SCK在空閑狀態(tài)保持高 電平

時(shí)鐘相位(CPHA): 時(shí)鐘線在第幾個(gè)時(shí)鐘邊沿采樣數(shù)據(jù)

0:SCK的第一(奇數(shù))邊沿進(jìn)行數(shù)據(jù)位采樣,數(shù)據(jù)在第一個(gè)時(shí) 鐘邊沿被鎖存

1:SCK的第二(偶數(shù))邊沿進(jìn)行數(shù)據(jù)位采樣,數(shù)據(jù)在第二個(gè)時(shí)鐘邊沿被鎖存

stm32(SPI讀寫W25Q18),STM32開(kāi)發(fā),stm32,嵌入式硬件,單片機(jī)

模式 0 和模式 3 最常用。?

模式 0 時(shí)序圖:

stm32(SPI讀寫W25Q18),STM32開(kāi)發(fā),stm32,嵌入式硬件,單片機(jī)

模式 3 時(shí)序圖:

stm32(SPI讀寫W25Q18),STM32開(kāi)發(fā),stm32,嵌入式硬件,單片機(jī)

W25Q128 介紹?

什么是 W25Q128 ?

W25Q128 是華邦公司推出的一款 SPI 接口的 NOR Flash 芯片,其存儲(chǔ)空間為 128 Mbit,相當(dāng)于 16M 字節(jié)。 Flash 是常用的用于儲(chǔ)存數(shù)據(jù)的半導(dǎo)體器件,它具有容量大,可重復(fù)擦寫、按“扇區(qū)/塊”擦除、掉 電后數(shù)據(jù)可繼續(xù)保存的特性。

Flash 是有一個(gè)物理特性:只能寫 0 ,不能寫 1 ,寫 1 靠擦除。

W25Q128 存儲(chǔ)架構(gòu)?

stm32(SPI讀寫W25Q18),STM32開(kāi)發(fā),stm32,嵌入式硬件,單片機(jī)

一般按扇區(qū)(4k)進(jìn)行擦除。

可以按 章 -- 節(jié) -- 頁(yè) -- 字 進(jìn)行理解。?

stm32(SPI讀寫W25Q18),STM32開(kāi)發(fā),stm32,嵌入式硬件,單片機(jī)

?寫使能 (06H)

執(zhí)行頁(yè)寫,扇區(qū)擦除,塊擦除,片擦除,寫狀態(tài)寄存器等指令前,需要寫使能。

拉低CS片選 → 發(fā)送06H → 拉高CS片選

讀狀態(tài)寄存器(05H)

拉低CS片選 → 發(fā)送05H→ 返回SR1的值 → 拉高CS片選

讀時(shí)序(03H)

拉低CS片選 → 發(fā)送03H→ 發(fā)送24位地址 → 讀取數(shù)據(jù)(1~n) → 拉高CS片選

頁(yè)寫時(shí)序 (02H)

頁(yè)寫命令最多可以向FLASH傳輸256個(gè)字節(jié)的數(shù)據(jù)。

拉低CS片選 → 發(fā)送02H→ 發(fā)送24位地址 → 發(fā)送數(shù)據(jù)(1~n) → 拉高CS片選

扇區(qū)擦除時(shí)序(20H)

寫入數(shù)據(jù)前,檢查內(nèi)存空間是否全部都是 0XFF ,不滿足需擦除。 拉

低CS片選 → 發(fā)送20H→ 發(fā)送24位地址 → 拉高CS片選

W25Q128 狀態(tài)寄存器 W25Q128 一共有 3 個(gè)狀態(tài)寄存器,它們的作用是跟蹤芯片的狀態(tài)。 其中,狀態(tài)寄存器 1 較為常用。

stm32(SPI讀寫W25Q18),STM32開(kāi)發(fā),stm32,嵌入式硬件,單片機(jī)

?W25Q128 常見(jiàn)操作流程

以下流程省略了拉低/拉高片選信號(hào)CS

stm32(SPI讀寫W25Q18),STM32開(kāi)發(fā),stm32,嵌入式硬件,單片機(jī)

stm32(SPI讀寫W25Q18),STM32開(kāi)發(fā),stm32,嵌入式硬件,單片機(jī)?

寫操作?

?stm32(SPI讀寫W25Q18),STM32開(kāi)發(fā),stm32,嵌入式硬件,單片機(jī)

實(shí)驗(yàn):使用 SPI 通訊讀寫 W25Q128 模塊

硬件接線 :VCC -- 3.3V CS -- PA4 CLK -- PA5 DO -- PA6 DI -- PA7

cubeMX配置

stm32(SPI讀寫W25Q18),STM32開(kāi)發(fā),stm32,嵌入式硬件,單片機(jī)

w25q128_write_nocheck流程圖?

stm32(SPI讀寫W25Q18),STM32開(kāi)發(fā),stm32,嵌入式硬件,單片機(jī)

代碼實(shí)現(xiàn)?

main.c

int main(void)
{
  /* USER CODE BEGIN 1 */
	uint8_t datatemp[TEXT_SIZE];
  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_SPI1_Init();
  MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 */
	w25q128_init();
	
	/* 寫入測(cè)試數(shù)據(jù) */
	sprintf((char *)datatemp, "liangxu shuai");
	w25q128_write(datatemp, FLASH_WriteAddress, TEXT_SIZE);
	printf("數(shù)據(jù)寫入完成!\r\n");
	
	/* 讀出測(cè)試數(shù)據(jù) */
	memset(datatemp, 0, TEXT_SIZE);
	w25q128_read(datatemp, FLASH_ReadAddress, TEXT_SIZE);
	printf("讀出數(shù)據(jù):%s\r\n", datatemp);
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

W25Q128.c文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-558835.html

#include "w25q128.h"
#include "spi.h"
#include "stdio.h"

/**
 * @brief       初始化W25Q128
 * @param       無(wú)
 * @retval      無(wú)
 */
void w25q128_init(void)
{
		uint16_t flash_type;
    spi1_read_write_byte(0xFF); /* 清除DR的作用 */
    W25Q128_CS(1);
		flash_type = w25q128_read_id();   /* 讀取FLASH ID. */
		if (flash_type == W25Q128)
			printf("檢測(cè)到W25Q128芯片\r\n");
}

/**
 * @brief       等待空閑
 * @param       無(wú)
 * @retval      無(wú)
 */
static void w25q128_wait_busy(void)
{
    while ((w25q128_rd_sr1() & 0x01) == 0x01);   /* 等待BUSY位清空 */
}

/**
 * @brief       讀取W25Q128的狀態(tài)寄存器1的值
 * @param       無(wú)
 * @retval      狀態(tài)寄存器值
 */
uint8_t w25q128_rd_sr1(void)
{
    uint8_t rec_data = 0;
    
    W25Q128_CS(0);
    spi1_read_write_byte(FLASH_ReadStatusReg1);     /* 讀狀態(tài)寄存器1 */
    rec_data = spi1_read_write_byte(0xFF);
    W25Q128_CS(1);
    
    return rec_data;
}

/**
 * @brief       W25Q128寫使能
 *   @note      將S1寄存器的WEL置位
 * @param       無(wú)
 * @retval      無(wú)
 */
void w25q128_write_enable(void)
{
    W25Q128_CS(0);
    spi1_read_write_byte(FLASH_WriteEnable);   /* 發(fā)送寫使能 */
    W25Q128_CS(1);
}

/**
 * @brief       W25Q128發(fā)送地址
 * @param       address : 要發(fā)送的地址
 * @retval      無(wú)
 */
static void w25q128_send_address(uint32_t address)
{
    spi1_read_write_byte((uint8_t)((address)>>16));     /* 發(fā)送 bit23 ~ bit16 地址 */
    spi1_read_write_byte((uint8_t)((address)>>8));      /* 發(fā)送 bit15 ~ bit8  地址 */
    spi1_read_write_byte((uint8_t)address);             /* 發(fā)送 bit7  ~ bit0  地址 */
}

/**
 * @brief       擦除整個(gè)芯片
 *   @note      等待時(shí)間超長(zhǎng)...
 * @param       無(wú)
 * @retval      無(wú)
 */
void w25q128_erase_chip(void)
{
    w25q128_write_enable();    /* 寫使能 */
    w25q128_wait_busy();       /* 等待空閑 */
    W25Q128_CS(0);
    spi1_read_write_byte(FLASH_ChipErase);  /* 發(fā)送讀寄存器命令 */ 
    W25Q128_CS(1);
    w25q128_wait_busy();       /* 等待芯片擦除結(jié)束 */
}

/**
 * @brief       擦除一個(gè)扇區(qū)
 *   @note      注意,這里是扇區(qū)地址,不是字節(jié)地址!!
 *              擦除一個(gè)扇區(qū)的最少時(shí)間:150ms
 *
 * @param       saddr : 扇區(qū)地址 根據(jù)實(shí)際容量設(shè)置
 * @retval      無(wú)
 */
void w25q128_erase_sector(uint32_t saddr)
{
    //printf("fe:%x\r\n", saddr);   /* 監(jiān)視falsh擦除情況,測(cè)試用 */
    saddr *= 4096;
    w25q128_write_enable();        /* 寫使能 */
    w25q128_wait_busy();           /* 等待空閑 */

    W25Q128_CS(0);
    spi1_read_write_byte(FLASH_SectorErase);    /* 發(fā)送寫頁(yè)命令 */
    w25q128_send_address(saddr);   /* 發(fā)送地址 */
    W25Q128_CS(1);
    w25q128_wait_busy();           /* 等待扇區(qū)擦除完成 */
}

/**
 * @brief       讀取芯片ID
 * @param       無(wú)
 * @retval      FLASH芯片ID
 *   @note      芯片ID列表見(jiàn): w25q128.h, 芯片列表部分
 */
uint16_t w25q128_read_id(void)
{
    uint16_t deviceid;

    W25Q128_CS(0);
    spi1_read_write_byte(FLASH_ManufactDeviceID);   /* 發(fā)送讀 ID 命令 */
    spi1_read_write_byte(0);    /* 寫入一個(gè)字節(jié) */
    spi1_read_write_byte(0);
    spi1_read_write_byte(0);
    deviceid = spi1_read_write_byte(0xFF) << 8;     /* 讀取高8位字節(jié) */
    deviceid |= spi1_read_write_byte(0xFF);         /* 讀取低8位字節(jié) */
    W25Q128_CS(1);

    return deviceid;
}

/**
 * @brief       讀取SPI FLASH
 *   @note      在指定地址開(kāi)始讀取指定長(zhǎng)度的數(shù)據(jù)
 * @param       pbuf    : 數(shù)據(jù)存儲(chǔ)區(qū)
 * @param       addr    : 開(kāi)始讀取的地址(最大32bit)
 * @param       datalen : 要讀取的字節(jié)數(shù)(最大65535)
 * @retval      無(wú)
 */
void w25q128_read(uint8_t *pbuf, uint32_t addr, uint16_t datalen)
{
    uint16_t i;

    W25Q128_CS(0);
    spi1_read_write_byte(FLASH_ReadData);       /* 發(fā)送讀取命令 */
    w25q128_send_address(addr);                /* 發(fā)送地址 */
    
    for(i=0;i<datalen;i++)
    {
        pbuf[i] = spi1_read_write_byte(0XFF);   /* 循環(huán)讀取 */
    }
    
    W25Q128_CS(1);
}

/**
 * @brief       SPI在一頁(yè)(0~65535)內(nèi)寫入少于256個(gè)字節(jié)的數(shù)據(jù)
 *   @note      在指定地址開(kāi)始寫入最大256字節(jié)的數(shù)據(jù)
 * @param       pbuf    : 數(shù)據(jù)存儲(chǔ)區(qū)
 * @param       addr    : 開(kāi)始寫入的地址(最大32bit)
 * @param       datalen : 要寫入的字節(jié)數(shù)(最大256),該數(shù)不應(yīng)該超過(guò)該頁(yè)的剩余字節(jié)數(shù)!!!
 * @retval      無(wú)
 */
static void w25q128_write_page(uint8_t *pbuf, uint32_t addr, uint16_t datalen)
{
    uint16_t i;

    w25q128_write_enable();    /* 寫使能 */

    W25Q128_CS(0);
    spi1_read_write_byte(FLASH_PageProgram);    /* 發(fā)送寫頁(yè)命令 */
    w25q128_send_address(addr);                /* 發(fā)送地址 */

    for(i=0;i<datalen;i++)
    {
        spi1_read_write_byte(pbuf[i]);          /* 循環(huán)寫入 */
    }
    
    W25Q128_CS(1);
    w25q128_wait_busy();       /* 等待寫入結(jié)束 */
}

/**
 * @brief       無(wú)檢驗(yàn)寫SPI FLASH
 *   @note      必須確保所寫的地址范圍內(nèi)的數(shù)據(jù)全部為0XFF,否則在非0XFF處寫入的數(shù)據(jù)將失敗!
 *              具有自動(dòng)換頁(yè)功能
 *              在指定地址開(kāi)始寫入指定長(zhǎng)度的數(shù)據(jù),但是要確保地址不越界!
 *
 * @param       pbuf    : 數(shù)據(jù)存儲(chǔ)區(qū)
 * @param       addr    : 開(kāi)始寫入的地址(最大32bit)
 * @param       datalen : 要寫入的字節(jié)數(shù)(最大65535)
 * @retval      無(wú)
 */
static void w25q128_write_nocheck(uint8_t *pbuf, uint32_t addr, uint16_t datalen)
{
    uint16_t pageremain;
    pageremain = 256 - addr % 256;  /* 單頁(yè)剩余的字節(jié)數(shù) */

    if (datalen <= pageremain)      /* 不大于256個(gè)字節(jié) */
    {
        pageremain = datalen;
    }

    while (1)
    {
        /* 當(dāng)寫入字節(jié)比頁(yè)內(nèi)剩余地址還少的時(shí)候, 一次性寫完
         * 當(dāng)寫入直接比頁(yè)內(nèi)剩余地址還多的時(shí)候, 先寫完整個(gè)頁(yè)內(nèi)剩余地址, 然后根據(jù)剩余長(zhǎng)度進(jìn)行不同處理
         */
        w25q128_write_page(pbuf, addr, pageremain);

        if (datalen == pageremain)   /* 寫入結(jié)束了 */
        {
            break;
        }
        else     /* datalen > pageremain */
        {
            pbuf += pageremain;         /* pbuf指針地址偏移,前面已經(jīng)寫了pageremain字節(jié) */
            addr += pageremain;         /* 寫地址偏移,前面已經(jīng)寫了pageremain字節(jié) */
            datalen -= pageremain;      /* 寫入總長(zhǎng)度減去已經(jīng)寫入了的字節(jié)數(shù) */

            if (datalen > 256)          /* 剩余數(shù)據(jù)還大于一頁(yè),可以一次寫一頁(yè) */
            {
                pageremain = 256;       /* 一次可以寫入256個(gè)字節(jié) */
            }
            else     /* 剩余數(shù)據(jù)小于一頁(yè),可以一次寫完 */
            {
                pageremain = datalen;   /* 不夠256個(gè)字節(jié)了 */
            }
        }
    }
}

/**
 * @brief       寫SPI FLASH
 *   @note      在指定地址開(kāi)始寫入指定長(zhǎng)度的數(shù)據(jù) , 該函數(shù)帶擦除操作!
 *              SPI FLASH 一般是: 256個(gè)字節(jié)為一個(gè)Page, 4Kbytes為一個(gè)Sector, 16個(gè)扇區(qū)為1個(gè)Block
 *              擦除的最小單位為Sector.
 *
 * @param       pbuf    : 數(shù)據(jù)存儲(chǔ)區(qū)
 * @param       addr    : 開(kāi)始寫入的地址(最大32bit)
 * @param       datalen : 要寫入的字節(jié)數(shù)(最大65535)
 * @retval      無(wú)
 */
uint8_t g_w25q128_buf[4096];   /* 扇區(qū)緩存 */

void w25q128_write(uint8_t *pbuf, uint32_t addr, uint16_t datalen)
{
    uint32_t secpos;
    uint16_t secoff;
    uint16_t secremain;
    uint16_t i;
    uint8_t *w25q128_buf;

    w25q128_buf = g_w25q128_buf;
    secpos = addr / 4096;       /* 扇區(qū)地址 */
    secoff = addr % 4096;       /* 在扇區(qū)內(nèi)的偏移 */
    secremain = 4096 - secoff;  /* 扇區(qū)剩余空間大小 */

    //printf("ad:%X,nb:%X\r\n", addr, datalen); /* 測(cè)試用 */
    if (datalen <= secremain)
    {
        secremain = datalen;    /* 不大于4096個(gè)字節(jié) */
    }

    while (1)
    {
        w25q128_read(w25q128_buf, secpos * 4096, 4096);   /* 讀出整個(gè)扇區(qū)的內(nèi)容 */

        for (i = 0; i < secremain; i++)   /* 校驗(yàn)數(shù)據(jù) */
        {
            if (w25q128_buf[secoff + i] != 0XFF)
            {
                break;      /* 需要擦除, 直接退出for循環(huán) */
            }
        }

        if (i < secremain)   /* 需要擦除 */
        {
            w25q128_erase_sector(secpos);  /* 擦除這個(gè)扇區(qū) */

            for (i = 0; i < secremain; i++)   /* 復(fù)制 */
            {
                w25q128_buf[i + secoff] = pbuf[i];
            }

            w25q128_write_nocheck(w25q128_buf, secpos * 4096, 4096);  /* 寫入整個(gè)扇區(qū) */
        }
        else        /* 寫已經(jīng)擦除了的,直接寫入扇區(qū)剩余區(qū)間. */
        {
            w25q128_write_nocheck(pbuf, addr, secremain);  /* 直接寫扇區(qū) */
        }

        if (datalen == secremain)
        {
            break;  /* 寫入結(jié)束了 */
        }
        else        /* 寫入未結(jié)束 */
        {
            secpos++;               /* 扇區(qū)地址增1 */
            secoff = 0;             /* 偏移位置為0 */

            pbuf += secremain;      /* 指針偏移 */
            addr += secremain;      /* 寫地址偏移 */
            datalen -= secremain;   /* 字節(jié)數(shù)遞減 */

            if (datalen > 4096)
            {
                secremain = 4096;   /* 下一個(gè)扇區(qū)還是寫不完 */
            }
            else
            {
                secremain = datalen;/* 下一個(gè)扇區(qū)可以寫完了 */
            }
        }
    }
}

到了這里,關(guān)于stm32(SPI讀寫W25Q18)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【STM32CubeMX學(xué)習(xí)】SPI讀寫W25Q16

    【STM32CubeMX學(xué)習(xí)】SPI讀寫W25Q16

    ????????SPI分為主從工作模式,通常有一個(gè)主設(shè)備和一個(gè)或多個(gè)從設(shè)備,本文中MCU為主機(jī),W25Q16為從機(jī)。 SPI通信有以下四根線: MISO:主設(shè)備數(shù)據(jù)輸入,從設(shè)備數(shù)據(jù)輸出。 MOSI:主設(shè)備數(shù)據(jù)輸出,從設(shè)備數(shù)據(jù)輸入。 SCLK:時(shí)鐘信號(hào),由主設(shè)備產(chǎn)生。 CS:從設(shè)備片選信號(hào),由

    2024年02月03日
    瀏覽(17)
  • 基于STM32實(shí)現(xiàn)W25Q16讀寫操作(spi)

    基于STM32實(shí)現(xiàn)W25Q16讀寫操作(spi)

    在之前我們學(xué)習(xí)了flash閃存,這個(gè)更多的是內(nèi)部數(shù)據(jù)存儲(chǔ),容量也是會(huì)比較小。這次我們來(lái)學(xué)習(xí)一下更多的存儲(chǔ)單元w25q16,順便了解spi———串行外圍設(shè)備接口。 在我們的核心板子上基本都會(huì)有這么一塊芯片,只是有的容量會(huì)計(jì)較大,大家可以查看板子的原理圖,如圖所示:

    2024年01月19日
    瀏覽(23)
  • STM32-SPI通信(W25Q64芯片簡(jiǎn)介,使用SPI讀寫W25Q64存儲(chǔ)器芯片)

    STM32-SPI通信(W25Q64芯片簡(jiǎn)介,使用SPI讀寫W25Q64存儲(chǔ)器芯片)

    ???SPI(Serial Peripheral Interface)是由Motorola公司開(kāi)發(fā)的一種通用數(shù)據(jù)總線四根通信線:SCK(Serial Clock)、MOSI(Master Output Slave Input)、MISO(Master Input Slave Output)、SS(Slave Select)。 ?SPI通信具有以下特點(diǎn): 同步,全雙工; 支持總線掛載多設(shè)備(SPI僅支持一主多從); 在不

    2024年02月08日
    瀏覽(21)
  • 【STM32】SPI初步使用 讀寫FLASH W25Q64

    【STM32】SPI初步使用 讀寫FLASH W25Q64

    (1) SS( Slave Select):從設(shè)備選擇信號(hào)線,常稱為片選信號(hào)線,每個(gè)從設(shè)備都有獨(dú)立的這一條 NSS 信號(hào)線,當(dāng)主機(jī)要選擇從設(shè)備時(shí),把該從設(shè)備的 NSS 信號(hào)線設(shè)置為低電平,該從設(shè)備即被選中,即片選有效,接著主機(jī)開(kāi)始與被選中的從設(shè)備進(jìn)行 SPI通訊。所以 SPI通訊以 NSS 線置低電

    2024年02月10日
    瀏覽(22)
  • STM32—SPI詳解入門(使用SPI通訊讀寫W25Q128模塊)

    STM32—SPI詳解入門(使用SPI通訊讀寫W25Q128模塊)

    目錄 一、SPI是什么 二、SPI物理架構(gòu) 三、SPI工作原理 四、SPI工作模式 五、SPI相關(guān)寄存器介紹 六、SPI用到的結(jié)構(gòu)體與函數(shù) 1.結(jié)構(gòu)體 2.函數(shù) 七、W25Q128芯片 1.W25Q128介紹 2.W25Q128存儲(chǔ)架構(gòu) 3.W25Q128常用指令 4.W25Q128狀態(tài)寄存器 5.W25Q128常見(jiàn)操作流程 八、實(shí)驗(yàn)(使用SPI通訊讀寫W25Q128模塊

    2024年02月14日
    瀏覽(17)
  • STM-32:SPI通信協(xié)議/W25Q64簡(jiǎn)介—軟件SPI讀寫W25Q64

    STM-32:SPI通信協(xié)議/W25Q64簡(jiǎn)介—軟件SPI讀寫W25Q64

    SPI是串行外設(shè)接口(Serial Peripheral Interface)的縮寫,是美國(guó)摩托羅拉公司(Motorola)最先推出的一種同步串行傳輸規(guī)范,也是一種單片機(jī)外設(shè)芯片串行擴(kuò)展接口,是一種高速、全雙工、同步通信總線,所以可以在同一時(shí)間發(fā)送和接收數(shù)據(jù),SPI沒(méi)有定義速度限制,通常能達(dá)到甚

    2024年02月16日
    瀏覽(19)
  • STM32單片機(jī)初學(xué)8-SPI flash(W25Q128)數(shù)據(jù)讀寫

    STM32單片機(jī)初學(xué)8-SPI flash(W25Q128)數(shù)據(jù)讀寫

    ????????當(dāng)使用單片機(jī)進(jìn)行項(xiàng)目開(kāi)發(fā),涉及大量數(shù)據(jù)需要儲(chǔ)存時(shí)(例如使用了屏幕作為顯示設(shè)備,常常需要存儲(chǔ)圖片、動(dòng)畫等數(shù)據(jù)),單靠單片機(jī)內(nèi)部的Flash往往是不夠用的。 ????????如STM32F103系列,內(nèi)部Flash最多只能達(dá)到512KByte,假設(shè)要儲(chǔ)存240*240分辨率、64K彩色圖片,

    2024年02月03日
    瀏覽(23)
  • STM32之SPI和W25Q128

    STM32之SPI和W25Q128

    目錄 SPI 介紹 SPI 物理架構(gòu) SPI 工作原理 SPI 工作模式 ?W25Q128 介紹 W25Q128 存儲(chǔ)架構(gòu) W25Q128 常用指令 W25Q128 狀態(tài)寄存器 W25Q128 常見(jiàn)操作流程 實(shí)驗(yàn):使用 SPI 通訊讀寫 W25Q128 模塊? 硬件接線 cubeMX配置 w25q128_write_nocheck流程圖? 代碼: SPI 是什么? SPI 是串行外設(shè)接口( Serial Periphera

    2024年01月16日
    瀏覽(25)
  • STM32--SPI通信與W25Q64(2)

    STM32--SPI通信與W25Q64(2)

    STM32–SPI通信與W25Q64(1) STM32內(nèi)部集成了硬件SPI收發(fā)電路,可以由硬件自動(dòng)執(zhí)行時(shí)鐘生成、數(shù)據(jù)收發(fā)等功能,減輕CPU的負(fù)擔(dān) 。 3線全雙工同步傳輸 8或16位傳輸幀格式選擇 主或從操作 支持多主模式 8個(gè)主模式波特率預(yù)分頻系數(shù)(最大為fPCLK/2) 主模式和從模式下均可以由軟件或硬

    2024年02月10日
    瀏覽(23)
  • STM32--SPI通信與W25Q64(1)

    STM32--SPI通信與W25Q64(1)

    USART串口鏈接入口 I2C通信鏈接入口 SPI(Serial Peripheral Interface)是一種高速的、全雙工、同步的串行通信協(xié)議 。通常用于連接主控芯片和外圍設(shè)備,比如傳感器、存儲(chǔ)器、顯示屏等。SPI使用簡(jiǎn)單,只需要幾根線就可以實(shí)現(xiàn)進(jìn)行通信。 主要線路: SCLK(時(shí)鐘信號(hào)) :由主設(shè)備產(chǎn)

    2024年02月11日
    瀏覽(20)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包