打印
[研电赛技术支持]

GD32芯片移植完全攻略

[复制链接]
1081|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wailian1265k|  楼主 | 2021-12-28 23:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
GD32是国产兆易创新公司生产的完全兼容STM32系列的Cortex-M3处理器,具有几大亮点:
1,高主频108MHz。性能提升30%以上,可超频到120MHz
2,Flash零等待。STM32的72MHz需要两个等待,其实兆易创新公司本来就是做Flash起家的,具有gFlash专利
3,采用ARM Cortex-M3新内核R2p1。STM32采用R1p1,带有一些缺陷
4,性价比高。GD32比对应的STM32芯片一般便宜20%,某些芯片便宜30%以上

收到样片GD32F103VET6后,替换STM32F103VET6,写入最新版本TinyBooter和MF固件,以及MF测试例程,全部一次性通过!

兼容性非常好。
不过我们不能满足于此,MF固件默认跑在72MHz主频,Flash还是使用两个等待,我们需要测试更高速度!
于是根据官方的资料,修改主频为108MHz,Flash为零等待。

RCC->CFGR |= (uint32_t)(0x08000000 | RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLXTPRE_HSE_Div2 | RCC_CFGR_PLLMULL12);


使用特权

评论回复
沙发
wailian1265k|  楼主 | 2021-12-28 23:07 | 只看该作者
修改以后发现USB无法识别,串口一团糟!
上面是网上能找到的最多的资料,意思是HSE/2*(12+15),除以2和12都可以理解,15哪里冒出来的就实在不懂了。

请求官方技术支持,几分钟后得到邮件回复。
大意是108MHz无法分频得到USB所需要的48MHz,STM32本来支持1分频和1.5分配,然后GD32在这方面扩展了2分频和2.5分配。所以,如果想要使用USB,要么降频到96MHz,要么超频到120MHz,这样分别使用2分频和2.5分配即可得到USB所需要的48MHz。
这就说明GD32无法在标准108MHz下使用USB,好杯具!!!

使用特权

评论回复
板凳
wailian1265k|  楼主 | 2021-12-28 23:08 | 只看该作者
另外,关于串口乱码的问题,给我的答复是修改RCC_GetClocksFreq函数:
void RCC_GetClocksFreq(RCC_ClocksTypeDef* RCC_Clocks)
{
  uint32_t tmp = 0, pllmull = 0, pllsource = 0, presc = 0;   /* Get SYSCLK source -------------------------------------------------------*/   tmp = RCC->CFGR & CFGR_SWS_Mask;   switch (tmp)   {     case 0x00:  /* HSI used as system clock */       RCC_Clocks->SYSCLK_Frequency = HSI_VALUE;       break;     case 0x04:  /* HSE used as system clock */       RCC_Clocks->SYSCLK_Frequency = HSE_VALUE;       break;     case 0x08:  /* PLL used as system clock */       /* Get PLL clock source and multiplication factor ----------------------*/       pllmull = RCC->CFGR &((uint32_t)0x203C0000);       pllsource = RCC->CFGR & CFGR_PLLSRC_Mask;            if(((pllmull)&(0x20000000)) != 0)           pllmull = (((pllmull)&(0x003C0000)) >> 18) + 17;       else           pllmull = ( pllmull >> 18) +2;              if (pllsource == 0x00)       {/* HSI oscillator clock divided by 2 selected as PLL clock entry */         RCC_Clocks->SYSCLK_Frequency = (HSI_VALUE >> 1) * pllmull;       }       else       {         /* HSE selected as PLL clock entry */         if ((RCC->CFGR & CFGR_PLLXTPRE_Mask) != (uint32_t)RESET)         {/* HSE oscillator clock divided by 2 */           RCC_Clocks->SYSCLK_Frequency = (HSE_VALUE >> 1) * pllmull;         }         else         {           RCC_Clocks->SYSCLK_Frequency = HSE_VALUE * pllmull;         }       }       break;     default:       RCC_Clocks->SYSCLK_Frequency = HSI_VALUE;       break;   }   /* Compute HCLK, PCLK1, PCLK2 and ADCCLK clocks frequencies ----------------*/   /* Get HCLK prescaler */   tmp = RCC->CFGR & CFGR_HPRE_Set_Mask;   tmp = tmp >> 4;   presc = APBAHBPrescTable[tmp];   /* HCLK clock frequency */   RCC_Clocks->HCLK_Frequency = RCC_Clocks->SYSCLK_Frequency >> presc;   /* Get PCLK1 prescaler */   tmp = RCC->CFGR & CFGR_PPRE1_Set_Mask;   tmp = tmp >> 8;   presc = APBAHBPrescTable[tmp];   /* PCLK1 clock frequency */   RCC_Clocks->PCLK1_Frequency = RCC_Clocks->HCLK_Frequency >> presc;   /* Get PCLK2 prescaler */   tmp = RCC->CFGR & CFGR_PPRE2_Set_Mask;   tmp = tmp >> 11;   presc = APBAHBPrescTable[tmp];   /* PCLK2 clock frequency */   RCC_Clocks->PCLK2_Frequency = RCC_Clocks->HCLK_Frequency >> presc;   /* Get ADCCLK prescaler */   tmp = RCC->CFGR & CFGR_ADCPRE_Set_Mask; tmp = (tmp >> 14)+(tmp >> 26);   presc = ADCPrescTable[tmp];   /* ADCCLK clock frequency */   RCC_Clocks->ADCCLK_Frequency = RCC_Clocks->PCLK2_Frequency / presc; }

使用特权

评论回复
地板
pixhw| | 2022-1-2 17:43 | 只看该作者
这个不是兼容stm32吗   

使用特权

评论回复
5
hudi008| | 2022-1-2 17:43 | 只看该作者
需要修改时钟吗?   

使用特权

评论回复
6
lzmm| | 2022-1-2 17:43 | 只看该作者
记得刚刚开始的时候,就是使用stm32的库   

使用特权

评论回复
7
minzisc| | 2022-1-2 17:43 | 只看该作者
需要修改的地方不多吧。   

使用特权

评论回复
8
selongli| | 2022-1-2 17:43 | 只看该作者
完全兼容STM32系列的   

使用特权

评论回复
9
fentianyou| | 2022-1-2 17:44 | 只看该作者
现在国产芯片很多了,可选择性也多了  

使用特权

评论回复
10
xiaoyaodz| | 2022-1-2 17:44 | 只看该作者
与芯片对应的列表吗   

使用特权

评论回复
11
sdlls| | 2022-1-2 17:44 | 只看该作者
高主频108MHz,这个确实可以。  

使用特权

评论回复
12
febgxu| | 2022-1-2 17:44 | 只看该作者
国产mcu优于stm32了。   

使用特权

评论回复
13
kkzz| | 2022-1-2 17:45 | 只看该作者
现在国产芯片没有价格优势了。  

使用特权

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

本版积分规则

49

主题

332

帖子

0

粉丝