完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
简单生成代码后找到MDK的驱动文件
官方建议步骤 #####数据EEPROM编程功能##### ======================== ================================================== ===== [..] 或石墨编程的任何操作都应遵循步骤: (#)调用@ref HAL_FLASHEx_DATAEEPROM_Unlock()可以启用数据EEPROM访问 和闪存程序控制权限访问。 (#)调用所需的功能来擦除或编程数据。 (#)调用@ref HAL_FLASHEx_DATAEEPROM_Lock()来禁用数据EEPROM访问 状语从句:闪存程序擦除控制寄存器访问(推荐 保护DATA_EEPROM免受可能的意外操作)。 实验总结,只需要三解锁步 写入数据(擦除也是写入数据只不过写的是0×00) 上锁(建议上锁,其实没啥用,不用问题不是很大) void Program_EEPROM(void) { uint32_t data = 0x12345678; HAL_FLASHEx_DATAEEPROM_Unlock(); HAL_FLASHEx_DATAEEPROM_Program( FLASH_TYPEPROGRAMDATA_WORD, 0x08080000, data); HAL_FLASHEx_DATAEEPROM_Program( FLASH_TYPEPROGRAMDATA_WORD, 0x08080000 + 4, data); HAL_FLASHEx_DATAEEPROM_Erase(FLASH_TYPEERASEDATA_WORD, 0x08080000); HAL_FLASHEx_DATAEEPROM_Lock(); } FLASH_TYPEPROGRAMDATA_WORD 是数据类型,可以是Program word (32-bit) at a specified address OR Program word (16-bit) at a specified address OR Program word (8-bit) at a specified address 0x08080000 是地址,在官方手册中,可以查到。 数据写入的英文的数据 实际运行效果 擦除也是写入 /** * @brief Erase a word in data memory. * @param Address specifies the address to be erased. * @param TypeErase Indicate the way to erase at a specified address. * This parameter can be a value of @ref FLASH_Type_Program * @note To correctly run this function, the @ref HAL_FLASHEx_DATAEEPROM_Unlock() function * must be called before. * Call the @ref HAL_FLASHEx_DATAEEPROM_Lock() to the data EEPROM access * and Flash program erase control register access(recommended to protect * the DATA_EEPROM against possible unwanted operation). * @retval HAL_StatusTypeDef HAL Status */ HAL_StatusTypeDef HAL_FLASHEx_DATAEEPROM_Erase(uint32_t TypeErase, uint32_t Address) { HAL_StatusTypeDef status = HAL_OK; /* Check the parameters */ assert_param(IS_TYPEPROGRAMDATA(TypeErase)); assert_param(IS_FLASH_DATA_ADDRESS(Address)); /* Wait for last operation to be completed */ status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE); if(status == HAL_OK) { /* Clean the error context */ pFlash.ErrorCode = HAL_FLASH_ERROR_NONE; if(TypeErase == FLASH_TYPEERASEDATA_WORD) { /* Write 00000000h to valid address in the data memory */ *(__IO uint32_t *) Address = 0x00000000U; } if(TypeErase == FLASH_TYPEERASEDATA_HALFWORD) { /* Write 0000h to valid address in the data memory */ *(__IO uint16_t *) Address = (uint16_t)0x0000; } if(TypeErase == FLASH_TYPEERASEDATA_BYTE) { /* Write 00h to valid address in the data memory */ *(__IO uint8_t *) Address = (uint8_t)0x00; } status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE); } /* Return the erase status */ return status; } 不懂的可以搜索指针强制类型转换学习一下。 数据读取 读取数据参照上面擦写部分,只需要反过来就好了。 data_8bit = *(__ IO uint8_t *)地址; data_16bit = *(__ IO uint16_t *)地址; data_32bit = *(__ IO uint32_t的*)的地址; 我有几个问题很疑惑是否 会影响这部分区域吗? 答:这部分程序是进行特意的,这个部分可能不会有其他方式的数据,比如,烧录, flash也可以用一样的函数吗? 个人觉得不行,flash是按页分的,EEPROM可以按字节编辑,所以肯定有区别。(未进行实验,也没什么意义) |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1771 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1619 浏览 1 评论
1070 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
724 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1673 浏览 2 评论
1936浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
729浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
569浏览 3评论
594浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
552浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 16:25 , Processed in 0.888279 second(s), Total 78, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号