|
说明:
这个例程的配置也是有点复杂,可以合成任意波形效果。
关键还是这两个参数成员的配置:
sConfig_output_config.SetSource = HRTIM_OUTPUTSET_TIMPER + HRTIM_OUTPUTSET_TIMCMP1 + HRTIM_OUTPUTSET_TIMCMP2;
sConfig_output_config.ResetSource = HRTIM_OUTPUTRESET_TIMPER + HRTIM_OUTPUTRESET_TIMCMP1 + HRTIM_OUTPUTRESET_TIMCMP2;
波形效果:
代码:
- /* Private typedef -----------------------------------------------------------*/
- /* Private define ------------------------------------------------------------*/
- #define HRTIM_MAX_PERIOD 0xFFFF
- /* Private macro -------------------------------------------------------------*/
- /* Private variables ---------------------------------------------------------*/
- /* Timer handler declaration */
- HRTIM_HandleTypeDef HrtimHandle;
- HRTIM_TimeBaseCfgTypeDef sConfig_time_base;
- HRTIM_TimerCfgTypeDef sConfig_timerD;
- HRTIM_OutputCfgTypeDef sConfig_output_config;
- HRTIM_CompareCfgTypeDef sConfig_compare;
-
- /* 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 (minimal configuration) */
- HrtimHandle.Instance = HRTIM1;
- HrtimHandle.Init.HRTIMInterruptResquests = HRTIM_IT_NONE;
- HrtimHandle.Init.SyncOptions = HRTIM_SYNCOPTION_NONE;
- /* Initialize HRTIM */
- HAL_HRTIM_Init(&HrtimHandle);
- /*##-2- Configure the HRTIM TIMA PWM channels 1 & 2 #########################################*/
- sConfig_time_base.Period = HRTIM_MAX_PERIOD;
- sConfig_time_base.RepetitionCounter = 0;
- sConfig_time_base.PrescalerRatio = HRTIM_PRESCALERRATIO_DIV1;
- sConfig_time_base.Mode = HRTIM_MODE_CONTINUOUS;
- HAL_HRTIM_TimeBaseConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_D, &sConfig_time_base);
-
- /* TIMERD global configuration: preload enabled on REP event */
- sConfig_timerD.DMARequests = HRTIM_TIM_DMA_NONE;
- sConfig_timerD.HalfModeEnable = HRTIM_HALFMODE_DISABLED;
- sConfig_timerD.StartOnSync = HRTIM_SYNCSTART_DISABLED;
- sConfig_timerD.ResetOnSync = HRTIM_SYNCRESET_DISABLED;
- sConfig_timerD.DACSynchro = HRTIM_DACSYNC_NONE;
- sConfig_timerD.PreloadEnable = HRTIM_PRELOAD_ENABLED;
- sConfig_timerD.UpdateGating = HRTIM_UPDATEGATING_INDEPENDENT;
- sConfig_timerD.BurstMode = HRTIM_TIMERBURSTMODE_MAINTAINCLOCK;
- sConfig_timerD.RepetitionUpdate = HRTIM_UPDATEONREPETITION_ENABLED;
- sConfig_timerD.ResetUpdate = HRTIM_TIMUPDATEONRESET_DISABLED;
- sConfig_timerD.InterruptRequests = HRTIM_TIM_IT_NONE;
- sConfig_timerD.PushPull = HRTIM_TIMPUSHPULLMODE_DISABLED;
- sConfig_timerD.FaultEnable = HRTIM_TIMFAULTENABLE_NONE;
- sConfig_timerD.FaultLock = HRTIM_TIMFAULTLOCK_READWRITE;
- sConfig_timerD.DeadTimeInsertion = HRTIM_TIMDEADTIMEINSERTION_DISABLED;
- sConfig_timerD.DelayedProtectionMode = HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DISABLED;
- sConfig_timerD.UpdateTrigger= HRTIM_TIMUPDATETRIGGER_NONE;
- sConfig_timerD.ResetTrigger = HRTIM_TIMRESETTRIGGER_NONE;
-
- HAL_HRTIM_WaveformTimerConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_D,&sConfig_timerD);
-
- /* TD1 waveform description: toggles on TIMD period, CMP1 and CMP2 event */
- sConfig_output_config.Polarity = HRTIM_OUTPUTPOLARITY_HIGH;
- sConfig_output_config.SetSource = HRTIM_OUTPUTSET_TIMPER + HRTIM_OUTPUTSET_TIMCMP1 + HRTIM_OUTPUTSET_TIMCMP2;
- sConfig_output_config.ResetSource = HRTIM_OUTPUTRESET_TIMPER + HRTIM_OUTPUTRESET_TIMCMP1 + HRTIM_OUTPUTRESET_TIMCMP2;
- sConfig_output_config.IdleMode = HRTIM_OUTPUTIDLEMODE_NONE;
- sConfig_output_config.IdleLevel = HRTIM_OUTPUTIDLELEVEL_INACTIVE;
- sConfig_output_config.FaultLevel = HRTIM_OUTPUTFAULTLEVEL_NONE;
- sConfig_output_config.ChopperModeEnable = HRTIM_OUTPUTCHOPPERMODE_DISABLED;
- sConfig_output_config.BurstModeEntryDelayed = HRTIM_OUTPUTBURSTMODEENTRY_REGULAR;
-
- HAL_HRTIM_WaveformOutputConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_D, HRTIM_OUTPUT_TD1, &sConfig_output_config);
- /* TD2 waveform description: set on TIMD PER and CMP2 and */
- /* reset on TIMD CMP1 and CMP3 event */
- sConfig_output_config.SetSource = HRTIM_OUTPUTSET_TIMPER + HRTIM_OUTPUTSET_TIMCMP2;
- sConfig_output_config.ResetSource = HRTIM_OUTPUTRESET_TIMCMP1 + HRTIM_OUTPUTRESET_TIMCMP3;
-
- HAL_HRTIM_WaveformOutputConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_D, HRTIM_OUTPUT_TD2, &sConfig_output_config);
- /* Set compare register 1 in Timer D */
- sConfig_compare.CompareValue = HRTIM_MAX_PERIOD/4; /* 25% of the period */
- HAL_HRTIM_WaveformCompareConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_D, HRTIM_COMPAREUNIT_1, &sConfig_compare);
- /* Set compare register 2 in Timer D */
- sConfig_compare.AutoDelayedMode = HRTIM_AUTODELAYEDMODE_REGULAR;
- sConfig_compare.AutoDelayedTimeout = 0;
- sConfig_compare.CompareValue = (3*HRTIM_MAX_PERIOD)/8; /* 37.5% of the period */
- HAL_HRTIM_WaveformCompareConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_D, HRTIM_COMPAREUNIT_2, &sConfig_compare);
- /* Set compare register 3 in Timer D */
- sConfig_compare.CompareValue = HRTIM_MAX_PERIOD/2; /* 50% of the period */
- HAL_HRTIM_WaveformCompareConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_D, HRTIM_COMPAREUNIT_3, &sConfig_compare);
-
- /*##-7- Start Waveform signals generation ########################################################*/
- if (HAL_HRTIM_WaveformOutputStart(&HrtimHandle, HRTIM_OUTPUT_TD1 + HRTIM_OUTPUT_TD2) != HAL_OK)
- {
- /* Waveform Generation Error */
- Error_Handler();
- }
- if (HAL_HRTIM_WaveformCounterStart(&HrtimHandle, HRTIM_TIMERID_TIMER_D) != HAL_OK)
- {
- /* Waveform Generation Error */
- Error_Handler();
- }
- /* Infinite loop */
- while (1)
- {
- }
- }
复制代码
|
|