如题,我在使用STM32H7系列(H743和H750)的时候,会对片内FLASH进行操作,例如往flash里面写一些标志位和数据,有时候只需要往里面写8bits(1byte),然而HAL提供的flash操作只有256bits program,依据手册(en.DM00314099 page133)来看也只有256bits program支持,读操作倒是可以按8bits 16bits 32bits 64bits来读,所以我有点疑惑这是H7的特性么?能否有自己选择的按字节写入呢? 多谢帮忙解答! |
STM32H7432 串口采用DMA方式接收不定长数据重复问题
STM32H750使用FMC控制LCD数据异常
STM32H7 CANFD过滤问题
关于STM32H750采用DMA方式发送数据到DAC产生正弦波
STM32H7配置成USB DEVICE时,连接电脑时不进入中断
STM32H753XIH6运行时发热达到五六十度
STM32H750电池供电后AD采样的电容板子电压变化异常
STM32H750VB芯片整片无法擦出
STM32H743IIT6Flash擦除问题
STM32H750 ADC 发现结果跳动很严重
因为有缓冲区的原因,缓冲区写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时按页编程。