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

自己调制频率让LED亮闪

[复制链接]
在路上11111111 发布时间:2016-10-30 19:10
本帖最后由 在路上11111111 于 2016-10-30 19:23 编辑 4 B/ \# l2 j. ]0 p0 x( n
  1. #define _IO volatile
    7 w+ [7 q# D. A
  2. typedef unsigned int uint32_t;
    ! p- Q) m- S8 H& j# u' A4 i' ^
  3. typedef _IO uint32_t vu32;
    8 {' J- ]8 f$ F. Q* ^
  4. typedef unsigned short int uint16_t;+ I- o' z- {7 a  S( s
  5. #define GPIO_Pin_0   ((uint16_t)0x0001)//0000000000000001第一引脚置1(对应的是BSRR和BRR寄存器的16位)
    , ]% F8 C: b6 `7 P
  6. #define GPIO_Pin_1   ((uint16_t)0x0002)//0000000000000010第二引脚置1(对应的是BSRR和BRR寄存器的16位)
    3 x! s) S; |7 {. i0 t/ j
  7. #define GPIO_Pin_2   ((uint16_t)0x0004)//0000000000000100第三引脚置1(对应的是BSRR和BRR寄存器的16位)5 e, y, R; E" |$ v$ |  L
  8. #define GPIO_Pin_3   ((uint16_t)0x0008)//0000000000001000第四引脚置1(对应的是BSRR和BRR寄存器的16位)- E/ J7 Q" D2 x5 n* H; B. o
  9. #define GPIO_Pin_4   ((uint16_t)0x0010)//0000000000010000第五引脚置1(对应的是BSRR和BRR寄存器的16位)
    . D0 l$ b4 I9 f7 J6 v! o" y8 i0 P
  10. #define GPIO_Pin_5   ((uint16_t)0x0020)//0000000000100000第六引脚置1(对应的是BSRR和BRR寄存器的16位)
    8 J, L5 _2 a  H" \( i& r: B
  11. #define GPIO_Pin_6   ((uint16_t)0x0040)//0000000001000000第七引脚置1(对应的是BSRR和BRR寄存器的16位)) o+ F0 h! ]( x: T
  12. #define GPIO_Pin_7   ((uint16_t)0x0080)//0000000010000000第八引脚置1(对应的是BSRR和BRR寄存器的16位)/ L$ p* M- z, U0 b
  13. #define GPIO_Pin_8   ((uint16_t)0x0100)//0000000100000000第九引脚置1(对应的是BSRR和BRR寄存器的16位)
    , N+ }" b! Q) i& c6 Y7 v
  14. #define GPIO_Pin_9   ((uint16_t)0x0200)//0000001000000000第十引脚置1(对应的是BSRR和BRR寄存器的16位)
    0 x9 K! m% g* c9 V
  15. #define GPIO_Pin_10  ((uint16_t)0x0400)//0000010000000000第11引脚置1(对应的是BSRR和BRR寄存器的16位)
    , ], H( G7 w9 |
  16. #define GPIO_Pin_11  ((uint16_t)0x0800)//0000100000000000第12引脚置1(对应的是BSRR和BRR寄存器的16位)
    : r5 h. `7 P% u! q
  17. #define GPIO_Pin_12  ((uint16_t)0x1000)//0001000000000000第13引脚置1(对应的是BSRR和BRR寄存器的16位)8 H1 G9 I9 B/ y$ ]* ~  I9 q
  18. #define GPIO_Pin_13  ((uint16_t)0x2000)//0010000000000000第14引脚置1(对应的是BSRR和BRR寄存器的16位)7 o. a% U/ d! N$ a. i
  19. #define GPIO_Pin_14  ((uint16_t)0x4000)//0100000000000000第15引脚置1(对应的是BSRR和BRR寄存器的16位)
    % N$ ?8 f5 x1 m: X$ q0 S- Y" r
  20. #define GPIO_Pin_15  ((uint16_t)0x8000)//1000000000000000第16引脚置1(对应的是BSRR和BRR寄存器的16位)  ]0 {7 Q2 L9 ?( [
  21. #define GPIO_Pin_All ((uint16_t)0xFFFF)//1111111111111111
    1 d* r2 o; p9 S' S. M5 [* S

  22. 3 s$ O9 u9 u* @' D

  23. , O" ]; O: I/ c
  24. #define RCC_APB2Periph_AFIO   ((uint32_t)0x00000001)
    8 H6 E" n  b; h
  25. #define RCC_APB2Periph_GPIOA  ((uint32_t)0x00000004)
    0 W1 Z5 q) p9 _" {) x1 S; @
  26. #define RCC_APB2Periph_GPIOB  ((uint32_t)0x00000008)
    ) b8 c) E# [, H5 W& O# ~: b* ?
  27. #define RCC_APB2Periph_GPIOC  ((uint32_t)0x00000010)* I  g" g" u$ e% q+ l: s
  28. #define RCC_APB2Periph_GPIOD  ((uint32_t)0x00000020)//这个是0000000000010000   主要是为了配合时钟的16位(其中第5位是IO口D的使能时钟位)3 S0 ^9 s6 o0 k/ }
  29. /***************GPIOD**********/
    9 h3 x8 X! A, R3 Z: f
  30. typedef struct
    6 p5 L- V; N. q9 b; N* w% U
  31. {
    - G* K: J3 I  K' D$ @8 b% h$ G
  32.    _IO uint32_t CRL;//端口配置低寄存器& O1 M- r  |) F% z
  33.    _IO uint32_t CRH;//端口配置高寄存器
    1 P/ v+ j1 R+ ^8 P
  34.    _IO uint32_t IDR;//端口输入数据寄存器0 N% g* r1 E5 v0 J9 P3 u
  35.    _IO uint32_t ODR;//端口输出数据寄存器
    / |+ h3 l* j! T7 K5 _
  36.    _IO uint32_t BSRR;//端口位设置/清除寄存器& z# x# ~4 q# @7 L  P6 x
  37.    _IO uint32_t BRR;//端口位清除寄存器
    4 J5 h8 v! \& j/ t
  38.    _IO uint32_t LCKR;//端口配置锁定寄存器5 ^! i! g2 J  T5 C9 x+ R; o- E
  39. }GPIO_TypeDef;( F$ b( V6 f+ t1 j

  40. 3 V( Q) q& l% J0 J, ~! t: G
  41. typedef struct + x1 r: {, q/ z% A9 A; U
  42. {7 I. c: F' ?; T; Y* n5 u
  43.    _IO uint32_t CR;//时钟控制寄存器
    # H- F- z' M: ^3 O: Y8 j1 D3 _
  44.    _IO uint32_t CFGR;//时钟配置寄存器
    & \0 l" f; t8 n: a
  45.    _IO uint32_t CIR;//时钟中断寄存器
    * N# o  P+ N$ H( R# Q0 ~
  46.    _IO uint32_t APB2RSTR;//APB2外设复位寄存器
    $ T5 a1 d! o1 l
  47.    _IO uint32_t APB1RSTR;//APB1外设复位寄存器
    2 Q# l3 c( J8 }/ W2 P5 ]
  48.    _IO uint32_t AHBENR;//AHB外设时钟使能寄存器
    # X- x" w! J  s" Q3 ~
  49.    _IO uint32_t APB2ENR;//APB2外设时钟使能寄存器
    . Q2 O7 m0 O0 j
  50.    _IO uint32_t APB1ENR;//APB1外设时钟使能寄存器
    % _8 G& u/ v% {7 W- l; `
  51.    _IO uint32_t BDCR;//备份域控制寄存器3 v& P* ]3 V0 l) {
  52.    _IO uint32_t CSR;//控制/状态寄存器
    6 Q- D! @! I; P2 E
  53.    _IO uint32_t AHBRSTR;//AHB外设时钟复位寄存器
    3 H% @1 R7 w/ h
  54.    _IO uint32_t CFGR2;//时钟配置寄存器2
    8 g% m- d6 b) i3 h
  55. }RCC_TypeDef; 9 v! ^& U5 m% z* Q/ u
  56. typedef struct
    5 R* E6 ^: A% h, r7 n( z
  57. {2 \, d4 W/ ^3 t# h" r
  58.    _IO uint32_t ACR;//闪存访问控制寄存器# C, L# u, I* K6 J! s9 z8 H. H" a
  59.    _IO uint32_t KEYR;//FPEC键寄存器
    7 P! a) Z: J7 V% r5 l$ U4 i
  60.    _IO uint32_t OPTKEYR;//闪存OPTKEY寄存器
    ' l/ B( B. o- d' A
  61.    _IO uint32_t SR;//闪存状态寄存器
    " i- Z9 [: x$ ]" N6 ~, Q
  62.    _IO uint32_t CR;//闪存控制寄存器
    ! H* v% u' m  S% f
  63.    _IO uint32_t AR;//闪存地址寄存器' _" C  F- k  }7 c8 V! Y; t4 y
  64.    _IO uint32_t RESERVED;//保留区
    8 m5 \4 Z# A, J& p! |/ y6 S3 B
  65.    _IO uint32_t OBR;//选择字节寄存器" h/ W; v( Q( f- i$ M
  66.    _IO uint32_t WRPR;//写保护寄存器
    $ a, h# ^: K; |) t
  67. }FLASH_TypeDef;
    , U+ ^% |% [8 ^$ \
  68. - m+ ]2 X. b0 k$ T; f
  69. /***********GPIO管脚的内存地址***********/
    ! d8 A* }5 f' x( x: I4 R" P  j
  70. #define PERIPH_BASE     ((uint32_t)0x40000000)
    ) n: W' G8 M! I7 p3 m8 Z6 G% d+ [$ Z
  71. #define APB2PERIPH_BASE (PERIPH_BASE+0x10000): T9 ?/ _. V& u1 t# h! M( @, X
  72. #define GPIOD_BASE      (APB2PERIPH_BASE+0x1400)# k$ H* f$ n6 L; c9 J6 l
  73. #define GPIOD           ((GPIO_TypeDef *)GPIOD_BASE)3 q' q8 `/ Y' W# g7 O& F

  74. $ `' C' P/ _' v: w
  75. /**********RCC时钟***********************/4 F$ |' r  t. H; j: i, ~
  76. #define AHBPERIPH_BASE  (PERIPH_BASE+0x20000)# S7 m+ g+ W  m8 f, L6 l
  77. #define RCC_BASE        (AHBPERIPH_BASE+0x1000)
    ) r/ G# P- _  ^+ H0 h
  78. #define RCC             ((RCC_TypeDef *)RCC_BASE)" @+ n7 c* T& x' {

  79. & k: W4 _4 v: s+ R( D* {* M  s/ e
  80. 3 w  D: l. ?0 _
  81. #define APB1PERIPH_BASE    PERIPH_BASE
    2 z' D" `% x) m' I2 ]
  82. #define APB2PERIPH_BASE    (PERIPH_BASE + 0x10000)6 M9 |4 F5 l6 E9 K, E9 Z% [
  83. #define AHBPERIPH_BASE     (PERIPH_BASE + 0x20000)& E' W8 e9 j+ X: u: E3 A
  84. #define FLASH_R_BASE       (AHBPERIPH_BASE + 0x2000)' ~: G- Y, p9 j, A% @! s1 i6 \
  85. #define FLASH              ((FLASH_TypeDef *)FLASH_R_BASE) ' i9 ]  O& b0 F8 m: F- A) }4 t
  86. ) U/ Q# v3 R( t6 e$ I6 k
  87. void Delay(uint32_t nCount)- c7 a9 P' N% e3 m7 G) t# x
  88. {+ L7 ^; X, t5 u( s- q% ?9 q) p- n" y
  89.     for(;nCount!=0;nCount--);
    9 |) u: T! ?4 a5 u7 |
  90. }4 x( `5 W: ^0 ?  a
  91. int main(void)- b2 K4 p* ?* U
  92. {. q, ^: v2 G$ E6 {
  93.    unsigned char sws;
    ( S& k0 p; D/ W, D4 q3 L+ V" Z0 y$ v4 U% m
  94.    RCC->CR|=1<<16;//外部使能(HSE)打开
    9 b: Y* \" D9 J1 B9 Q' J" h7 I
  95.    while(!(RCC->CR>>17));//等待硬件将外部使能置1
    * H8 r: a5 H) @3 {* i: l
  96.    /**********配置时钟*************/9 I( D- E% `& {5 u) G! Z
  97.    RCC->CFGR2|=1<<6;//PREDIV2    5分频9 h4 s8 O, G2 a, t+ C& J$ G
  98.    RCC->CFGR2|=6<<8;//PLL2MUL    8倍频" P- g4 x& t( I9 H+ @
  99.    RCC->CFGR2|=1<<16;//PLL2作为PREDIV1的时钟" M9 O" @7 F. N# b* L9 ?
  100.    RCC->CR|=1<<26;//PLL2使能打开9 ^1 ^: h* j# C( u; B4 v
  101.    while(!(RCC->CR>>27));//等待硬件将其置1
      B. B, y! t0 ?* R: G  z
  102.    RCC->CFGR2|=1<<2;//PREDIV1  5分频
    * o: J; c2 V# S8 N4 `
  103.    RCC->CFGR|=1<<16;//PREDIV1 作为PLL的时钟7 o: v9 l0 d" ^5 W% L
  104.    RCC->CFGR|=7<<18;//PLLMUL  4倍    ( P' Z& ?) M3 l5 I( N. ]  C
  105.    RCC->CR|=1<<24;//PLL 使能打开
    $ k) P4 W, w" F6 l, A6 o% U. y* I
  106.    while(!(RCC->CR>>25));//等待 硬件将其置1
复制代码

FLASH_ACR寄存器

FLASH_ACR寄存器

时钟书

时钟书
  B- ]+ g1 x# T$ M2 y1 p6 m% _5 S
在这里我把我遇到的问题说一下,大家也许会遇到;
) u; `9 ~/ ?% h& V1:有关FLASH寄存器的查找,大家可以查找百度。# B2 K$ J! y9 }
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;
      S# \$ {' R8 ^3 F( a. T% @. D7 r
  2.    RCC->CFGR|=1<<1;//选择PLLCK 作为系统时钟
    ) A# v) @  A  r& i! v7 F4 {
  3.    RCC->APB2ENR |= RCC_APB2Periph_GPIOD;//使GPIO时钟使能启动        % G4 N- L2 z3 y. q
  4.    GPIOD->CRL |=  0x00000300;//Pin2引脚推免的形式以最大的50MHZ输出) H* \3 r7 N2 y3 X" V9 H" O6 u
  5.    while (1)) I+ f- X! q, D4 i
  6.    {       
    7 E1 q' g& L$ J4 O  v5 j
  7.                   GPIOD->BRR = GPIO_Pin_2;//使第二引脚输出0(低电平) ! e6 E7 j) V6 [/ R$ P
  8.                 Delay(0x2FFFFF);
    / F0 g+ G  q6 a* r7 ~& Z$ `7 I1 I: f" X
  9.                 GPIOD->BSRR = GPIO_Pin_2;//使第二引脚输出1(高电平)
    ( u1 T: w, E$ M
  10.                 Delay(0x2FFFFF);
    0 W" `$ [% ]1 e$ |5 }0 |
  11.           }
    " m5 U# {& @* G+ r7 |. K& V
  12. }2 H% R& b0 Z2 h# p9 D

  13.   _& p( f- \) E- S

  14.   m# j' |4 }+ L' H1 l

  15. " Z, q( d: I* G* q1 \. d

  16. * l, O9 M8 b/ i4 r( N
  17. ( n2 I# ?; Q: Q5 i$ A# n! C
复制代码
在路上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……8 |- s5 w( `7 X, @  c  f) \; G
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 手机版