flash--CH32 flash操作常见问题及注意事项
flash由于其有掉电保存的特性,常用于保存重要数据,本章介绍常见注意事项以及常见问题。
一,注意事项:
1,V20X,30X 在flash操作时需要注意主频别超过120M,如必须跑144M,可以在操作flash前降频处理
(代码:RCC->CFGR0 |= (uint32_t)RCC_HPRE_DIV2),
操作完恢复(代码:RCC->CFGR0 &= ~(uint32_t)RCC_HPRE_DIV2)
10X,00X,035,L10X系列没这个要求,不需要分频。
2,要注意flaSh操作要进行地址对齐操作,否则可能会有预期之外的效果。
需要执行多少字节对齐不需要牢记,只需要看下函数定义处即可,如下就是地址4K字节对齐,也就是
操作的地址必须是4K的倍数,如0x08004000,0x08005000。
3, flash操作有自己的流程,最好参考EVT例程的流程来,正常执行开锁,擦除,编程,关锁的操作。
一,flash怎么写不成功? 读出来数值与写入的不一致
常见原因:
1)地址没对齐,如这种地址
2)操作前是否擦除,注意擦除完20小,30x默认字节是e339,如果不是默认的e339需要擦除。
3)如果采用普通编程,操作前是否有开锁,操作完是否有关锁。
3)语法错误
1,经常遇到写入的数组是u16/ u32的数组,但计算数量时用的sizeof,需注意sizeof(u16)=2,
而不是1,计算数量时可能出错。
2,u32 *p,一个8位的指针类型在执行p++后,实际指向的地址会加4,而不是1,就是假设原先读的地址时0x08004000,
加1后读的地址就是0x08004004,而不是0x08004001。
3,
4)系统主频
再者就是注意上面所述20x,30x,在操作flash时主频注意别超过120M,如果超过,目前已知的问题时可能会导致flash内容异常消失。