GD32F407的时钟学习记录

GD32F407的时钟学习记录

起因: 因工作原因,使用到了国产的GD32F407,顺便学习了下他们的时钟,构成,这里简单讲一下ADC,CAN,SPI的时钟配置问题。

一.GD32F407的时钟全局

在这里插入图片描述
这张时序图里面最重要的是时钟AHB,APB1,APB2。
我们的主板在制作时所用的外部晶振为8MHz经过先分频后倍频后,得到了Systemclock,然后再进行一些操作得到AHB,APB1,APB2等时钟

二.我们程序里面的时钟

打开我们的工程,打开

system_gd32f4xx.c

文件可以看到这里定义的系统时钟为168MHz

#define __SYSTEM_CLOCK_168M_PLL_8M_HXTAL        (uint32_t)(168000000)

在这里插入图片描述
而在下面的定义中

    /* HXTAL is stable */
    /* AHB = SYSCLK */
    RCU_CFG0 |= RCU_AHB_CKSYS_DIV1;
    /* APB2 = AHB/2 */
    RCU_CFG0 |= RCU_APB2_CKAHB_DIV2;
    /* APB1 = AHB/4 */
    RCU_CFG0 |= RCU_APB1_CKAHB_DIV4;

在这里插入图片描述

所以:
AHB=168MHz
APB1=42MHz
APB2=84MHz

三.各模块的时钟

3.1 ADC

在时序图里面ADC的时钟源有两个可选
在这里插入图片描述
AHBAPB2,翻看手册中ADC模块时钟的介绍
在这里插入图片描述
它的意思是当我们选择AHB作为时钟源时,可以选择5/6/10/20分频,当外部时钟最大为200MHz时,那么:
ADC最大频率=AHB/5=40MHZ
当我们选择APB2作为时钟源时我们可以选择2/4/6/8分频

ADC部分的频率我们可以通过代码修改
在这里插入图片描述
我们所选的CLK2_DIV6所以是APB2时钟6分频

	此时ADC的时钟频率=84/6=14MHz

可供选择的分频有很多
在这里插入图片描述

3.2 SPI

在手册中可以看到
在这里插入图片描述
SPI 的时钟来自AHB时钟,其时钟频率为168MHz

在程序中配置了其分频
在这里插入图片描述
那么程序中SPI实际频率为=168/32=5.25MHz
可修改的分频有
在这里插入图片描述

3.3 CAN

由手册可知:
在这里插入图片描述
APB1的最高时钟是50MHz
而实际情况下,我们这块板子APB1的时钟为42MHz.
在手册中波特率计算公式如下:
在这里插入图片描述

注:

    tq 是时间片

在程序中设置对应的波特率在这里插入图片描述
所以

CANbps=Fpclk/((Tseg1+1)+(Tseg2+1)+1)
CANbps=42000000/8/(16+4+1)=250K
  • 7
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值