wasy 发表于 2015-8-18 08:53:13

关于stm32f334 hrtim的PWM输出

新手刚接触,一个人琢磨了半天还是没有PWM出来,只能跑论坛上来求助了,恳请哪位大神帮忙指点一下,万分感谢啊:'(。
附上用cubeMX生成的初始化代码:
/* HRTIM1 init function */
void MX_HRTIM1_Init(void)
{

HRTIM_FaultCfgTypeDef pFaultCfg;
HRTIM_TimeBaseCfgTypeDef pTimeBaseCfg;
HRTIM_TimerCfgTypeDef pTimerCfg;
HRTIM_CompareCfgTypeDef pCompareCfg;
HRTIM_TimerEventFilteringCfgTypeDef pTimerEventFilteringCfg;
HRTIM_OutputCfgTypeDef pOutputCfg;

hhrtim1.Instance = HRTIM1;
hhrtim1.Init.HRTIMInterruptResquests = HRTIM_IT_NONE;
hhrtim1.Init.SyncOptions = HRTIM_SYNCOPTION_NONE;
HAL_HRTIM_Init(&hhrtim1);

HAL_HRTIM_DLLCalibrationStart(&hhrtim1, HRTIM_CALIBRATIONRATE_14);

HAL_HRTIM_PollForDLLCalibration(&hhrtim1, 10);

HAL_HRTIM_FaultPrescalerConfig(&hhrtim1, HRTIM_FAULTPRESCALER_DIV1);

pFaultCfg.Source = HRTIM_FAULTSOURCE_DIGITALINPUT;
pFaultCfg.Polarity = HRTIM_FAULTPOLARITY_HIGH;
pFaultCfg.Filter = HRTIM_FAULTFILTER_NONE;
pFaultCfg.Lock = HRTIM_FAULTLOCK_READWRITE;
HAL_HRTIM_FaultConfig(&hhrtim1, HRTIM_FAULT_1, &pFaultCfg);

HAL_HRTIM_FaultModeCtl(&hhrtim1, HRTIM_FAULT_1, HRTIM_FAULTMODECTL_ENABLED);

pTimeBaseCfg.Period = 20000;
pTimeBaseCfg.RepetitionCounter = 0x00;
pTimeBaseCfg.PrescalerRatio = HRTIM_PRESCALERRATIO_MUL8;
pTimeBaseCfg.Mode = HRTIM_MODE_CONTINUOUS;
HAL_HRTIM_TimeBaseConfig(&hhrtim1, HRTIM_TIMERINDEX_MASTER, &pTimeBaseCfg);

pTimerCfg.InterruptRequests = HRTIM_MASTER_IT_NONE;
pTimerCfg.DMARequests = HRTIM_MASTER_DMA_NONE;
pTimerCfg.DMASrcAddress = 0x0;
pTimerCfg.DMADstAddress = 0x0;
pTimerCfg.DMASize = 0x1;
pTimerCfg.HalfModeEnable = HRTIM_HALFMODE_DISABLED;
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;
HAL_HRTIM_WaveformTimerConfig(&hhrtim1, HRTIM_TIMERINDEX_MASTER, &pTimerCfg);

pCompareCfg.CompareValue = 5000;
HAL_HRTIM_WaveformCompareConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_B, HRTIM_COMPAREUNIT_1, &pCompareCfg);

pCompareCfg.CompareValue = 15000;
HAL_HRTIM_WaveformCompareConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_B, HRTIM_COMPAREUNIT_3, &pCompareCfg);

HAL_HRTIM_TimeBaseConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_B, &pTimeBaseCfg);

pTimerCfg.InterruptRequests = HRTIM_TIM_IT_NONE;
pTimerCfg.DMARequests = HRTIM_TIM_DMA_NONE;
pTimerCfg.DACSynchro = HRTIM_DACSYNC_DACTRIGOUT_3;
pTimerCfg.PreloadEnable = HRTIM_PRELOAD_ENABLED;
pTimerCfg.PushPull = HRTIM_TIMPUSHPULLMODE_DISABLED;
pTimerCfg.FaultEnable = HRTIM_TIMFAULTENABLE_NONE;
pTimerCfg.FaultLock = HRTIM_TIMFAULTLOCK_READWRITE;
pTimerCfg.DeadTimeInsertion = HRTIM_TIMDEADTIMEINSERTION_DISABLED;
pTimerCfg.DelayedProtectionMode = HRTIM_TIMDELAYEDPROTECTION_DISABLED;
pTimerCfg.UpdateTrigger = HRTIM_TIMUPDATETRIGGER_NONE;
pTimerCfg.ResetTrigger = HRTIM_TIMRESETTRIGGER_NONE;
pTimerCfg.ResetUpdate = HRTIM_TIMUPDATEONRESET_DISABLED;
HAL_HRTIM_WaveformTimerConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_B, &pTimerCfg);

pCompareCfg.CompareValue = 10000;
pCompareCfg.AutoDelayedMode = HRTIM_AUTODELAYEDMODE_REGULAR;
pCompareCfg.AutoDelayedTimeout = 0x0000;

HAL_HRTIM_WaveformCompareConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_B, HRTIM_COMPAREUNIT_2, &pCompareCfg);

pTimerEventFilteringCfg.Filter = HRTIM_TIMEVENTFILTER_NONE;
pTimerEventFilteringCfg.Latch = HRTIM_TIMEVENTLATCH_DISABLED;

HAL_HRTIM_TimerEventFilteringConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_B, HRTIM_EVENT_NONE, &pTimerEventFilteringCfg);

pOutputCfg.Polarity = HRTIM_OUTPUTPOLARITY_HIGH;
pOutputCfg.SetSource = HRTIM_OUTPUTSET_TIMPER;
pOutputCfg.ResetSource = HRTIM_OUTPUTRESET_TIMCMP1;
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;
HAL_HRTIM_WaveformOutputConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_B, HRTIM_OUTPUT_TB1, &pOutputCfg);

pOutputCfg.SetSource = HRTIM_OUTPUTSET_TIMCMP2;
pOutputCfg.ResetSource = HRTIM_OUTPUTRESET_TIMCMP3;
HAL_HRTIM_WaveformOutputConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_B, HRTIM_OUTPUT_TB2, &pOutputCfg);
}

/* USER CODE BEGIN 2 */
        HAL_HRTIM_WaveformCounterStart(&hhrtim1,HRTIM_TIMERID_TIMER_B);
        HAL_HRTIM_WaveformOutputStart(&hhrtim1,HRTIM_OUTPUT_TB1);
        HAL_HRTIM_WaveformOutputStart(&hhrtim1,HRTIM_OUTPUT_TB2);
/* USER CODE END 2 */

风子 发表于 2015-8-18 09:01:19

引脚配置好了吗?可以先试下用高级/通用定时器输出PWM,成功了再换HRTIM,这个东西功能强大用起来也麻烦

wasy 发表于 2015-8-18 09:07:42

GPIO配置应该没有问题,现在是定时器在跑,但是PWM就是没有输出,看了下寄存器,输出使能这个寄存器上TB1OEN、TB2OEN这两个位还是0,就是置不了位,求指点:(

netlhx 发表于 2015-8-18 09:53:44

高分辨率定时器,没用过,有空得试一下看有什么特色

qiuyuqiang001 发表于 2018-8-17 19:08:30

解决了吗?我的也是一样的问题,CUBE设置好了,怎么弄都没有输出

dapan100 发表于 2018-8-20 14:56:02

qiuyuqiang001 发表于 2018-8-17 19:08
解决了吗?我的也是一样的问题,CUBE设置好了,怎么弄都没有输出

你来掘坟啊,三年前的帖子了

qiuyuqiang001 发表于 2018-8-20 16:12:15

dapan100 发表于 2018-8-20 14:56
你来掘坟啊,三年前的帖子了

是啊,meibanfa
页: [1]
查看完整版本: 关于stm32f334 hrtim的PWM输出