本帖最后由 liughsy 于 2020-4-5 22:06 编辑
STM32G431在线调试时遇到ADC12_COMMON寄存器写不进去的情况,如下图: 查阅手册后,可以发现,STM32G431包括两个ADC,ADC1/2,可以用于双ADC模式,共同的寄存器ADC12_COMMON的偏移地址应为0x50000300,而0x50000200是保留或者是ADC5的首地址: 问题找到,解决办法是要修改这个地址。 这是由svd(System Viewer File)文件定义的,安装器件包后,会生成这个文件,默认路径为C:\Keil_v5\ARM\PACK\Keil\STM32G4xx_DFP\1.1.0\CMSIS\SVD 用notepad打开或文本打开,搜索0x50000200后可以发现,这里的寄存器地址果真被写成了错误的数据,需要修改成0x50000300 修改完成后,仿真依然未修改,这是由于sfr,sfd文件未修改,可以参考链接[1]该文档生成sfd和sfr文件,也可以使用附件修改好的文件替换原文件即可,下面简要说明下操作步骤,下次遇到相同的问题,或者需要自定义仿真内容时,可按照此法进行修改。 1. 在C盘新建文件夹,命名为temp,将C:\Keil_v5\UV4文件夹里的SfrCC2.exe和SVDConv.exe以及刚才SVD文件夹里的STM32G431xx.svd文件复制到这个文件夹里。 2. 打开命令提示符窗口(快捷键win+r),可选择将SVDConv文件拖到命令提示符窗口,也可以手动输入命令,如下图: 3. 输入SVDConvert命令,(命令格式可参考链接[5]),如下图: 4. 回车后,会发现,提示了一个错误,COMP_C4CSR的寄存器未对齐,这里暴露了该SVD文件的另一个问题,查阅手册后,会发现,COMP_C4CSR的寄存器偏移地址为0x0C,因此需要修改。
5. 修改完成后,再次启动命令,回车,能够正常输出文件,文件默认目录在C:\Users\[用户名],在此文件夹内,可以找到刚生成的STM32G431xx.h。 6. 如法炮制,可相应的生成.sfd和.sfr文件,只需把—generate=header换成sfd和sfr即可,将生成的sfd和sfr以及刚才修改过的.svd文件替换掉原先的文件,文件属性改为只读(可以不修改,无影响,只是防止修改),再次启动仿真,可以发现,寄存器的值可以被修改了,并且能实时地刷新数据。 参考链接:
|