硬汉嵌入式论坛

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

[HRTIM] STM32H7的HRTIM波形模式使用,相比简单模式就复杂的多了

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

同样是生成不同频率的波形,这种模式就要复杂的多,参数太多。

简单模式生成不同频率的帖子:
http://www.armbbs.cn/forum.php?m ... &extra=page%3D1


前两路波形效果:
QQ截图20180831013246.png


代码:

  1. /* Private typedef -----------------------------------------------------------*/
  2. /* Private define ------------------------------------------------------------*/
  3. #define HRTIM_TIMA_PERIOD  0xFFFF
  4. #define HRTIM_TIMB_PERIOD  0x1999
  5. #define HRTIM_TIMC_PERIOD  0x28F

  6. /* Private macro -------------------------------------------------------------*/
  7. /* Private variables ---------------------------------------------------------*/
  8. /* Timer handler declaration */
  9. HRTIM_HandleTypeDef                 HrtimHandle;

  10. HRTIM_TimeBaseCfgTypeDef            sConfig_time_base;
  11. HRTIM_TimerCfgTypeDef               sConfig_timerA;
  12. HRTIM_TimerCfgTypeDef               sConfig_timerB;
  13. HRTIM_TimerCfgTypeDef               sConfig_timerC;
  14. HRTIM_OutputCfgTypeDef              sConfig_output_config;
  15. HRTIM_CompareCfgTypeDef             sConfig_compare;
  16.        
  17. /* Private function prototypes -----------------------------------------------*/
  18. static void SystemClock_Config(void);
  19. static void Error_Handler(void);
  20. static void CPU_CACHE_Enable(void);

  21. /* Private functions ---------------------------------------------------------*/

  22. /**
  23.   * @brief  Main program
  24.   * @param  None
  25.   * @retval None
  26.   */
  27. int main(void)
  28. {

  29.   /* Enable the CPU Cache */
  30.   CPU_CACHE_Enable();

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

  37.   /* Configure the system clock to 400 MHz */
  38.   SystemClock_Config();

  39.   /*##-1- Configure the HRTIM peripheral ######################################################*/
  40.   /* Initialize the HRTIM structure */
  41.   HrtimHandle.Instance = HRTIM1;
  42.   HrtimHandle.Init.HRTIMInterruptResquests = HRTIM_IT_NONE;
  43.   HrtimHandle.Init.SyncOptions = HRTIM_SYNCOPTION_NONE;

  44.   HAL_HRTIM_Init(&HrtimHandle);
  45.        
  46.   /*##-2- Configure the HRTIM TIMA PWM channels 1 & 2 #########################################*/
  47.   sConfig_time_base.Mode = HRTIM_MODE_CONTINUOUS;
  48.   sConfig_time_base.Period = HRTIM_TIMA_PERIOD;
  49.   sConfig_time_base.PrescalerRatio = HRTIM_PRESCALERRATIO_DIV1;
  50.   sConfig_time_base.RepetitionCounter = 0;
  51.          
  52.   HAL_HRTIM_TimeBaseConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_A, &sConfig_time_base);

  53.   sConfig_timerA.DMARequests = HRTIM_TIM_DMA_NONE;
  54.   sConfig_timerA.HalfModeEnable = HRTIM_HALFMODE_DISABLED;
  55.   sConfig_timerA.StartOnSync = HRTIM_SYNCSTART_DISABLED;
  56.   sConfig_timerA.ResetOnSync = HRTIM_SYNCRESET_DISABLED;
  57.   sConfig_timerA.DACSynchro = HRTIM_DACSYNC_NONE;
  58.   sConfig_timerA.PreloadEnable = HRTIM_PRELOAD_ENABLED;
  59.   sConfig_timerA.UpdateGating = HRTIM_UPDATEGATING_INDEPENDENT;
  60.   sConfig_timerA.BurstMode = HRTIM_TIMERBURSTMODE_MAINTAINCLOCK;
  61.   sConfig_timerA.RepetitionUpdate = HRTIM_UPDATEONREPETITION_ENABLED;
  62.   sConfig_timerA.ResetUpdate = HRTIM_TIMUPDATEONRESET_DISABLED;
  63.   sConfig_timerA.InterruptRequests = HRTIM_TIM_IT_NONE;
  64.   sConfig_timerA.PushPull = HRTIM_TIMPUSHPULLMODE_DISABLED;
  65.   sConfig_timerA.FaultEnable = HRTIM_TIMFAULTENABLE_NONE;
  66.   sConfig_timerA.FaultLock = HRTIM_TIMFAULTLOCK_READWRITE;
  67.   sConfig_timerA.DeadTimeInsertion = HRTIM_TIMDEADTIMEINSERTION_DISABLED;
  68.   sConfig_timerA.DelayedProtectionMode = HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DISABLED;
  69.   sConfig_timerA.UpdateTrigger= HRTIM_TIMUPDATETRIGGER_NONE;
  70.   sConfig_timerA.ResetTrigger = HRTIM_TIMRESETTRIGGER_NONE;
  71.        
  72.   HAL_HRTIM_WaveformTimerConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_A,&sConfig_timerA);
  73.        
  74.   sConfig_compare.AutoDelayedMode = HRTIM_AUTODELAYEDMODE_REGULAR;
  75.   sConfig_compare.AutoDelayedTimeout = 0;
  76.   sConfig_compare.CompareValue = HRTIM_TIMA_PERIOD/2;
  77.        
  78.   HAL_HRTIM_WaveformCompareConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_A, HRTIM_COMPAREUNIT_1, &sConfig_compare);
  79.        
  80.   sConfig_compare.CompareValue = HRTIM_TIMA_PERIOD/4;
  81.   HAL_HRTIM_WaveformCompareConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_A, HRTIM_COMPAREUNIT_2, &sConfig_compare);

  82.   sConfig_output_config.Polarity = HRTIM_OUTPUTPOLARITY_LOW;
  83.   sConfig_output_config.SetSource = HRTIM_OUTPUTRESET_TIMCMP1;
  84.   sConfig_output_config.ResetSource = HRTIM_OUTPUTSET_TIMPER;
  85.   sConfig_output_config.IdleMode = HRTIM_OUTPUTIDLEMODE_NONE;
  86.   sConfig_output_config.IdleLevel = HRTIM_OUTPUTIDLELEVEL_INACTIVE;
  87.   sConfig_output_config.FaultLevel = HRTIM_OUTPUTFAULTLEVEL_NONE;
  88.   sConfig_output_config.ChopperModeEnable = HRTIM_OUTPUTCHOPPERMODE_DISABLED;
  89.   sConfig_output_config.BurstModeEntryDelayed = HRTIM_OUTPUTBURSTMODEENTRY_REGULAR;
  90.   sConfig_output_config.ResetSource = HRTIM_OUTPUTRESET_TIMPER;
  91.   sConfig_output_config.SetSource = HRTIM_OUTPUTSET_TIMCMP1;
  92.        
  93.   HAL_HRTIM_WaveformOutputConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_A, HRTIM_OUTPUT_TA1, &sConfig_output_config);
  94.        
  95.   sConfig_output_config.SetSource = HRTIM_OUTPUTRESET_TIMCMP2;
  96.   HAL_HRTIM_WaveformOutputConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_A, HRTIM_OUTPUT_TA2, &sConfig_output_config);
  97.                  
  98.   /*##-3- Configure the HRTIM TIMB PWM channels 1 & 2 #########################################*/
  99.   sConfig_time_base.Mode = HRTIM_MODE_CONTINUOUS;
  100.   sConfig_time_base.Period = HRTIM_TIMB_PERIOD;
  101.   sConfig_time_base.PrescalerRatio = HRTIM_PRESCALERRATIO_DIV1;
  102.   sConfig_time_base.RepetitionCounter = 0;
  103.          
  104.   HAL_HRTIM_TimeBaseConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_B, &sConfig_time_base);         
  105.   
  106.   sConfig_timerB.DMARequests = HRTIM_TIM_DMA_NONE;
  107.   sConfig_timerB.HalfModeEnable = HRTIM_HALFMODE_DISABLED;
  108.   sConfig_timerB.StartOnSync = HRTIM_SYNCSTART_DISABLED;
  109.   sConfig_timerB.ResetOnSync = HRTIM_SYNCRESET_DISABLED;
  110.   sConfig_timerB.DACSynchro = HRTIM_DACSYNC_NONE;
  111.   sConfig_timerB.PreloadEnable = HRTIM_PRELOAD_ENABLED;
  112.   sConfig_timerB.UpdateGating = HRTIM_UPDATEGATING_INDEPENDENT;
  113.   sConfig_timerB.BurstMode = HRTIM_TIMERBURSTMODE_MAINTAINCLOCK;
  114.   sConfig_timerB.RepetitionUpdate = HRTIM_UPDATEONREPETITION_ENABLED;
  115.   sConfig_timerB.ResetUpdate = HRTIM_TIMUPDATEONRESET_DISABLED;
  116.   sConfig_timerB.InterruptRequests = HRTIM_TIM_IT_NONE;
  117.   sConfig_timerB.PushPull = HRTIM_TIMPUSHPULLMODE_DISABLED;
  118.   sConfig_timerB.FaultEnable = HRTIM_TIMFAULTENABLE_NONE;
  119.   sConfig_timerB.FaultLock = HRTIM_TIMFAULTLOCK_READWRITE;
  120.   sConfig_timerB.DeadTimeInsertion = HRTIM_TIMDEADTIMEINSERTION_DISABLED;
  121.   sConfig_timerB.DelayedProtectionMode = HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DISABLED;
  122.   sConfig_timerB.UpdateTrigger= HRTIM_TIMUPDATETRIGGER_NONE;
  123.   sConfig_timerB.ResetTrigger = HRTIM_TIMRESETTRIGGER_NONE;
  124.        
  125.   HAL_HRTIM_WaveformTimerConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_B,&sConfig_timerB);
  126.        
  127.   sConfig_compare.AutoDelayedMode = HRTIM_AUTODELAYEDMODE_REGULAR;
  128.   sConfig_compare.AutoDelayedTimeout = 0;
  129.   sConfig_compare.CompareValue = HRTIM_TIMB_PERIOD/2;
  130.        
  131.   HAL_HRTIM_WaveformCompareConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_B, HRTIM_COMPAREUNIT_1, &sConfig_compare);
  132.        
  133.   sConfig_compare.CompareValue = HRTIM_TIMB_PERIOD/4;
  134.   HAL_HRTIM_WaveformCompareConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_B, HRTIM_COMPAREUNIT_2, &sConfig_compare);

  135.   sConfig_output_config.Polarity = HRTIM_OUTPUTPOLARITY_LOW;
  136.   sConfig_output_config.SetSource = HRTIM_OUTPUTRESET_TIMCMP1;
  137.   sConfig_output_config.ResetSource = HRTIM_OUTPUTSET_TIMPER;
  138.   sConfig_output_config.IdleMode = HRTIM_OUTPUTIDLEMODE_NONE;
  139.   sConfig_output_config.IdleLevel = HRTIM_OUTPUTIDLELEVEL_INACTIVE;
  140.   sConfig_output_config.FaultLevel = HRTIM_OUTPUTFAULTLEVEL_NONE;
  141.   sConfig_output_config.ChopperModeEnable = HRTIM_OUTPUTCHOPPERMODE_DISABLED;
  142.   sConfig_output_config.BurstModeEntryDelayed = HRTIM_OUTPUTBURSTMODEENTRY_REGULAR;
  143.        
  144.   HAL_HRTIM_WaveformOutputConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_B, HRTIM_OUTPUT_TB1, &sConfig_output_config);
  145.        
  146.   sConfig_output_config.SetSource = HRTIM_OUTPUTRESET_TIMCMP2;
  147.   HAL_HRTIM_WaveformOutputConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_B, HRTIM_OUTPUT_TB2, &sConfig_output_config);
  148.   
  149.        
  150.   /*##-4- Configure the HRTIM TIMC PWM channels 1 & 2 #########################################*/
  151.   sConfig_time_base.Mode = HRTIM_MODE_CONTINUOUS;
  152.   sConfig_time_base.Period = HRTIM_TIMC_PERIOD;
  153.   sConfig_time_base.PrescalerRatio = HRTIM_PRESCALERRATIO_DIV1;
  154.   sConfig_time_base.RepetitionCounter = 0;
  155.          
  156.   HAL_HRTIM_TimeBaseConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_C, &sConfig_time_base);         
  157.          
  158.   sConfig_timerC.DMARequests = HRTIM_TIM_DMA_NONE;
  159.   sConfig_timerC.HalfModeEnable = HRTIM_HALFMODE_DISABLED;
  160.   sConfig_timerC.StartOnSync = HRTIM_SYNCSTART_DISABLED;
  161.   sConfig_timerC.ResetOnSync = HRTIM_SYNCRESET_DISABLED;
  162.   sConfig_timerC.DACSynchro = HRTIM_DACSYNC_NONE;
  163.   sConfig_timerC.PreloadEnable = HRTIM_PRELOAD_ENABLED;
  164.   sConfig_timerC.UpdateGating = HRTIM_UPDATEGATING_INDEPENDENT;
  165.   sConfig_timerC.BurstMode = HRTIM_TIMERBURSTMODE_MAINTAINCLOCK;
  166.   sConfig_timerC.RepetitionUpdate = HRTIM_UPDATEONREPETITION_ENABLED;
  167.   sConfig_timerC.ResetUpdate = HRTIM_TIMUPDATEONRESET_DISABLED;
  168.   sConfig_timerC.InterruptRequests = HRTIM_TIM_IT_NONE;
  169.   sConfig_timerC.PushPull = HRTIM_TIMPUSHPULLMODE_DISABLED;
  170.   sConfig_timerC.FaultEnable = HRTIM_TIMFAULTENABLE_NONE;
  171.   sConfig_timerC.FaultLock = HRTIM_TIMFAULTLOCK_READWRITE;
  172.   sConfig_timerC.DeadTimeInsertion = HRTIM_TIMDEADTIMEINSERTION_DISABLED;
  173.   sConfig_timerC.DelayedProtectionMode = HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DISABLED;
  174.   sConfig_timerC.UpdateTrigger= HRTIM_TIMUPDATETRIGGER_NONE;
  175.   sConfig_timerC.ResetTrigger = HRTIM_TIMRESETTRIGGER_NONE;
  176.        
  177.   HAL_HRTIM_WaveformTimerConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_C,&sConfig_timerC);
  178.        
  179.   sConfig_compare.AutoDelayedMode = HRTIM_AUTODELAYEDMODE_REGULAR;
  180.   sConfig_compare.AutoDelayedTimeout = 0;
  181.   sConfig_compare.CompareValue = HRTIM_TIMC_PERIOD/2;
  182.        
  183.   HAL_HRTIM_WaveformCompareConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_C, HRTIM_COMPAREUNIT_1, &sConfig_compare);
  184.        
  185.   sConfig_compare.CompareValue = HRTIM_TIMC_PERIOD/4;
  186.   HAL_HRTIM_WaveformCompareConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_C, HRTIM_COMPAREUNIT_2, &sConfig_compare);
  187.        
  188.   sConfig_output_config.Polarity = HRTIM_OUTPUTPOLARITY_LOW;
  189.   sConfig_output_config.SetSource = HRTIM_OUTPUTRESET_TIMCMP1;
  190.   sConfig_output_config.ResetSource = HRTIM_OUTPUTSET_TIMPER;
  191.   sConfig_output_config.IdleMode = HRTIM_OUTPUTIDLEMODE_NONE;
  192.   sConfig_output_config.IdleLevel = HRTIM_OUTPUTIDLELEVEL_INACTIVE;
  193.   sConfig_output_config.FaultLevel = HRTIM_OUTPUTFAULTLEVEL_NONE;
  194.   sConfig_output_config.ChopperModeEnable = HRTIM_OUTPUTCHOPPERMODE_DISABLED;
  195.   sConfig_output_config.BurstModeEntryDelayed = HRTIM_OUTPUTBURSTMODEENTRY_REGULAR;
  196.        
  197.   HAL_HRTIM_WaveformOutputConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_C, HRTIM_OUTPUT_TC1, &sConfig_output_config);
  198.        
  199.   sConfig_output_config.SetSource = HRTIM_OUTPUTRESET_TIMCMP2;
  200.   HAL_HRTIM_WaveformOutputConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_C, HRTIM_OUTPUT_TC2, &sConfig_output_config);
  201.                
  202.         /*##-7- Start PWM signals generation ########################################################*/
  203.   if (HAL_HRTIM_WaveformOutputStart(&HrtimHandle, HRTIM_OUTPUT_TA1 + HRTIM_OUTPUT_TA2
  204.                                                 + HRTIM_OUTPUT_TB1 + HRTIM_OUTPUT_TB2
  205.                                                 + HRTIM_OUTPUT_TC1 + HRTIM_OUTPUT_TC2) != HAL_OK)
  206.   {
  207.     /* PWM Generation Error */
  208.     Error_Handler();
  209.   }
  210.        
  211. /*##-8- Start HRTIM counter ###################################################################*/
  212.   if (HAL_HRTIM_WaveformCounterStart(&HrtimHandle, HRTIM_TIMERID_TIMER_A + HRTIM_TIMERID_TIMER_B + HRTIM_TIMERID_TIMER_C) != HAL_OK)
  213.   {
  214.     /* PWM Generation Error */
  215.     Error_Handler();
  216.   }       
  217.   /* Infinite loop */
  218.   while (1)
  219.   {
  220.   }
  221. }
复制代码




回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 21:20 , Processed in 0.158777 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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