【ACM32G103RCT6开发板测评】+ 定时器中断测试
[复制链接]
测试下定时器中断功能。
一、系统框图
定时器2使用的APB1外设时钟源。
如果输入PCLKDIV分频值设置为1时,TIMCLK=PCLK1,否之TIMCLK=PCLK1*2
二、程序部分
2.1、timer.c
-
-
-
-
- TIM_HandleTypeDef tim2_handler;
-
- volatile uint32_t Timer_Update_Flag;
-
- //定时器2初始化
- void init_tim2(void)
- {
- uint32_t timer_clock;
- timer_clock = HAL_RCC_GetPCLK1Freq();
-
- if (HAL_RCC_GetHCLKFreq() != timer_clock) // if hclk/pclk != 1, then timer clk = pclk * 2
- {
- timer_clock = timer_clock << 1;
- }
-
- tim2_handler.Instance = TIM2;
- tim2_handler.Init.ARRPreLoadEn = TIM_ARR_PRELOAD_ENABLE;
- tim2_handler.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
- tim2_handler.Init.CounterMode = TIM_COUNTERMODE_UP;
- tim2_handler.Init.RepetitionCounter = 0;
- tim2_handler.Init.Prescaler = (timer_clock/TIM_CLOCK_FREQ) - 1;
- tim2_handler.Init.Period = (TIM_CLOCK_FREQ/1000)*100 - 1; // 100ms
-
- __HAL_RCC_TIM2_RESET();
- __HAL_RCC_TIM2_CLK_ENABLE();
-
- NVIC_ClearPendingIRQ(TIM2_IRQn);
- NVIC_EnableIRQ(TIM2_IRQn);
-
- HAL_TIMER_MSP_Init(&tim2_handler);
- HAL_TIMER_Base_Init(&tim2_handler);
- HAL_TIM_ENABLE_IT(&tim2_handler, TIMER_INT_EN_UPD);
- HAL_TIMER_Base_Start(tim2_handler.Instance);
-
- }
-
- //中断回调函数
- void HAL_TIM_Updeate_Event_Callback(TIM_HandleTypeDef *htim)
- {
- Timer_Update_Flag = 1;
- led1_tog();
- }
-
2.2、main.c
-
-
- int main(void)
- {
- HAL_Init();
- SystemClock_Config();
- usart_init(115200);
-
- init_led();
- init_tim2();
- while(1)
- {
- HAL_Delay(500);
- //led1_tog();
- printf("https://bbs.eeworld.com.cn/\r\n");
- }
- }
三、运行结果
测试PF3端口的波形
100ms定时周期
|