/**************************************************************************//** * @file main.c * @brief STM32 Timer interrupt demo * * MCU läuft nur mit 16MHz, da die PLL usw. nicht konfiguriert ist. * ************************************************************************** */ #include #include #include #include static TIM_HandleTypeDef my_tim2; /**************************************************************************//** * @brief Diese Funktion wird vom HAL aufgerufen und sollte unverändert bleiben * ************************************************************************** */ void TIM2_IRQHandler(void) { HAL_TIM_IRQHandler(&my_tim2); } /**************************************************************************//** * @brief Diese Funktion wird vom HAL aufgerufen und sollte unverändert bleiben * ************************************************************************** */ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle) { if(tim_baseHandle->Instance==TIM2) { /* TIM2 clock enable */ __HAL_RCC_TIM2_CLK_ENABLE(); /* TIM2 interrupt Init */ HAL_NVIC_SetPriority(TIM2_IRQn, 0, 0); HAL_NVIC_EnableIRQ(TIM2_IRQn); } } /**************************************************************************//** * @brief Konfiguriert Timer TIM2 und startet ihn * ************************************************************************** */ void timerInit() { my_tim2.Instance = TIM2; my_tim2.Init.CounterMode = TIM_COUNTERMODE_UP; my_tim2.Init.Prescaler = 16000; my_tim2.Init.Period = 500; my_tim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; my_tim2.Init.RepetitionCounter = TIM_AUTORELOAD_PRELOAD_DISABLE; HAL_TIM_Base_Init(&my_tim2); TIM_ClockConfigTypeDef sClockSourceConfig = {0}; sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; HAL_TIM_ConfigClockSource(&my_tim2, &sClockSourceConfig); TIM_MasterConfigTypeDef sMasterConfig = {0}; sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; HAL_TIMEx_MasterConfigSynchronization(&my_tim2, &sMasterConfig); HAL_TIM_Base_Start_IT(&my_tim2); } /**************************************************************************//** * @brief Diese Funktion wird vom HAL aufgerufen wenn Timer ein Update- * Ereignis auslöst. * ************************************************************************** */ void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { // USER CODE BEGIN if (htim == &my_tim2) { HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_6); } // USER CODE END } /**************************************************************************//** * @brief Konfiguriert GPIO PC6 als OUTPUT für die LED * ************************************************************************** */ void initGPIO() { GPIO_InitTypeDef GPIO_InitStructure; __GPIOC_CLK_ENABLE(); GPIO_InitStructure.Pin = GPIO_PIN_6; GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_LOW; GPIO_InitStructure.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOC, &GPIO_InitStructure); } /**************************************************************************//** * @brief * ************************************************************************** */ int main(void) { HAL_Init(); initGPIO(); timerInit(); while(1) { // Infinity loop } }