STM32 SystemInit函数详解.docx
《STM32 SystemInit函数详解.docx》由会员分享,可在线阅读,更多相关《STM32 SystemInit函数详解.docx(7页珍藏版)》请在三一办公上搜索。
1、STM32 SystemInit函数详解九:SystemInit实现的功能 花了一天的时间,总算是了解了SystemInit函数实现了哪些功能,初学STM32,现记录如下: 使用的是3.5的库,用的是STM32F107VC,开发环境RVMDK4.23 我已经定义了STM32F10X_CL,SYSCLK_FREQ_72MHz 函数调用顺序: startup_stm32f10x_cl.s SystemInit SetSysClock SetSysClockTo72 初始化时钟用到的RCC寄存器复位值: RCC_CR = 0x0000 xx83; RCC_CFGR = 0x0000 0000;RCC
2、_CIR = 0x0000 0000; RCC_CFGR2 = 0x0000 0000; SystemInit 在调用 SetSysClock之前RCC寄存器的值如下: RCC-CR = 0x0000 0083; RCC-CIR = 0x00FF0000; RCC-CFGR2 = 0x00000000;至于这些寄存器都代表着什么意思,详见芯片资料RCC寄存器,该文重点不在此处; SetSysClock函数如下: static void SetSysClock(void) #ifdef SYSCLK_FREQ_HSE SetSysClockToHSE; #elif defined SYSCLK_
3、FREQ_24MHz SetSysClockTo24; #elif defined SYSCLK_FREQ_36MHz SetSysClockTo36; #elif defined SYSCLK_FREQ_48MHz SetSysClockTo48; #elif defined SYSCLK_FREQ_56MHz SetSysClockTo56; #elif defined SYSCLK_FREQ_72MHz /我的定义的是SYSCLK_FREQ_72MHz,所以调用SetSysClockTo72 SetSysClockTo72; #endif SetSysClockTo72函数如下: sta
4、tic void SetSysClockTo72(void) _IO uint32_t StartUpCounter = 0, HSEStatus = 0; /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration -*/ /* Enable HSE */ RCC-CR |= (uint32_t)RCC_CR_HSEON); /* Wait till HSE is ready and if Time out is reached exit */ do HSEStatus = RCC-CR & RCC_CR_HSERDY; StartUpCounter+; w
5、hile(HSEStatus = 0) & (StartUpCounter != HSE_STARTUP_TIMEOUT); if (RCC-CR & RCC_CR_HSERDY) != RESET) HSEStatus = (uint32_t)0x01; else HSEStatus = (uint32_t)0x00; if (HSEStatus = (uint32_t)0x01) /* Enable Prefetch Buffer */ FLASH-ACR |= FLASH_ACR_PRFTBE; /* Flash 2 wait state */ FLASH-ACR &= (uint32_
6、t)(uint32_t)FLASH_ACR_LATENCY); FLASH-ACR |= (uint32_t)FLASH_ACR_LATENCY_2; /* HCLK = SYSCLK */ RCC-CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1; /* PCLK2 = HCLK */ RCC-CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1; /* PCLK1 = HCLK */ RCC-CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2; #ifdef STM32F10X_CL /* Configure PLLs
7、-*/ /* PLL2 configuration: PLL2CLK = (HSE / 5) * 8 = 40 MHz */ /* PREDIV1 configuration: PREDIV1CLK = PLL2 / 5 = 8 MHz */ RCC-CFGR2 &= (uint32_t)(RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL2MUL | RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC); RCC-CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV5 | RCC_CFGR2_PLL2MUL8 | R
8、CC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV5); /* Enable PLL2 */ RCC-CR |= RCC_CR_PLL2ON; /* Wait till PLL2 is ready */ while(RCC-CR & RCC_CR_PLL2RDY) = 0) /* PLL configuration: PLLCLK = PREDIV1 * 9 = 72 MHz */ RCC-CFGR &= (uint32_t)(RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL); RCC-
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- STM32 SystemInit函数详解 SystemInit 函数 详解
链接地址:https://www.31ppt.com/p-3166318.html