久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3322|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

stm32驅(qū)動(dòng)AT45DB161程序 共享下

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:333885 發(fā)表于 2018-5-19 20:45 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
#include "stm32f10x_lib.h"
#include "prtfont.h"
#define  uint32                    u32
#define  uint                      u16
#define  uchar                     u8
#define  CS161_High                GPIO_SetBits(GPIOC,GPIO_Pin_5)   
#define  CS161_Low                 GPIO_ResetBits(GPIOC,GPIO_Pin_5);NOP();
#define  MOSI_Dat1                 GPIO_SetBits(GPIOA,GPIO_Pin_8);NOP();
#define  MOSI_Dat0                 GPIO_ResetBits(GPIOA,GPIO_Pin_8);NOP();
#define  MISO_Read()               GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_11)
#define  MCLK_CLK1                 GPIO_SetBits(GPIOD,GPIO_Pin_8);NOP();  
#define  MCLK_CLK0                 GPIO_ResetBits(GPIOD,GPIO_Pin_8);NOP();
//AT45DB161操作碼指令
#define DB161_MEMORY_READ                        0XD2        //從頁(yè)讀出
#define DB161_BUF1_READ                                0XD4        //從緩存1讀出
#define DB161_BUF2_READ                                0XD6        //從緩存2讀出
#define DB161_MEMORY_BUF1_TRANSFER                0X53        //從頁(yè)讀到緩存1
#define DB161_MEMORY_BUF2_TRANSFER                0X55        //從頁(yè)讀到緩存2
#define DB161_MEMORY_PROGRAM_THROUGH_BUF1         0X82        //通過緩存1寫入頁(yè)
#define DB161_MEMORY_PROGRAM_THROUGH_BUF2         0X85        //通過緩存2寫入頁(yè)
#define DB161_BUF1_WRITE                        0X84        //寫入緩存1
#define DB161_BUF2_WRITE                        0X87        //寫入緩存2
#define DB161_BUF1_MEMORY_PROGRAM_WITH_ERASE        0X83        //緩存1內(nèi)容寫入頁(yè)(邊擦邊寫)
#define DB161_BUF2_MEMORY_PROGRAM_WITH_ERASE        0X86        //緩存2內(nèi)容寫入頁(yè)(邊擦邊寫)
#define DB161_BUF1_MEMORY_PROGRAM_without_ERASE        0X88        //緩存1內(nèi)容寫入頁(yè)(先擦除)
#define DB161_BUF2_MEMORY_PROGRAM_without_ERASE        0X89        //緩存2內(nèi)容寫入頁(yè)(先擦除)
#define DB161_PAGE_ERASE                        0X81        //頁(yè)擦除
#define DB161_BLOCK_ERASE                        0X50        //塊擦除
#define DB161_SECTOR_ERASE                        0X7C        //扇區(qū)擦除
#define DB161_MEMORY_BUF1_COMPARE                0X60        //頁(yè)內(nèi)容與緩存1比較
#define DB161_MEMORY_BUF2_COMPARE                0X61        //頁(yè)內(nèi)容與緩存2比較
#define DB161_STATUS_REGISTER_READ                0XD7        //讀狀態(tài)字
#define DB161_ID_READ                                0X9F        //讀ID
#define PAGE_BASE_NUMBER                        528     //AT45DB161 頁(yè)尺寸
#define HanZiCode_Base                          0x0     //字模起始地址
extern u8 Font[1200];
//---------------------------------------------------------------------------
void NOP(void)
{
    u8 i;
    for(i=0;i<5;i++);
}
/****************************************************************************
** 函數(shù)名稱:MSPI_SendByte()
** 函數(shù)功能:向SPI總線發(fā)送數(shù)據(jù)
** 入口參數(shù):dat   待發(fā)送的數(shù)據(jù)
** 出口參數(shù):返回值為讀取的數(shù)據(jù)
****************************************************************************/
u8 MSPI_SendByte(u8 dt)  
{  
    u8 i;  
    u8 temp=0;  
    for(i=8;i>0;i--)  
    {  
        if(dt&0x80)
        {    MOSI_Dat1;  }
        else
        {    MOSI_Dat0;  }
        dt<<=1;  
        MCLK_CLK1;
        NOP();
        temp<<=1;  
        if(MISO_Read())
          temp++;  
        NOP();  
        MCLK_CLK0;  
    }  
    return temp;  
}
/***************************************************************************
** 函數(shù)名稱: AT45DB161_Ready()
** 函數(shù)功能:讀AT45DB161的狀態(tài)字
** 入口參數(shù):無
** 出口參數(shù):1:準(zhǔn)備好;0:忙
****************************************************************************/
u8 AT45DB161_Ready(void)
{
    uchar i;
    CS161_Low;
    MSPI_SendByte(DB161_STATUS_REGISTER_READ);
    i=MSPI_SendByte(0);                                       // 讀到0x80說明器件準(zhǔn)備好
    CS161_High;        
    if((i&0x80)==0x80)
    {  return(1); }
    else  
    {  return(0); }
}
//---------------------------------------------------------------------------
void ReadFlashOnePage(u16 page,u16 insideaddr,u8 *buffer,u16 count)
{
    uint i;
    uchar command;
    command = (uchar)(page>>6);
    while(AT45DB161_Ready()==0);
    CS161_Low;
    MSPI_SendByte(DB161_MEMORY_READ);                        // 寫入讀頁(yè)存儲(chǔ)區(qū)命令
    MSPI_SendByte(command);
    command = (uchar)((page<<2) + (insideaddr>>8));          // 寫入頁(yè)號(hào)與頁(yè)內(nèi)地址
    MSPI_SendByte(command);
    MSPI_SendByte((uchar)insideaddr);
    MSPI_SendByte(0x00);
    MSPI_SendByte(0x00);
    MSPI_SendByte(0x00);                                     // 寫入4字節(jié)無關(guān)字節(jié)
    MSPI_SendByte(0x00);
    for(i=0;i<count;i++)
    {
        *buffer=MSPI_SendByte(0);                            // 讀出需要的字節(jié)數(shù)
        buffer++;
    }
    CS161_High;
}
//---------------------------------------------------------------------------
u8 ReadFlashData(u32 address,u8 *buffer,u16 count)
{
    uint32 i,firstcnt,lastcnt;                        
    uint32 page,pageaddr,insideaddr;
    pageaddr = address/PAGE_BASE_NUMBER;                     // 將入口整地址分成頁(yè)地址,求出頁(yè)地址地址整數(shù)
    insideaddr = address%PAGE_BASE_NUMBER;                   // 求出第一頁(yè)頁(yè)內(nèi)地址,即頁(yè)內(nèi)余數(shù)
    firstcnt = PAGE_BASE_NUMBER - insideaddr;                // 求出第一頁(yè)內(nèi)包含的字節(jié)數(shù)
    if(firstcnt>count)firstcnt = count;                      // 判斷第一頁(yè)字節(jié)數(shù)是否超過要讀取的字節(jié)數(shù)
    lastcnt = (count-firstcnt)%PAGE_BASE_NUMBER;             // 求出最后一頁(yè)要讀取的字節(jié)數(shù)
    page = (count-firstcnt)/PAGE_BASE_NUMBER;                // 除第一頁(yè)和最后頁(yè)外要讀取的整數(shù)頁(yè)個(gè)數(shù)
    ReadFlashOnePage(pageaddr,insideaddr,buffer,firstcnt);   // 讀第一頁(yè)
    pageaddr++;
    buffer += firstcnt;
    for(i=0;i<page;i++)                                      // 讀整數(shù)頁(yè)
    {
        ReadFlashOnePage(pageaddr,0,buffer,PAGE_BASE_NUMBER);
        pageaddr++;
        buffer += PAGE_BASE_NUMBER;
    }
    if(lastcnt>0)ReadFlashOnePage(pageaddr,0,buffer,lastcnt);// 讀最后一頁(yè)
    return(TRUE);
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:700073 發(fā)表于 2021-4-15 10:24 | 只看該作者
你好 有AT45DB161D芯片庫(kù)元件嗎
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 一区二区精品 | 在线观看视频你懂得 | 久久成人国产 | 日韩在线免费电影 | 中文字幕亚洲视频 | 99热热99 | 电影在线 | 99精品网 | 欧美精品在线一区 | 久久男人天堂 | 免费久久视频 | 爱操av| 粉嫩一区二区三区四区公司1 | 国产成人91视频 | 国产一区二区不卡 | 亚洲视频在线观看 | 亚州精品天堂中文字幕 | 欧美中文一区 | 99国产精品久久久久 | 国产精品毛片在线 | 国产精品一二三区 | 天天久久 | 97av视频| 色就干| 91在线观看免费视频 | 成人免费一区二区三区视频网站 | 欧美亚洲国语精品一区二区 | 久久久久久毛片免费观看 | 欧美在线日韩 | 激情五月综合 | 国产精品久久久久久福利一牛影视 | 国产精品一区二区福利视频 | 成人精品免费视频 | 天天色综| 九九在线 | 欧美在线一区二区三区 | 国产午夜精品久久久久 | 国产视频不卡一区 | 91精品国产综合久久婷婷香蕉 | 成人国产精品 | 中文字幕在线观看一区二区 |