你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

一个很奇怪的问题:LED只能亮或只能灭,不能闪烁

[复制链接]
AndyYau-268557 提问时间:2015-1-24 15:45 /
写个简单的LED程序试下,发现LED不能闪烁。程序如下:
u16 i = 10000;
  //SysTick_Config(SystemCoreClock / 1000);
  /* GPIOE Periph clock enable */
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
  
  /* Configure PA5 Pin output pushpull mode */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 ;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
  //GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
  
  /* To achieve GPIO toggling maximum frequency, the following  sequence is mandatory.
  You can monitor PE14 and PE15 on the scope to measure the output signal.
  If you need to fine tune this frequency, you can add more GPIO set/reset
  cycles to minimize more the infinite loop timing.
  This code needs to be compiled with high speed optimization option.  */
  while (1)
  {
      
   GPIO_SetBits(GPIOA, GPIO_Pin_5);
   while(i--);
   GPIO_ResetBits(GPIOA, GPIO_Pin_5);
   while(i--);
  }

请高手指点下。
收藏 评论19 发布时间:2015-1-24 15:45

举报

19个回答
damiaa 回答时间:2015-1-24 22:12:36
while (1)
  {
    i = 10000;   
   GPIO_SetBits(GPIOA, GPIO_Pin_5);
   while(i--);
   i = 10000;
   GPIO_ResetBits(GPIOA, GPIO_Pin_5);
   while(i--);
  }
wu1169668869 回答时间:2015-1-25 15:48:11
fjjjnk1234 发表于 2015-1-24 18:35
i是全局变量,GPIO_SetBits(GPIOA, GPIO_Pin_5);下一句while(i--);已经把i减到0了,之后i延时就不起作用了 ...

减到0后变成最大值,还是有延时效果的,只是时间太短:)
qianfan 回答时间:2015-1-25 11:23:16
使用的是什么编译器?这个死循环会不会被优化掉?
你的主频是多少?
如果是gcc之类的编译器,i的变量定义要加上volatile。
如果是48M的话,可以这样:
for(volatile int i=0;i<480000;i++);
小丁 回答时间:2015-1-24 15:57:32
延时时间短了吧
wamcncn 回答时间:2015-1-24 15:58:38
本帖最后由 wambob 于 2015-1-24 16:01 编辑

延迟时间短吧,人眼能分辨的时间大于等于20MS,即50HZ以上的频率分辨不出来,延迟的短了,LED闪烁频率超过50HZ,人眼分辨不出来,看上去一直亮
wamcncn 回答时间:2015-1-24 16:05:17
你那10000 ,你输出频率是10MHZ,相当于0.1US,延迟10000*0.1=1000US=1MS
kqh1120 回答时间:2015-1-24 16:18:16
设置一个阈值吧 1.png
wyxy163@126.com 回答时间:2015-1-24 16:41:50
提示: 作者被禁止或删除 内容自动屏蔽
lkl0305 回答时间:2015-1-24 17:37:48
用32位整数uint32_t,把i值加大试试
fjjjnk1234 回答时间:2015-1-24 18:35:24
i是全局变量,GPIO_SetBits(GPIOA, GPIO_Pin_5);下一句while(i--);已经把i减到0了,之后i延时就不起作用了
renegade 回答时间:2015-1-24 19:08:01
延时时间太短
zzz111xxx 回答时间:2015-1-24 22:55:27
延时过短
dingfs 回答时间:2015-1-24 23:25:36
建议用定时器设置延时
feel-376797 回答时间:2015-1-25 07:55:44
使用示波器调试有时是明智的.
holts1 回答时间:2015-1-25 08:39:18
中断时间设的不合适
AndyYau-268557 回答时间:2015-1-25 10:19:09
谢谢各位帮助。
12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版