클록 주파수 구성 - DG32
HXTAL: 고속 외부 클록, 4~32MHz 외부 발진기는 시스템에 정확한 메인 클록을 제공할 수 있습니다. 특정 주파수의 크리스털은 두 개의 HXTAL 핀 가까이에 배치해야 합니다. 크리스털에 연결된 외부 저항과 커패시터는 선택한 발진기에 따라 조정해야 합니다.
LXTAL: 저속 외부 클록, 32.768kHz 저속 외부 크리스털 또는 세라믹 공진기. 실시간 클록 회로를 위한 저전력 및 정확한 클록 소스를 제공합니다.
IRC8M: 고속 내부 클록, 고속 내부 8MHz 클록, 고정 주파수 8MHz 장치 전원을 켠 후 CPU에서 선택한 기본 클록 소스는 IRC8M 클록입니다.
IRC40K: 저속 내부 클록, 클록 주파수는 약 40kHz이며 독립적인 감시 타이머 및 실시간 클록 회로에 클록을 제공합니다.
IRC48M: USB 클록 또는 PLL 클록 소스로 사용할 수 있는 48MHz의 고정 주파수가 있습니다.
내부 클럭 구성
void SystemInit (void)
{
/* FPU settings */
#if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */
#endif
/* reset the RCU clock configuration to the default reset state */
/* Set IRC8MEN bit */
RCU_CTL |= RCU_CTL_IRC8MEN; //打开内部8MHz RC振荡器
while(0U == (RCU_CTL & RCU_CTL_IRC8MSTB)){ //等待内部8MHz RC振荡器稳定
}
RCU_MODIFY(0x50); //AHB时钟分频设置 先二分频再四分频
RCU_CFG0 &= ~RCU_CFG0_SCS; //00:选择 CK_IRC8M 时钟作为 CK_SYS 时钟源
#if (defined(GD32F30X_HD) || defined(GD32F30X_XD))
/* reset HXTALEN, CKMEN and PLLEN bits */
/*外部高速时钟使能位、HXTAL 时钟监视器使能位、PLL使能位 复位,方便后续操作*/
RCU_CTL &= ~(RCU_CTL_PLLEN | RCU_CTL_CKMEN | RCU_CTL_HXTALEN);
/* disable all interrupts */
/*关闭中断位*/
RCU_INT = 0x009f0000U;
#elif defined(GD32F30X_CL)
/* Reset HXTALEN, CKMEN, PLLEN, PLL1EN and PLL2EN bits */
RCU_CTL &= ~(RCU_CTL_PLLEN |RCU_CTL_PLL1EN | RCU_CTL_PLL2EN | RCU_CTL_CKMEN | RCU_CTL_HXTALEN);
/* disable all interrupts */
RCU_INT = 0x00ff0000U;
#endif
/* reset HXTALBPS bit */
RCU_CTL &= ~(RCU_CTL_HXTALBPS); //旁路模式位复位
/* Reset CFG0 and CFG1 registers */
RCU_CFG0 = 0x00000000U;
RCU_CFG1 = 0x00000000U;
/* configure the system clock source, PLL Multiplier, AHB/APBx prescalers and Flash settings */
system_clock_config();
}
외부 시계
AHB 버스는 시스템 클럭의 1로 나누어지고,
APB1 버스는 시스템 클럭의 2로 나누어지며,
APB2 버스는 시스템 클럭의 1로 나누어집니다.
실시예 1
실시예 2
108=(8/2)*RCU_PLMUPLX
RCU_PLMUPLX=27