GD32移植记录

1、首先我们拿到一份中继器的程序(基于GD32107rc)

2、烧录到GD32芯片的中继器板,确认程序可以运行

3、开始看Main函数,第一句话

rcu_osci_on(RCU_IRC40K);//启动用于给看门狗的内部40KHz的时钟

没有发现时钟配置函数,当前程序配置成多少主频率?

4、查看启动函数;

;/* reset Handler */
Reset_Handler PROC
EXPORT Reset_Handler [WEAK]
IMPORT __main
IMPORT SystemInit
LDR R0, =SystemInit
BLX R0
LDR R0, =__main
BX R0
ENDP

从重置中断开始,

这里一共就执行了两个函数,SystemInit和__main。所以SystemInit在重启中断中执行了。

#elif defined (__SYSTEM_CLOCK_108M_PLL_HXTAL)
    system_clock_108m_hxtal();

时钟是108M。

5、修改这个工程为实现通用命令码的工程。主要工作:更新COMMCMD.c文件,配置CAN接口以及收发缓冲,达到可以收发命令;引入CAN2.c文件,实现通用命令码的回调函数;引入EEPROM.c文件,实现IIC读写;读芯片的UID(107rc的参考手册上有地址),并采用前6位(共有12位)作为模块序列号。

6、从GD32库文件 的参考例程(\GD32F10x_Demo_Suites_V2.1.0\GD32107C_EVAL_Demo_Suites\Projects\12_SPI_SPI_Flash),拷贝gd25qxx.c和gd25qxx.h文件到工程里面,改为SPI.c,实现SPI1_Send_5Bytes(uint64_t data),和SPI2_Send_5Bytes(uint64_t data)函数,在主程序引用,测试TMC4671\TMC6200.

        SPITEST3 = SPI1_Send_5Bytes(0x0000000000);//读回来应该是"0x34363731"
        TMC6200_Reg.GCONF = SPI2_Send_5Bytes(0x0000000000);//读取TMC6200所有寄存器的值,应该不为0,也不全是FF
        TMC6200_Reg.GSTAT = SPI2_Send_5Bytes(0x0100000000);
        TMC6200_Reg.IOIN =SPI2_Send_5Bytes(0x0400000000);
        TMC6200_Reg.OTP_PROG =SPI2_Send_5Bytes(0x0600000000);
        TMC6200_Reg.OTP_READ =SPI2_Send_5Bytes(0x0700000000);
        TMC6200_Reg.FACTORY_CONF =SPI2_Send_5Bytes(0x0800000000);
        TMC6200_Reg.SHORT_CONF =SPI2_Send_5Bytes(0x0900000000);
        TMC6200_Reg.DRV_CONF =SPI2_Send_5Bytes(0x0a00000000);
原文地址:https://www.cnblogs.com/heywei/p/15664067.html