用定时器实现荧火虫灯之后的修改方法.docVIP

用定时器实现荧火虫灯之后的修改方法.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
用定时器实现荧火虫灯我用软件延时的方法实现了荧火虫,学了定时器,当然就要用一用定时器了,这里仍是用荧火虫灯为例。用ST库所带的例子Tim中的TimBase为例来修改下面简述一下修改的过程。 (1) 由于我的板子上的灯是由PD8~PD11来控制的,因此,要将 void RCC_Configuration(void)中的: RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //打开GPIOC的时钟 改为 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE); //打开GPIOD的时钟 (2) 将四个通道全部设置为TIM_OCMode_Toggle模式,即将 /* Output Compare Timing Mode configuration: Channel1 * TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Timing; 改为: TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle; (3)例子中原来中断产生的频率很低,是不适合于做这种荧火虫灯的,但为了比较,我只改了最后一个值: __IO uint16_t CCR4_Val = 8192;改为 __IO uint16_t CCR4_Val = 2048; 这样,这个通道的中断频率变为 CC4 update rate = TIM2 counter clock / CCR4_Val = 3515.6 Hz (4) 到stm32f10x_it.c中作修改中断处理函数如下: uint8_t allCount=16; uint8_t upDown1,upDown2,upDown3,upDown4; void TIM2_IRQHandler(void) { static uint8_t Count1,Count2,Count3,Count4; static uint8_t hCnt1,hCnt2,hCnt3,hCnt4; if (TIM_GetITStatus(TIM2, TIM_IT_CC1) != RESET) { TIM_ClearITPendingBit(TIM2, TIM_IT_CC1); if(Count1《hCnt1) { GPIO_SetBits(GPIOD, GPIO_Pin_8); //点亮灯 } else { GPIO_ResetBits(GPIOD, GPIO_Pin_8); //熄灭灯 } Count1++; if(Count1》=allCount) { Count1=0; if(upDown1) { hCnt1++; if(hCnt1》=(allCount-1)) upDown1=!upDown1; } else { hCnt1--; if(hCnt1《2) upDown1=!upDown1; } } capture = TIM_GetCapture1(TIM2);   TIM_SetCompare1(TIM2, capture + CCR1_Val);   }   else if (TIM_GetITStatus(TIM2, TIM_IT_CC2) != RESET)   {   TIM_ClearITPendingBit(TIM2, TIM_IT_CC2);   if(Count2《hCnt2)   { GPIO_SetBits(GPIOD, GPIO_Pin_9); //点亮灯   }   else   { GPIO_ResetBits(GPIOD, GPIO_Pin_9); //熄灭灯   }   Count2++;   if(Count2》=allCount)   { Count2=0;   if(upDown2)   { hCnt2++;   if(hCnt2》=(allCount-1))   upDown2=!upDown2;   }   else   { hCnt2--;   if(hCnt2《2)   upDown1=!upDown1;   }   }   capture = TIM_GetCapture2(TIM2);   TIM_SetCompare2(TIM2, capture + CCR2_Val);   }   else if (TIM_GetITStatus(TIM2, TIM_IT_CC3) != RESET)   {   TIM_ClearITPendingBit(TIM2, TIM_IT_CC3);   if(Count3《hCnt3)   { GPIO_SetBits(GPIOD, GPIO_Pin_10); //点亮灯  

文档评论(0)

187****5045 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档