野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11165|回复: 9

使用寄存器点亮LED(课后作业)

[复制链接]
发表于 2016-12-6 17:06:15 | 显示全部楼层 |阅读模式
  1. <div class="blockcode"><blockquote><blockquote>#define   PERIPH_BASE<span class="Apple-tab-span" style="white-space:pre">                                                </span>                 ((unsigned int)0x40000000)
复制代码

回复

使用道具 举报

 楼主| 发表于 2016-12-6 17:09:18 | 显示全部楼层
  1. #define   PERIPH_BASE                                                                  ((unsigned int)0x40000000)

  2. #define   APB1PERIPH_BASE                                                   PERIPH_BASE
  3. #define   APB2PERIPH_BASE                                               (PERIPH_BASE  + 0x10000)
  4. #define   AHBPERIPH_BASE                                                       (PERIPH_BASE  + 0x20000)

  5. #define          RCC_BASE                                                                           (AHBPERIPH_BASE + 0x1000)

  6. #define         GPIOB_BASE                                                                   (APB2PERIPH_BASE + 0x0C00)
  7. #define         GPIOF_BASE                                                                   (APB2PERIPH_BASE + 0x1C00)

  8. #define         GPIOF_BSSR                                                                        *(unsigned int*)(GPIOF_BASE + 0x10)
  9. #define         GPIOF_BRR                                                                        *(unsigned int*)(GPIOF_BASE + 0x14)
  10. #define         GPIOF_CRL                                                                    *(unsigned int*)(GPIOF_BASE + 0x00)
  11. #define         GPIOF_CRH                                                                    *(unsigned int*)(GPIOF_BASE + 0x04)
  12. #define         GPIOF_ODR                                                                    *(unsigned int*)(GPIOF_BASE + 0x0C)
  13.        
  14. #define          RCC_APB2ENR                                                                    *(unsigned int*)(RCC_BASE + 0x18)
  15.        

  16. #include  "stm32f10x.h"

  17. void delay();
  18. int  main(void)
  19. {
  20.         while(1)
  21.         {
  22.                         RCC_APB2ENR        |=         (1<<7);
  23.                         GPIOF_CRH        &=  ~(0x0F << (4*0));
  24.                         GPIOF_CRH        |=  (1 << (4*0));
  25.                
  26.                         GPIOF_ODR  |= (1<<8);
  27.                         GPIOF_BRR |= (1<<8);
  28.                         //GPIOF_ODR  &= ~(1<<7);
  29.                     delay();
  30.                         GPIOF_ODR  |= (1<<8);
  31.                   delay();
  32.         }
  33.        
  34. }

  35. void SystemInit(void)
  36. {

  37. }
  38. void delay()
  39. {
  40.         unsigned long  n = 100000;
  41.         while(n--);
  42. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2016-12-6 17:58:28 | 显示全部楼层
能成功跑嘛?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-6 19:06:50 | 显示全部楼层

可以啊,我是程序可以成功跑了,才上传的
回复 支持 反对

使用道具 举报

发表于 2016-12-6 20:05:40 来自手机 | 显示全部楼层
琉璃的心 发表于 2016-12-6 19:06
可以啊,我是程序可以成功跑了,才上传的

非常好
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-6 20:35:53 | 显示全部楼层

谢谢,我会再接再厉的
回复 支持 反对

使用道具 举报

发表于 2016-12-8 05:47:52 来自手机 | 显示全部楼层
请问一下,GPIOF_CRH&=~(0x0F << (4*0));中为什么要写成(4*0) ?
回复 支持 反对

使用道具 举报

发表于 2016-12-8 09:05:19 | 显示全部楼层
joelin 发表于 2016-12-8 05:47
请问一下,GPIOF_CRH&=~(0x0F

这个4表示4个bit控制一个端口,0表示第0个端口,4*0就表示左移0位,你也可以直接写0,下一个IO口写4,再下一个写8
回复 支持 反对

使用道具 举报

发表于 2016-12-8 16:06:54 来自手机 | 显示全部楼层
fire 发表于 2016-12-8 09:05
这个4表示4个bit控制一个端口,0表示第0个端口,4*0就表示左移0位,你也可以直接写0,下一个IO口写4,再 ...

谢谢回答。买了F103-霸道开发板等收到后也试试。
回复 支持 反对

使用道具 举报

发表于 2016-12-8 16:39:33 | 显示全部楼层
joelin 发表于 2016-12-8 16:06
谢谢回答。买了F103-霸道开发板等收到后也试试。

我在视频和教程里面也有详细的讲解为什么使用这种方法。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-26 16:19 , Processed in 0.034389 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表