看《零死角玩转STM32》的初级篇中的流水灯,根据他的步骤写完程序,烧进去,结果灯全亮,不闪,后来干脆不高延时,改成如下所示还是全亮;
LED1( ON ); // 亮 LED1( OFF ); // 灭
LED2( ON ); LED2( OFF );
LED3( ON ); LED3( OFF );
后又改了一下
LED1( ON ); // 亮 Delay(0x0FFFEF); LED1( OFF ); // 灭
LED2( ON ); LED2( OFF );
LED3( ON ); LED3( OFF );
结果只有LED1亮;
完整的程序如下
#include "stm32f10x.h"
#include "led.h"
//#define MI_ERR (-2)
void Delay(__IO u32 nCount);
int main(void)
{
/* LED 端口初始化 */
LED_GPIO_Config();
while (1)
{
LED1( ON ); // 亮
Delay(0x0FFFEF);
LED1( OFF ); // 灭
LED2( ON );
LED2( OFF );
LED3( ON );
LED3( OFF );
}
}
void Delay(__IO u32 nCount) //简单的延时函数
{
for(; nCount != 0; nCount--);
}
我把它改成这样还是全亮
int main(void)
{
/* LED 端口初始化 */
LED_GPIO_Config();
while (1)
{
LED1( ON ); // 亮
Delay(5000);
LED1( OFF ); // 灭
LED2( ON );
Delay(5000);
LED2( OFF );
LED3( ON );
Delay(5000);
LED3( OFF );
}
}
void Delay(int nCount) //简单的延时函数
{
for(; nCount != 0; nCount--);
}
void Delay(__IO u32 nCount) //简单的延时函数
{
for(; nCount != 0; nCount--);
上面是源程序的延时函数;我把它改成下面这种就全亮;
void Delay(int nCount) //简单的延时函数
{
for(; nCount != 0; nCount--);
}
是不是 延时不够,变成扫描显示了啊, 第一种和 最后一种的 全亮 是不是 亮度不一样啊,我是新手,猜的
LED1( OFF ); 后面加上Delay(5000);
你的LED关掉后又立即ON了
你 LED1( OFF );宏写的有问题,贴出来看看
#define LED_IOPORT GPIOA //mini2.0 pa0,1//mini3.0 Pa 2,3
#define LED2_IOBIT GPIO_Pin_3
#define LED3_IOBIT GPIO_Pin_2
#define LED2_LIGHT LED_IOPORT->ODR |= LED2_IOBIT
#define LED2_DARK LED_IOPORT->ODR &= ~LED2_IOBIT
#define LED3_LIGHT LED_IOPORT->ODR |= LED3_IOBIT
#define LED3_DARK LED_IOPORT->ODR &= ~LED3_IOBIT
回复 6楼 雅剑 的帖子
不明白!详细点,难道我的Delay函数没用
回复 11楼 szengjiaqi 的帖子
LEDOFF后面也加个延时,然后试试
回复 10楼 szengjiaqi 的帖子
while (1)
{
LED1( ON ); // 亮
Delay(5000);
LED1( OFF ); // 灭
Delay(5000);
LED2( ON );
Delay(5000);
LED2( OFF );
Delay(5000);
LED3( ON );
Delay(5000);
LED3( OFF );
Delay(5000);
}
改成这样
delay 5000太少了 stm32太快了起碼5000*5000
搞不清楚你的delay是不是太长还是太短,你干脆就不要用delay了,要么用timer来延时,更简单的,不要延时了,在调试模式下加断点,上一句是亮灯,下一句是灭灯,你加断点来看到底是不是按照你的想法和程序流程来的,确定是对灯的操作没问题了,再来搞定延时。不要灯操作也有问题,延时也有问题,然后一起调。问题一个一个的查,一个一个的解决。
看楼主的程序好笑
while (1)
{
LED1( ON ); // 亮 亮
Delay(0x0FFFEF);
LED1( OFF ); // 灭 看不到
LED2( ON ); // 看不到
LED2( OFF ); //看不到
LED3( ON ); //看不到
LED3( OFF ); //看不到
}
关键是你眼不够快。不是程序没写好。哈哈。
回复 4楼 szengjiaqi 的帖子
int 数据类型是16位,你的延时是Delay(5000);
超出范围了,将int改为unsigned int 就可以