这个函数体比较长,但仔细看会发现这个函数就是在配置CR,CFGR,ACR(设置FLASH)寄存器的某些位(使能,判断是否就绪,设置相应位,设置FLASH,设置AHB,APB预分频系数,设置HCLK,PCLK等等外设时钟,设置PLL锁相环倍频系数最终确定系统时钟),结合官方注释和官方寄存器的说明很容易理解。 至此,SystemInit函数就能大概理解了。但是还有...
简介: stm32f407探索者开发板(十一)——SystemInit时钟系统初始化剖析 一、回顾SYSCLK主要是用PLLCLK作为时钟源二、SystemInitsysteminit是在main函数调用之前进行的void SystemInit(void) { /* FPU settings ---*/ #if (__FPU_PRESENT == 1) && (__FPU_USED == 1) SCB->CPACR |= ((3UL <<...
voidSystemInit(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 RCC clock configuration to the default reset state ---*//* Set H...
也就是说,调用SystemInit函数之后,首先是选择HSI作为系统时钟。在设置完相关寄存器后才换成HSE作为系统时钟,接下来SystemInit函数内部会调用SetSysClock()函数。这个函数内部是根据宏定义设置系统时钟频率。函数如下: static void SetSysClock(void) { #ifdef SYSCLK_FREQ_HSE SetSysClockToHSE(); #elif defined SYS...
SystemInit函数定义: 1 void SystemInit(void) 2 { 3 /* FPU settings ---*/ 4 #if (__FPU_PRESENT == 1) && (__FPU_USED == 1) 5 SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */ 6 #endif 7 /* Reset the RCC clock configuration...
SystemInit (void) { RCC->CR |= (uint32_t)0x00000001; #ifndef STM32F10X_CL RCC->CFGR &= (uint32_t)0xF8FF0000; #e RCC->CFGR &= (uint32_t)0xF0FF0000; #endif RCC->CR &= (uint32_t)0xFEF6FFFF; RCC->CR &= (uint32_t)0xFFFBFFFF; ...
也就是说,调用SystemInit函数之后,首先是选择HSI作为系统时钟。在设置完相关寄存器后才换成HSE作为系统时钟,接下来SystemInit函数内部会调用SetSysClock()函数。这个函数内部是根据宏定义设置系统时钟频率。函数如下: static void SetSysClock(void) { #ifdef SYSCLK_FREQ_HSE...
SystemInit函数中的时钟默认配置为内部8MHz的HSI。 以下是一个简单的示例代码,用于展示如何对系统时钟进行初步的配置与输出查看: #include "stm32f1xx_hal.h" int main(void) { // 初始化HSI HAL_Init(); // 配置MCO1,将系统时钟作为输出源,分频系数为1 ...
intmain(void) { } 1. 2. 3. 此时直接编译的话,会出现如下错误: “Error: L6218E: Undefined symbol SystemInit (referred from startup_stm32f429_439xx.o)” 错误提示 SystemInit 没有定义。从分析启动文件时我们知道, Reset_Handler 调用了该函数用来初始化 SMT32 系统时钟,为了简单起见,我们在 main 文...
这行代码在system_stm32f10x.c中找到了。 void SystemInit (void) { /* Reset the RCC clock configuration to the default reset state(for debug purpose) */ /* Set HSION bit */ RCC->CR |= (uint32_t)0x00000001; /* Reset SW, HPRE, PPRE1, PPRE2, ADCPRE and MCO bits */ ...