使用stm32g474ret6,由于程序是在stm32f446上改的,所以硬件驱动上出了很多问题:
1、RTC不走,因为没开bkp写使能,笔误
2、AD不对,因为引脚配置没有给模拟,与F303不同
3、IO不对,因为不支持位带。
g474的GPIO在AHB2,0x48000000这个范围。可通过定义位段的方式解决不支持位带的问题。
4、DMA不对,因为DMAMUX的通道是DMA通道号减1
5、AD的触发不对,因为需要给ADSTART才开始触发,与F303不同
6、DA的触发不对,DAC只能按32bit访问,导致dma传输错误(TE)。修改了DMA位宽后成功
7、AD、DA的DMA同步不对,每次AD的DMA传输完成后的中断,DA的dma是对的,AD的dma还有值没有完成。原因:AD的DMA开了循环模式,关掉就好了
8、flash在写解锁时错误:MFLASH->KEYR=0xCDEF89AB;进入hardfault。原因:自己定义的位段方式方位flash寄存器,结构定义错位
9、flash擦除失败:页大小错误,导致计算的页号错误。这芯片默认是双页模式,2KB的页大小
10、进入standby后立刻唤醒,原因:多使能了wukp
11、睡眠时灯是亮的,原因:PA15的复位值是上拉的
12、下载后报错,这是最开始的问题,一直到最后才解决。
下载时报错内容:
Erase Done.
Programming Done.
Contents mismatch at: 080027B6H (Flash=64H Required=96H) !
Contents mismatch at: 080027C6H (Flash=6EH Required=96H) !
Contents mismatch at: 080027CCH (Flash=EEH Required=96H) !
Contents mismatch at: 080027CDH (Flash=E7H Required=20H) !
Contents mismatch at: 080027CEH (Flash=00H Required=FDH) !
除非全片擦除后,去掉verify,可以正常调试,但这样每次都全片擦除,会影响存在flash中的配置信息。
使用带stlink的NUCLEO-G474RE开发板,keil 5.27仍然报同样错误,使用stm32cubeide后,提示stlink需要升级,升级后仍然不行。查到
http://www.stmcu.org.cn/module/forum/thread-622538-1-7.html
后,在Keil.STM32G4xx_DFP.pdsc文件中,<device Dname="STM32G474RCTx">处增加STM32G4xx_512_Dual.FLM后,在flash下载选项中选择此文件指明是Dual的flash,解决。