芯源半导体CW32
直播中

李建设

8年用户 1469经验值
私信 关注
[经验]

CW32F003FxPx StartKit开发板-04-定时器测试

今天闲来没事,就打算吧串口和定时器都做了,但是再定时器的时候,自己有点马虎,把定时器当做计数器使用了,当然,主要是原厂的代码有点迷惑,也怪自己学艺不精,原厂的是以基本定时器产生计数,然后计数器来计数,相当与一个二层定时器,所以自己也很奇怪,还是一个网有发现了问题,这才得以正常使用,
另外就是我这里设置的系统时钟是48M,设置了48M前,需要设置Flash的延迟等待时间为两个时钟周期,因为系统时钟大于24M的情况下,都需要设置Flash延迟大于2个周期,否则会导致系统时钟配置失败,整个系统无法启动,其次,修改了时钟,对应的通信接口的时钟也需要跟着一起更改,不然发送出来的波特率就不对了,这是今天调试过程中遇到的问题,自己也总结了一下,分享给大家,希望对大家有所帮助。
好了,那就直接来上代码吧,代码很简单。


  • #include "DRV_tiM.h"




  • void TIM_Init(void)
  • {

  •   GTIM_InitTypeDef GTIM_InitStruct;
  •         __RCC_GTIM_CLK_ENABLE();

  •   GTIM_InitStruct.Mode = GTIM_MODE_TIME;
  •   GTIM_InitStruct.OneShotMode = GTIM_COUNT_CONTINUE;
  •   GTIM_InitStruct.Prescaler = GTIM_PRESCALER_DIV16;//--48M/16=3M=3000 000
  •   GTIM_InitStruct.ReloadValue = 2999;              //--2999个计数代表是1ms
  •   GTIM_InitStruct.ToggleOutState = DISABLE;
  •   GTIM_TimeBaseInit(>IM_InitStruct);

  •   GTIM_ITConfig(GTIM_IT_OV, ENABLE);

  •         NVIC_EnableIRQ(GTIM_IRQn);
  •         NVIC_SetPriority(GTIM_IRQn,1);

  •   GTIM_Cmd(ENABLE);
  • }



  • unsigned int GTim_Count=0;

  • void GTIM_IRQHandlerCallBack(void)
  • {
  •   if (GTIM_GetITStatus(GTIM_IT_OV))
  •   {
  •                 GTim_Count++;
  •                 if(GTim_Count==500)
  •                 {
  •                   GTim_Count=0;
  •                         GPIO_TogglePin(CW_GPIOA,GPIO_PIN_6);
  •                 }
  •     GTIM_ClearITPendingBit(GTIM_IT_OV);
  •   }
  • }

  • void GTIM1_IRQHandler(void)
  • {
  •    GTIM_IRQHandlerCallBack();

  • }

更多回帖

发帖
×
20
完善资料,
赚取积分