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

自己调制频率让LED亮闪

[复制链接]
在路上11111111 发布时间:2016-10-30 19:10
本帖最后由 在路上11111111 于 2016-10-30 19:23 编辑
& Z8 r* C0 z8 y- I0 S
  1. #define _IO volatile1 w% h" d0 n7 X$ R) U' i
  2. typedef unsigned int uint32_t;  _- r( R, K/ Z8 ]
  3. typedef _IO uint32_t vu32;
    / h, s; u+ _; u$ [0 R+ u/ O0 @
  4. typedef unsigned short int uint16_t;
    # Z! v; S3 a( K: W, W, F4 U
  5. #define GPIO_Pin_0   ((uint16_t)0x0001)//0000000000000001第一引脚置1(对应的是BSRR和BRR寄存器的16位)
    ; a) R3 z& f; I6 i* N/ M
  6. #define GPIO_Pin_1   ((uint16_t)0x0002)//0000000000000010第二引脚置1(对应的是BSRR和BRR寄存器的16位)
    8 H6 d- s  p7 o
  7. #define GPIO_Pin_2   ((uint16_t)0x0004)//0000000000000100第三引脚置1(对应的是BSRR和BRR寄存器的16位)( R& y, h. K$ E5 N
  8. #define GPIO_Pin_3   ((uint16_t)0x0008)//0000000000001000第四引脚置1(对应的是BSRR和BRR寄存器的16位)
    " f# T4 Z! e4 r, y' q5 y& B
  9. #define GPIO_Pin_4   ((uint16_t)0x0010)//0000000000010000第五引脚置1(对应的是BSRR和BRR寄存器的16位)
    6 a3 f% M  \$ c( F( l/ G- D# z3 I
  10. #define GPIO_Pin_5   ((uint16_t)0x0020)//0000000000100000第六引脚置1(对应的是BSRR和BRR寄存器的16位)9 a+ Q# ]% L& T, i; W
  11. #define GPIO_Pin_6   ((uint16_t)0x0040)//0000000001000000第七引脚置1(对应的是BSRR和BRR寄存器的16位)
    # g9 Z2 j1 r* _' m6 o9 Z( a3 L# n
  12. #define GPIO_Pin_7   ((uint16_t)0x0080)//0000000010000000第八引脚置1(对应的是BSRR和BRR寄存器的16位)# x# _6 Z9 Z9 F
  13. #define GPIO_Pin_8   ((uint16_t)0x0100)//0000000100000000第九引脚置1(对应的是BSRR和BRR寄存器的16位)$ j$ o$ `  u* }7 i" P. y
  14. #define GPIO_Pin_9   ((uint16_t)0x0200)//0000001000000000第十引脚置1(对应的是BSRR和BRR寄存器的16位)
    * z& Z8 Q0 y, N. \5 S2 t
  15. #define GPIO_Pin_10  ((uint16_t)0x0400)//0000010000000000第11引脚置1(对应的是BSRR和BRR寄存器的16位)
    & b, S$ ~! U7 Z# M9 o$ Z/ E
  16. #define GPIO_Pin_11  ((uint16_t)0x0800)//0000100000000000第12引脚置1(对应的是BSRR和BRR寄存器的16位)# Q2 [) m. D  [7 M$ \, O( M# _
  17. #define GPIO_Pin_12  ((uint16_t)0x1000)//0001000000000000第13引脚置1(对应的是BSRR和BRR寄存器的16位). I' a5 f7 ~. ~5 H. c3 a% U3 P
  18. #define GPIO_Pin_13  ((uint16_t)0x2000)//0010000000000000第14引脚置1(对应的是BSRR和BRR寄存器的16位)
    : G& e' ]: G3 x1 u
  19. #define GPIO_Pin_14  ((uint16_t)0x4000)//0100000000000000第15引脚置1(对应的是BSRR和BRR寄存器的16位)4 ?4 J  J4 a2 U2 _5 S
  20. #define GPIO_Pin_15  ((uint16_t)0x8000)//1000000000000000第16引脚置1(对应的是BSRR和BRR寄存器的16位)$ i% z8 d( E2 C
  21. #define GPIO_Pin_All ((uint16_t)0xFFFF)//1111111111111111( h0 A: ]3 N9 l# c9 T

  22. 8 v; f, [2 S5 Z+ N! v1 c: w

  23. % b4 h" R1 m4 @: |. \! ~  {
  24. #define RCC_APB2Periph_AFIO   ((uint32_t)0x00000001)
    7 L8 N1 W( M2 ]
  25. #define RCC_APB2Periph_GPIOA  ((uint32_t)0x00000004)0 a3 n, w; ]4 s$ h& o1 Z9 P
  26. #define RCC_APB2Periph_GPIOB  ((uint32_t)0x00000008)
    4 k1 D  ~$ K* k6 X; O8 ?
  27. #define RCC_APB2Periph_GPIOC  ((uint32_t)0x00000010)
    ; V4 L% H5 v% M2 c
  28. #define RCC_APB2Periph_GPIOD  ((uint32_t)0x00000020)//这个是0000000000010000   主要是为了配合时钟的16位(其中第5位是IO口D的使能时钟位)
    * b+ q  i- c! u% q, S. N) }
  29. /***************GPIOD**********/
    $ E: m7 `' @4 K5 j8 A0 F
  30. typedef struct , M% X: `- F  o/ q4 B
  31. {
    ; A; D, ~, f9 u' I7 `
  32.    _IO uint32_t CRL;//端口配置低寄存器
    6 H+ U' y: Q  ^  d: Y4 a
  33.    _IO uint32_t CRH;//端口配置高寄存器! P6 K# k( G2 }; m) S: Q3 P
  34.    _IO uint32_t IDR;//端口输入数据寄存器8 C5 ?0 C/ }( g" k6 f
  35.    _IO uint32_t ODR;//端口输出数据寄存器3 g. ~; y0 e9 P
  36.    _IO uint32_t BSRR;//端口位设置/清除寄存器8 V- g0 m, `9 |3 K, Z, j9 Z
  37.    _IO uint32_t BRR;//端口位清除寄存器
    * Y$ L! o% Q! ?* ]+ b% I5 H
  38.    _IO uint32_t LCKR;//端口配置锁定寄存器
    & H' x, l. i$ t
  39. }GPIO_TypeDef;! B. V. l4 A) o! ?% w  @
  40. ! M( n& M7 f/ N9 |. ?* v/ j
  41. typedef struct
    % y6 Q1 E* C, h, ~1 A+ d
  42. {+ @( w, G1 n7 v- C# l- o; }2 Q6 z
  43.    _IO uint32_t CR;//时钟控制寄存器
    - E; w& u, D0 T. W4 b6 x
  44.    _IO uint32_t CFGR;//时钟配置寄存器& W% w* G! b9 ?* d. t! T6 U( M
  45.    _IO uint32_t CIR;//时钟中断寄存器0 e5 K' M/ c& R- f+ L4 F$ ]
  46.    _IO uint32_t APB2RSTR;//APB2外设复位寄存器
    ) H/ w9 v% f! |3 T
  47.    _IO uint32_t APB1RSTR;//APB1外设复位寄存器
    3 b# W9 W) a- g1 S- X6 |
  48.    _IO uint32_t AHBENR;//AHB外设时钟使能寄存器
    0 f( w3 `8 B8 U+ i8 x
  49.    _IO uint32_t APB2ENR;//APB2外设时钟使能寄存器
      v' P3 p8 \6 U: d) s- H
  50.    _IO uint32_t APB1ENR;//APB1外设时钟使能寄存器
    ! h/ K1 M, B% t; r( P3 k
  51.    _IO uint32_t BDCR;//备份域控制寄存器1 _0 Q, L3 y2 o- `! m1 {
  52.    _IO uint32_t CSR;//控制/状态寄存器
    : E8 b7 t9 |* g2 v1 T
  53.    _IO uint32_t AHBRSTR;//AHB外设时钟复位寄存器
    - x' l: [) t6 V/ e1 \
  54.    _IO uint32_t CFGR2;//时钟配置寄存器2  |1 K  T/ b) I9 n( V8 R8 q8 f  G5 `
  55. }RCC_TypeDef; : y4 o2 u# J- S' Q) ^- E7 o1 C
  56. typedef struct + m3 L! a/ J! S: @0 P; V- e* w
  57. {  w8 i6 k: t8 G" j, ]( Z& V( ]
  58.    _IO uint32_t ACR;//闪存访问控制寄存器
    $ _  v. S. ~( K! J
  59.    _IO uint32_t KEYR;//FPEC键寄存器8 q# D" Y% S6 I( I" \# a* F! k
  60.    _IO uint32_t OPTKEYR;//闪存OPTKEY寄存器9 ]' @' x: N# I3 R
  61.    _IO uint32_t SR;//闪存状态寄存器
    * M$ ?: G: ?  v" l
  62.    _IO uint32_t CR;//闪存控制寄存器" r' }5 e7 Y; y/ a; b5 _' F1 v1 A& q
  63.    _IO uint32_t AR;//闪存地址寄存器1 U' B1 S  W1 p8 q! l$ A
  64.    _IO uint32_t RESERVED;//保留区9 f# t# D3 a. ]+ ~+ m' n( o
  65.    _IO uint32_t OBR;//选择字节寄存器) I6 ^1 {) Q$ Q  f# n9 s- h5 [8 x
  66.    _IO uint32_t WRPR;//写保护寄存器
    1 V# p' S  C+ m& C2 W. {( x
  67. }FLASH_TypeDef;
    ! u% X) A' n0 W$ P

  68. , E6 C! Q5 s( y( t
  69. /***********GPIO管脚的内存地址***********/) h5 ]( B* G/ a* B- h
  70. #define PERIPH_BASE     ((uint32_t)0x40000000)$ ?+ W5 c1 }3 H2 z0 s. \
  71. #define APB2PERIPH_BASE (PERIPH_BASE+0x10000)
    * d9 ^/ u+ M0 d- J" I
  72. #define GPIOD_BASE      (APB2PERIPH_BASE+0x1400)
    & _& S7 \' o) O2 t' n6 r; L" J
  73. #define GPIOD           ((GPIO_TypeDef *)GPIOD_BASE)& Y: x' c! ?( K, Z) w; m4 C

  74. 5 q' U# L4 T; u1 l- W
  75. /**********RCC时钟***********************/
    7 |, N4 q, G$ ~9 }
  76. #define AHBPERIPH_BASE  (PERIPH_BASE+0x20000): f: X# e) \$ ~
  77. #define RCC_BASE        (AHBPERIPH_BASE+0x1000)6 T5 r% h' y# n. t7 n, k
  78. #define RCC             ((RCC_TypeDef *)RCC_BASE)
    / i2 x/ _1 e/ s( T. }$ |# k
  79. 2 ~0 B/ X0 {2 H# ~. s; @$ F5 Z

  80. 0 T. K1 a* S! `4 R! o
  81. #define APB1PERIPH_BASE    PERIPH_BASE
    " R+ @. r; y; U3 {5 w8 k5 X4 M
  82. #define APB2PERIPH_BASE    (PERIPH_BASE + 0x10000)
    1 p  v5 e( X* k, z" {( x
  83. #define AHBPERIPH_BASE     (PERIPH_BASE + 0x20000)
    " y0 r. m2 @+ O) e
  84. #define FLASH_R_BASE       (AHBPERIPH_BASE + 0x2000); a" N- P" ^4 U/ F$ `9 [
  85. #define FLASH              ((FLASH_TypeDef *)FLASH_R_BASE) & b+ X3 g0 l& }( ?

  86. * f3 `+ f; d) S, ], |& @2 G# k
  87. void Delay(uint32_t nCount)( H) i) W9 H  N' l$ R9 E% l
  88. {
    : F9 C- O! D- F
  89.     for(;nCount!=0;nCount--);2 M1 B. |8 M8 ]0 q* @
  90. }
    + S' E  a6 ]( f0 R/ c
  91. int main(void)6 }" M; ^0 g' ^" w* L
  92. {
    , l$ h' g. L- T3 ?& U$ s
  93.    unsigned char sws;
    & c1 d% {- Z4 J+ o' ^$ `; ~/ f
  94.    RCC->CR|=1<<16;//外部使能(HSE)打开
    8 s2 G! S# |' W" W% X3 D% t/ f7 ?
  95.    while(!(RCC->CR>>17));//等待硬件将外部使能置1
    2 W( n2 p, B, ?  J- x6 X8 ]
  96.    /**********配置时钟*************// u* _, A7 }# t' V9 ?5 L1 V+ ]
  97.    RCC->CFGR2|=1<<6;//PREDIV2    5分频
    4 M. m* U& V0 e- a5 r) W6 Y
  98.    RCC->CFGR2|=6<<8;//PLL2MUL    8倍频5 m, V; B$ W7 E" h
  99.    RCC->CFGR2|=1<<16;//PLL2作为PREDIV1的时钟1 z; @5 z+ m# j. B
  100.    RCC->CR|=1<<26;//PLL2使能打开. F. ]4 i- N1 p  r" A# b- h  x* L
  101.    while(!(RCC->CR>>27));//等待硬件将其置17 e6 R7 }9 @9 x# E+ z: a/ X
  102.    RCC->CFGR2|=1<<2;//PREDIV1  5分频, C7 e! ?5 n# o* D2 |
  103.    RCC->CFGR|=1<<16;//PREDIV1 作为PLL的时钟
    $ _/ y1 e0 y. @1 M+ o" J# u3 N
  104.    RCC->CFGR|=7<<18;//PLLMUL  4倍   
    3 Y; d+ y& P; o: {! \
  105.    RCC->CR|=1<<24;//PLL 使能打开
    * R6 h# C+ M& E  n  ~" w
  106.    while(!(RCC->CR>>25));//等待 硬件将其置1
复制代码

FLASH_ACR寄存器

FLASH_ACR寄存器

时钟书

时钟书

4 U, V6 c) S/ M0 Z, l) i/ e在这里我把我遇到的问题说一下,大家也许会遇到;
* \0 \- U" V# y8 z* u$ U# w% y+ }1:有关FLASH寄存器的查找,大家可以查找百度。) p1 v5 B# y& {- `5 W
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% a: S5 W* z! N; L8 Y/ }
  2.    RCC->CFGR|=1<<1;//选择PLLCK 作为系统时钟
    1 a1 v; ~* f5 U; @/ ~
  3.    RCC->APB2ENR |= RCC_APB2Periph_GPIOD;//使GPIO时钟使能启动        0 R5 ]6 x% I8 A8 ~# C
  4.    GPIOD->CRL |=  0x00000300;//Pin2引脚推免的形式以最大的50MHZ输出
    2 W% O7 c0 f: z0 p+ d( P7 X
  5.    while (1)0 f2 Q$ A( i8 p8 X2 M! {/ b
  6.    {        - d) @6 c' q$ V/ w6 k
  7.                   GPIOD->BRR = GPIO_Pin_2;//使第二引脚输出0(低电平) 4 x6 F! l. W# ~7 A- R" x
  8.                 Delay(0x2FFFFF);
    6 I8 {/ @& S9 A8 J3 d# A1 Q
  9.                 GPIOD->BSRR = GPIO_Pin_2;//使第二引脚输出1(高电平)( T9 F2 {" w* z& h2 s# J* o0 P7 o  Q
  10.                 Delay(0x2FFFFF);
    : m- b, V/ x0 M3 L5 z0 U: D& y/ R- A+ k) ~
  11.           }7 \6 T) f7 w* o6 W4 |0 O& _3 q
  12. }
    : Q+ p# P. J+ h% @

  13. . f7 q& B- t: v; c

  14. 1 w3 T% G( p$ f0 |4 i

  15. $ M: S) g4 z8 K$ g  s) ]8 ]* P8 j7 P

  16. 1 m6 s, a2 g  J& D
  17. 5 g6 E1 V$ N: S/ `
复制代码
在路上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……
6 k+ _( }2 I/ e1 D
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 手机版