gpio口模拟spi读写w25q64的基本内容已经跟大家介绍完了,今天跟大家介绍下如何通过串口接收文件并保存到w25q64中。
由于文件是通过串口中断接收的,如果只定义一个缓冲区,有可能缓冲区的内容在写入w25q64时就被串口中断接收到的内容覆盖,造成数据丢失,所以通过定义两个缓冲区,分时进行接收和保存数据。
串口中断及变量定义
u8 usart1_buf[2][usart1_buf_size] = {0};u8 usart1_ok = 0;u16 cnt = 0;u8 recstart = 0;u8 timeout = 0;u8 pos = 0;void usart1_irqhandler(){ recstart = 1; timeout = 0; if((usart1- >sr & (1< dr; cnt++; if(cnt == usart1_buf_size) { usart1_ok = 1; cnt = 0; pos++; pos%=2; } } else usart1- >sr = 0;}主函数通过判断接收中断存储串口中断缓冲区数据到w25q64。并判断接收数据是否超时作为文件接收完成的标志。接收完成后将保存到w25q64的内容全部读取并打印到串口。
#include stm32f4xx.h#include led.h#include core_cm4.h#include usart.h#include delay.h#include stdio.h#include w25q64.hint main(){ u32 add = 0; u16 i = 0; nvic_setprioritygrouping(5); //4层嵌套,4个响应优先级 usart1_init(115200); w25q64_init(); printf(擦除扇区0、1......rn); w25q64_sectorerase(0); w25q64_sectorerase(4096); printf(擦除完成,请发文件!rn); while(1) { if(usart1_ok == 1) { usart1_ok = 0; if(pos == 0) //写缓冲区1 w25q64_pageprogram(add,usart1_buf[1],256); else if(pos == 1) //写缓冲区0 w25q64_pageprogram(add,usart1_buf[0],256); add += 256; } // //判断是否超时 if(recstart == 1) { systick_delayms(5); timeout++; if(timeout >10) { recstart = 0; timeout = 0; //存储最后一次接收到数据 w25q64_pageprogram(add,usart1_buf[pos],cnt); printf(文件接收完毕!rn); add = 0; for(i=0;i< 24;i++) { w25q64_readbytes(add,usart1_buf[0],usart1_buf_size-1); usart1_buf[0][usart1_buf_size-1] = '�'; printf(%s,(const char *)usart1_buf[0]); add += usart1_buf_size-1; } } } }}
编译后将程序烧入开发板,打开串口助手发送一个iic.c文件,发送完成后,串口助手接收到的内容和iic.c文件内容完全一致,串口接收文件并保存到w25q64成功。
克服超高速系统 安捷伦推出转接驱动器建模解决方案
2020年区块链在加密货币资产之外的实际应用趋势探讨
联盛德微电子荣获2021-2022年度“中国IC独角兽”企业称号
高芯科技PLUG1212红外机芯全系列镜头发布
中国电信流媒体
STM32 SPI读写W25Q64(三)
工信部闻库:4G网络至少还能使用10年,用户4G网速收多因素影响
内部显示接口eDP与LVDS的区别在哪?
2019年中国高校AI影响力排名出炉,清华第一,中科院第二
华为P10疏油层、内存门、闪存门最新消息:华为深陷“连环门”,这个坑谁挖的?
这项镜头贴膜技术背后,藏着让VR变轻巧的秘密
P4和P4运行时:SDN可编程性的新视野
LG能源将于2021年下半年供应特斯拉四元锂电池
(PPTC)自恢复保险丝介绍:工作原理及应用
明冠铝塑膜率先迈入动力领域
取暖器出口欧洲有什么要求?
西门子全系可编程序控制器(PLC)系列解决方案介绍
罗克韦尔自动化升级,扩展人类的无限可能
美护产品应用人工智能会是在怎样的
常见的几种功率半导体器件