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

自己调制频率让LED亮闪

[复制链接]
在路上11111111 发布时间:2016-10-30 19:10
本帖最后由 在路上11111111 于 2016-10-30 19:23 编辑 % s4 Q* w3 d/ W" c, p  @
  1. #define _IO volatile
    : w. T( t# k. ?' D
  2. typedef unsigned int uint32_t;
    : L' ~# q8 V2 ]5 T9 \
  3. typedef _IO uint32_t vu32;/ I" v. G+ w$ ?
  4. typedef unsigned short int uint16_t;6 t4 W# R% h, k( P% S
  5. #define GPIO_Pin_0   ((uint16_t)0x0001)//0000000000000001第一引脚置1(对应的是BSRR和BRR寄存器的16位)7 F( _- o8 \7 g
  6. #define GPIO_Pin_1   ((uint16_t)0x0002)//0000000000000010第二引脚置1(对应的是BSRR和BRR寄存器的16位)
    * Z, i1 X3 x: p
  7. #define GPIO_Pin_2   ((uint16_t)0x0004)//0000000000000100第三引脚置1(对应的是BSRR和BRR寄存器的16位), n/ c% r6 p& D' Y5 W0 F
  8. #define GPIO_Pin_3   ((uint16_t)0x0008)//0000000000001000第四引脚置1(对应的是BSRR和BRR寄存器的16位)
    + w& f( a) \' O. w6 L
  9. #define GPIO_Pin_4   ((uint16_t)0x0010)//0000000000010000第五引脚置1(对应的是BSRR和BRR寄存器的16位)
    / `4 p( b0 \) T  T7 B4 s, }0 p
  10. #define GPIO_Pin_5   ((uint16_t)0x0020)//0000000000100000第六引脚置1(对应的是BSRR和BRR寄存器的16位)6 D+ r4 \, T- ^% e  I& l
  11. #define GPIO_Pin_6   ((uint16_t)0x0040)//0000000001000000第七引脚置1(对应的是BSRR和BRR寄存器的16位)0 A6 }$ l6 ^3 d& I8 k. j
  12. #define GPIO_Pin_7   ((uint16_t)0x0080)//0000000010000000第八引脚置1(对应的是BSRR和BRR寄存器的16位)
    9 i/ B8 J* |& P6 b
  13. #define GPIO_Pin_8   ((uint16_t)0x0100)//0000000100000000第九引脚置1(对应的是BSRR和BRR寄存器的16位)( `1 D9 T% I# R4 c9 n/ k  w( B! [
  14. #define GPIO_Pin_9   ((uint16_t)0x0200)//0000001000000000第十引脚置1(对应的是BSRR和BRR寄存器的16位)
    / E: h$ h5 |4 i; v( w0 u9 |1 M
  15. #define GPIO_Pin_10  ((uint16_t)0x0400)//0000010000000000第11引脚置1(对应的是BSRR和BRR寄存器的16位)
    , e* X5 ]4 G; q* r" M3 _
  16. #define GPIO_Pin_11  ((uint16_t)0x0800)//0000100000000000第12引脚置1(对应的是BSRR和BRR寄存器的16位)
    % c& T5 I3 D$ \- H  o. ?
  17. #define GPIO_Pin_12  ((uint16_t)0x1000)//0001000000000000第13引脚置1(对应的是BSRR和BRR寄存器的16位)4 v8 [+ \( _0 Z% K7 a
  18. #define GPIO_Pin_13  ((uint16_t)0x2000)//0010000000000000第14引脚置1(对应的是BSRR和BRR寄存器的16位)
    7 d( W6 V+ o0 V, X; w
  19. #define GPIO_Pin_14  ((uint16_t)0x4000)//0100000000000000第15引脚置1(对应的是BSRR和BRR寄存器的16位)
    " X8 j, J  D8 X. }
  20. #define GPIO_Pin_15  ((uint16_t)0x8000)//1000000000000000第16引脚置1(对应的是BSRR和BRR寄存器的16位)( y( V+ v8 e: n: ?) y
  21. #define GPIO_Pin_All ((uint16_t)0xFFFF)//1111111111111111
    * ?9 }; Z/ I3 F" U
  22. 3 z- x6 @+ ~# T1 N+ d

  23. : g# d# j4 v2 T% M  v# }6 x
  24. #define RCC_APB2Periph_AFIO   ((uint32_t)0x00000001)9 [& a7 v( p% Y7 }6 A9 D
  25. #define RCC_APB2Periph_GPIOA  ((uint32_t)0x00000004)) p. x# M+ P2 \7 P  u
  26. #define RCC_APB2Periph_GPIOB  ((uint32_t)0x00000008)
    ( U' P6 ~) {# I* e
  27. #define RCC_APB2Periph_GPIOC  ((uint32_t)0x00000010)
    " k, H% k, T! R( K  ^: B" D
  28. #define RCC_APB2Periph_GPIOD  ((uint32_t)0x00000020)//这个是0000000000010000   主要是为了配合时钟的16位(其中第5位是IO口D的使能时钟位)5 K. c+ y7 X  W6 `1 D# N* L
  29. /***************GPIOD**********/
    ) e# |2 J: ]+ e
  30. typedef struct 4 k" `# [; Y, r) N+ W
  31. {, d9 l% e: [  M; ?5 {
  32.    _IO uint32_t CRL;//端口配置低寄存器/ X- O2 Z- _; i# v
  33.    _IO uint32_t CRH;//端口配置高寄存器
      T/ _- |# K8 q% R% h% d
  34.    _IO uint32_t IDR;//端口输入数据寄存器3 M* K3 ~7 O. L: Y* t6 |
  35.    _IO uint32_t ODR;//端口输出数据寄存器
    . x6 m, R  q4 f2 u7 t
  36.    _IO uint32_t BSRR;//端口位设置/清除寄存器. J7 z7 x8 G$ f1 h
  37.    _IO uint32_t BRR;//端口位清除寄存器  h3 {! T- I" }3 _/ g  a) n+ Y
  38.    _IO uint32_t LCKR;//端口配置锁定寄存器3 n- p( D; |0 S0 `+ F
  39. }GPIO_TypeDef;4 U5 d: w8 P0 u# N- u% K
  40. " G4 O; X* S. i* f3 B4 Z
  41. typedef struct
    0 V! d) S& ?& h# ]
  42. {! }- X% L! f/ X8 E
  43.    _IO uint32_t CR;//时钟控制寄存器& J7 R. e* T1 a) U8 t* C8 I
  44.    _IO uint32_t CFGR;//时钟配置寄存器
    + F1 c# u+ O6 o2 l$ ?
  45.    _IO uint32_t CIR;//时钟中断寄存器! l4 M& x; J9 Q$ E  B
  46.    _IO uint32_t APB2RSTR;//APB2外设复位寄存器
    9 f" Z# |- B' p
  47.    _IO uint32_t APB1RSTR;//APB1外设复位寄存器
    " t9 a& {0 t6 d+ h; T
  48.    _IO uint32_t AHBENR;//AHB外设时钟使能寄存器
    + ~; e, H1 |: o. Q
  49.    _IO uint32_t APB2ENR;//APB2外设时钟使能寄存器5 E. v  U. F: M! z3 f
  50.    _IO uint32_t APB1ENR;//APB1外设时钟使能寄存器; v5 {+ y+ U8 v2 o7 `
  51.    _IO uint32_t BDCR;//备份域控制寄存器
    # n( K' H# ?5 c$ c+ `! q& P6 U
  52.    _IO uint32_t CSR;//控制/状态寄存器4 ]+ |6 Q* ~4 p2 g4 Y7 p
  53.    _IO uint32_t AHBRSTR;//AHB外设时钟复位寄存器
    5 W2 r4 i, {  d6 R
  54.    _IO uint32_t CFGR2;//时钟配置寄存器2
      c$ o4 u* o7 ^) ?& L0 I6 y2 Z1 J
  55. }RCC_TypeDef; 3 a0 [# W, e. `; B  y4 q
  56. typedef struct
    7 e8 C* Y) B" y6 F6 R* p
  57. {
    - x: v$ n: {2 R& ~, R
  58.    _IO uint32_t ACR;//闪存访问控制寄存器
    0 v+ P! r9 b6 y
  59.    _IO uint32_t KEYR;//FPEC键寄存器
    , N% S, l( o  V. j% n! Y
  60.    _IO uint32_t OPTKEYR;//闪存OPTKEY寄存器  C$ H4 z& c& \0 ]+ r( o. F5 _
  61.    _IO uint32_t SR;//闪存状态寄存器, U7 K2 t4 i* ]1 Y! H
  62.    _IO uint32_t CR;//闪存控制寄存器  D, |! M; t; `& B+ X
  63.    _IO uint32_t AR;//闪存地址寄存器, z" M6 J& o& s3 C
  64.    _IO uint32_t RESERVED;//保留区: b/ {% e4 Q+ E0 r
  65.    _IO uint32_t OBR;//选择字节寄存器' ^' |6 G; h. N$ I* X: r! Q2 e
  66.    _IO uint32_t WRPR;//写保护寄存器! U+ V# ~7 ^1 v, y
  67. }FLASH_TypeDef;  R; t; E) i; _# L( ]
  68. + m9 {5 Y( V/ U' L  T* W1 R
  69. /***********GPIO管脚的内存地址***********/
    " q* e2 j0 U+ Z$ {
  70. #define PERIPH_BASE     ((uint32_t)0x40000000)( J! _$ E8 ~2 }; }
  71. #define APB2PERIPH_BASE (PERIPH_BASE+0x10000)+ `- F2 F4 r1 `! \
  72. #define GPIOD_BASE      (APB2PERIPH_BASE+0x1400)+ C1 y, L$ _) i8 G" L) a6 I, I3 i
  73. #define GPIOD           ((GPIO_TypeDef *)GPIOD_BASE)1 p1 K% a) u9 M0 T8 @8 B5 L; ^1 y: j
  74. + m' W# U6 [$ J+ S2 W* L# f
  75. /**********RCC时钟***********************/1 M: B3 {" h) _2 `6 ]
  76. #define AHBPERIPH_BASE  (PERIPH_BASE+0x20000)  U; x+ T* t* z. |: z+ m, R
  77. #define RCC_BASE        (AHBPERIPH_BASE+0x1000)( ^1 n) M6 J2 X; `: N
  78. #define RCC             ((RCC_TypeDef *)RCC_BASE)5 K2 Q) \' J# F) z* }! C

  79. ) A2 ]$ t! {! t8 {
  80. + H2 W0 x$ O) ]* g0 u: f$ }6 C
  81. #define APB1PERIPH_BASE    PERIPH_BASE5 g/ v2 i* ^  n- c! g
  82. #define APB2PERIPH_BASE    (PERIPH_BASE + 0x10000)
    & f/ K" q, w! x
  83. #define AHBPERIPH_BASE     (PERIPH_BASE + 0x20000)
    0 O9 o$ r  N7 [2 W- P0 Z
  84. #define FLASH_R_BASE       (AHBPERIPH_BASE + 0x2000)
    6 h8 B+ W) Q+ |) J/ k
  85. #define FLASH              ((FLASH_TypeDef *)FLASH_R_BASE) * U/ m! }0 r4 A' B4 }# ]+ ~

  86. 1 N6 r( V2 p+ E% x/ C
  87. void Delay(uint32_t nCount)
    9 I, g" R; x/ n( W+ s
  88. {9 N# j+ {3 C( @/ u1 Y5 J& M1 e
  89.     for(;nCount!=0;nCount--);$ U- v: `% T; e) w% i' Z, m  L  w
  90. }" z& R" T- T2 t) e8 |
  91. int main(void)8 v1 u! W7 V5 l8 X: w$ j
  92. {
    0 R* i" {5 w- t: r! \1 |
  93.    unsigned char sws;+ f, f9 k, H2 c6 U
  94.    RCC->CR|=1<<16;//外部使能(HSE)打开
    % g# Z- j: x* {" D  a9 \# y
  95.    while(!(RCC->CR>>17));//等待硬件将外部使能置1) w( e' N* A5 ~- b+ f
  96.    /**********配置时钟*************/
    6 |8 N! ^, k9 }
  97.    RCC->CFGR2|=1<<6;//PREDIV2    5分频8 m# ^* ^8 u+ |& ]6 @6 Q5 d2 E
  98.    RCC->CFGR2|=6<<8;//PLL2MUL    8倍频
      Z4 t$ G/ f2 h1 V( G+ m
  99.    RCC->CFGR2|=1<<16;//PLL2作为PREDIV1的时钟
    ; f7 ?1 q4 d1 G' O7 Y4 S
  100.    RCC->CR|=1<<26;//PLL2使能打开: p( q6 j  m2 {# j; s
  101.    while(!(RCC->CR>>27));//等待硬件将其置19 p/ T( m: I& s9 U  V
  102.    RCC->CFGR2|=1<<2;//PREDIV1  5分频1 L+ {! ]  v: G
  103.    RCC->CFGR|=1<<16;//PREDIV1 作为PLL的时钟
    3 a, [. K4 w6 g4 f
  104.    RCC->CFGR|=7<<18;//PLLMUL  4倍   
    " e3 N7 l/ G- E: i9 @/ [1 @1 A
  105.    RCC->CR|=1<<24;//PLL 使能打开5 c% J  N' ]$ B- ]( P
  106.    while(!(RCC->CR>>25));//等待 硬件将其置1
复制代码

FLASH_ACR寄存器

FLASH_ACR寄存器

时钟书

时钟书
1 s8 j" H& }4 R8 ^  q/ F. i2 F
在这里我把我遇到的问题说一下,大家也许会遇到;
2 T" Q7 u) _: U0 P3 F1:有关FLASH寄存器的查找,大家可以查找百度。; A% U, D) V2 T/ @5 J2 H
STM32F10xxx闪存编程参考手册.pdf (288.13 KB, 下载次数: 3)
赞 收藏 3 评论21 发布时间:2016-10-30 19:10

举报

21个回答
在路上11111111 回答时间:2016-10-30 19:29:18
  1. FLASH->ACR|=0x32;
    $ F$ S+ j* z" x7 t* K
  2.    RCC->CFGR|=1<<1;//选择PLLCK 作为系统时钟
    8 K3 F: C) f' ?9 i' h; C
  3.    RCC->APB2ENR |= RCC_APB2Periph_GPIOD;//使GPIO时钟使能启动       
    - ?2 U8 r' f' F
  4.    GPIOD->CRL |=  0x00000300;//Pin2引脚推免的形式以最大的50MHZ输出: J- [0 y$ x6 x8 B
  5.    while (1)
    7 t$ x7 R2 H# Y$ N5 D5 y. l
  6.    {       
    3 g! _+ ]% A$ b, c0 m2 O
  7.                   GPIOD->BRR = GPIO_Pin_2;//使第二引脚输出0(低电平) * F$ a3 m5 }% Y. u9 M# S4 R
  8.                 Delay(0x2FFFFF);4 o4 n2 k9 e% T! w+ Z
  9.                 GPIOD->BSRR = GPIO_Pin_2;//使第二引脚输出1(高电平)! A8 }( I* L! u$ d4 e0 d
  10.                 Delay(0x2FFFFF);
    1 X- r, [" `  M5 y: W( y4 l; `7 u
  11.           }  C3 o9 P7 x& ~7 d6 Y
  12. }
    + r6 g; Z1 t. n+ s! s# n' {- t

  13. ( t2 }) M# n4 j" m

  14. 4 }6 C$ ?6 H" x* z  \5 i8 |8 j

  15. 9 G( @! Q' \% }) g  Z$ B
  16. ! M' S# l% ~! G0 T3 l5 J4 \9 x
  17. 8 s0 F! o5 z8 e6 Z4 C- S+ p/ X
复制代码
在路上11111111 回答时间:2016-10-30 19:21:58
在这里我想请教大家一个问题就是///FLASH_ACR=0x01;为什么也可以使LED实现亮闪的功能呢
在路上11111111 回答时间:2016-10-30 19:29:59
抱歉,这是main函数后面的剩下的数据,不知道为什么代码片没生成这些
Tcreat 回答时间:2016-10-30 20:31:44
笑鸟007 回答时间:2016-10-30 21:27:37
zengyi703-16313 回答时间:2016-10-31 08:18:42
谢楼主分享
高二毛 回答时间:2016-10-31 08:33:12
感谢版主分享。
ataudio 回答时间:2016-10-31 14:30:06
好文。。赞楼主
静海惊天 回答时间:2016-10-31 16:48:33
:D:D:D:D
xhzheng 回答时间:2016-10-31 16:54:21
学习了呢;
zbber 回答时间:2016-10-31 17:42:15
好文,强烈支持楼主ing……
5 o/ ?! ]% t  ~% p2 n8 B
andypanfan 回答时间:2016-11-1 09:22:28
assssdz 回答时间:2016-11-1 20:32:33
:(
原田夜舞love 回答时间:2016-11-1 22:07:07
谢谢楼主分享
12下一页
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版