本帖最后由 雨落沉轩 于 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)
|