打印

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

[复制链接]
1982|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 | 只看该作者
可以直接把问题转过来

使用特权

评论回复
5
雨落沉轩|  楼主 | 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)

使用特权

评论回复
6
lirunze| | 2013-7-26 12:23 | 只看该作者
学习了啊

使用特权

评论回复
7
jomosiron| | 2013-7-26 13:44 | 只看该作者
F103用过没问题

使用特权

评论回复
8
人生之际| | 2013-8-3 19:06 | 只看该作者
GPIODout怎么定义的?我怀疑你定义的位带地址错误,看汇编吧,最终地址和参考书上面的是否一样。

使用特权

评论回复
9
airwill| | 2013-8-3 21:16 | 只看该作者
F3  的位带我用过, 没有问题的.
但是有个很郁闷的事情, F3 的 GPIO 地址设置到了位带区域之外, 所以 GPIO 操作用位带操作将失败!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

250

帖子

0

粉丝