本文主要是介绍如何看懂STM32F1xx开发手册,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
STM32F1xx开发版初始函数
时钟控制寄存器(RCC_CR)
0x0000 0001是什么意思
时钟配置寄存器RCC_CFGR
二进制与十六进制转换方法
STM32F1xx开发版初始函数
void SystemInit (void)
{RCC->CR |= (uint32_t)0x00000001;#ifndef STM32F10X_CLRCC->CFGR &= (uint32_t)0xF8FF0000;
#elseRCC->CFGR &= (uint32_t)0xF0FF0000;
#endif /* STM32F10X_CL */ RCC->CR &= (uint32_t)0xFEF6FFFF;RCC->CR &= (uint32_t)0xFFFBFFFF;RCC->CFGR &= (uint32_t)0xFF80FFFF;#ifdef STM32F10X_CLRCC->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;
#elseRCC->CIR = 0x009F0000;
#endif /* STM32F10X_CL */#if defined (STM32F10X_HD) || (defined STM32F10X_XL) || (defined STM32F10X_HD_VL)#ifdef DATA_IN_ExtSRAMSystemInit_ExtMemCtl(); #endif /* DATA_IN_ExtSRAM */
#endif SetSysClock(); /*设置系统时钟*/#ifdef VECT_TAB_SRAMSCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */
#elseSCB->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
二进制与十六进制转换方法
这篇关于如何看懂STM32F1xx开发手册的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!