你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm32g474RE 输出4相波形,如何精准输出ADC触发的问题。

[复制链接]
A六月的雨 提问时间:2026-3-12 18:16 / 未解决

现在使用hrtim 的HRTIM_INTERLEAVED_MODE_QUAD 模式,主定时器与ABCD四个从定时器的CMP1,输出了4相移相波形,现在波形输出没问题,现在的问题是TA1置位与主定时器的重复中断存在偏移,大家帮忙看看是不是哪里没对,然后使用各定时器的CMP2比较事件去触发ADC的注入通道,这个时许是怎么计算的

收藏 评论1 发布时间:2026-3-12 18:16

举报

1个回答
A六月的雨 回答时间:4 小时前

/ USER CODE BEGIN Header / /**


  • @file hrtim.c

  • @brief This file provides code for the configuration

  • of the HRTIM instances.

  • @attention

  • Copyright (c) 2026 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 / / Includes ------------------------------------------------------------------*/

include "hrtim.h"

/ USER CODE BEGIN 0 /

/ USER CODE END 0 /

HRTIM_HandleTypeDef hhrtim1;

/ HRTIM1 init function / void MX_HRTIM1_Init(void) {

/ USER CODE BEGIN HRTIM1_Init 0 /

/ USER CODE END HRTIM1_Init 0 /

HRTIM_EventCfgTypeDef pEventCfg = {0}; HRTIM_FaultBlankingCfgTypeDef pFaultBlkCfg = {0}; HRTIM_FaultCfgTypeDef pFaultCfg = {0}; HRTIM_TimeBaseCfgTypeDef pTimeBaseCfg = {0}; HRTIM_TimerCfgTypeDef pTimerCfg = {0}; HRTIM_TimerCtlTypeDef pTimerCtl = {0}; HRTIM_CompareCfgTypeDef pCompareCfg = {0}; HRTIM_DeadTimeCfgTypeDef pDeadTimeCfg = {0}; HRTIM_OutputCfgTypeDef pOutputCfg = {0};

/ USER CODE BEGIN HRTIM1_Init 1 /

/ USER CODE END HRTIM1_Init 1 / hhrtim1.Instance = HRTIM1; hhrtim1.Init.HRTIMInterruptResquests = HRTIM_IT_NONE; hhrtim1.Init.SyncOptions = HRTIM_SYNCOPTION_NONE;

if (HAL_HRTIM_Init(&hhrtim1) != HAL_OK) { Error_Handler(); }

if (HAL_HRTIM_DLLCalibrationStart(&hhrtim1, HRTIM_CALIBRATIONRATE_3) != HAL_OK) { Error_Handler(); }

if (HAL_HRTIM_PollForDLLCalibration(&hhrtim1, 10) != HAL_OK) { Error_Handler(); }

if (HAL_HRTIM_EventPrescalerConfig(&hhrtim1, HRTIM_EVENTPRESCALER_DIV1) != HAL_OK) { Error_Handler(); }

pEventCfg.Source = HRTIM_EEV1SRC_COMP2_OUT; pEventCfg.Polarity = HRTIM_EVENTPOLARITY_HIGH; pEventCfg.Sensitivity = HRTIM_EVENTSENSITIVITY_LEVEL; pEventCfg.FastMode = HRTIM_EVENTFASTMODE_DISABLE;

if (HAL_HRTIM_EventConfig(&hhrtim1, HRTIM_EVENT_1, &pEventCfg) != HAL_OK) { Error_Handler(); }

pEventCfg.Source = HRTIM_EEV4SRC_COMP1_OUT;

if (HAL_HRTIM_EventConfig(&hhrtim1, HRTIM_EVENT_4, &pEventCfg) != HAL_OK) { Error_Handler(); }

pEventCfg.Source = HRTIM_EEV10SRC_GPIO; pEventCfg.Filter = HRTIM_EVENTFILTER_NONE;

if (HAL_HRTIM_EventConfig(&hhrtim1, HRTIM_EVENT_10, &pEventCfg) != HAL_OK) { Error_Handler(); }

if (HAL_HRTIM_FaultPrescalerConfig(&hhrtim1, HRTIM_FAULTPRESCALER_DIV1) != HAL_OK) { Error_Handler(); }

pFaultBlkCfg.Threshold = 0; pFaultBlkCfg.ResetMode = HRTIM_FAULTCOUNTERRST_UNCONDITIONAL; pFaultBlkCfg.BlankingSource = HRTIM_FAULTBLANKINGMODE_RSTALIGNED;

if (HAL_HRTIM_FaultCounterConfig(&hhrtim1, HRTIM_FAULT_5, &pFaultBlkCfg) != HAL_OK) { Error_Handler(); }

if (HAL_HRTIM_FaultBlankingConfigAndEnable(&hhrtim1, HRTIM_FAULT_5, &pFaultBlkCfg) != HAL_OK) { Error_Handler(); }

pFaultCfg.Source = HRTIM_FAULTSOURCE_DIGITALINPUT; pFaultCfg.Polarity = HRTIM_FAULTPOLARITY_HIGH; pFaultCfg.Filter = HRTIM_FAULTFILTER_NONE; pFaultCfg.Lock = HRTIM_FAULTLOCK_READWRITE;

if (HAL_HRTIM_FaultConfig(&hhrtim1, HRTIM_FAULT_5, &pFaultCfg) != HAL_OK) { Error_Handler(); }

HAL_HRTIM_FaultModeCtl(&hhrtim1, HRTIM_FAULT_5, HRTIM_FAULTMODECTL_ENABLED); pTimeBaseCfg.Period = 5000; pTimeBaseCfg.RepetitionCounter = 0x00; pTimeBaseCfg.PrescalerRatio = HRTIM_PRESCALERRATIO_MUL2; pTimeBaseCfg.Mode = HRTIM_MODE_CONTINUOUS;

if (HAL_HRTIM_TimeBaseConfig(&hhrtim1, HRTIM_TIMERINDEX_MASTER, &pTimeBaseCfg) != HAL_OK) { Error_Handler(); }

pTimerCfg.InterruptRequests = HRTIM_MASTER_IT_NONE; pTimerCfg.DMARequests = HRTIM_MASTER_DMA_NONE; pTimerCfg.DMASrcAddress = 0x0000; pTimerCfg.DMADstAddress = 0x0000; pTimerCfg.DMASize = 0x1; pTimerCfg.HalfModeEnable = HRTIM_HALFMODE_DISABLED; pTimerCfg.InterleavedMode = HRTIM_INTERLEAVED_MODE_QUAD; pTimerCfg.StartOnSync = HRTIM_SYNCSTART_DISABLED; pTimerCfg.ResetOnSync = HRTIM_SYNCRESET_DISABLED; pTimerCfg.DACSynchro = HRTIM_DACSYNC_NONE; pTimerCfg.PreloadEnable = HRTIM_PRELOAD_DISABLED; pTimerCfg.UpdateGating = HRTIM_UPDATEGATING_INDEPENDENT; pTimerCfg.BurstMode = HRTIM_TIMERBURSTMODE_MAINTAINCLOCK; pTimerCfg.RepetitionUpdate = HRTIM_UPDATEONREPETITION_DISABLED; pTimerCfg.ReSyncUpdate = HRTIM_TIMERESYNC_UPDATE_UNCONDITIONAL;

if (HAL_HRTIM_WaveformTimerConfig(&hhrtim1, HRTIM_TIMERINDEX_MASTER, &pTimerCfg) != HAL_OK) { Error_Handler(); }

pCompareCfg.CompareValue = 4999;

if (HAL_HRTIM_WaveformCompareConfig(&hhrtim1, HRTIM_TIMERINDEX_MASTER, HRTIM_COMPAREUNIT_4, &pCompareCfg) != HAL_OK) { Error_Handler(); }

pTimeBaseCfg.Period = 20000;

if (HAL_HRTIM_TimeBaseConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_A, &pTimeBaseCfg) != HAL_OK) { Error_Handler(); }

/------------------ 配置HRTIM TRG2用于ADC触发 ------------------/ /**

  • @brief 配置HRTIM的TRG2输出
  • @note 用于触发ADC1和ADC2的注入组转换,实现4相电流的双重采样
  • TRG2由A、B、C、D四个定时器的CMP2事件触发 */ HRTIM_ADCTriggerCfgTypeDef pAdcTrigCfg = {0}; pAdcTrigCfg.UpdateSource = HRTIM_ADCTRIGGERUPDATE_MASTER; pAdcTrigCfg.Trigger = HRTIM_ADCTRIGGEREVENT24_TIMERA_CMP2 | HRTIM_ADCTRIGGEREVENT24_TIMERB_CMP2 | HRTIM_ADCTRIGGEREVENT24_TIMERA_CMP4 | HRTIM_ADCTRIGGEREVENT24_TIMERB_CMP4;

if (HAL_HRTIM_ADCTriggerConfig(&hhrtim1, HRTIM_ADCTRIGGER_2, &pAdcTrigCfg) != HAL_OK) { Error_Handler(); } // if (HAL_HRTIM_ADCPostScalerConfig(&hhrtim1, HRTIM_ADCTRIGGER_2, 0x0) != HAL_OK) // { // Error_Handler(); // }

pAdcTrigCfg.UpdateSource = HRTIM_ADCTRIGGERUPDATE_MASTER; pAdcTrigCfg.Trigger = HRTIM_ADCTRIGGEREVENT24_TIMERC_CMP2|HRTIM_ADCTRIGGEREVENT24_TIMERC_CMP4 |HRTIM_ADCTRIGGEREVENT24_TIMERD_CMP2|HRTIM_ADCTRIGGEREVENT24_TIMERD_CMP4;

if (HAL_HRTIM_ADCTriggerConfig(&hhrtim1, HRTIM_ADCTRIGGER_4, &pAdcTrigCfg) != HAL_OK) { Error_Handler(); } // if (HAL_HRTIM_ADCPostScalerConfig(&hhrtim1, HRTIM_ADCTRIGGER_4, 0x0) != HAL_OK) // { // Error_Handler(); // }

pTimerCtl.UpDownMode = HRTIM_TIMERUPDOWNMODE_UP; pTimerCtl.GreaterCMP1 = HRTIM_TIMERGTCMP1_EQUAL; pTimerCtl.DualChannelDacEnable = HRTIM_TIMER_DCDE_DISABLED;

if (HAL_HRTIM_WaveformTimerControl(&hhrtim1, HRTIM_TIMERINDEX_TIMER_A, &pTimerCtl) != HAL_OK) { Error_Handler(); }

pTimerCfg.InterruptRequests = HRTIM_TIM_IT_NONE; pTimerCfg.DMARequests = HRTIM_TIM_DMA_NONE; pTimerCfg.InterleavedMode = HRTIM_INTERLEAVED_MODE_DISABLED; pTimerCfg.PreloadEnable = HRTIM_PRELOAD_ENABLED; pTimerCfg.RepetitionUpdate = HRTIM_UPDATEONREPETITION_ENABLED; pTimerCfg.PushPull = HRTIM_TIMPUSHPULLMODE_DISABLED; pTimerCfg.FaultEnable = HRTIM_TIMFAULTENABLE_NONE; pTimerCfg.FaultLock = HRTIM_TIMFAULTLOCK_READWRITE; pTimerCfg.DeadTimeInsertion = HRTIM_TIMDEADTIMEINSERTION_DISABLED; pTimerCfg.DelayedProtectionMode = HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DISABLED; pTimerCfg.UpdateTrigger = HRTIM_TIMUPDATETRIGGER_NONE; pTimerCfg.ResetTrigger = HRTIM_TIMRESETTRIGGER_MASTER_PER; pTimerCfg.ResetUpdate = HRTIM_TIMUPDATEONRESET_ENABLED;

if (HAL_HRTIM_WaveformTimerConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_A, &pTimerCfg) != HAL_OK) { Error_Handler(); }

pTimerCfg.ResetTrigger = HRTIM_TIMRESETTRIGGER_MASTER_CMP1;

if (HAL_HRTIM_WaveformTimerConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_B, &pTimerCfg) != HAL_OK) { Error_Handler(); }

pTimerCfg.ResetTrigger = HRTIM_TIMRESETTRIGGER_MASTER_CMP2;

if (HAL_HRTIM_WaveformTimerConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_C, &pTimerCfg) != HAL_OK) { Error_Handler(); }

pTimerCfg.DelayedProtectionMode = HRTIM_TIMER_D_E_DELAYEDPROTECTION_DISABLED; pTimerCfg.ResetTrigger = HRTIM_TIMRESETTRIGGER_MASTER_CMP3;

if (HAL_HRTIM_WaveformTimerConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_D, &pTimerCfg) != HAL_OK) { Error_Handler(); }

/------------------ 配置A、B、C、D定时器的CMP1 ------------------/ pCompareCfg.CompareValue = 2000;

if (HAL_HRTIM_WaveformCompareConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_A, HRTIM_COMPAREUNIT_1, &pCompareCfg) != HAL_OK) { Error_Handler(); }

if (HAL_HRTIM_WaveformCompareConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_B, HRTIM_COMPAREUNIT_1, &pCompareCfg) != HAL_OK) { Error_Handler(); }

if (HAL_HRTIM_WaveformCompareConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_C, HRTIM_COMPAREUNIT_1, &pCompareCfg) != HAL_OK) { Error_Handler(); }

if (HAL_HRTIM_WaveformCompareConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_D, HRTIM_COMPAREUNIT_1, &pCompareCfg) != HAL_OK) { Error_Handler(); }

/------------------ 配置A、B、C、D定时器的CMP2 (用于ADC触发) ------------------/ /**

  • @brief 配置A、B、C、D定时器的CMP2
  • @note A、B 的 CMP2和CMP2事件用于触发ADC1注入采样, C、D 的 CMP3和CMP4事件用于触发ADC2注入采样,实现4相电流的双重采样
  • */ pCompareCfg.CompareValue = 200;

if (HAL_HRTIM_WaveformCompareConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_A, HRTIM_COMPAREUNIT_2, &pCompareCfg) != HAL_OK) { Error_Handler(); } pCompareCfg.CompareValue = 5000 / 4 + 200; if (HAL_HRTIM_WaveformCompareConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_B, HRTIM_COMPAREUNIT_2, &pCompareCfg) != HAL_OK) { Error_Handler(); } pCompareCfg.CompareValue = 5000 / 4 2 + 200; if (HAL_HRTIM_WaveformCompareConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_C, HRTIM_COMPAREUNIT_2, &pCompareCfg) != HAL_OK) { Error_Handler(); } pCompareCfg.CompareValue = 5000 / 4 3 + 200; if (HAL_HRTIM_WaveformCompareConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_D, HRTIM_COMPAREUNIT_2, &pCompareCfg) != HAL_OK) { Error_Handler(); }

pCompareCfg.CompareValue = 400;

if (HAL_HRTIM_WaveformCompareConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_A, HRTIM_COMPAREUNIT_4, &pCompareCfg) != HAL_OK) { Error_Handler(); } pCompareCfg.CompareValue = 5000 / 4 + 400; if (HAL_HRTIM_WaveformCompareConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_B, HRTIM_COMPAREUNIT_4, &pCompareCfg) != HAL_OK) { Error_Handler(); } pCompareCfg.CompareValue = 5000 / 4 2 + 400; if (HAL_HRTIM_WaveformCompareConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_C, HRTIM_COMPAREUNIT_4, &pCompareCfg) != HAL_OK) { Error_Handler(); } pCompareCfg.CompareValue = 5000 / 4 3 + 400; if (HAL_HRTIM_WaveformCompareConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_D, HRTIM_COMPAREUNIT_4, &pCompareCfg) != HAL_OK) { Error_Handler(); }

pDeadTimeCfg.Prescaler = HRTIM_TIMDEADTIME_PRESCALERRATIO_DIV1; pDeadTimeCfg.RisingValue = 1; pDeadTimeCfg.RisingSign = HRTIM_TIMDEADTIME_RISINGSIGN_POSITIVE; pDeadTimeCfg.RisingLock = HRTIM_TIMDEADTIME_RISINGLOCK_WRITE; pDeadTimeCfg.RisingSignLock = HRTIM_TIMDEADTIME_RISINGSIGNLOCK_WRITE; pDeadTimeCfg.FallingValue = 1; pDeadTimeCfg.FallingSign = HRTIM_TIMDEADTIME_FALLINGSIGN_POSITIVE; pDeadTimeCfg.FallingLock = HRTIM_TIMDEADTIME_FALLINGLOCK_WRITE; pDeadTimeCfg.FallingSignLock = HRTIM_TIMDEADTIME_FALLINGSIGNLOCK_WRITE;

if (HAL_HRTIM_DeadTimeConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_A, &pDeadTimeCfg) != HAL_OK) { Error_Handler(); }

if (HAL_HRTIM_DeadTimeConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_B, &pDeadTimeCfg) != HAL_OK) { Error_Handler(); }

if (HAL_HRTIM_DeadTimeConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_C, &pDeadTimeCfg) != HAL_OK) { Error_Handler(); }

if (HAL_HRTIM_DeadTimeConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_D, &pDeadTimeCfg) != HAL_OK) { Error_Handler(); }

pOutputCfg.Polarity = HRTIM_OUTPUTPOLARITY_HIGH; pOutputCfg.SetSource = HRTIM_OUTPUTSET_MASTERPER; pOutputCfg.ResetSource = HRTIM_OUTPUTRESET_TIMCMP1|HRTIM_OUTPUTSET_EEV_1 |HRTIM_OUTPUTSET_EEV_4; pOutputCfg.IdleMode = HRTIM_OUTPUTIDLEMODE_NONE; pOutputCfg.IdleLevel = HRTIM_OUTPUTIDLELEVEL_INACTIVE; pOutputCfg.FaultLevel = HRTIM_OUTPUTFAULTLEVEL_NONE; pOutputCfg.ChopperModeEnable = HRTIM_OUTPUTCHOPPERMODE_DISABLED; pOutputCfg.BurstModeEntryDelayed = HRTIM_OUTPUTBURSTMODEENTRY_REGULAR;

if (HAL_HRTIM_WaveformOutputConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_A, HRTIM_OUTPUT_TA1, &pOutputCfg) != HAL_OK) { Error_Handler(); }

pOutputCfg.SetSource = HRTIM_OUTPUTSET_MASTERCMP1; pOutputCfg.ResetSource = HRTIM_OUTPUTRESET_TIMCMP1;

if (HAL_HRTIM_WaveformOutputConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_B, HRTIM_OUTPUT_TB1, &pOutputCfg) != HAL_OK) { Error_Handler(); }

pOutputCfg.SetSource = HRTIM_OUTPUTSET_MASTERCMP2;

if (HAL_HRTIM_WaveformOutputConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_C, HRTIM_OUTPUT_TC1, &pOutputCfg) != HAL_OK) { Error_Handler(); }

pOutputCfg.SetSource = HRTIM_OUTPUTSET_MASTERCMP3;

if (HAL_HRTIM_WaveformOutputConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_D, HRTIM_OUTPUT_TD1, &pOutputCfg) != HAL_OK) { Error_Handler(); }

pOutputCfg.SetSource = HRTIM_OUTPUTSET_NONE; pOutputCfg.ResetSource = HRTIM_OUTPUTRESET_NONE;

if (HAL_HRTIM_WaveformOutputConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_A, HRTIM_OUTPUT_TA2, &pOutputCfg) != HAL_OK) { Error_Handler(); }

if (HAL_HRTIM_WaveformOutputConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_B, HRTIM_OUTPUT_TB2, &pOutputCfg) != HAL_OK) { Error_Handler(); }

if (HAL_HRTIM_WaveformOutputConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_C, HRTIM_OUTPUT_TC2, &pOutputCfg) != HAL_OK) { Error_Handler(); }

if (HAL_HRTIM_WaveformOutputConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_D, HRTIM_OUTPUT_TD2, &pOutputCfg) != HAL_OK) { Error_Handler(); }

if (HAL_HRTIM_TimeBaseConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_B, &pTimeBaseCfg) != HAL_OK) { Error_Handler(); }

if (HAL_HRTIM_WaveformTimerControl(&hhrtim1, HRTIM_TIMERINDEX_TIMER_B, &pTimerCtl) != HAL_OK) { Error_Handler(); }

// pCompareCfg.CompareValue = 2000;

// if (HAL_HRTIM_WaveformCompareConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_B, HRTIM_COMPAREUNIT_1, &pCompareCfg) != HAL_OK) // { // Error_Handler(); // }

if (HAL_HRTIM_TimeBaseConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_C, &pTimeBaseCfg) != HAL_OK) { Error_Handler(); }

if (HAL_HRTIM_WaveformTimerControl(&hhrtim1, HRTIM_TIMERINDEX_TIMER_C, &pTimerCtl) != HAL_OK) { Error_Handler(); }

// pCompareCfg.CompareValue = 3000;

// if (HAL_HRTIM_WaveformCompareConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_C, HRTIM_COMPAREUNIT_1, &pCompareCfg) != HAL_OK) // { // Error_Handler(); // }

if (HAL_HRTIM_TimeBaseConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_D, &pTimeBaseCfg) != HAL_OK) { Error_Handler(); }

if (HAL_HRTIM_WaveformTimerControl(&hhrtim1, HRTIM_TIMERINDEX_TIMER_D, &pTimerCtl) != HAL_OK) { Error_Handler(); }

// pCompareCfg.CompareValue = 4000;

// if (HAL_HRTIM_WaveformCompareConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_D, HRTIM_COMPAREUNIT_1, &pCompareCfg) != HAL_OK) // { // Error_Handler(); // }

/ USER CODE BEGIN HRTIM1_Init 2 /

/ USER CODE END HRTIM1_Init 2 / HAL_HRTIM_MspPostInit(&hhrtim1); }

void HAL_HRTIM_MspInit(HRTIM_HandleTypeDef* hrtimHandle) {

GPIO_InitTypeDef GPIO_InitStruct = {0};

if (hrtimHandle->Instance==HRTIM1) { / USER CODE BEGIN HRTIM1_MspInit 0 /

/* USER CODE END HRTIM1_MspInit 0 */
/* HRTIM1 clock enable */
__HAL_RCC_HRTIM1_CLK_ENABLE();

__HAL_RCC_GPIOC_CLK_ENABLE();
/**HRTIM1 GPIO Configuration
PC6     ------> HRTIM1_EEV10
PC7     ------> HRTIM1_FLT5
*/
GPIO_InitStruct.Pin = Over_Cur_EEV_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF3_HRTIM1;
HAL_GPIO_Init(Over_Cur_EEV_GPIO_Port, &GPIO_InitStruct);

GPIO_InitStruct.Pin = Over_Cur_FLT_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Alternate = GPIO_AF3_HRTIM1;
HAL_GPIO_Init(Over_Cur_FLT_GPIO_Port, &GPIO_InitStruct);

/* USER CODE BEGIN HRTIM1_MspInit 1 */

/* USER CODE END HRTIM1_MspInit 1 */

} }

void HAL_HRTIM_MspPostInit(HRTIM_HandleTypeDef* hrtimHandle) {

GPIO_InitTypeDef GPIO_InitStruct = {0};

if (hrtimHandle->Instance==HRTIM1) { / USER CODE BEGIN HRTIM1_MspPostInit 0 /

/* USER CODE END HRTIM1_MspPostInit 0 */

__HAL_RCC_GPIOB_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
/**HRTIM1 GPIO Configuration
PB12     ------> HRTIM1_CHC1
PB13     ------> HRTIM1_CHC2
PB14     ------> HRTIM1_CHD1
PB15     ------> HRTIM1_CHD2
PA8     ------> HRTIM1_CHA1
PA9     ------> HRTIM1_CHA2
PA10     ------> HRTIM1_CHB1
PA11     ------> HRTIM1_CHB2
*/
GPIO_InitStruct.Pin = GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF13_HRTIM1;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF13_HRTIM1;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

/* USER CODE BEGIN HRTIM1_MspPostInit 1 */
HAL_NVIC_SetPriority(HRTIM1_Master_IRQn, 1, 0);
HAL_NVIC_EnableIRQ(HRTIM1_Master_IRQn);
/* USER CODE BEGIN HRTIM1_MspInit 1 */
__HAL_HRTIM_MASTER_ENABLE_IT(&hhrtim1, HRTIM_MASTER_IT_MREP);
/* USER CODE END HRTIM1_MspPostInit 1 */

} }

void HAL_HRTIM_MspDeInit(HRTIM_HandleTypeDef* hrtimHandle) {

if (hrtimHandle->Instance==HRTIM1) { / USER CODE BEGIN HRTIM1_MspDeInit 0 /

/* USER CODE END HRTIM1_MspDeInit 0 */
/* Peripheral clock disable */
__HAL_RCC_HRTIM1_CLK_DISABLE();

/**HRTIM1 GPIO Configuration
PB12     ------> HRTIM1_CHC1
PB13     ------> HRTIM1_CHC2
PB14     ------> HRTIM1_CHD1
PB15     ------> HRTIM1_CHD2
PC6     ------> HRTIM1_EEV10
PC7     ------> HRTIM1_FLT5
PA8     ------> HRTIM1_CHA1
PA9     ------> HRTIM1_CHA2
PA10     ------> HRTIM1_CHB1
PA11     ------> HRTIM1_CHB2
*/
HAL_GPIO_DeInit(GPIOB, GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15);

HAL_GPIO_DeInit(GPIOC, Over_Cur_EEV_Pin|Over_Cur_FLT_Pin);

HAL_GPIO_DeInit(GPIOA, GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11);

/* USER CODE BEGIN HRTIM1_MspDeInit 1 */

/* USER CODE END HRTIM1_MspDeInit 1 */

} }

/ USER CODE BEGIN 1 / void HAL_HRTIM_RepetitionEventCallback(HRTIM_HandleTypeDef *hhrtim, uint32_t TimerIdx) { if (TimerIdx == HRTIM_TIMERINDEX_MASTER) {

// HAL_GPIO_WritePin(GPIOC, GPIO_PIN_9, GPIO_PIN_RESET); } } / USER CODE END 1 /

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版