历史上的今天
今天是: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;i } } 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);
史海拾趣
|
前两三天找了和看了很多关于44b0中断的资料,结合了bootloader的代码,总算深入了解了44b0的向量和非向量的IRQ中断方式,但发现找不到HandleFIQ所对应的入口。请问FIQ中断是如何在uclinux下实现的?它如何实现区分发生了26种中断源中 ...… 查看全部问答> |
|
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 ...… 查看全部问答> |
|
大家好,想请教个关于MOBILE下播放WAV的问题 最近在做个导航的测试,需要把各个语音文件给串起来播放,比如“前方”、“五”、“十”。。。。 我是用wave function进行处理的。起初我只用一个缓冲去,然后在我的主线程中开个线程进行语音播放处 ...… 查看全部问答> |
|
在使用 Altera 的 FPGA 时候,根据系统设计需要在管脚的内部加上上拉电阻。Quartus II 软件中在 Assignment 的 Pin Planner中可以设置。具体过程如下: 1. 在菜单 Ass ...… 查看全部问答> |
|
加速度传感器能够准确的测量被测物体的加速度信息,从而获知其当前的运动状态,包括位置,速度和加速度。加速度传感器已广泛应用于各类消费电子产品中。本设计正是基于ADI的两轴加速度传感器ADXL320而设计的,它能够精确地测量出佩戴者行走的步数, ...… 查看全部问答> |
|
DIY 太阳能自动跟踪阳光系统,视频+多图~~~ 图片是从视频中接的图不清楚,高清图已经附上貌似之前的图片删不掉了,,, $(\'flv_KY8\').innerHTML=(mobileplayer() ? \"\" : AC_FL_RunContent(\'width\', \'500\', \'height\', \'375\', \'allowN ...… 查看全部问答> |
|
【实验内容】基于FSPAD_702平板,实现串口通信。 【实验目的】熟悉FSPAD_702平板串口通信的整体流程。 【实验环境】Ubuntu 10.04虚拟机,FSPAD_702开源平板,usb转网口模块,usb转串口数据线等 ...… 查看全部问答> |




