|
说明:
支持5路Fault输入:
下面是官方提供的一个参考配置:
主要是通过函数HAL_HRTIM_WaveformOutputConfig设置。
- /* Private typedef -----------------------------------------------------------*/
- /* Private define ------------------------------------------------------------*/
- #define HRTIM_TIMA_PERIOD 0xFFFF
- /* Private macro -------------------------------------------------------------*/
- /* Private variables ---------------------------------------------------------*/
- /* Timer handler declaration */
- HRTIM_HandleTypeDef HrtimHandle;
- HRTIM_TimeBaseCfgTypeDef sConfig_time_base;
- HRTIM_TimerCfgTypeDef sConfig_timerA;
- HRTIM_OutputCfgTypeDef sConfig_output_config;
- HRTIM_CompareCfgTypeDef sConfig_compare;
- HRTIM_FaultCfgTypeDef sConfig_fault2;
- /* Private function prototypes -----------------------------------------------*/
- static void SystemClock_Config(void);
- static void Error_Handler(void);
- static void CPU_CACHE_Enable(void);
- /* Private functions ---------------------------------------------------------*/
- /**
- * @brief Main program
- * @param None
- * @retval None
- */
- int main(void)
- {
- /* Enable the CPU Cache */
- CPU_CACHE_Enable();
- /* STM32H7xx HAL library initialization:
- - Configure the Systick to generate an interrupt each 1 msec
- - Set NVIC Group Priority to 4
- - Low Level Initialization
- */
- HAL_Init();
- /* Configure the system clock to 400 MHz */
- SystemClock_Config();
- /*##-1- Configure the HRTIM peripheral ######################################################*/
- /* Initialize the HRTIM structure */
- HrtimHandle.Instance = HRTIM1;
- HrtimHandle.Init.HRTIMInterruptResquests = HRTIM_IT_NONE;
- HrtimHandle.Init.SyncOptions = HRTIM_SYNCOPTION_NONE;
- HAL_HRTIM_Init(&HrtimHandle);
- /*##-2- Configure the HRTIM TIMA PWM channels 1 & 2 #########################################*/
- sConfig_time_base.Mode = HRTIM_MODE_CONTINUOUS;
- sConfig_time_base.Period = HRTIM_TIMA_PERIOD;
- sConfig_time_base.PrescalerRatio = HRTIM_PRESCALERRATIO_DIV1;
- sConfig_time_base.RepetitionCounter = 0;
-
- HAL_HRTIM_TimeBaseConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_A, &sConfig_time_base);
- sConfig_timerA.DMARequests = HRTIM_TIM_DMA_NONE;
- sConfig_timerA.HalfModeEnable = HRTIM_HALFMODE_DISABLED;
- sConfig_timerA.StartOnSync = HRTIM_SYNCSTART_DISABLED;
- sConfig_timerA.ResetOnSync = HRTIM_SYNCRESET_DISABLED;
- sConfig_timerA.DACSynchro = HRTIM_DACSYNC_NONE;
- sConfig_timerA.PreloadEnable = HRTIM_PRELOAD_ENABLED;
- sConfig_timerA.UpdateGating = HRTIM_UPDATEGATING_INDEPENDENT;
- sConfig_timerA.BurstMode = HRTIM_TIMERBURSTMODE_MAINTAINCLOCK;
- sConfig_timerA.RepetitionUpdate = HRTIM_UPDATEONREPETITION_ENABLED;
- sConfig_timerA.ResetUpdate = HRTIM_TIMUPDATEONRESET_DISABLED;
- sConfig_timerA.InterruptRequests = HRTIM_TIM_IT_NONE;
- sConfig_timerA.PushPull = HRTIM_TIMPUSHPULLMODE_DISABLED;
- sConfig_timerA.FaultEnable = HRTIM_TIMFAULTENABLE_FAULT2;
- sConfig_timerA.FaultLock = HRTIM_TIMFAULTLOCK_READWRITE;
- sConfig_timerA.DeadTimeInsertion = HRTIM_TIMDEADTIMEINSERTION_DISABLED;
- sConfig_timerA.DelayedProtectionMode = HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DISABLED;
- sConfig_timerA.UpdateTrigger= HRTIM_TIMUPDATETRIGGER_NONE;
- sConfig_timerA.ResetTrigger = HRTIM_TIMRESETTRIGGER_NONE;
- HAL_HRTIM_WaveformTimerConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_A,&sConfig_timerA);
- sConfig_compare.AutoDelayedMode = HRTIM_AUTODELAYEDMODE_REGULAR;
- sConfig_compare.AutoDelayedTimeout = 0;
- sConfig_compare.CompareValue = HRTIM_TIMA_PERIOD/2;
- HAL_HRTIM_WaveformCompareConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_A, HRTIM_COMPAREUNIT_1, &sConfig_compare);
- sConfig_compare.CompareValue = HRTIM_TIMA_PERIOD/4;
- HAL_HRTIM_WaveformCompareConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_A, HRTIM_COMPAREUNIT_2, &sConfig_compare);
- sConfig_output_config.Polarity = HRTIM_OUTPUTPOLARITY_HIGH;
- sConfig_output_config.SetSource = HRTIM_OUTPUTSET_TIMPER;
- sConfig_output_config.ResetSource = HRTIM_OUTPUTRESET_TIMCMP1;
- sConfig_output_config.IdleMode = HRTIM_OUTPUTIDLEMODE_NONE;
- sConfig_output_config.IdleLevel = HRTIM_OUTPUTIDLELEVEL_INACTIVE;
- sConfig_output_config.FaultLevel = HRTIM_OUTPUTFAULTLEVEL_INACTIVE;
- sConfig_output_config.ChopperModeEnable = HRTIM_OUTPUTCHOPPERMODE_DISABLED;
- sConfig_output_config.BurstModeEntryDelayed = HRTIM_OUTPUTBURSTMODEENTRY_REGULAR;
- HAL_HRTIM_WaveformOutputConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_A, HRTIM_OUTPUT_TA1, &sConfig_output_config);
- sConfig_output_config.ResetSource = HRTIM_OUTPUTRESET_TIMPER;
- sConfig_output_config.SetSource = HRTIM_OUTPUTSET_TIMCMP2;
- HAL_HRTIM_WaveformOutputConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_A, HRTIM_OUTPUT_TA2, &sConfig_output_config);
- /*##-3- Fault Event configuration #########################################################*/
- /* Fault conditionning configuration */
- sConfig_fault2.Source = HRTIM_FAULTSOURCE_DIGITALINPUT;
- sConfig_fault2.Polarity = HRTIM_FAULTPOLARITY_HIGH;
- sConfig_fault2.Filter = HRTIM_FAULTFILTER_NONE;
- sConfig_fault2.Lock = HRTIM_FAULTLOCK_READWRITE;
-
- HAL_HRTIM_FaultPrescalerConfig(&HrtimHandle, HRTIM_FAULTPRESCALER_DIV1);
-
- HAL_HRTIM_FaultConfig(&HrtimHandle, HRTIM_FAULT_2, &sConfig_fault2);
-
- /* Enable Fault2 input */
- HAL_HRTIM_FaultModeCtl(&HrtimHandle, HRTIM_FAULT_2, HRTIM_FAULTMODECTL_ENABLED);
- /*##-4- Start PWM signals generation ########################################################*/
- if (HAL_HRTIM_WaveformOutputStart(&HrtimHandle, HRTIM_OUTPUT_TA1 + HRTIM_OUTPUT_TA2) != HAL_OK)
- {
- /* PWM Generation Error */
- Error_Handler();
- }
- /*##-5- Start HRTIM counter ###################################################################*/
- if (HAL_HRTIM_WaveformCounterStart(&HrtimHandle, HRTIM_TIMERID_TIMER_A) != HAL_OK)
- {
- /* PWM Generation Error */
- Error_Handler();
- }
- /* Infinite loop */
- while (1)
- {
- }
- }
复制代码
|
|