STM学习笔记定时器萤火虫灯.docVIP

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
STM学习笔记定时器萤火虫灯

STM学习笔记(8)-用定时器实现荧火虫灯 ?????? 在第6篇笔记中,我用软件延时的方法实现了荧火虫,学了定时器,当然就要用一用定时器了,这里仍是用荧火虫灯为例。 ?????? 用ST库所带的例子Tim中的TimBase为例来修改,这个例子的位置以及如何建立工程请参考第7篇笔记,这里就不再重复了,下面简述一下修改的过程。 (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(Count1hCnt1) ?????? {???? 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(hCnt12) ??????????????????????????? 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

文档评论(0)

dashewan + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档