你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32初学者笔记(1) 一步步建立自己的STM32函数

[复制链接]
qazwsx-19104 发布时间:2008-9-3 20:22
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的库实在太庞大负责,对初学者来说实在是件头痛的事情!
, M; T8 ?  S  C2 h0 S1 y: c4 E, z+ z/ ]7 }2 D& v% j# P0 `* X
下面是万利开发板 LCD DEMO 例子中的函数,改后初学者可以对照学习一下。
% y! \% g' ]! ?4 H# j- _7 L
* F. M# L' p+ G. o. l1 @4 K5 T) K/ n) z0 m
//=========================================================================! P& s" }- j, g0 a
//     原函数名称: RCC_Configuration(void)
8 T! ], J% F$ ?3 a( c2 T//=========================================================================
: n+ M) ~- K+ @" J! zvoid STM32_RCC_Configuration(void)
9 z8 t+ m9 M) m+ X7 Q4 @{
. R: R( |. o( [( M) x
" l$ {6 s% i6 Y2 c: j    STM32_Rcc_Regs->cr.bit.HSEON=0;        // HSE振荡器开启关闭
+ h0 j; n& D8 L# A' _" x6 l* j    STM32_Rcc_Regs->cr.bit.HSEBYP=0;    // 外部高速时钟没有旁路* L" ~- c1 E" Q0 x0 M
    STM32_Rcc_Regs->cr.bit.HSERDY=0;    // 外部高速时钟就绪标志清零2 M* {/ x" S3 \
        
" w- L1 t  d5 ~/ B: _/ Z- n# ?    STM32_Rcc_Regs->cr.bit.HSEON=1;        // 外部高速时钟使能    1:HSE振荡器开启
! ^7 a) R; t& A( A( L0 t' ]
7 j; [$ x# [" a0 r0 d7 A: V    
6 t6 ^) ?( t" W3 n5 F+ _) d# V, B     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预分频
6 \) T0 A3 y6 L& j# F: j. J0 |
/ a' f  E3 e8 \1 H" s    /* 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)
: D6 F# N2 u1 C4 l! T     
1 i4 D5 u1 ^) r; b$ u: Q; f; q     /* 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
6 o  D8 F. [4 O% N) U4 \, x% {
' x8 j7 i5 O% j: M& }    
( v* H2 I( N9 @$ S/ P0 w      /* ADCCLK = PCLK2/6     ADC转换速率:72M/6 = 12MHZ  */
/ U, d. ^: {' E2 S% ]3 V* \     STM32_Rcc_Regs->cfgr.bit.ADCPRE=RCC_ADCPRE_PCLK2_DIV6_B;    
# e3 d! b$ ~, Y% t3 `: L     % w9 L" p7 i% U* a
     /* Flash 2 wait state */
& }% e6 ^. e/ O0 j7 E7 S     STM32_Flash_Regs->ACR.all&=((u32)0x00000038);    //清零某些位
- g( v: w9 q; {* A7 e     STM32_Flash_Regs->ACR.bit.LATENCY=2;    
. h: F/ u' Q0 N* {1 {    STM32_Flash_Regs->ACR.bit.PRFTBE=1;        //预取缓冲区使能    
( ~0 V1 A0 ~# {; Z  ?% w0 w8 Y6 ~+ {! 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 [

5 U* t) H/ ]7 g1 k" g8 W: A    /* 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
! e- n6 J3 Z9 u' t' U, i: P
$ c- s2 R2 f7 G. m2 y7 j* N- X     /* 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

! f! b+ Q" H9 |/ x& B8 E) u    /* 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);
. O+ h: {7 l/ {7 t% ~$ r    5 Q; s2 R) i3 w" j$ n5 {/ T
    /* TIM2 AND CAN clocks enable */
" K# M$ e' V. U& U; Q. k    STM32_Rcc_Regs->apb1enr.all |=(RCC_TIM2EN| RCC_CANEN);    
' ^% s7 H' ?* Y; d- I5 x
) x4 m' c8 P6 ]% x9 F1 v}
. C! R9 `: G# H4 `7 I* U3 _& h6 k/ ?1 j/ D
出处:netjob
赞 收藏 1 评论4 发布时间:2008-9-3 20:22

举报

4个回答
北斗光寒 回答时间:2015-3-5 09:03:58
论坛居然08年就有了
bit 回答时间:2015-3-5 09:25:47
北斗光寒 发表于 2015-3-5 09:03# E; N( c- W, L0 H. A6 \
论坛居然08年就有了

* y! |) A( E* K# i6 i是啊 当时还在学校
狂奔的蜗牛233 回答时间:2017-2-16 11:20:16
哪里能下载啊?话说这个论坛现在没啥人了吧
wofei1314 回答时间:2017-2-16 12:56:26
写的蛮详细的,不过F7可能用不了哦,可能需要慢慢的向HAL靠近
! y- j+ u) q) \, B- E1 x1 m2 x
  u$ P* H0 H$ i# n  n  F才发现,这是08年的帖子,08年还没有HAL....
' W7 N2 @; I$ S
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版