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