| 如题,我在使用STM32H7系列(H743和H750)的时候,会对片内FLASH进行操作,例如往flash里面写一些标志位和数据,有时候只需要往里面写8bits(1byte),然而HAL提供的flash操作只有256bits program,依据手册(en.DM00314099 page133)来看也只有256bits program支持,读操作倒是可以按8bits 16bits 32bits 64bits来读,所以我有点疑惑这是H7的特性么?能否有自己选择的按字节写入呢? 多谢帮忙解答! |
微信公众号
手机版
因为有缓冲区的原因,缓冲区写flash一次写256bit,手册里说可以写少于32字节的数据,但是要在操作一下寄存器,让缓冲区里面剩余的字节由ARM自己填充,其实对于flash还是操作了256bit,而且写数据的地址要32字节对齐,还不如你自己写256bit,虽然只用了1个字节,芯片已经这样设计了,就按这样规则用就是了!!
评分
查看全部评分
评分
查看全部评分
可是我看F746的例程里面都有按照字节写入flash的啊,而H743的必须要256bit才能写入成功,如果我只写8bits或者16bits,比如我只想使地址0x0800 1000 =0x11,而0x0800 0009, 0x0800 1001的值是默认值;F746就有提供这样的功能,好像H743不行
可是我看到F746的FLASH就能实现只改变一个地址的值即例如使*0x0800 1000=0x11,而其他地址的值为默认值的啊
file:///C:/Users/Administrator/Desktop/1.jpg
这是我在手册中看到的,高亮部分让我疑惑,这是在说我是可以按照最低8bits来写,但是我必须要写满256bits才能写成功吗
对于H7系列的片内flash操作,对其写操作必须32bytes对齐,就像我选取的最佳答案描述那样的。
我在这里补充一下操作force-write的方式:
FLASH->CR &= ~FLASH_CR_FW;
HAL_FLASH_Program();
Flash->CR |= FLASH_CR_FW;
这样的话,假使你只想往一个地址写入一个字节也是可以做到的,但是剩下的31个字节单片机自动填满,之后的写操作就必须在上一次的地址上偏移256bits。
我也查了一下手册,h743片内flash确实能像你说的这样按字节编程,方法就是你帖子上说的。我之前用的外挂flash时按页编程。