STM32CubeWL/Projects/NUCLEO-WL55JC/Examples/TIM/TIM_PWMOutput/Inc/main.h

118 lines
4.2 KiB
C

/* USER CODE BEGIN Header */
/**
******************************************************************************
* @file TIM/TIM_PWMOutput/Inc/main.h
* @author MCD Application Team
* @brief Header for main.c module
******************************************************************************
* @attention
*
* Copyright (c) 2020 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file
* in the root directory of this software component.
* If no LICENSE file comes with this software, it is provided AS-IS.
*
******************************************************************************
*/
/* USER CODE END Header */
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __MAIN_H
#define __MAIN_H
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "stm32wlxx_hal.h"
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "stm32wlxx_nucleo.h"
/* USER CODE END Includes */
/* Exported types ------------------------------------------------------------*/
/* USER CODE BEGIN ET */
/* USER CODE END ET */
/* Exported constants --------------------------------------------------------*/
/* USER CODE BEGIN EC */
/* USER CODE END EC */
/* Exported macro ------------------------------------------------------------*/
/* USER CODE BEGIN EM */
/* USER CODE END EM */
void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim);
/* Exported functions prototypes ---------------------------------------------*/
void Error_Handler(void);
/* USER CODE BEGIN EFP */
/* USER CODE END EFP */
/* Private defines -----------------------------------------------------------*/
/* USER CODE BEGIN Private defines */
/* Compute the prescaler value to have TIM1 counter clock equal to 1000000 Hz */
#define PRESCALER_VALUE (uint32_t)(((SystemCoreClock) / 1000000) - 1)
/* -----------------------------------------------------------------------
TIM1 Configuration: generate 4 PWM signals with 4 different duty cycles.
In this example TIM1 input clock (TIM1CLK) is set to APB1 clock (PCLK1),
since APB1 prescaler is equal to 1.
TIM1CLK = PCLK1
PCLK1 = HCLK
=> TIM1CLK = HCLK = SystemCoreClock
To get TIM1 counter clock at 1 MHz, the prescaler is computed as follows:
Prescaler = (TIM1CLK / TIM1 counter clock) - 1
Prescaler = ((SystemCoreClock) /1 MHz) - 1
To get TIM1 output clock at 25 KHz, the period (ARR)) is computed as follows:
ARR = (TIM1 counter clock / TIM1 output clock) - 1
= 39
TIM1 Channel1 duty cycle = (TIM1_CCR1/ TIM1_ARR + 1)* 100 = 50%
TIM1 Channel2 duty cycle = (TIM1_CCR2/ TIM1_ARR + 1)* 100 = 37.5%
TIM1 Channel3 duty cycle = (TIM1_CCR3/ TIM1_ARR + 1)* 100 = 25%
TIM1 Channel4 duty cycle = (TIM1_CCR4/ TIM1_ARR + 1)* 100 = 12.5%
Note:
SystemCoreClock variable holds HCLK frequency and is defined in system_stm32wlxx.c file.
Each time the core clock (HCLK) changes, user had to update SystemCoreClock
variable value. Otherwise, any configuration based on this variable will be incorrect.
This variable is updated in three ways:
1) by calling CMSIS function SystemCoreClockUpdate()
2) by calling HAL API function HAL_RCC_GetSysClockFreq()
3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency
----------------------------------------------------------------------- */
/* Initialize TIMx peripheral as follows:
+ Prescaler = (SystemCoreClock / 1000000) - 1
+ Period = (40 - 1)
+ ClockDivision = 0
+ Counter direction = Up
*/
#define PERIOD_VALUE (uint32_t)(40 - 1) /* Period Value */
#define PULSE1_VALUE (uint32_t)(40 / 2) /* Capture Compare 1 Value */
#define PULSE2_VALUE (uint32_t)(40 * 37.5 / 100) /* Capture Compare 2 Value */
#define PULSE3_VALUE (uint32_t)(40 / 4) /* Capture Compare 3 Value */
#define PULSE4_VALUE (uint32_t)(40 * 12.5 /100) /* Capture Compare 4 Value */
/* USER CODE END Private defines */
#ifdef __cplusplus
}
#endif
#endif /* __MAIN_H */