- /* Table used for fast programming */
- static const uint64_t Data64_To_Prog[FLASH_ROW_SIZE] = {
- 0x0000000000000000, 0x1111111111111111, 0x2222222222222222, 0x3333333333333333,
- 0x4444444444444444, 0x5555555555555555, 0x6666666666666666, 0x7777777777777777,
- 0x8888888888888888, 0x9999999999999999, 0xAAAAAAAAAAAAAAAA, 0xBBBBBBBBBBBBBBBB,
- 0xCCCCCCCCCCCCCCCC, 0xDDDDDDDDDDDDDDDD, 0xEEEEEEEEEEEEEEEE, 0xFFFFFFFFFFFFFFFF,
- 0x0011001100110011, 0x2233223322332233, 0x4455445544554455, 0x6677667766776677,
- 0x8899889988998899, 0xAABBAABBAABBAABB, 0xCCDDCCDDCCDDCCDD, 0xEEFFEEFFEEFFEEFF,
- 0x2200220022002200, 0x3311331133113311, 0x6644664466446644, 0x7755775577557755,
- 0xAA88AA88AA88AA88, 0xBB99BB99BB99BB99, 0xEECCEECCEECCEECC, 0xFFDDFFDDFFDDFFDD};
原封不动地拷贝到 STM32G0 的项目中,在测试的时候,总是会发现程序会死在快速编程的过程中。最后检查才发现问题出
现在这个数组的定义上。因为 STM32L4 使用 stm32l452xx_sram.icf 定义了 ROM 的地址为 0x20000000~0x20015FFF,所以
这个 const 关键字的数据实际上也是位于 RAM 中的。但是将这个数组搬到 STM32G0 的项目时,因为使用的是
stm32l452xx_flash.icf,导致这个数组位于 Flash 中,所以在快速编程的时候程序就会去访问 Flash 读取源数据,就导致问题
产生了。所以,需要将数组修改为:
- /* Table used for fast programming */
- uint64_t Data64_To_Prog[FLASH_ROW_SIZE] = {
- 0x0000000000000000, 0x1111111111111111, 0x2222222222222222, 0x3333333333333333,
- 0x4444444444444444, 0x5555555555555555, 0x6666666666666666, 0x7777777777777777,
- 0x8888888888888888, 0x9999999999999999, 0xAAAAAAAAAAAAAAAA, 0xBBBBBBBBBBBBBBBB,
- 0xCCCCCCCCCCCCCCCC, 0xDDDDDDDDDDDDDDDD, 0xEEEEEEEEEEEEEEEE, 0xFFFFFFFFFFFFFFFF,
- 0x0011001100110011, 0x2233223322332233, 0x4455445544554455, 0x6677667766776677,
- 0x8899889988998899, 0xAABBAABBAABBAABB, 0xCCDDCCDDCCDDCCDD, 0xEEFFEEFFEEFFEEFF,
- 0x2200220022002200, 0x3311331133113311, 0x6644664466446644, 0x7755775577557755,
- 0xAA88AA88AA88AA88, 0xBB99BB99BB99BB99, 0xEECCEECCEECCEECC, 0xFFDDFFDDFFDDFFDD};
这样就可以了。