目录
STM32F1xx开发版初始函数
void SystemInit (void)
{
RCC->CR |= (uint32_t)0x00000001;
#ifndef STM32F10X_CL
RCC->CFGR &= (uint32_t)0xF8FF0000;
#else
RCC->CFGR &= (uint32_t)0xF0FF0000;
#endif /* STM32F10X_CL */
RCC->CR &= (uint32_t)0xFEF6FFFF;
RCC->CR &= (uint32_t)0xFFFBFFFF;
RCC->CFGR &= (uint32_t)0xFF80FFFF;
#ifdef STM32F10X_CL
RCC->CR &= (uint32_t)0xEBFFFFFF;
RCC->CIR = 0x00FF0000;
RCC->CFGR2 = 0x00000000;
#elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)
RCC->CIR = 0x009F0000;
RCC->CFGR2 = 0x00000000;
#else
RCC->CIR = 0x009F0000;
#endif /* STM32F10X_CL */
#if defined (STM32F10X_HD) || (defined STM32F10X_XL) || (defined STM32F10X_HD_VL)
#ifdef DATA_IN_ExtSRAM
SystemInit_ExtMemCtl();
#endif /* DATA_IN_ExtSRAM */
#endif
SetSysClock(); /*设置系统时钟*/
#ifdef VECT_TAB_SRAM
SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */
#else
SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */
#endif
}
时钟控制寄存器(RCC_CR)
/*内部高速时钟使能开启 或 内部8MHz振荡器开启。*/
RCC->CR |= (uint32_t)0x00000001;
同
RCC->CR =RCC-> CR |(uint32_t)0x00000001;
x表示可以是0也可是1
0x0000 0001是什么意思
时钟配置寄存器RCC_CFGR
#ifndef STM32F10X_CL /*如果没有定义 STM32F10X_CL */
RCC->CFGR &= (uint32_t)0xF8FF0000; /*执行语句*/
#else /*如果定义了则...或者 否则... 执行 MCO的两位清零,不往外输出时钟,0-15位清零,PLCK 2分频给ADC,HCLK不分频给APB2*/
RCC->CFGR &= (uint32_t)0xF0FF0000; /*执行语句 HCLK不分频给APB1,sysclk不分频给AHB,HSI用作系统时钟,*/
#endif /*结束*/
#ifdef STM32F10X_CL 接着是一些函数,意思是当定义了 STM32F10X_CL时下面的函数起作用。到底STM32F10X_CL是什么?什么时候定义它呢?原来STM32F10X_CL代表的是使用了 STM32互联系列微处理器也就是STM32F105和STM32F107系列处理器。
0xF8FF0000 转换为二进制 1111 1000 1111 1111 0000 0000 0000 0000
F0FF0000转换为二进制 1111 0000 1111 1111 0000 0000 0000 0000
二进制与十六进制转换方法