本帖最后由 shenxiaolin 于 2024-5-13 14:01 编辑
定时器主要是用到了他的计数功能,当然还有其他的输入捕获,互补输出等功能我们首先看看定时器的时钟树,可以更加清楚的了解到定时器的脉络
在整个SDK中都是以407为例,但是我们的只有120M左右只有按照120M来做,所以要做适当的修改,我们这里就直接上代码
#include "DRV_TIM.h"
void LED_Init(void)
{
GPIO_Config_T configStruct;
/* Enable the GPIO_LED Clock */
RCM_EnableAHB1PeriphClock(RCM_AHB1_PERIPH_GPIOE);
/* Configure the GPIO_LED pin */
GPIO_ConfigStructInit(&configStruct);
configStruct.pin = GPIO_PIN_5|GPIO_PIN_6;
configStruct.mode = GPIO_MODE_OUT;
configStruct.speed = GPIO_SPEED_50MHz;
GPIO_Config(GPIOE, &configStruct);
}
void Tim_Init(void)
{
TMR_BaseConfig_T baseConfig;
RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_TMR1);
/* TMR1 Configure */
baseConfig.clockDivision = TMR_CLOCK_DIV_1;
baseConfig.countMode = TMR_COUNTER_MODE_UP;
baseConfig.division = 119;
baseConfig.period = 999;
baseConfig.repetitionCounter = 0;
TMR_ConfigTimeBase(TMR1, &baseConfig);
/* Enable TMR1 Interrupt */
TMR_EnableInterrupt(TMR1, TMR_INT_UPDATE);
NVIC_EnableIRQRequest(TMR1_UP_TMR10_IRQn, 0, 0);
TMR_Enable(TMR1);
}
unsigned int TimCount=0;
void TMR1_UP_TMR10_IRQHandler(void)
{
if(TMR_ReadIntFlag(TMR1, TMR_INT_UPDATE) == SET)
{
TimCount++;
if(TimCount==1000)
{
TimCount=0;
GPIO_ToggleBit(GPIOE,GPIO_PIN_5|GPIO_PIN_6);
}
TMR_ClearIntFlag(TMR1, TMR_INT_UPDATE);
}
}
所有初始化完成了之后就只现在这个样子,下载到开发板里面,周期为0.5Hz 发现频率实际上是不对的,所以要做一下时钟的配置的修改。USB的时钟的话按时修改为240/6=40MHz
|