GD32芯片,配置以太网控制器的时钟寄存器,使其选择外部时钟源作为时钟输入示例
时间: 2023-09-27 12:11:55 浏览: 65
以GD32F450为例,配置以太网控制器的时钟寄存器选择外部时钟源作为时钟输入的示例代码如下:
```c
/* 使能以太网MAC和PHY时钟 */
rcu_periph_clock_enable(RCU_ETHMAC);
rcu_periph_clock_enable(RCU_ETHMACRX);
rcu_periph_clock_enable(RCU_ETHMACTX);
/* 配置时钟寄存器,选择外部时钟源作为时钟输入 */
ETH_MACCK_CFG = ETH_MACCK_CFG_CKEN | ETH_MACCK_CFG_CKSVR;
/* 配置PHY时钟寄存器,选择外部时钟源作为时钟输入 */
ETH_MACMDIO_CFG &= ~ETH_MACMDIO_CFG_CLKSEL;
```
其中,`rcu_periph_clock_enable()`函数用于使能以太网MAC和PHY时钟;`ETH_MACCK_CFG`寄存器用于配置以太网MAC时钟,设置`ETH_MACCK_CFG_CKSVR`位表示选择外部时钟源;`ETH_MACMDIO_CFG`寄存器用于配置PHY时钟,清除`ETH_MACMDIO_CFG_CLKSEL`位表示选择外部时钟源。
相关问题
以GD32F307为例,配置以太网控制器的时钟寄存器选择外部时钟源作为时钟输入的示例代码
以下是以GD32F307为例,配置以太网控制器的时钟寄存器选择外部时钟源作为时钟输入的示例代码:
```c
#include "gd32f30x.h"
void eth_clock_config(void)
{
/* 使能以太网控制器时钟 */
rcu_periph_clock_enable(RCU_ETHMAC);
rcu_periph_clock_enable(RCU_ETHMACRX);
rcu_periph_clock_enable(RCU_ETHMACTX);
/* 配置以太网控制器时钟 */
ETH_MACCK_CFG = ETH_MACCK_CFG_CKEN | ETH_MACCK_CFG_CKDV;
ETH_MMC_CTRL &= ~ETH_MMC_CTRL_CLKSEL;
/* 配置PHY时钟 */
ETH_CTL &= ~ETH_CTL_PHYCLKEN;
ETH_CTL |= ETH_CTL_PHYDIVEN;
ETH_CTL &= ~ETH_CTL_PHYDIV;
ETH_CTL |= ETH_CTL_PHYDIV_2;
/* 配置时钟源为外部时钟 */
ETH_CTL &= ~ETH_CTL_CLKSEL;
ETH_CTL |= ETH_CTL_CLKSEL_0;
}
```
在以上代码中,我们通过设置ETH_CTL寄存器的CLKSEL位为1,将时钟源选择为外部时钟。具体来说,ETH_CTL寄存器的CLKSEL位控制以太网控制器的时钟源选择,其中:
- CLKSEL = 0:时钟源为内部时钟,使用内部PLL提供的时钟;
- CLKSEL = 1:时钟源为外部时钟,使用外部PHY提供的时钟;
需要注意的是,在选择外部时钟源之前,需要先配置好PHY时钟。PHY时钟的配置可以通过设置ETH_CTL寄存器的PHYDIV和PHYDIVEN位来实现。具体来说,PHY时钟的计算公式如下:
PHY_CLK = System_CLK / (2 * (PHYDIV + 1))
其中,System_CLK为MCU的时钟频率,PHYDIV为PHY时钟分频系数,取值范围为0~63。
在以上代码中,我们将PHY时钟分频系数设置为2,即PHYDIV = 1。这样,PHY时钟的频率就可以通过以下公式计算得出:
PHY_CLK = System_CLK / 4
需要根据具体的硬件电路设计情况,选择适当的PHY时钟分频系数。同时,还需要根据外部时钟源的频率,配置好ETH_MACCK_CFG寄存器的CKDV位,以确保以太网控制器的时钟频率符合要求。
stm32系统时钟配置为外部时钟源 72M
您可以按照以下步骤来配置STM32系统时钟为外部时钟源72M:
1. 首先,需要使能外部时钟源。如果您使用的是标准的STM32开发板,可能已经有一个外部时钟源(如晶体振荡器)连接到了MCU的时钟输入引脚。您需要在代码中使能这个外部时钟源,可以通过RCC_ClockSecuritySystemCmd()函数实现。例如,如果您使用的是晶体振荡器,可以使用以下代码使能它:
RCC_HSEConfig(RCC_HSE_ON); //使能HSE
while (RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET); //等待HSE稳定
2. 接下来,需要将外部时钟源配置为PLL输入时钟。PLL是一种将输入时钟倍频的电路,可以将外部时钟源的频率提高到MCU需要的频率。您可以使用以下代码将外部时钟源配置为PLL输入时钟:
RCC_PLLConfig(RCC_PLLSource_HSE, 9, 1); //配置PLL输入时钟为HSE/9,倍频系数为1
RCC_PLLCmd(ENABLE); //使能PLL
while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); //等待PLL稳定
注意,这里的倍频系数和分频系数需要根据您使用的外部时钟源的频率进行调整。例如,如果您使用的是8MHz的晶体振荡器,那么PLL输入时钟为8MHz/9=0.8889MHz,倍频系数为72,分频系数为2,输出时钟频率为0.8889MHz*72/2=32MHz。
3. 最后,需要将PLL输出时钟作为系统时钟源。您可以使用以下代码将PLL输出时钟作为系统时钟源:
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //将PLL输出时钟作为系统时钟源
while (RCC_GetSYSCLKSource() != RCC_CFGR_SWS_PLL); //等待系统时钟源切换完成
这样,您就成功将STM32系统时钟配置为外部时钟源72M了。