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);
审核编辑 黄宇
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
通信
+关注
关注
18文章
6446浏览量
140244 -
STM32F103
+关注
关注
34文章
497浏览量
68171
发布评论请先 登录
相关推荐
热点推荐
国产MCU无缝替代新选择:FT32F103R8AT7完美兼容STM32F103R8Tx实操解析!
在全球半导体供应链持续波动、国产替代成为产业共识的当下,STM32F103R8Tx作为意法半导体经典的Cortex-M3内核MCU,虽长期占据消费电子、工业控制等领域的核心地位,却也面临着交货周期长
基于STM32F103驱动DAC1220 20位/16位DAC数模转换模块输出可调±10V基准和三角波信号
小等特点。工作电压5V,20位模式下建立时间15ms,16位模式仅需2ms。本文将用STM32F103驱动DAC1220,实现生成三角波信号输出。模块可用于工业控制、传感器激励等高精度场景。
CW32L012与STM32F103的三角运算性能对比
CW32L012和STM32F103在定位和性能上差异显著,在三角函数的运算性能上的对比亦非常直观。 一、 硬件架构对比(性能基础) 芯片型号 CW32L012C8 STM32F103
【新品上市】华清远见AIoT实战平台-STM32F103&amp;ESP32-S3 AI开发板套件,玩转小智AI桌宠机器狗智能车等项目
:以ESP32-S3作为AI中枢,承担视觉识别、语音交互及WiFi/BLE无线通信任务;以STM32F103作为控制核心,实现实时运动控制与多传感器数据融合,二者通过UAR
关于TMC2208与TMC2209的区别及基于STM32F103控制TMC2209模块驱动2相4线步进电机
技术,TMC2208提供2 - 32微步选择,TMC2209支持8 - 64微步选择。文章最后提供了STM32F103控制TMC2208/TMC2209驱动42步进电机的程序。
MH32F103A系列单片机的功能特性
MH32F103A是一款硬件完美兼容ST32的国产32位单片机,使用高性能的ARM Cortex-M3 内核,最高工作频率216 MHz。内置最大512K Flash,96K Sram存储器。MH32F103A 软硬件兼容
CherryUSB +STM32F103C8 example usb cdc device不识别是怎么回事?
请问下使用stm32F103 blue pill 板子
1.按照文档教程 及 视频教程 使用https://github.com/CherryUSB/cherryusb_stm32 中
发表于 09-10 07:03
STM32F103长时间运行,串口发送失败怎么解决?
STM32F103长时间运行,串口发送失败,目前定位到一致卡在USART_FLAG_TC判断那里,我们采用轮询的方式发送数据,然后判断USART_FLAG_TC是否发送成功,在大量发送后出现了一次发送后USART_FLAG_TC没有置位,然后就一直卡在这里了,这可如何是好?
发表于 07-30 07:55
在STM32F103c8上做DLQR最优控制算法的C编程资料
这是我近期做的一个项目--基于STM32F103c8的DLQR控制算法的C编程,涉及DLQR最优控制算法、嵌入式STM32F103编程、CMSIS-DSP库使用。 附有完整的程序。
发表于 07-23 15:30
•0次下载
STM32F103驱动LD3320语音识别模块
本文介绍了如何使用STM32F103微控制器驱动LD3320语音识别模块,该模块具备非特定人语音识别功能,支持动态编辑关键词,且无需额外Flash和RAM。通过SPI接口连接并配置代码,实现在不同指令下执行相应操作,如流水灯、闪烁等。实验结果显示,STM32能成功识别并响
STM32F3系列、STM32F4系列、STM32L4系列和STM32L4+系列Cortex-M4编程手册
电子发烧友网站提供《STM32F3系列、STM32F4系列、STM32L4系列和STM32L4+系列Cortex-M4编程手册.pdf》资料
发表于 06-06 17:06
•17次下载
【硬核项目】STM32F103 智能小车全栈开发:红外循迹 / 避障算法 + WiFi 远程控制,附原理图与代码
今天为大家推荐一款功能强大的STM32多功能智能小车——华清远见STM32F103智能云控小车。这款小车集红外遥控、远程物联控制、智能循迹、超声波避障和交互式显示屏五大核心功能于一体,融合了物联网云
STM32F103与M9525EEPROM的通信例程
评论