STM32F103与M9525EEPROM的通信例程

电子说

1.4w人已加入

描述

STM32通过SPI 与EEPROM芯片M95256进行数据读写。

 

//SPI1 写一个字节
//TxData:要写入的字节

uint8_t SPI1_WriteByte(uint8_t TxData)
{

    HAL_SPI_Transmit(&hspi1,&TxData,1, 1000);       
	
}

//返回值:读取到的字节
uint8_t SPI1_ReadByte(void )
{
    uint8_t RxData;
    HAL_SPI_Receive(&hspi1,&RxData,1, 1000);       
 	return RxData;          		    //返回收到的数据		
}
//读字节函数
void M95256_ReadByte(uint8_t* pBuffer,uint32_t ReadAddr,uint16_t NumByteToRead)
{
    uint16_t i;   
    // 拉低片选信号
   HAL_GPIO_WritePin(NSS_GPIO_Port, NSS_Pin, GPIO_PIN_RESET);    

    SPI1_WriteByte(0x03) ;     // 发送READ指令(0x03)
 	
     SPI1_WriteByte((ReadAddr) > > 8);   
     SPI1_WriteByte(ReadAddr);

    // 发送dummy数据并读取返回值
	
    for(i=0;i< NumByteToRead;i++)
        pBuffer[i]= SPI1_ReadByte();    //循环读数  
    // 拉高片选信号
  HAL_GPIO_WritePin(NSS_GPIO_Port, NSS_Pin, GPIO_PIN_SET); 
    
}
//SPI在一页(0~65535)内写入少于256个字节的数据
//在指定地址开始写入最大256字节的数据
//pBuffer:数据存储区
//WriteAddr:开始写入的地址(16bit)
//NumByteToWrite:要写入的字节数(最大64),该数不应该超过该页的剩余字节数!!!	 
void Write_Byte(uint8_t* pBuffer,uint32_t WriteAddr,uint16_t NumByteToWrite)
{
 	uint16_t i;  
	   HAL_GPIO_WritePin(NSS_GPIO_Port, NSS_Pin, GPIO_PIN_RESET);  //使能器件   
    SPI1_WriteByte(0x06) ; 	//写使能 	
		   HAL_GPIO_WritePin(NSS_GPIO_Port, NSS_Pin, GPIO_PIN_SET); //取消片选 

		   HAL_GPIO_WritePin(NSS_GPIO_Port, NSS_Pin, GPIO_PIN_RESET);  //使能器件  
	
  SPI1_WriteByte(0x02) ; 	//写使能 //发送写页命令   
	
     SPI1_WriteByte((WriteAddr) >>8); //发送16bit地址     
     SPI1_WriteByte(WriteAddr);   
    for(i=0;i< NumByteToWrite;i++)
      	SPI1_WriteByte(pBuffer[i]);//循环写数  
	
		HAL_Delay(5);					   //等待写入结束

	   HAL_GPIO_WritePin(NSS_GPIO_Port, NSS_Pin, GPIO_PIN_SET); //取消片选 
	
}
main.c
uint8_t RXtxt_Buffer[100];
const uint8_t TEXT_Buffer[]={0x55,0xaa,0x55,0x55,0x55,0x55,0x55};
Write_Byte((uint8_t*)&TEXT_Buffer1,0x3001,7);
HAL_Delay(2000);
M95256_ReadByte(RXtxt_Buffer,0x3001,7);
printf("M95256_Read Data:%drn", RXtxt_Buffer[0]);         //串口打印信息
printf("M95256_Read Data:%drn", RXtxt_Buffer[1]);         //串口打印信息
printf("M95256_Read Data:%drn", RXtxt_Buffer[2]);         //串口打印信息
printf("M95256_Read Data:%drn", RXtxt_Buffer[6]);         //串口打印信息
HAL_Delay(1000);

审核编辑 黄宇

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分