今天闲来没事,就打算吧串口和定时器都做了,但是再定时器的时候,自己有点马虎,把定时器当做计数器使用了,当然,主要是原厂的代码有点迷惑,也怪自己学艺不精,原厂的是以基本定时器产生计数,然后计数器来计数,相当与一个二层定时器,所以自己也很奇怪,还是一个网有发现了问题,这才得以正常使用,
另外就是我这里设置的系统时钟是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();
}
|