野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9750|回复: 9

为什么只有GPIOB控制的灯亮?

[复制链接]
发表于 2016-8-10 14:12:38 | 显示全部楼层 |阅读模式
为什么只有GPIOB控制的灯亮。

  1. #define PERIPH_BASE           ((unsigned int)0x40000000)
  2. #define APB1_BASE             (PERIPH_BASE + 0x00)
  3. #define APB2_BASE             (PERIPH_BASE + 0x10000)
  4. #define AHB_BASE              (PERIPH_BASE + 0x20000)

  5. #define RCC_BASE              (AHB_BASE + 0x1000)
  6. #define GPIOB_BASE            (APB2_BASE + 0x0c00)
  7. #define GPIOF_BASE            (APB2_BASE + 0x2000)
  8.         
  9. #define APB2ENR               *(unsigned int*)(RCC_BASE + 0x18)
  10.         
  11. #define GPIOB_CRL             *(unsigned int*)(GPIOB_BASE + 0x00)
  12. #define GPIOB_CRH             *(unsigned int*)(GPIOB_BASE + 0x04)
  13. #define GPIOB_ODR             *(unsigned int*)(GPIOB_BASE + 0x0c)
  14.         
  15. #define GPIOF_CRL             *(unsigned int*)(GPIOF_BASE + 0x00)
  16. #define GPIOF_CRH             *(unsigned int*)(GPIOF_BASE + 0x04)
  17. #define GPIOF_ODR             *(unsigned int*)(GPIOF_BASE + 0x0c)






  18. #include "stm32f10x.h"

  19. void SystemInit(void)
  20. {}

  21. int main(void)
  22. {
  23.           while (1)
  24.                 {
  25.                 //APB2ENR |= (1<<3);
  26.         
  27.                 //APB2ENR |= (1<<8);
  28.                         
  29.                 APB2ENR |= 0X00FF;
  30.                         
  31.                 GPIOB_CRL &= ~(0x0f<<(4*0));
  32.         
  33.                 GPIOB_CRL |= (1<<4*0);
  34.         
  35.                 GPIOB_ODR = 0x0000;
  36.         
  37.                 GPIOF_CRL &= ~(0x0f<<(4*0));
  38.         
  39.                 GPIOF_CRL |= (1<<4*0);
  40.         
  41.                 GPIOF_ODR = 0x0000;
  42.                 }      
  43.          
  44. }
复制代码




回复

使用道具 举报

发表于 2016-8-10 15:09:19 | 显示全部楼层
楼主你问题解决了吗?我的也是只有GPIOB控制的灯亮
回复 支持 反对

使用道具 举报

发表于 2016-8-10 15:14:00 | 显示全部楼层
while(1)死循环里面为什么要控制 CRL 寄存器,不是只需要控制 ODR 寄存器就可以了嘛 ?
回复 支持 反对

使用道具 举报

发表于 2016-8-10 15:16:05 | 显示全部楼层
1、GPIOF 的时钟和端口没有配置,只配置了GPIOF的 ODR 寄存器,当然灯不亮

2、CRL 寄存器的配置放到死循环里面,每次都配置,这个是几个意思?
回复 支持 1 反对 0

使用道具 举报

发表于 2016-8-10 15:27:34 | 显示全部楼层
fire 发表于 2016-8-10 15:16
1、GPIOF 的时钟和端口没有配置,只配置了GPIOF的 ODR 寄存器,当然灯不亮

2、CRL 寄存器的配置放到死循 ...
  1. #include <stm32f10x.h>
  2. void delay(__IO uint32_t uCount);
  3. int main(void)
  4. {
  5. //&#191;a&#198;&#244;GPIOB/GPIOFê±&#214;ó
  6.         *(unsigned int *)0x40021018|=(1<<3|1<<7);
  7. //éè&#214;&#195;GPIOB/GPIOF&#206;aí&#198;íìê&#228;3&#246;&#161;¢&#198;μ&#194;ê&#206;a10MHz
  8.         *(unsigned int *)0x40010C00|=(1<<0);
  9.         *(unsigned int *)0x40012000|=(1<<0);

  10.         *(unsigned int *)0x40010C00=0xFFFF;
  11.         *(unsigned int *)0x40011C00=0xFFFF;
  12.         
  13.         while(1)
  14.         {
  15.                 //B0&#191;ú~LED1
  16.                 *(unsigned int *)0x40010C0C&=~(1<<0);
  17.                 delay(0x0fffff);
  18.                 *(unsigned int *)0x40010C0C|=(1<<0);
  19.                 delay(0x0fffff);
  20.                 //F7&#191;ú~LED2
  21.                 *(unsigned int *)0x40011C0C&=~(1<<7);
  22.                         delay(0x0fffff);
  23.                 *(unsigned int *)0x40011C0C|=(1<<7);
  24.                 //F8&#191;ú~LED3
  25.                 *(unsigned int *)0x40011C0C&=~(1<<8);
  26.                 delay(0x0fffff);
  27.                 *(unsigned int *)0x40011C0C|=(1<<8);
  28.         }
  29. }
  30. void delay(__IO uint32_t uCount)
  31. {
  32.                 for(;uCount!=0;uCount--);
  33. }
  34. void SystemInit()
  35. {
  36. }
复制代码

火锅,为什么我配置了只有GPIOB控制的灯亮?我学你用寄存器控制
回复 支持 反对

使用道具 举报

发表于 2016-8-10 15:27:42 | 显示全部楼层
楼主程序配置错了
回复 支持 反对

使用道具 举报

发表于 2016-8-10 15:28:28 | 显示全部楼层
帮顶,看看怎么热闹
回复 支持 反对

使用道具 举报

发表于 2016-8-10 15:54:47 | 显示全部楼层
我是老罗 发表于 2016-8-10 15:27
火锅,为什么我配置了只有GPIOB控制的灯亮?我学你用寄存器控制

你把你这段程序加上中文注释先,不然我很难看懂,而且你现在的程序注释都是乱码的,在KEIL里面把编码改成GB2312的
1.jpg
回复 支持 反对

使用道具 举报

发表于 2016-8-10 16:00:01 | 显示全部楼层
fire 发表于 2016-8-10 15:54
你把你这段程序加上中文注释先,不然我很难看懂,而且你现在的程序注释都是乱码的,在KEIL里面把编码改成 ...

我刚刚又看了一下你的视频,然后看了手册,是我的配置错了,改回来了,谢谢火锅啦
回复 支持 反对

使用道具 举报

发表于 2016-8-10 17:54:04 | 显示全部楼层
我是老罗 发表于 2016-8-10 16:00
我刚刚又看了一下你的视频,然后看了手册,是我的配置错了,改回来了,谢谢火锅啦

  要反复的操练操练才行啊
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-19 08:59 , Processed in 0.034171 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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