50.读写W25Q128

    按照良许嵌入式的代码引用,需要了解详细请移步良许嵌入式32部分良许嵌入式

引脚定义:

首先是头文件部分声明以及定义

1.1头文件
#ifndef __W25Q128_H
#define __W25Q128_H

#include "sys.h"
//定义片选信号,1为选中,0为未选中
#define W25Q128_CS(X)   do{X? \
                           HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET):\
                           HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET);\
                          }while(0)
//下面是W25Q128的指令表,在W25Q128官方手册第八章可以找到
#define FLASH_ManufactDeviceID                  0x90    //查询厂商设备号:16位
#define FLASH_WriteEnable                       0x06    //开启写使能
#define FLASH_ReadStatusReg1                    0x05    //读取SPI状态寄存器1
#define FLASH_ReadData                          0x03    //读取数据
#define FLASH_PageProgram                       0x02    //页
#define FLASH_SectorErase                       0x20    //扇区擦除
#define FLASH_DummyByte                         0xFF    //写入指令

void w25q128_init(void);  //初始化
uint16_t w25q128_read_id(void);  //读取芯片ID
void w25q128_read_data(uint32_t address, uint8_t *data, uint32_t size);  //读取spi接收缓冲区数据
void w25q128_write_page(uint32_t address, uint8_t *data, uint16_t size);  //写页
void w25q128_erase_sector(uint32_t address);  //擦除扇区
#endif
2.1 SPI的初始化(void spi1_init(void))
SPI_HandleTypeDef  SPI_HandleInitStructure={0};  //定义spi句柄并且初始化
void spi1_init(void)
{
    SPI_HandleInitStructure.Instance=SPI1;   //当前模块使用的是spi1
    SPI_HandleInitStructure.Init.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_256;   //SPI波特率分频 256
    SPI_HandleInitStructure.Init.CLKPhase=SPI_PHASE_1EDGE;  //奇数边沿触发
    SPI_HandleInitStructure.Init.CLKPolarity=SPI_POLARITY_LOW;  //CPOL,低电平为空闲
    SPI_HandleInitStructure.Init.CRCCalculation=SPI_CRCCALCULATION_DISABLE; //关闭crc校验
    SPI_HandleInitStructure.Init.CRCPolynomial=7;  //CRC校验多项式 4+2+1=7,spi默认
    SPI_HandleInitStructure.Init.DataSize=SPI_DATASIZE_8BIT; //8位数据传输模式
    SPI_HandleInitStructure.Init.Direction=SPI_DIRECTION_2LINES;  //双工模式
    SPI_HandleInitStructure.Init.FirstBit=SPI_FIRSTBIT_MSB;  //高位先行
    SPI_HandleInitStructure.Init.NSS=SPI_NSS_SOFT;  //从模式选择,软件
    SPI_HandleInitStructure.Init.Mode=SPI_MODE_MASTER;  //主机模式
    SPI_HandleInitStructure.Init.TIMode=SPI_TIMODE_DISABLE;  //关闭
    
    HAL_SPI_Init(&SPI_HandleInitStructure);
}
2.2 SPI的Msp_Init,这个函数主要作用是配置spi引脚,还有开启时钟,设置中断优先级

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值