提要:costdown
前言:本以为能很顺利的移植,结果130这颗芯片虽然是M3的core,实际上外部PIN与GPIO等寄存器结构与M0一致,NVIC部分又与M3一致,简言之,130即有M3的“基因”,也有M0的“基因”,主要这颗芯片是为了与ST的M0芯片抢市场。由于刚上市,所以Library从ST M0的Library基础稍作修改。寄存器名称虽然不一样,但是实际地址与功能是完全一样。下面重点列出在移植过程中,我遇到的问题:
A0:在Keil中,Device选型:
A0:GD32f130c6应当选择STM32F101C6/8,因为该系列寄存器与GD130最接近。左图为100,右图为101,实际130的SPI包含I2SCFGR与I2SPR寄存器。
另外使用STLINK读取的Device,如图:
Q1、EXTI中断无效?
A1:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG,ENABLE);
SYSCFG_EXTILineConfig(PWR_EXTI_PORT_SOURCE, PWR_EXTI_PIN_SOURCE);
其中在操作SYSCFG寄存器时,必须先使能SYSCFG的CLK,这个问题在M0上也是一样的,但是我在移植过程中,忽略了这点。
导致花了一些时间才找到这个问题。找类似这种bug,两方面着手,一用硬件仿真,看外设寄存器是否与预设一直;二设置完后直接串口打印出来。
Q2、NVIC配置部分需要增加下面两句,M0无此配置,M3则有。
A2:
/* NVIC configuration for priority grouping */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
/*定位中断向量表*/
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0);
另外中断优先级配置因为有组的概念,所以也有所不同,如;
STM32F051: