硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3126|回复: 0
收起左侧

[HRTIM] STM32H7的HRTIM Fault故障保护功能,可在输出故障时禁止输出

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2018-9-1 02:10:44 | 显示全部楼层 |阅读模式
说明:

支持5路Fault输入:
1.png



下面是官方提供的一个参考配置:
主要是通过函数HAL_HRTIM_WaveformOutputConfig设置。

  1. /* Private typedef -----------------------------------------------------------*/
  2. /* Private define ------------------------------------------------------------*/
  3. #define HRTIM_TIMA_PERIOD  0xFFFF

  4. /* Private macro -------------------------------------------------------------*/
  5. /* Private variables ---------------------------------------------------------*/
  6. /* Timer handler declaration */
  7. HRTIM_HandleTypeDef                 HrtimHandle;

  8. HRTIM_TimeBaseCfgTypeDef            sConfig_time_base;
  9. HRTIM_TimerCfgTypeDef               sConfig_timerA;
  10. HRTIM_OutputCfgTypeDef              sConfig_output_config;
  11. HRTIM_CompareCfgTypeDef             sConfig_compare;
  12. HRTIM_FaultCfgTypeDef               sConfig_fault2;

  13. /* Private function prototypes -----------------------------------------------*/
  14. static void SystemClock_Config(void);
  15. static void Error_Handler(void);
  16. static void CPU_CACHE_Enable(void);

  17. /* Private functions ---------------------------------------------------------*/

  18. /**
  19.   * @brief  Main program
  20.   * @param  None
  21.   * @retval None
  22.   */
  23. int main(void)
  24. {

  25.   /* Enable the CPU Cache */
  26.   CPU_CACHE_Enable();

  27.   /* STM32H7xx HAL library initialization:
  28.        - Configure the Systick to generate an interrupt each 1 msec
  29.        - Set NVIC Group Priority to 4
  30.        - Low Level Initialization
  31.   */
  32.   HAL_Init();

  33.   /* Configure the system clock to 400 MHz */
  34.   SystemClock_Config();

  35.   /*##-1- Configure the HRTIM peripheral ######################################################*/
  36.   /* Initialize the HRTIM structure */
  37.   HrtimHandle.Instance = HRTIM1;
  38.   HrtimHandle.Init.HRTIMInterruptResquests = HRTIM_IT_NONE;
  39.   HrtimHandle.Init.SyncOptions = HRTIM_SYNCOPTION_NONE;

  40.   HAL_HRTIM_Init(&HrtimHandle);

  41.   /*##-2- Configure the HRTIM TIMA PWM channels 1 & 2 #########################################*/
  42.   sConfig_time_base.Mode = HRTIM_MODE_CONTINUOUS;
  43.   sConfig_time_base.Period = HRTIM_TIMA_PERIOD;
  44.   sConfig_time_base.PrescalerRatio = HRTIM_PRESCALERRATIO_DIV1;
  45.   sConfig_time_base.RepetitionCounter = 0;
  46.          
  47.   HAL_HRTIM_TimeBaseConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_A, &sConfig_time_base);

  48.   sConfig_timerA.DMARequests = HRTIM_TIM_DMA_NONE;
  49.   sConfig_timerA.HalfModeEnable = HRTIM_HALFMODE_DISABLED;
  50.   sConfig_timerA.StartOnSync = HRTIM_SYNCSTART_DISABLED;
  51.   sConfig_timerA.ResetOnSync = HRTIM_SYNCRESET_DISABLED;
  52.   sConfig_timerA.DACSynchro = HRTIM_DACSYNC_NONE;
  53.   sConfig_timerA.PreloadEnable = HRTIM_PRELOAD_ENABLED;
  54.   sConfig_timerA.UpdateGating = HRTIM_UPDATEGATING_INDEPENDENT;
  55.   sConfig_timerA.BurstMode = HRTIM_TIMERBURSTMODE_MAINTAINCLOCK;
  56.   sConfig_timerA.RepetitionUpdate = HRTIM_UPDATEONREPETITION_ENABLED;
  57.   sConfig_timerA.ResetUpdate = HRTIM_TIMUPDATEONRESET_DISABLED;
  58.   sConfig_timerA.InterruptRequests = HRTIM_TIM_IT_NONE;
  59.   sConfig_timerA.PushPull = HRTIM_TIMPUSHPULLMODE_DISABLED;
  60.   sConfig_timerA.FaultEnable = HRTIM_TIMFAULTENABLE_FAULT2;
  61.   sConfig_timerA.FaultLock = HRTIM_TIMFAULTLOCK_READWRITE;
  62.   sConfig_timerA.DeadTimeInsertion = HRTIM_TIMDEADTIMEINSERTION_DISABLED;
  63.   sConfig_timerA.DelayedProtectionMode = HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DISABLED;
  64.   sConfig_timerA.UpdateTrigger= HRTIM_TIMUPDATETRIGGER_NONE;
  65.   sConfig_timerA.ResetTrigger = HRTIM_TIMRESETTRIGGER_NONE;

  66.   HAL_HRTIM_WaveformTimerConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_A,&sConfig_timerA);

  67.   sConfig_compare.AutoDelayedMode = HRTIM_AUTODELAYEDMODE_REGULAR;
  68.   sConfig_compare.AutoDelayedTimeout = 0;
  69.   sConfig_compare.CompareValue = HRTIM_TIMA_PERIOD/2;

  70.   HAL_HRTIM_WaveformCompareConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_A, HRTIM_COMPAREUNIT_1, &sConfig_compare);

  71.   sConfig_compare.CompareValue = HRTIM_TIMA_PERIOD/4;
  72.   HAL_HRTIM_WaveformCompareConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_A, HRTIM_COMPAREUNIT_2, &sConfig_compare);

  73.   sConfig_output_config.Polarity = HRTIM_OUTPUTPOLARITY_HIGH;
  74.   sConfig_output_config.SetSource = HRTIM_OUTPUTSET_TIMPER;
  75.   sConfig_output_config.ResetSource = HRTIM_OUTPUTRESET_TIMCMP1;
  76.   sConfig_output_config.IdleMode = HRTIM_OUTPUTIDLEMODE_NONE;
  77.   sConfig_output_config.IdleLevel = HRTIM_OUTPUTIDLELEVEL_INACTIVE;
  78.   sConfig_output_config.FaultLevel = HRTIM_OUTPUTFAULTLEVEL_INACTIVE;
  79.   sConfig_output_config.ChopperModeEnable = HRTIM_OUTPUTCHOPPERMODE_DISABLED;
  80.   sConfig_output_config.BurstModeEntryDelayed = HRTIM_OUTPUTBURSTMODEENTRY_REGULAR;

  81.   HAL_HRTIM_WaveformOutputConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_A, HRTIM_OUTPUT_TA1, &sConfig_output_config);

  82.   sConfig_output_config.ResetSource = HRTIM_OUTPUTRESET_TIMPER;
  83.   sConfig_output_config.SetSource = HRTIM_OUTPUTSET_TIMCMP2;

  84.   HAL_HRTIM_WaveformOutputConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_A, HRTIM_OUTPUT_TA2, &sConfig_output_config);

  85.   /*##-3- Fault Event configuration   #########################################################*/
  86. /* Fault conditionning configuration */
  87.   sConfig_fault2.Source = HRTIM_FAULTSOURCE_DIGITALINPUT;
  88.   sConfig_fault2.Polarity = HRTIM_FAULTPOLARITY_HIGH;
  89.   sConfig_fault2.Filter = HRTIM_FAULTFILTER_NONE;
  90.   sConfig_fault2.Lock = HRTIM_FAULTLOCK_READWRITE;
  91.   
  92.   HAL_HRTIM_FaultPrescalerConfig(&HrtimHandle, HRTIM_FAULTPRESCALER_DIV1);
  93.   
  94.   HAL_HRTIM_FaultConfig(&HrtimHandle, HRTIM_FAULT_2, &sConfig_fault2);
  95.   
  96.   /* Enable Fault2 input */
  97.   HAL_HRTIM_FaultModeCtl(&HrtimHandle, HRTIM_FAULT_2, HRTIM_FAULTMODECTL_ENABLED);

  98.   /*##-4- Start PWM signals generation ########################################################*/
  99.   if (HAL_HRTIM_WaveformOutputStart(&HrtimHandle, HRTIM_OUTPUT_TA1 + HRTIM_OUTPUT_TA2) != HAL_OK)
  100.   {
  101.     /* PWM Generation Error */
  102.     Error_Handler();
  103.   }

  104. /*##-5- Start HRTIM counter ###################################################################*/
  105.   if (HAL_HRTIM_WaveformCounterStart(&HrtimHandle, HRTIM_TIMERID_TIMER_A) != HAL_OK)
  106.   {
  107.     /* PWM Generation Error */
  108.     Error_Handler();
  109.   }
  110.   /* Infinite loop */
  111.   while (1)
  112.   {
  113.   }
  114. }
复制代码




回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-28 06:09 , Processed in 0.205027 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表