本帖最后由 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
|