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

自己调制频率让LED亮闪

[复制链接]
在路上11111111 发布时间:2016-10-30 19:10
本帖最后由 在路上11111111 于 2016-10-30 19:23 编辑
  1. #define _IO volatile
  2. typedef unsigned int uint32_t;
  3. typedef _IO uint32_t vu32;
  4. typedef unsigned short int uint16_t;
  5. #define GPIO_Pin_0   ((uint16_t)0x0001)//0000000000000001第一引脚置1(对应的是BSRR和BRR寄存器的16位)
  6. #define GPIO_Pin_1   ((uint16_t)0x0002)//0000000000000010第二引脚置1(对应的是BSRR和BRR寄存器的16位)
  7. #define GPIO_Pin_2   ((uint16_t)0x0004)//0000000000000100第三引脚置1(对应的是BSRR和BRR寄存器的16位)
  8. #define GPIO_Pin_3   ((uint16_t)0x0008)//0000000000001000第四引脚置1(对应的是BSRR和BRR寄存器的16位)
  9. #define GPIO_Pin_4   ((uint16_t)0x0010)//0000000000010000第五引脚置1(对应的是BSRR和BRR寄存器的16位)
  10. #define GPIO_Pin_5   ((uint16_t)0x0020)//0000000000100000第六引脚置1(对应的是BSRR和BRR寄存器的16位)
  11. #define GPIO_Pin_6   ((uint16_t)0x0040)//0000000001000000第七引脚置1(对应的是BSRR和BRR寄存器的16位)
  12. #define GPIO_Pin_7   ((uint16_t)0x0080)//0000000010000000第八引脚置1(对应的是BSRR和BRR寄存器的16位)
  13. #define GPIO_Pin_8   ((uint16_t)0x0100)//0000000100000000第九引脚置1(对应的是BSRR和BRR寄存器的16位)
  14. #define GPIO_Pin_9   ((uint16_t)0x0200)//0000001000000000第十引脚置1(对应的是BSRR和BRR寄存器的16位)
  15. #define GPIO_Pin_10  ((uint16_t)0x0400)//0000010000000000第11引脚置1(对应的是BSRR和BRR寄存器的16位)
  16. #define GPIO_Pin_11  ((uint16_t)0x0800)//0000100000000000第12引脚置1(对应的是BSRR和BRR寄存器的16位)
  17. #define GPIO_Pin_12  ((uint16_t)0x1000)//0001000000000000第13引脚置1(对应的是BSRR和BRR寄存器的16位)
  18. #define GPIO_Pin_13  ((uint16_t)0x2000)//0010000000000000第14引脚置1(对应的是BSRR和BRR寄存器的16位)
  19. #define GPIO_Pin_14  ((uint16_t)0x4000)//0100000000000000第15引脚置1(对应的是BSRR和BRR寄存器的16位)
  20. #define GPIO_Pin_15  ((uint16_t)0x8000)//1000000000000000第16引脚置1(对应的是BSRR和BRR寄存器的16位)
  21. #define GPIO_Pin_All ((uint16_t)0xFFFF)//1111111111111111


  22. #define RCC_APB2Periph_AFIO   ((uint32_t)0x00000001)
  23. #define RCC_APB2Periph_GPIOA  ((uint32_t)0x00000004)
  24. #define RCC_APB2Periph_GPIOB  ((uint32_t)0x00000008)
  25. #define RCC_APB2Periph_GPIOC  ((uint32_t)0x00000010)
  26. #define RCC_APB2Periph_GPIOD  ((uint32_t)0x00000020)//这个是0000000000010000   主要是为了配合时钟的16位(其中第5位是IO口D的使能时钟位)
  27. /***************GPIOD**********/
  28. typedef struct
  29. {
  30.    _IO uint32_t CRL;//端口配置低寄存器
  31.    _IO uint32_t CRH;//端口配置高寄存器
  32.    _IO uint32_t IDR;//端口输入数据寄存器
  33.    _IO uint32_t ODR;//端口输出数据寄存器
  34.    _IO uint32_t BSRR;//端口位设置/清除寄存器
  35.    _IO uint32_t BRR;//端口位清除寄存器
  36.    _IO uint32_t LCKR;//端口配置锁定寄存器
  37. }GPIO_TypeDef;

  38. typedef struct
  39. {
  40.    _IO uint32_t CR;//时钟控制寄存器
  41.    _IO uint32_t CFGR;//时钟配置寄存器
  42.    _IO uint32_t CIR;//时钟中断寄存器
  43.    _IO uint32_t APB2RSTR;//APB2外设复位寄存器
  44.    _IO uint32_t APB1RSTR;//APB1外设复位寄存器
  45.    _IO uint32_t AHBENR;//AHB外设时钟使能寄存器
  46.    _IO uint32_t APB2ENR;//APB2外设时钟使能寄存器
  47.    _IO uint32_t APB1ENR;//APB1外设时钟使能寄存器
  48.    _IO uint32_t BDCR;//备份域控制寄存器
  49.    _IO uint32_t CSR;//控制/状态寄存器
  50.    _IO uint32_t AHBRSTR;//AHB外设时钟复位寄存器
  51.    _IO uint32_t CFGR2;//时钟配置寄存器2
  52. }RCC_TypeDef;
  53. typedef struct
  54. {
  55.    _IO uint32_t ACR;//闪存访问控制寄存器
  56.    _IO uint32_t KEYR;//FPEC键寄存器
  57.    _IO uint32_t OPTKEYR;//闪存OPTKEY寄存器
  58.    _IO uint32_t SR;//闪存状态寄存器
  59.    _IO uint32_t CR;//闪存控制寄存器
  60.    _IO uint32_t AR;//闪存地址寄存器
  61.    _IO uint32_t RESERVED;//保留区
  62.    _IO uint32_t OBR;//选择字节寄存器
  63.    _IO uint32_t WRPR;//写保护寄存器
  64. }FLASH_TypeDef;

  65. /***********GPIO管脚的内存地址***********/
  66. #define PERIPH_BASE     ((uint32_t)0x40000000)
  67. #define APB2PERIPH_BASE (PERIPH_BASE+0x10000)
  68. #define GPIOD_BASE      (APB2PERIPH_BASE+0x1400)
  69. #define GPIOD           ((GPIO_TypeDef *)GPIOD_BASE)

  70. /**********RCC时钟***********************/
  71. #define AHBPERIPH_BASE  (PERIPH_BASE+0x20000)
  72. #define RCC_BASE        (AHBPERIPH_BASE+0x1000)
  73. #define RCC             ((RCC_TypeDef *)RCC_BASE)


  74. #define APB1PERIPH_BASE    PERIPH_BASE
  75. #define APB2PERIPH_BASE    (PERIPH_BASE + 0x10000)
  76. #define AHBPERIPH_BASE     (PERIPH_BASE + 0x20000)
  77. #define FLASH_R_BASE       (AHBPERIPH_BASE + 0x2000)
  78. #define FLASH              ((FLASH_TypeDef *)FLASH_R_BASE)

  79. void Delay(uint32_t nCount)
  80. {
  81.     for(;nCount!=0;nCount--);
  82. }
  83. int main(void)
  84. {
  85.    unsigned char sws;
  86.    RCC->CR|=1<<16;//外部使能(HSE)打开
  87.    while(!(RCC->CR>>17));//等待硬件将外部使能置1
  88.    /**********配置时钟*************/
  89.    RCC->CFGR2|=1<<6;//PREDIV2    5分频
  90.    RCC->CFGR2|=6<<8;//PLL2MUL    8倍频
  91.    RCC->CFGR2|=1<<16;//PLL2作为PREDIV1的时钟
  92.    RCC->CR|=1<<26;//PLL2使能打开
  93.    while(!(RCC->CR>>27));//等待硬件将其置1
  94.    RCC->CFGR2|=1<<2;//PREDIV1  5分频
  95.    RCC->CFGR|=1<<16;//PREDIV1 作为PLL的时钟
  96.    RCC->CFGR|=7<<18;//PLLMUL  4倍   
  97.    RCC->CR|=1<<24;//PLL 使能打开
  98.    while(!(RCC->CR>>25));//等待 硬件将其置1
复制代码

FLASH_ACR寄存器

FLASH_ACR寄存器

时钟书

时钟书

在这里我把我遇到的问题说一下,大家也许会遇到;
1:有关FLASH寄存器的查找,大家可以查找百度。
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;
  2.    RCC->CFGR|=1<<1;//选择PLLCK 作为系统时钟
  3.    RCC->APB2ENR |= RCC_APB2Periph_GPIOD;//使GPIO时钟使能启动       
  4.    GPIOD->CRL |=  0x00000300;//Pin2引脚推免的形式以最大的50MHZ输出
  5.    while (1)
  6.    {       
  7.                   GPIOD->BRR = GPIO_Pin_2;//使第二引脚输出0(低电平)
  8.                 Delay(0x2FFFFF);
  9.                 GPIOD->BSRR = GPIO_Pin_2;//使第二引脚输出1(高电平)
  10.                 Delay(0x2FFFFF);
  11.           }
  12. }





复制代码
在路上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……
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 手机版