|
STM32初学者笔记(1) 一步步建立自己的STM32函数. ?, x2 c$ N9 `: @7 @) j% t' g3 Z4 M 使用自己建立的 STM32F103.H 的 头文件。里面有大量中文注释。非常适合初学者。4 a8 H+ g" W* [& H* D 4 i4 `3 v) V2 D1 R, b3 |* { STM32的库实在太庞大负责,对初学者来说实在是件头痛的事情! 4 E, z+ z/ ]7 }2 D& v% j# P0 `* X 下面是万利开发板 LCD DEMO 例子中的函数,改后初学者可以对照学习一下。 . l1 @4 K5 T) K/ n) z0 m //=========================================================================! P& s" }- j, g0 a // 原函数名称: RCC_Configuration(void) //========================================================================= void STM32_RCC_Configuration(void) { STM32_Rcc_Regs->cr.bit.HSEON=0; // HSE振荡器开启关闭 STM32_Rcc_Regs->cr.bit.HSEBYP=0; // 外部高速时钟没有旁路* L" ~- c1 E" Q0 x0 M STM32_Rcc_Regs->cr.bit.HSERDY=0; // 外部高速时钟就绪标志清零2 M* {/ x" S3 \ STM32_Rcc_Regs->cr.bit.HSEON=1; // 外部高速时钟使能 1:HSE振荡器开启 while( !(STM32_Rcc_Regs->cr.bit.HSERDY ) );//由硬件置1来指示外部时钟已经稳定。% B ]' T4 y; o. ?: m9 L 2 X; ?0 u: M' M2 z /* HCLK = SYSCLK=72MHZ :HLCK 提供给CPU, 内存和DMA 最大72MHZ */! N& R; z+ d; M- p5 ?% Y; U9 \+ D STM32_Rcc_Regs->crfgr.bit.HPRE=RCC_AHB_SYSCLK_DIV1_B; //AHB预分频 /* PCLK2 = HCLK/1=SYSCLK=72 PCLK2 提供给 APB2外设,最大72MHZ */$ o6 w( B4 s( Y! k STM32_Rcc_Regs->crfgr.bit.PPRE2=RCC_APB2_HCLK_DIV1_B; //高速APB预分频(APB2) /* PCLK1 = HCLK/2=SYSCLK/2=36 PCLK1提供给APB1外设,最大36MHZ */$ \: Z1 O) O% r" P5 Z' }+ R STM32_Rcc_Regs->crfgr.bit.PPRE1=RCC_APB1_HCLK_DIV2_B; //低速APB预分频(APB1)必须保证APB1时钟频率不超过36MHz /* ADCCLK = PCLK2/6 ADC转换速率:72M/6 = 12MHZ */ STM32_Rcc_Regs->cfgr.bit.ADCPRE=RCC_ADCPRE_PCLK2_DIV6_B; % w9 L" p7 i% U* a /* Flash 2 wait state */ STM32_Flash_Regs->ACR.all&=((u32)0x00000038); //清零某些位 STM32_Flash_Regs->ACR.bit.LATENCY=2; STM32_Flash_Regs->ACR.bit.PRFTBE=1; //预取缓冲区使能 + {! o9 G0 j k /* PLLCLK = 8MHz * 9 = 72MHZ ) */; J5 C. I9 [8 U STM32_Rcc_Regs->cfgr.bit.PLLXTPRE=0; //HSE分频器作为PLL输入 0:HSE不分频6 ~5 c: Z- [$ v5 n5 U. D( J STM32_Rcc_Regs->cfgr.bit.PLLSRC=1; //HSE时钟作为PLL输入时钟% @+ V! q3 S$ P! c STM32_Rcc_Regs->cfgr.bit.PLLMUL=RCC_PLL_9_B; //PLL倍频系数9# ~& u$ B! q8 g4 [ /* Enable PLL */2 h9 F6 L8 M4 Q# ? STM32_Rcc_Regs->cr.bit.PLLON=1; // PLL使能 6 a% h( D8 L2 d0 ^' ~" ?( | E! Y4 t* @$ z while( !(STM32_Rcc_Regs->cr.bit.PLLRDY ) ); // PLL时钟就绪标志 PLL锁定后由硬件置1 /* Select PLL as system clock source */6 W5 j9 b/ |9 v9 x# ~9 u STM32_Rcc_Regs->cfgr.bit.SW=0; ) f# s& C: |# @+ l4 u5 O STM32_Rcc_Regs->cfgr.bit.SW=2; //RCC_SW_SYSCLK_PLL0 c9 A6 o E5 j% v* Q6 j /* Wait till PLL is used as system clock source */ - u" t3 e' P4 S while(STM32_Rcc_Regs->cfgr.bit.SWS!=2); //RCC_SWS_SYSCLK_PLL( r$ a3 g( X" _' a; q) G2 { . w; `0 ?% d+ c5 `6 k1 F /* Enable GPIOA, GPIOB, GPIOC, GPIOD, GPIOE and AFIO clocks */ W: A8 J& f5 z8 u$ U' @' A' Z/ B K STM32_Rcc_Regs->apb2enr.all |=(RCC_AFIOEN|RCC_IOPAEN|RCC_IOPBEN|RCC_IOPCEN|RCC_IOPDEN|RCC_IOPEEN); 5 Q; s2 R) i3 w" j$ n5 {/ T /* TIM2 AND CAN clocks enable */ STM32_Rcc_Regs->apb1enr.all |=(RCC_TIM2EN| RCC_CANEN); } * U3 _& h6 k/ ?1 j/ D 出处:netjob |
微信公众号
手机版
是啊 当时还在学校
才发现,这是08年的帖子,08年还没有HAL....