|
STM32初学者笔记(1) 一步步建立自己的STM32函数( V% Q, P& ^& X9 L( r1 T 使用自己建立的 STM32F103.H 的 头文件。里面有大量中文注释。非常适合初学者。5 _1 W& M( Q E$ n- Z6 I! v% x STM32的库实在太庞大负责,对初学者来说实在是件头痛的事情! 7 m7 _% K; {1 F8 c 下面是万利开发板 LCD DEMO 例子中的函数,改后初学者可以对照学习一下。8 M! z7 r; B( p 6 ~! `- T4 g2 j- N6 ~+ Q* [ //=========================================================================: | H# b. Q) Y // 原函数名称: RCC_Configuration(void) //=========================================================================/ K! o1 J U8 i' S$ @ \* w void STM32_RCC_Configuration(void) { STM32_Rcc_Regs->cr.bit.HSEON=0; // HSE振荡器开启关闭9 v3 w: N% q* N STM32_Rcc_Regs->cr.bit.HSEBYP=0; // 外部高速时钟没有旁路! A$ @0 R( g/ O8 F4 t7 c% O# A: E STM32_Rcc_Regs->cr.bit.HSERDY=0; // 外部高速时钟就绪标志清零 STM32_Rcc_Regs->cr.bit.HSEON=1; // 外部高速时钟使能 1:HSE振荡器开启 ! H x+ d1 F8 ^3 t& I while( !(STM32_Rcc_Regs->cr.bit.HSERDY ) );//由硬件置1来指示外部时钟已经稳定。 /* 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)- _% }" H2 T3 e! c4 s: G" H3 O /* PCLK1 = HCLK/2=SYSCLK/2=36 PCLK1提供给APB1外设,最大36MHZ */ STM32_Rcc_Regs->crfgr.bit.PPRE1=RCC_APB1_HCLK_DIV2_B; //低速APB预分频(APB1)必须保证APB1时钟频率不超过36MHz 9 E+ L- T6 r9 O# i5 a 3 v+ b% I- R# B {% [2 x" A) K' | /* ADCCLK = PCLK2/6 ADC转换速率:72M/6 = 12MHZ */ STM32_Rcc_Regs->cfgr.bit.ADCPRE=RCC_ADCPRE_PCLK2_DIV6_B; /* Flash 2 wait state */ STM32_Flash_Regs->ACR.all&=((u32)0x00000038); //清零某些位, |* z, a4 f2 I4 K& z8 X! t STM32_Flash_Regs->ACR.bit.LATENCY=2; : S7 q" j* f& w6 E2 s3 r STM32_Flash_Regs->ACR.bit.PRFTBE=1; //预取缓冲区使能 8 y4 A9 l9 n$ y /* PLLCLK = 8MHz * 9 = 72MHZ ) */ STM32_Rcc_Regs->cfgr.bit.PLLXTPRE=0; //HSE分频器作为PLL输入 0:HSE不分频 STM32_Rcc_Regs->cfgr.bit.PLLSRC=1; //HSE时钟作为PLL输入时钟1 N* N4 L( B4 Q3 D# D5 c# Q" ~- [. g STM32_Rcc_Regs->cfgr.bit.PLLMUL=RCC_PLL_9_B; //PLL倍频系数9- y8 V) e2 @( z /* Enable PLL */) ^6 l0 V! S9 p+ p N M STM32_Rcc_Regs->cr.bit.PLLON=1; // PLL使能 6 e+ [# o6 i: j" @: J while( !(STM32_Rcc_Regs->cr.bit.PLLRDY ) ); // PLL时钟就绪标志 PLL锁定后由硬件置1/ o: Q8 w v+ G! o2 k4 r* @+ ?: d0 C 0 G$ n3 n8 s) c0 v /* Select PLL as system clock source */ STM32_Rcc_Regs->cfgr.bit.SW=0; ; \9 x$ v; R+ s0 R7 E, } STM32_Rcc_Regs->cfgr.bit.SW=2; //RCC_SW_SYSCLK_PLL8 S2 {# E; `! W4 v+ s6 a& A+ F" J /* Wait till PLL is used as system clock source */ 7 N/ [1 B7 E, f( P* F; g4 p9 O while(STM32_Rcc_Regs->cfgr.bit.SWS!=2); //RCC_SWS_SYSCLK_PLL5 e3 I& T. v3 n4 ]) [ : w, Y9 G U/ I \# v /* 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);7 ^' C1 h5 q3 M& K0 b1 u $ M) I1 ?( a2 d- Y8 Q /* TIM2 AND CAN clocks enable */ STM32_Rcc_Regs->apb1enr.all |=(RCC_TIM2EN| RCC_CANEN); " w- M7 m& J4 N# D 8 W1 ~, M2 u% O) i. q: M& f, [ } $ h$ _! B( I5 G7 }" M 出处:netjob |
微信公众号
手机版
是啊 当时还在学校
才发现,这是08年的帖子,08年还没有HAL....