|
STM32初学者笔记(1) 一步步建立自己的STM32函数 使用自己建立的 STM32F103.H 的 头文件。里面有大量中文注释。非常适合初学者。 : t9 w' D8 o) A% G0 a/ G, V0 C STM32的库实在太庞大负责,对初学者来说实在是件头痛的事情! ( j. U$ b# Z) `/ @( y2 x& s& z7 O6 N 下面是万利开发板 LCD DEMO 例子中的函数,改后初学者可以对照学习一下。 , B& o* I( ] ^/ s" w2 \0 O0 c8 p //========================================================================= // 原函数名称: RCC_Configuration(void) //=========================================================================: `, y2 B5 W& N% { void STM32_RCC_Configuration(void)! K. C: D7 O6 c& c. o! K { # y/ J! M0 @+ B STM32_Rcc_Regs->cr.bit.HSEON=0; // HSE振荡器开启关闭1 @, P0 u5 o# O; ` STM32_Rcc_Regs->cr.bit.HSEBYP=0; // 外部高速时钟没有旁路 STM32_Rcc_Regs->cr.bit.HSERDY=0; // 外部高速时钟就绪标志清零 9 }0 }3 s$ T0 v) X STM32_Rcc_Regs->cr.bit.HSEON=1; // 外部高速时钟使能 1:HSE振荡器开启 while( !(STM32_Rcc_Regs->cr.bit.HSERDY ) );//由硬件置1来指示外部时钟已经稳定。 9 c! L1 C4 T3 q- G; ` s1 e /* HCLK = SYSCLK=72MHZ :HLCK 提供给CPU, 内存和DMA 最大72MHZ */ STM32_Rcc_Regs->crfgr.bit.HPRE=RCC_AHB_SYSCLK_DIV1_B; //AHB预分频 /* PCLK2 = HCLK/1=SYSCLK=72 PCLK2 提供给 APB2外设,最大72MHZ */ STM32_Rcc_Regs->crfgr.bit.PPRE2=RCC_APB2_HCLK_DIV1_B; //高速APB预分频(APB2) /* PCLK1 = HCLK/2=SYSCLK/2=36 PCLK1提供给APB1外设,最大36MHZ */ STM32_Rcc_Regs->crfgr.bit.PPRE1=RCC_APB1_HCLK_DIV2_B; //低速APB预分频(APB1)必须保证APB1时钟频率不超过36MHz * \: I' m0 K( K a1 w+ O& m /* ADCCLK = PCLK2/6 ADC转换速率:72M/6 = 12MHZ */ STM32_Rcc_Regs->cfgr.bit.ADCPRE=RCC_ADCPRE_PCLK2_DIV6_B; 9 U4 `: E* p/ k: U S" n /* Flash 2 wait state */ STM32_Flash_Regs->ACR.all&=((u32)0x00000038); //清零某些位 STM32_Flash_Regs->ACR.bit.LATENCY=2; " J j( m; \+ f+ l STM32_Flash_Regs->ACR.bit.PRFTBE=1; //预取缓冲区使能 " o; q/ G7 b3 q6 Q / d0 P. Y& y. A /* PLLCLK = 8MHz * 9 = 72MHZ ) */1 P2 ?8 u6 P5 A0 t STM32_Rcc_Regs->cfgr.bit.PLLXTPRE=0; //HSE分频器作为PLL输入 0:HSE不分频 STM32_Rcc_Regs->cfgr.bit.PLLSRC=1; //HSE时钟作为PLL输入时钟 STM32_Rcc_Regs->cfgr.bit.PLLMUL=RCC_PLL_9_B; //PLL倍频系数98 g' N, P$ j) O/ w+ w- I7 E /* Enable PLL */( `" W [8 n7 I STM32_Rcc_Regs->cr.bit.PLLON=1; // PLL使能 , O0 K2 f0 }, v$ m. D5 j while( !(STM32_Rcc_Regs->cr.bit.PLLRDY ) ); // PLL时钟就绪标志 PLL锁定后由硬件置1 /* Select PLL as system clock source */, V7 G! y' _, n& t# a; O4 o STM32_Rcc_Regs->cfgr.bit.SW=0; STM32_Rcc_Regs->cfgr.bit.SW=2; //RCC_SW_SYSCLK_PLL /* Wait till PLL is used as system clock source */ 3 e9 U4 o. _6 S9 @* }& T* ] while(STM32_Rcc_Regs->cfgr.bit.SWS!=2); //RCC_SWS_SYSCLK_PLL ) J. b, U9 u3 ^/ N! D+ d/ x* J /* Enable GPIOA, GPIOB, GPIOC, GPIOD, GPIOE and AFIO clocks */ STM32_Rcc_Regs->apb2enr.all |=(RCC_AFIOEN|RCC_IOPAEN|RCC_IOPBEN|RCC_IOPCEN|RCC_IOPDEN|RCC_IOPEEN);9 |, I8 C/ ]; m5 s/ o. T /* TIM2 AND CAN clocks enable */# P' W, a" h0 y1 u1 S9 F: t) h, B STM32_Rcc_Regs->apb1enr.all |=(RCC_TIM2EN| RCC_CANEN); , Y6 s; q3 `) I+ x _0 I }) x$ f! g) g3 q$ ^6 I# p + E1 [: @4 ` A0 F( @ 出处:netjob |
微信公众号
手机版
是啊 当时还在学校
才发现,这是08年的帖子,08年还没有HAL....