工程师STM32单片机学习手记(3):修修改改玩串口

工程师STM32单片机学习手记(3):修修改改玩串口,第1张

  STM学习笔记——用定时器实现荧火虫灯

  在第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(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;

  }

  }

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/2714623.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-17
下一篇 2022-08-17

发表评论

登录后才能评论

评论列表(0条)

保存