有人用过STM32F3的位带操作吗?

[复制链接]
2597|8
 楼主| 雨落沉轩 发表于 2013-7-24 19:30 | 显示全部楼层 |阅读模式
看链接:
http://www.openedv.com/posts/list/15526.htm

遇到了和他一样的问题,不使用位带,程序正常,LED闪烁。使用位带,LED无反应。求高指导
linfeng24 发表于 2013-7-25 15:59 | 显示全部楼层
你怎么用位带的?贴出源程序啊?不然怎么帮你看?
zeluo 发表于 2013-7-25 19:08 | 显示全部楼层
没有用过这一块   楼主  先帮你顶一个   看看别人的意见吧   顶一个先
sinadz 发表于 2013-7-25 19:15 | 显示全部楼层
可以直接把问题转过来
 楼主| 雨落沉轩 发表于 2013-7-25 22:09 | 显示全部楼层
本帖最后由 雨落沉轩 于 2013-7-25 22:11 编辑
linfeng24 发表于 2013-7-25 15:59
你怎么用位带的?贴出源程序啊?不然怎么帮你看?

其实关键程序就是上面的链接中的一样的,而且整个工程文件,除了上面那部分,其它都不怎么重要,所以我也不知道该怎么贴。其中最后有一个定义:
#define LED1 GPIODout(12) // 定义 LED1 为 GPIOD_Pin_12
这句话的意思就是把LED1定义为GPIOD 12引脚ODR输出的位带别名。
这样对LED1赋值就相当于控制GPIO_12引脚的输出。如:
LED1 = 1,就表示将GPIOD的12引脚输出为1,
LED1 = 0,就表示将GPIOD的12引脚输出为0,其它引脚不影响。

不知道我说的是否够清楚,

然后我的定义是
#define LED GPIOEout(15)   //PE的15引脚对应一个LED

下面是我原来主程序中的LED闪烁代码:(LED正常闪烁)
  while (1)
  {
     /* Set  PE15 */              
     GPIOE->BSRR = BSRR_VAL;                  
     Delay_Ms(1000);

    /* Reset  PE15 */
     GPIOE->BRR = BSRR_VAL;                 
     Delay_Ms(1000);
  }

然后让LED=1来替换GPIOE->BSRR = BSRR_VAL;
          LED=0来替换GPIOE->BRR = BSRR_VAL;

LED就没有正常闪烁。

参考的:
STM32F407VG用位带别名区实现IO位操作例程.pdf (80.5 KB, 下载次数: 15)

lirunze 发表于 2013-7-26 12:23 | 显示全部楼层
学习了啊
jomosiron 发表于 2013-7-26 13:44 | 显示全部楼层
F103用过没问题
人生之际 发表于 2013-8-3 19:06 | 显示全部楼层
GPIODout怎么定义的?我怀疑你定义的位带地址错误,看汇编吧,最终地址和参考书上面的是否一样。
airwill 发表于 2013-8-3 21:16 | 显示全部楼层
F3  的位带我用过, 没有问题的.
但是有个很郁闷的事情, F3 的 GPIO 地址设置到了位带区域之外, 所以 GPIO 操作用位带操作将失败!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

250

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部