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

自己调制频率让LED亮闪

[复制链接]
在路上11111111 发布时间:2016-10-30 19:10
本帖最后由 在路上11111111 于 2016-10-30 19:23 编辑 % G+ r& `! T: r2 N
  1. #define _IO volatile
    " W% e; e8 B, y- p  ]$ a; ]
  2. typedef unsigned int uint32_t;
    - }3 a# e; ~8 P2 {! h
  3. typedef _IO uint32_t vu32;
    ' Q  p( n9 ^3 o- Y- W4 Z
  4. typedef unsigned short int uint16_t;
    5 K; v0 _  E$ c, S1 Q
  5. #define GPIO_Pin_0   ((uint16_t)0x0001)//0000000000000001第一引脚置1(对应的是BSRR和BRR寄存器的16位)7 V, S. P9 S* V0 F. P
  6. #define GPIO_Pin_1   ((uint16_t)0x0002)//0000000000000010第二引脚置1(对应的是BSRR和BRR寄存器的16位)
    5 ~+ O8 B9 ^/ `
  7. #define GPIO_Pin_2   ((uint16_t)0x0004)//0000000000000100第三引脚置1(对应的是BSRR和BRR寄存器的16位)$ H) c% }' v/ K" d- Q  m: ~
  8. #define GPIO_Pin_3   ((uint16_t)0x0008)//0000000000001000第四引脚置1(对应的是BSRR和BRR寄存器的16位)
    ; d: g2 [5 [, a3 F
  9. #define GPIO_Pin_4   ((uint16_t)0x0010)//0000000000010000第五引脚置1(对应的是BSRR和BRR寄存器的16位)! c* e- J' b. S: ^; M7 F' R. \1 ]6 X) i/ o
  10. #define GPIO_Pin_5   ((uint16_t)0x0020)//0000000000100000第六引脚置1(对应的是BSRR和BRR寄存器的16位)
    7 m) `( U2 E: S* ~) W5 w9 m
  11. #define GPIO_Pin_6   ((uint16_t)0x0040)//0000000001000000第七引脚置1(对应的是BSRR和BRR寄存器的16位)9 p; c. R1 S# b
  12. #define GPIO_Pin_7   ((uint16_t)0x0080)//0000000010000000第八引脚置1(对应的是BSRR和BRR寄存器的16位)0 W- w# A2 \- b2 Z
  13. #define GPIO_Pin_8   ((uint16_t)0x0100)//0000000100000000第九引脚置1(对应的是BSRR和BRR寄存器的16位)" s4 G/ d" w$ m! ?
  14. #define GPIO_Pin_9   ((uint16_t)0x0200)//0000001000000000第十引脚置1(对应的是BSRR和BRR寄存器的16位)- q; b6 s4 h7 G; E
  15. #define GPIO_Pin_10  ((uint16_t)0x0400)//0000010000000000第11引脚置1(对应的是BSRR和BRR寄存器的16位). l" L) }* l$ K( o+ t0 m4 l
  16. #define GPIO_Pin_11  ((uint16_t)0x0800)//0000100000000000第12引脚置1(对应的是BSRR和BRR寄存器的16位)
    8 N. Z; z9 V) t( a9 n4 t
  17. #define GPIO_Pin_12  ((uint16_t)0x1000)//0001000000000000第13引脚置1(对应的是BSRR和BRR寄存器的16位). v5 n" L0 m! Z, ?7 I. a2 Z
  18. #define GPIO_Pin_13  ((uint16_t)0x2000)//0010000000000000第14引脚置1(对应的是BSRR和BRR寄存器的16位)9 m. r, }% ~6 M+ o! z% F
  19. #define GPIO_Pin_14  ((uint16_t)0x4000)//0100000000000000第15引脚置1(对应的是BSRR和BRR寄存器的16位)
      F# y% V6 z6 _' ]
  20. #define GPIO_Pin_15  ((uint16_t)0x8000)//1000000000000000第16引脚置1(对应的是BSRR和BRR寄存器的16位)
    4 H) K; z& l' {! _9 e
  21. #define GPIO_Pin_All ((uint16_t)0xFFFF)//1111111111111111
    # P# S0 L8 M5 J" Y
  22. % @- u- z. D9 ~9 {* d* p
  23. 4 g+ V' G5 x7 \( {  Y% e- I
  24. #define RCC_APB2Periph_AFIO   ((uint32_t)0x00000001)! V/ U4 |. {) N  j$ {; p$ b1 N7 e; L
  25. #define RCC_APB2Periph_GPIOA  ((uint32_t)0x00000004)
    . r& T, p# L7 x8 ?
  26. #define RCC_APB2Periph_GPIOB  ((uint32_t)0x00000008)! z. H: P- K) T4 a1 H; v; I
  27. #define RCC_APB2Periph_GPIOC  ((uint32_t)0x00000010). a  A# Z. j4 V) h- y5 T; v" j
  28. #define RCC_APB2Periph_GPIOD  ((uint32_t)0x00000020)//这个是0000000000010000   主要是为了配合时钟的16位(其中第5位是IO口D的使能时钟位)1 F. }1 H( ]0 t- U8 M
  29. /***************GPIOD**********/- `( O/ s1 F4 M7 P& r, i
  30. typedef struct 2 }7 b. k, R5 _1 t2 p9 o
  31. {
    - a6 u7 [) N7 J7 R* W% h4 q2 `
  32.    _IO uint32_t CRL;//端口配置低寄存器! s4 R( i0 P  k! q5 i/ t: a  e
  33.    _IO uint32_t CRH;//端口配置高寄存器- T% F5 g5 g, y! e0 \3 b
  34.    _IO uint32_t IDR;//端口输入数据寄存器$ b: ?; K/ \, G7 `3 Y/ D3 M  p" [
  35.    _IO uint32_t ODR;//端口输出数据寄存器
    & O1 K6 N) n  o" B% A2 d3 Z
  36.    _IO uint32_t BSRR;//端口位设置/清除寄存器
    & h- ]( m$ L  h1 _0 L) j1 V
  37.    _IO uint32_t BRR;//端口位清除寄存器8 v7 \, [4 C, x+ I
  38.    _IO uint32_t LCKR;//端口配置锁定寄存器$ X% T+ O9 ]! I) T. J' W* x
  39. }GPIO_TypeDef;8 x2 g5 o/ B" H" E

  40.   q% f/ x( a1 F. G& z5 n+ L4 M" f
  41. typedef struct ( {( d+ P' C% L. z
  42. {! h9 [# v" |! s$ w& |
  43.    _IO uint32_t CR;//时钟控制寄存器% Y: f. p, h4 A4 k
  44.    _IO uint32_t CFGR;//时钟配置寄存器
    ! R( y9 t& o- {6 e  U+ [5 |# j
  45.    _IO uint32_t CIR;//时钟中断寄存器3 Q; m' V1 _  U8 o
  46.    _IO uint32_t APB2RSTR;//APB2外设复位寄存器
    / B+ u; ?+ q" p, c
  47.    _IO uint32_t APB1RSTR;//APB1外设复位寄存器4 `7 ]! d3 @) P/ s$ ^
  48.    _IO uint32_t AHBENR;//AHB外设时钟使能寄存器
    + o' A; J5 b6 Z# n+ U' I/ b
  49.    _IO uint32_t APB2ENR;//APB2外设时钟使能寄存器' B! M8 u3 ~5 L
  50.    _IO uint32_t APB1ENR;//APB1外设时钟使能寄存器/ {4 k6 y. t- Y9 h. b* H$ L  c$ H
  51.    _IO uint32_t BDCR;//备份域控制寄存器
    ! D+ n, V% z6 a
  52.    _IO uint32_t CSR;//控制/状态寄存器
    ! V, [* a1 P, c; S& {
  53.    _IO uint32_t AHBRSTR;//AHB外设时钟复位寄存器4 p& a, q! A, ?6 Y* e- F' j7 m
  54.    _IO uint32_t CFGR2;//时钟配置寄存器2
    ; H2 S  w3 r% d( _4 j
  55. }RCC_TypeDef; 6 E. E1 K+ E7 _: X
  56. typedef struct
    , l4 M; g2 g+ E) N  Y- p% B& H4 N
  57. {0 V( m7 V( W$ }$ ^0 Y
  58.    _IO uint32_t ACR;//闪存访问控制寄存器( h4 t8 l3 `6 c9 T" E
  59.    _IO uint32_t KEYR;//FPEC键寄存器+ u" G7 K5 @5 e
  60.    _IO uint32_t OPTKEYR;//闪存OPTKEY寄存器1 C  X7 v( m3 L5 s% Z3 [+ }0 U* Q
  61.    _IO uint32_t SR;//闪存状态寄存器
    0 H* {3 i. Q$ x0 Y7 S) B: b
  62.    _IO uint32_t CR;//闪存控制寄存器
    % c( Z! {" O% V. E1 w+ w4 ^1 k4 R
  63.    _IO uint32_t AR;//闪存地址寄存器0 `4 r* ?3 c( f) l! ?
  64.    _IO uint32_t RESERVED;//保留区
    , i4 S- `9 S: c
  65.    _IO uint32_t OBR;//选择字节寄存器
    * m3 f6 e/ [1 w* ?
  66.    _IO uint32_t WRPR;//写保护寄存器
    . }2 I  b4 r+ Z) J/ Q" D% E
  67. }FLASH_TypeDef;
    . g) V" I0 g4 _# _! v
  68. / K! K  v( H3 t5 V( h+ |& l. y
  69. /***********GPIO管脚的内存地址***********/6 B) r4 V  L) [4 I, R+ W
  70. #define PERIPH_BASE     ((uint32_t)0x40000000)
    % _# l; \1 t* V0 |$ T0 T
  71. #define APB2PERIPH_BASE (PERIPH_BASE+0x10000)
    + W# V/ X# ~( Z( ]0 y. @
  72. #define GPIOD_BASE      (APB2PERIPH_BASE+0x1400)! t9 S2 k7 W6 s$ ?$ ^' U1 D
  73. #define GPIOD           ((GPIO_TypeDef *)GPIOD_BASE)9 r; F+ s9 s! _, }0 T( W( N' ]0 K

  74. + h1 |1 X- J0 {
  75. /**********RCC时钟***********************/& P9 B" C: D  f) M1 P+ I
  76. #define AHBPERIPH_BASE  (PERIPH_BASE+0x20000)
    ( ^. S% i/ M4 `& b
  77. #define RCC_BASE        (AHBPERIPH_BASE+0x1000)
    - D: }9 \2 G$ J9 E$ x4 V7 Y; ]
  78. #define RCC             ((RCC_TypeDef *)RCC_BASE)8 A- ^7 z5 U2 |! O) e, a

  79. 8 P! a) @( f& v8 ]( L% l9 d  o* \1 @
  80. - {9 I9 n6 C, z+ F7 `! E! G
  81. #define APB1PERIPH_BASE    PERIPH_BASE
    , X, ^* t" o9 b! n
  82. #define APB2PERIPH_BASE    (PERIPH_BASE + 0x10000)
    1 S1 M5 k+ P! C
  83. #define AHBPERIPH_BASE     (PERIPH_BASE + 0x20000)
    ! l* A7 Y' N# V
  84. #define FLASH_R_BASE       (AHBPERIPH_BASE + 0x2000)
    $ r% G# a) V# D. t2 c9 Z
  85. #define FLASH              ((FLASH_TypeDef *)FLASH_R_BASE)
    8 i7 K7 {7 }: o/ d/ r

  86. 6 q$ L7 m2 [5 ?4 n: B) c
  87. void Delay(uint32_t nCount)8 j& F' }. Q6 ^% W& ~# Z2 J
  88. {
    $ N8 J1 Y* f6 E2 M
  89.     for(;nCount!=0;nCount--);6 ~3 F0 `6 `7 T  e4 e3 R
  90. }
    / F4 r3 A9 L' e  n/ @( _  @
  91. int main(void)
    " Z  L+ Z5 e/ l5 p
  92. {
    " p4 a% r3 n2 Q' s
  93.    unsigned char sws;" [; T7 g3 F1 }4 |% e1 F3 |, N  f- E/ R
  94.    RCC->CR|=1<<16;//外部使能(HSE)打开) n6 \& Y1 C+ q
  95.    while(!(RCC->CR>>17));//等待硬件将外部使能置1
    3 n$ G' K) _3 v3 F: m) J/ b
  96.    /**********配置时钟*************/
    " @/ b& y$ n2 {; G5 c% a
  97.    RCC->CFGR2|=1<<6;//PREDIV2    5分频! H9 t* c6 O" u8 J0 Q! `
  98.    RCC->CFGR2|=6<<8;//PLL2MUL    8倍频
    7 u  Z* b. S3 }$ i5 Y4 {* {# B
  99.    RCC->CFGR2|=1<<16;//PLL2作为PREDIV1的时钟9 d- z- V3 q1 [; R6 r0 E
  100.    RCC->CR|=1<<26;//PLL2使能打开" H$ m9 S. o3 M8 l- g
  101.    while(!(RCC->CR>>27));//等待硬件将其置18 B! F+ m* }2 z: V+ g
  102.    RCC->CFGR2|=1<<2;//PREDIV1  5分频6 m  P- M0 ^8 F2 @/ f
  103.    RCC->CFGR|=1<<16;//PREDIV1 作为PLL的时钟: Z( M# d# A' |+ B1 a# ~& K; v
  104.    RCC->CFGR|=7<<18;//PLLMUL  4倍   
    : T# k5 a6 B/ `1 S; G+ b
  105.    RCC->CR|=1<<24;//PLL 使能打开' g: ?3 N7 d6 h* _' I* Y1 d
  106.    while(!(RCC->CR>>25));//等待 硬件将其置1
复制代码

FLASH_ACR寄存器

FLASH_ACR寄存器

时钟书

时钟书
' m$ {" x  c  a0 q+ a
在这里我把我遇到的问题说一下,大家也许会遇到;
; o5 O2 [. G3 C" G% t6 L# q1:有关FLASH寄存器的查找,大家可以查找百度。8 Y/ N& u+ j  q6 L
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;% X. t, m+ [# @' S. s* F$ y
  2.    RCC->CFGR|=1<<1;//选择PLLCK 作为系统时钟
    - @  W) k+ D8 s' r( E/ z
  3.    RCC->APB2ENR |= RCC_APB2Periph_GPIOD;//使GPIO时钟使能启动       
    ) h) }2 G) X' `+ v2 t2 T" G  X. s% ]
  4.    GPIOD->CRL |=  0x00000300;//Pin2引脚推免的形式以最大的50MHZ输出
    , i, f: s; d. a- [0 R6 B  P
  5.    while (1)
    2 h5 K  q9 f" `# L/ S6 t
  6.    {        : N7 Z! j& e) @+ O* T# ]
  7.                   GPIOD->BRR = GPIO_Pin_2;//使第二引脚输出0(低电平)
    / Z9 A; f4 l5 d( U1 N8 \
  8.                 Delay(0x2FFFFF);8 p' {8 O9 _4 x2 Z& N7 v7 l
  9.                 GPIOD->BSRR = GPIO_Pin_2;//使第二引脚输出1(高电平)' A' m$ R) u2 v1 O# Q
  10.                 Delay(0x2FFFFF);4 Z4 s0 u# z" l$ k" Q) g
  11.           }
    ' x$ A- }8 ~2 l8 f% M1 |
  12. }, o/ y! Y8 F9 v1 R; F: D

  13. 6 x% z, d$ q' H# M
  14. ; E4 X# N3 E: l8 b6 V/ p4 ^

  15. 3 N; G8 H  B; B

  16. ! o1 u, Y. Y  T% D4 S8 a$ p4 F
  17. 0 r, x, y6 P( V/ D
复制代码
在路上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……- C. a% r9 _" l2 Z
andypanfan 回答时间:2016-11-1 09:22:28
assssdz 回答时间:2016-11-1 20:32:33
:(
原田夜舞love 回答时间:2016-11-1 22:07:07
谢谢楼主分享
12下一页

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版