• 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);
  • 相关阅读:
    一个Winform下DataGridView控件外观的自定义类
    从以往子类化跟踪MouseLeave深入讨论VB6的自定义Hook类
    使用VB6写一个自定义的进度信息框窗口
    C#研究OpenXML之路(4-使用第三方库)
    Access SQL实现连续及不连续Rank排名
    C#研究OpenXML之路(3-OpenXMLSDKToolV25.msi)
    C#研究OpenXML之路(2-DocumentFormat.OpenXml命名空间)
    C#研究OpenXML之路(1-新建工作簿文件)
    统一我的博客文章的CSS样式代码
    C#图片灰度处理(位深度24→位深度8)
  • 原文地址:https://www.cnblogs.com/heywei/p/15664067.html
Copyright © 2020-2023  润新知