历史上的今天
返回首页

历史上的今天

今天是:2024年08月23日(星期五)

正在发生

2021年08月23日 | STM3210XX中读写Flash的操作

2021-08-23 来源:eefocus

这个星期开始接触单片机基于STM32的编程,C语言只是在学校时用过,20多年过去了,重新捡起来。


编程工具是Keil uVision5。


这个星期完成了单片机之间的串口通讯,有些设置需要在机器断电的情况下保存,这时要将设置写入Flash,需要的时候再读取出来。经过一天的努力,测试成功了。


实际的代码:


uint32_t ReadFromFlashOneWord(uint32_t Addr){

//从Flash中读取一个字(半个字的读取)

uint32_t HData,LData;//定义高位、低位两个数据

HData=(__IO uint16_t)Addr;

LData=(__IO uint16_t)(Addr+2);

return (HData<<16)+LData;

}


uint16_t ReadFromFlashHalfWord(uint32_t Addr){

//读取32位字节数据后返回16位数据

return (__IO uint16_t)Addr;

}


void ReadFromFlashMultipleWord(uint32_t StartAddr,uint16_t ReadData,uint16_t Count){

uint16_t i;

for(i=0;iReadData[i]=ReadFromFlashHalfWord(StartAddr+i2);

}

}


void WriteToFlashOneWord(uint32_t StartAddr,uint32_t WriteData){

//向Flash指定的地址写入一个字

HAL_FLASH_Unlock();

//擦除

FLASH_EraseInitTypeDef EraseInitStrut;

EraseInitStrut.TypeErase=FLASH_TYPEERASE_PAGES;

EraseInitStrut.PageAddress=StartAddr;

EraseInitStrut.NbPages=1;

//设置页面错误

uint32_t PageError=0;

//擦除

HAL_FLASHEx_Erase(&EraseInitStrut,&PageError);

//写入Flash

HAL_FLASH_Program(TYPEPROGRAM_WORD,StartAddr,WriteData);

//锁定Flash

HAL_FLASH_Lock();

}

  读写测试:


  uint32_t TestData=0x12345678;

  uint32_t TestAddr=0x0800F000;          //写入Flash

  WriteToFlashOneWord(TestAddr,TestData);

  HAL_Delay (100);


  //uint16_t OutData;

  uint8_t HData1,HData2,LData1,LData2;


  HData1= (uint8_t)(TestData>>24);

  HData2= (uint8_t)(TestData>>16);

  LData1= (uint8_t)(TestData>>8);

  LData2=(uint8_t)TestData;

  //OutData=ReadFromFlashHalfWord(TestAddr);

  Send_Buffer[61]=HData1;

  Send_Buffer[62]=HData2;

  Send_Buffer[63]=LData1;

  Send_Buffer[64]=LData2;

HAL_UART_Transmit(&hlpuart1,Send_Buffer,70,10);


推荐阅读

史海拾趣

Capital Advanced Technologies公司的发展小趣事

面对未来电子行业的发展趋势和市场变化,CAT制定了明确的发展战略和布局。公司将继续加大研发投入,推动技术创新和产业升级;同时,积极拓展新的应用领域和市场空间,寻求与更多合作伙伴的共赢发展。此外,CAT还将注重人才培养和团队建设,为公司的长远发展提供坚实的人才保障。

通过以上五个故事,我们可以看到Capital Advanced Technologies公司在电子行业里发展起来的艰辛与辉煌。他们凭借技术创新、市场拓展、品质管理和战略布局等方面的不断努力,逐渐成为了电子行业的领军企业。

DB Lectro Inc公司的发展小趣事

随着公司业务的不断拓展和市场竞争的加剧,DB Lectro Inc意识到知识产权保护的重要性。公司加强了知识产权的申请和保护工作,成功申请了一系列技术专利。同时,公司还积极参与知识产权维权行动,维护了自身的合法权益和公平竞争的市场环境。

世纪金光(CENGOL)公司的发展小趣事

2020年,新冠疫情对全球经济造成了巨大冲击,半导体行业也受到了严重影响。面对这一挑战,世纪金光迅速调整战略,加强内部管理,优化生产流程,确保生产线的稳定运行。同时,公司积极寻找新的市场机遇,加大在新能源汽车、光伏等领域的投入力度。在抗击疫情的过程中,世纪金光不仅保持了业务的稳定增长,还成功抓住了新的发展机遇,为公司的未来发展奠定了坚实基础。

ECM [ECM Electronics Limited.]公司的发展小趣事

面对日益严重的环境问题,ECM Electronics Limited.积极响应国家节能减排的号召,将绿色发展和可持续发展作为企业的重要战略。公司采用环保材料和节能技术,降低产品能耗和排放。同时,公司还积极参与环保公益活动,推动行业绿色发展。这些举措不仅提升了公司的社会形象,也为公司的长期发展奠定了坚实的基础。

EVER-WAY公司的发展小趣事

作为一家有社会责任感的企业,EVER-WAY公司始终关注环境保护和社会公益事业。公司积极推行绿色生产理念,采用环保材料和节能技术,减少生产过程中的污染和能耗。同时,公司还积极参与社会公益活动,捐款捐物支持灾区重建、教育扶贫等事业。这些社会责任的担当不仅体现了公司的良好形象,也为公司赢得了社会的广泛赞誉和尊重。

Cobham Semiconductor Solutions公司的发展小趣事

品质是Cobham Semiconductor Solutions的生命线。公司始终坚持严格的质量管理体系,从原材料采购到生产流程,再到产品出厂,每一个环节都经过严格把控。公司还引入了先进的生产设备和技术,确保产品质量的稳定性和可靠性。这种对品质的执着追求,使得Cobham的产品在市场上赢得了良好的声誉和口碑。

问答坊 | AI 解惑

44b0的FIQ中断如何实现

    前两三天找了和看了很多关于44b0中断的资料,结合了bootloader的代码,总算深入了解了44b0的向量和非向量的IRQ中断方式,但发现找不到HandleFIQ所对应的入口。请问FIQ中断是如何在uclinux下实现的?它如何实现区分发生了26种中断源中 ...…

查看全部问答>

NFS Mount的问题

Linux IP:192.168.0.2       ARM 开发板IP:192.168.0.3 Linux自已mount nfs成功:mount -t nfs 192.168.0.2:/nfs /mnt/nfs Linux和开发板能Ping通,但开发板却不能mount Linux中的nfs共享目录: mount -t nfs -o nolock 192.16 ...…

查看全部问答>

关于播放WAV会出现“啪啪”声音的问题

大家好,想请教个关于MOBILE下播放WAV的问题 最近在做个导航的测试,需要把各个语音文件给串起来播放,比如“前方”、“五”、“十”。。。。 我是用wave function进行处理的。起初我只用一个缓冲去,然后在我的主线程中开个线程进行语音播放处 ...…

查看全部问答>

Introduction to TCP/IP

最近整理TCP/IP协议,写的一个PPT,与大家分享,有不对的地方,望指正!      …

查看全部问答>

wince 一级界面的字体很浅该怎么改

如题,wince 比如打开ie,一级界面的字体很浅,然后点一个链接或者别的,跳转到二级界面时候字体就正常了,,请教如何 修改…

查看全部问答>

Quartus II 中管脚上拉电阻(弱上拉)的设置方法

在使用 Altera 的 FPGA 时候,根据系统设计需要在管脚的内部加上上拉电阻。Quartus II 软件中在 Assignment 的 Pin Planner中可以设置。具体过程如下:  1.  在菜单 Ass ...…

查看全部问答>

ADI的计步器参考设计方案

加速度传感器能够准确的测量被测物体的加速度信息,从而获知其当前的运动状态,包括位置,速度和加速度。加速度传感器已广泛应用于各类消费电子产品中。本设计正是基于ADI的两轴加速度传感器ADXL320而设计的,它能够精确地测量出佩戴者行走的步数, ...…

查看全部问答>

DIY 太阳能自动跟踪阳光系统,视频+多图~~~

DIY 太阳能自动跟踪阳光系统,视频+多图~~~ 图片是从视频中接的图不清楚,高清图已经附上貌似之前的图片删不掉了,,, $(\'flv_KY8\').innerHTML=(mobileplayer() ? \"\" : AC_FL_RunContent(\'width\', \'500\', \'height\', \'375\', \'allowN ...…

查看全部问答>

实验六:FSPAD_702平板串口通信实验

【实验内容】基于FSPAD_702平板,实现串口通信。       【实验目的】熟悉FSPAD_702平板串口通信的整体流程。       【实验环境】Ubuntu 10.04虚拟机,FSPAD_702开源平板,usb转网口模块,usb转串口数据线等 ...…

查看全部问答>