打印
[APM32E1]

基于GXX32E303库移植到APM32E103代码修改

[复制链接]
322|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
a976209770|  楼主 | 2023-5-31 14:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 a976209770 于 2023-5-31 15:00 编辑

  GXX32303和APM32E103均兼容SXX103系列,两者在兼容性上有所不同,APM系列相对兼容性更佳,GXX略有差异。    部分工程如之前用GXX的库进行开发的项目,选用APM后需要在以下部分进行修改:
1.由于SXX以及APM的flash特性,均需要插入flash等待周期,GXX无此寄存器,库中未定义,所以需要通过基地址方式写入等待周期,以下为关系:主频0-24M 0
主频24-48M 1
主频48-72M 2
主频72-96M 3
主频96-128M 4
无法贴出图片,可查找对应的函数添加(*((volatile uint32_t *)0x40022000)) =  0x14;到对应地方
static void system_clock_120m_hxtal(void)
{
    uint32_t timeout = 0U;
    uint32_t stab_flag = 0U;

    /* enable HXTAL */
    RCU_CTL |= RCU_CTL_HXTALEN;

    /* wait until HXTAL is stable or the startup time is longer than HXTAL_STARTUP_TIMEOUT */
    do{
        timeout++;
        stab_flag = (RCU_CTL & RCU_CTL_HXTALSTB);
    }while((0U == stab_flag) && (HXTAL_STARTUP_TIMEOUT != timeout));

    /* if fail */
    if(0U == (RCU_CTL & RCU_CTL_HXTALSTB)){
        while(1){
        }
    }
(*((volatile uint32_t *)0x40022000)) =  0x14;
    RCU_APB1EN |= RCU_APB1EN_PMUEN;
    PMU_CTL |= PMU_CTL_LDOVS;
//RCU_CFG1 &= ~(1 << 30); // 将 RCU_CFG1 寄存器的 bit30 置为 0

    /* HXTAL is stable */
    /* AHB = SYSCLK */
    RCU_CFG0 |= RCU_AHB_CKSYS_DIV1;
    /* APB2 = AHB/1 */
    RCU_CFG0 |= RCU_APB2_CKAHB_DIV1;
    /* APB1 = AHB/2 */
    RCU_CFG0 |= RCU_APB1_CKAHB_DIV2;

#if (defined(GD32F30X_HD) || defined(GD32F30X_XD))
    /* select HXTAL/2 as clock source */
    RCU_CFG0 &= ~(RCU_CFG0_PLLSEL );
    RCU_CFG0 |= (RCU_PLLSRC_HXTAL_IRC48M );
2.SXX以及APM的io功能相同,不区分高驱低驱等,部分代码需要屏蔽。

//    /* enable the high-drive to extend the clock frequency to 120 MHz */
//    PMU_CTL |= PMU_CTL_HDEN;
//    while(0U == (PMU_CS & PMU_CS_HDRF)){
//    }

//    /* select the high-drive mode */
//    PMU_CTL |= PMU_CTL_HDS;
//    while(0U == (PMU_CS & PMU_CS_HDSRF)){
//    }
其他部分GXX与SXX差异修改后与之前兼容, 故可忽略。
经修改后使用apm32E103的芯片可正常使用仿真。



使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

14

帖子

0

粉丝