硬汉嵌入式论坛

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

[HRTIM] STM32H7的HRTIM生成任意波形

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2018-8-31 01:46:56 | 显示全部楼层 |阅读模式
说明:

这个例程的配置也是有点复杂,可以合成任意波形效果。

关键还是这两个参数成员的配置:

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;



波形效果:
1.png


代码:
  1. /* Private typedef -----------------------------------------------------------*/
  2. /* Private define ------------------------------------------------------------*/
  3. #define HRTIM_MAX_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_timerD;
  10. HRTIM_OutputCfgTypeDef              sConfig_output_config;
  11. HRTIM_CompareCfgTypeDef             sConfig_compare;
  12.         
  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 (minimal configuration) */
  37.   HrtimHandle.Instance = HRTIM1;
  38.   HrtimHandle.Init.HRTIMInterruptResquests = HRTIM_IT_NONE;
  39.   HrtimHandle.Init.SyncOptions = HRTIM_SYNCOPTION_NONE;

  40.   /* Initialize HRTIM */
  41.   HAL_HRTIM_Init(&HrtimHandle);

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

  48.   /* TIMERD global configuration: preload enabled on REP event */
  49.   sConfig_timerD.DMARequests = HRTIM_TIM_DMA_NONE;
  50.   sConfig_timerD.HalfModeEnable = HRTIM_HALFMODE_DISABLED;
  51.   sConfig_timerD.StartOnSync = HRTIM_SYNCSTART_DISABLED;
  52.   sConfig_timerD.ResetOnSync = HRTIM_SYNCRESET_DISABLED;
  53.   sConfig_timerD.DACSynchro = HRTIM_DACSYNC_NONE;
  54.   sConfig_timerD.PreloadEnable = HRTIM_PRELOAD_ENABLED;
  55.   sConfig_timerD.UpdateGating = HRTIM_UPDATEGATING_INDEPENDENT;
  56.   sConfig_timerD.BurstMode = HRTIM_TIMERBURSTMODE_MAINTAINCLOCK;
  57.   sConfig_timerD.RepetitionUpdate = HRTIM_UPDATEONREPETITION_ENABLED;
  58.   sConfig_timerD.ResetUpdate = HRTIM_TIMUPDATEONRESET_DISABLED;
  59.   sConfig_timerD.InterruptRequests = HRTIM_TIM_IT_NONE;
  60.   sConfig_timerD.PushPull = HRTIM_TIMPUSHPULLMODE_DISABLED;
  61.   sConfig_timerD.FaultEnable = HRTIM_TIMFAULTENABLE_NONE;
  62.   sConfig_timerD.FaultLock = HRTIM_TIMFAULTLOCK_READWRITE;
  63.   sConfig_timerD.DeadTimeInsertion = HRTIM_TIMDEADTIMEINSERTION_DISABLED;
  64.   sConfig_timerD.DelayedProtectionMode = HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DISABLED;
  65.   sConfig_timerD.UpdateTrigger= HRTIM_TIMUPDATETRIGGER_NONE;
  66.   sConfig_timerD.ResetTrigger = HRTIM_TIMRESETTRIGGER_NONE;
  67.         
  68.   HAL_HRTIM_WaveformTimerConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_D,&sConfig_timerD);

  69.   /* TD1 waveform description: toggles on TIMD period, CMP1 and CMP2 event */
  70.   sConfig_output_config.Polarity = HRTIM_OUTPUTPOLARITY_HIGH;
  71.   sConfig_output_config.SetSource = HRTIM_OUTPUTSET_TIMPER + HRTIM_OUTPUTSET_TIMCMP1 + HRTIM_OUTPUTSET_TIMCMP2;
  72.   sConfig_output_config.ResetSource  = HRTIM_OUTPUTRESET_TIMPER + HRTIM_OUTPUTRESET_TIMCMP1 + HRTIM_OUTPUTRESET_TIMCMP2;
  73.   sConfig_output_config.IdleMode = HRTIM_OUTPUTIDLEMODE_NONE;
  74.   sConfig_output_config.IdleLevel = HRTIM_OUTPUTIDLELEVEL_INACTIVE;
  75.   sConfig_output_config.FaultLevel = HRTIM_OUTPUTFAULTLEVEL_NONE;
  76.   sConfig_output_config.ChopperModeEnable = HRTIM_OUTPUTCHOPPERMODE_DISABLED;
  77.   sConfig_output_config.BurstModeEntryDelayed = HRTIM_OUTPUTBURSTMODEENTRY_REGULAR;
  78.         
  79.   HAL_HRTIM_WaveformOutputConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_D, HRTIM_OUTPUT_TD1, &sConfig_output_config);

  80.   /* TD2 waveform description: set on TIMD PER and CMP2 and */
  81.   /* reset on TIMD CMP1 and CMP3 event                      */
  82.   sConfig_output_config.SetSource = HRTIM_OUTPUTSET_TIMPER + HRTIM_OUTPUTSET_TIMCMP2;
  83.   sConfig_output_config.ResetSource  = HRTIM_OUTPUTRESET_TIMCMP1 + HRTIM_OUTPUTRESET_TIMCMP3;
  84.         
  85.   HAL_HRTIM_WaveformOutputConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_D, HRTIM_OUTPUT_TD2, &sConfig_output_config);

  86.   /* Set compare register 1 in Timer D */
  87.   sConfig_compare.CompareValue = HRTIM_MAX_PERIOD/4;     /* 25% of the period */
  88.   HAL_HRTIM_WaveformCompareConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_D, HRTIM_COMPAREUNIT_1, &sConfig_compare);

  89.   /* Set compare register 2 in Timer D */
  90.   sConfig_compare.AutoDelayedMode = HRTIM_AUTODELAYEDMODE_REGULAR;
  91.   sConfig_compare.AutoDelayedTimeout = 0;
  92.   sConfig_compare.CompareValue = (3*HRTIM_MAX_PERIOD)/8;     /* 37.5% of the period */
  93.   HAL_HRTIM_WaveformCompareConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_D, HRTIM_COMPAREUNIT_2, &sConfig_compare);

  94.   /* Set compare register 3 in Timer D */
  95.   sConfig_compare.CompareValue = HRTIM_MAX_PERIOD/2;     /* 50% of the period */
  96.   HAL_HRTIM_WaveformCompareConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_D, HRTIM_COMPAREUNIT_3, &sConfig_compare);
  97.                         
  98.   /*##-7- Start Waveform signals generation ########################################################*/
  99.   if (HAL_HRTIM_WaveformOutputStart(&HrtimHandle, HRTIM_OUTPUT_TD1 + HRTIM_OUTPUT_TD2) != HAL_OK)
  100.   {
  101.     /* Waveform Generation Error */
  102.     Error_Handler();
  103.   }
  104.         if (HAL_HRTIM_WaveformCounterStart(&HrtimHandle, HRTIM_TIMERID_TIMER_D) != HAL_OK)
  105.   {
  106.     /* Waveform Generation Error */
  107.     Error_Handler();
  108.   }         
  109.   /* Infinite loop */
  110.   while (1)
  111.   {
  112.   }
  113. }
复制代码



回复

使用道具 举报

56

主题

904

回帖

1072

积分

至尊会员

积分
1072
发表于 2018-8-31 20:45:58 | 显示全部楼层
控制12路步进电机  S加减速曲线。。。。不占用CPU。。。。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 15:13 , Processed in 0.157776 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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