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

STM32F334 HRTIM 无法输出PWM

[复制链接]
qiuyuqiang001 提问时间:2018-8-13 18:51 /
STM32F334,用的cubeMX设置,如图:使用timer E, PC8,PC9输出,使用外部时钟,HRTIM 144M,
1.png
2.png
3.png
4.png
5.png
收藏 评论16 发布时间:2018-8-13 18:51

举报

16个回答
wenyangzeng 回答时间:2018-8-13 21:17:35
本帖最后由 wenyangzeng 于 2018-8-13 21:23 编辑
qiuyuqiang001 发表于 2018-8-13 20:26
谢谢前辈的回复,但是还是不行,我找到库里函数的原型,应该是:
HAL_HRTIM_WaveformOutputStart(&hhrtim ...

HTIM我也没玩过。
其实你要输出PWM直接用定时器TIMx就很方便,为何要用HRTIM?
搬运工,搬运一个网上下载的代码,不知道能用否:
  1. void HRTIM_Config(void)  

  2. {  

  3.       HRTIM_OutputCfgTypeDef HRTIM_TIM_OutputStructure;  

  4.       HRTIM_BaseInitTypeDef HRTIM_BaseInitStructure;  

  5.       HRTIM_TimerInitTypeDef HRTIM_TimerInitStructure;   

  6.       HRTIM_TimerCfgTypeDef HRTIM_TimerWaveStructure;  

  7.       HRTIM_CompareCfgTypeDef HRTIM_CompareStructure;  

  8.       HRTIM_DeadTimeCfgTypeDef HRTIM_DeadtimeStructure;  

  9.         

  10.     RCC_HRTIM1CLKConfig(RCC_HRTIM1CLK_PLLCLK);  

  11.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_HRTIM1,ENABLE);  

  12.   

  13.       HRTIM_DLLCalibrationStart(HRTIM1, HRTIM_CALIBRATIONRATE_14);  

  14.       HRTIM1_COMMON->DLLCR |= HRTIM_DLLCR_CALEN;   

  15.       while(HRTIM_GetCommonFlagStatus(HRTIM1, HRTIM_ISR_DLLRDY) == RESET);  

  16.    

  17.       GPIO_HRTIM_outputs_Config();  

  18.   

  19.     HRTIM_BaseInitStructure.Mode=HRTIM_MODE_CONTINOUS;  

  20.     HRTIM_BaseInitStructure.Period=PERIOD;  

  21.     HRTIM_BaseInitStructure.PrescalerRatio=HRTIM_PRESCALERRATIO_MUL32;  

  22.     HRTIM_BaseInitStructure.RepetitionCounter=0x00;  

  23.     //HRTIM_SimpleBase_Init(HRTIM1,HRTIM_TIMERINDEX_TIMER_D,&HRTIM_BaseInitStructure);  

  24.       HRTIM_TimerInitStructure.HalfModeEnable = HRTIM_HALFMODE_DISABLED;  

  25.       HRTIM_TimerInitStructure.StartOnSync = HRTIM_SYNCSTART_DISABLED;  

  26.       HRTIM_TimerInitStructure.ResetOnSync = HRTIM_SYNCRESET_DISABLED;  

  27.       HRTIM_TimerInitStructure.DACSynchro = HRTIM_DACSYNC_NONE;  

  28.       HRTIM_TimerInitStructure.PreloadEnable = HRTIM_PRELOAD_ENABLED;  

  29.       HRTIM_TimerInitStructure.UpdateGating = HRTIM_UPDATEGATING_INDEPENDENT;  

  30.       HRTIM_TimerInitStructure.BurstMode = HRTIM_TIMERBURSTMODE_MAINTAINCLOCK;  

  31.       HRTIM_TimerInitStructure.RepetitionUpdate = HRTIM_UPDATEONREPETITION_ENABLED;  

  32.   

  33.       HRTIM_Waveform_Init(HRTIM1,HRTIM_TIMERINDEX_TIMER_D,&HRTIM_BaseInitStructure,&HRTIM_TimerInitStructure);  

  34.   

  35.       HRTIM_TimerWaveStructure.DeadTimeInsertion=HRTIM_TIMDEADTIMEINSERTION_ENABLED;  

  36.       HRTIM_TimerWaveStructure.DelayedProtectionMode = HRTIM_TIMDELAYEDPROTECTION_DISABLED;  

  37.       HRTIM_TimerWaveStructure.FaultEnable = HRTIM_TIMFAULTENABLE_NONE;  

  38.       HRTIM_TimerWaveStructure.FaultLock = HRTIM_TIMFAULTLOCK_READWRITE;  

  39.       HRTIM_TimerWaveStructure.PushPull = HRTIM_TIMPUSHPULLMODE_DISABLED;  

  40.       HRTIM_TimerWaveStructure.ResetTrigger = HRTIM_TIMRESETTRIGGER_NONE;  

  41.       HRTIM_TimerWaveStructure.ResetUpdate = HRTIM_TIMUPDATEONRESET_DISABLED;  

  42.       HRTIM_TimerWaveStructure.UpdateTrigger = HRTIM_TIMUPDATETRIGGER_NONE;  

  43.       HRTIM_WaveformTimerConfig(HRTIM1,HRTIM_TIMERINDEX_TIMER_D,&HRTIM_TimerWaveStructure);  

  44.   

  45.       HRTIM_TIM_OutputStructure.Polarity=HRTIM_OUTPUTPOLARITY_HIGH;  

  46.       HRTIM_TIM_OutputStructure.SetSource=HRTIM_OUTPUTSET_TIMPER;  

  47.       HRTIM_TIM_OutputStructure.ResetSource=HRTIM_OUTPUTRESET_TIMCMP1;  

  48.       HRTIM_TIM_OutputStructure.IdleMode = HRTIM_OUTPUTIDLEMODE_NONE;   

  49.       HRTIM_TIM_OutputStructure.IdleState = HRTIM_OUTPUTIDLESTATE_INACTIVE;            

  50.       HRTIM_TIM_OutputStructure.FaultState = HRTIM_OUTPUTFAULTSTATE_INACTIVE;            

  51.       HRTIM_TIM_OutputStructure.ChopperModeEnable = HRTIM_OUTPUTCHOPPERMODE_DISABLED;         

  52.       HRTIM_TIM_OutputStructure.BurstModeEntryDelayed = HRTIM_OUTPUTBURSTMODEENTRY_REGULAR;  

  53.       HRTIM_WaveformOutputConfig(HRTIM1,HRTIM_TIMERINDEX_TIMER_D,HRTIM_OUTPUT_TD1,&HRTIM_TIM_OutputStructure);  

  54.       //HRTIM_WaveformOutputConfig(HRTIM1,HRTIM_TIMERINDEX_TIMER_D,HRTIM_OUTPUT_TD2,&HRTIM_TIM_OutputStructure);  

  55.   

  56.       HRTIM_CompareStructure.AutoDelayedMode=HRTIM_AUTODELAYEDMODE_REGULAR;  

  57.       HRTIM_CompareStructure.AutoDelayedTimeout=0x00;  

  58.       HRTIM_CompareStructure.CompareValue=PERIOD/2;  

  59.       HRTIM_WaveformCompareConfig(HRTIM1,HRTIM_TIMERINDEX_TIMER_D,HRTIM_COMPAREUNIT_1,&HRTIM_CompareStructure);  

  60.       

  61.       HRTIM_DeadtimeStructure.FallingLock=HRTIM_TIMDEADTIME_FALLINGLOCK_READONLY;  

  62.       HRTIM_DeadtimeStructure.FallingSign=HRTIM_TIMDEADTIME_FALLINGSIGN_POSITIVE;  

  63.       HRTIM_DeadtimeStructure.FallingSignLock=HRTIM_TIMDEADTIME_FALLINGSIGNLOCK_READONLY;  

  64.       HRTIM_DeadtimeStructure.FallingValue=0X00;  

  65.       HRTIM_DeadtimeStructure.RisingLock=HRTIM_TIMDEADTIME_RISINGLOCK_READONLY;  

  66.       HRTIM_DeadtimeStructure.RisingSign=HRTIM_TIMDEADTIME_RISINGSIGN_POSITIVE;  

  67.       HRTIM_DeadtimeStructure.RisingSignLock=HRTIM_TIMDEADTIME_RISINGSIGNLOCK_READONLY;  

  68.       HRTIM_DeadtimeStructure.RisingValue=0X00;  

  69.       HRTIM_DeadTimeConfig(HRTIM1,HRTIM_TIMERINDEX_TIMER_D,&HRTIM_DeadtimeStructure);  

  70.   

  71.       HRTIM_WaveformOutputStart(HRTIM1,HRTIM_OUTPUT_TD1);  

  72.       HRTIM_WaveformOutputStart(HRTIM1,HRTIM_OUTPUT_TD2);  

  73.       HRTIM_WaveformCounterStart(HRTIM1,HRTIM_TIMERID_TIMER_D);  

  74. }  

复制代码




评分

参与人数 1蝴蝶豆 +4 收起 理由
zero99 + 4

查看全部评分

qiuyuqiang001 回答时间:2018-8-13 18:52:43
CUBE生成代码如下:

static void MX_HRTIM1_Init(void)
{

  HRTIM_TimeBaseCfgTypeDef pTimeBaseCfg;
  HRTIM_TimerCfgTypeDef pTimerCfg;
  HRTIM_CompareCfgTypeDef pCompareCfg;
  HRTIM_OutputCfgTypeDef pOutputCfg;

  hhrtim1.Instance = HRTIM1;
  hhrtim1.Init.HRTIMInterruptResquests = HRTIM_IT_NONE;
  hhrtim1.Init.SyncOptions = HRTIM_SYNCOPTION_NONE;
  if (HAL_HRTIM_Init(&hhrtim1) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

  if (HAL_HRTIM_DLLCalibrationStart(&hhrtim1, HRTIM_CALIBRATIONRATE_14) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

  if (HAL_HRTIM_PollForDLLCalibration(&hhrtim1, 10) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

  pTimeBaseCfg.Period = 30000;
  pTimeBaseCfg.RepetitionCounter = 0x00;
  pTimeBaseCfg.PrescalerRatio = HRTIM_PRESCALERRATIO_MUL32;
  pTimeBaseCfg.Mode = HRTIM_MODE_CONTINUOUS;
  if (HAL_HRTIM_TimeBaseConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_E, &pTimeBaseCfg) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

  pTimerCfg.InterruptRequests = HRTIM_MASTER_IT_NONE;
  pTimerCfg.DMARequests = HRTIM_TIM_DMA_NONE;
  pTimerCfg.DMASrcAddress = 0x0000;
  pTimerCfg.DMADstAddress = 0x0000;
  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_ENABLED;
  pTimerCfg.UpdateGating = HRTIM_UPDATEGATING_INDEPENDENT;
  pTimerCfg.BurstMode = HRTIM_TIMERBURSTMODE_MAINTAINCLOCK;
  pTimerCfg.RepetitionUpdate = HRTIM_UPDATEONREPETITION_DISABLED;
  pTimerCfg.PushPull = HRTIM_TIMPUSHPULLMODE_DISABLED;
  pTimerCfg.FaultEnable = HRTIM_TIMFAULTENABLE_NONE;
  pTimerCfg.FaultLock = HRTIM_TIMFAULTLOCK_READWRITE;
  pTimerCfg.DeadTimeInsertion = HRTIM_TIMDEADTIMEINSERTION_DISABLED;
  pTimerCfg.DelayedProtectionMode = HRTIM_TIMER_D_E_DELAYEDPROTECTION_DISABLED;
  pTimerCfg.UpdateTrigger = HRTIM_TIMUPDATETRIGGER_NONE;
  pTimerCfg.ResetTrigger = HRTIM_TIMRESETTRIGGER_UPDATE;
  pTimerCfg.ResetUpdate = HRTIM_TIMUPDATEONRESET_ENABLED;
  if (HAL_HRTIM_WaveformTimerConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_E, &pTimerCfg) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

  pCompareCfg.CompareValue = 15000;
  if (HAL_HRTIM_WaveformCompareConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_E, HRTIM_COMPAREUNIT_1, &pCompareCfg) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

  pOutputCfg.Polarity = HRTIM_OUTPUTPOLARITY_LOW;
  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;
  if (HAL_HRTIM_WaveformOutputConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_E, HRTIM_OUTPUT_TE1, &pOutputCfg) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

  if (HAL_HRTIM_WaveformOutputConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_E, HRTIM_OUTPUT_TE2, &pOutputCfg) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

  HAL_HRTIM_MspPostInit(&hhrtim1);

}
qiuyuqiang001 回答时间:2018-8-13 20:26:46
wenyangzeng 发表于 2018-8-13 19:54
好像少了输出使能:
HAL_HRTIM_WaveformOutputStart(&hhrtim1, ENABLE);

谢谢前辈的回复,但是还是不行,我找到库里函数的原型,应该是:
HAL_HRTIM_WaveformOutputStart(&hhrtim1, HRTIM_OUTPUT_TE1);
HAL_HRTIM_WaveformOutputStart(&hhrtim1, HRTIM_OUTPUT_TE1);
加上这两个函数后还是没有反应,我又写了个函数使能timer E
void timerE_enable(void) //使能timer E
{
  HRTIM_Master_TypeDef  pmaster;
        pmaster.MCR= HRTIM_TIMERID_TIMER_E;
         }
在主函数里面调用,还是没有反应,能不能再帮忙给看看,尤其是CUBEMX里面HRTIM的设置界面里面有没有参数选择的不对?谢谢!已经弄了一整天了
qiuyuqiang001 回答时间:2018-8-13 18:53:59
qiuyuqiang001 发表于 2018-8-13 18:52
CUBE生成代码如下:

static void MX_HRTIM1_Init(void)

烧录后PC8,PC9始终没有输出,调试了一整天,没有任何头绪,希望用过的高手能帮忙给看看问题出在哪儿,非常感谢
wenyangzeng 回答时间:2018-8-13 19:54:27
qiuyuqiang001 发表于 2018-8-13 18:53
烧录后PC8,PC9始终没有输出,调试了一整天,没有任何头绪,希望用过的高手能帮忙给看看问题出在哪儿,非 ...

好像少了输出使能:
HAL_HRTIM_WaveformOutputStart(&hhrtim1, ENABLE);

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

feixiang20 回答时间:2018-8-13 23:19:47
可以参考类似的实例,引脚配置好了吗?可以先试下用高级/通用定时器输出PWM,成功了再换HRTIM。或许是主函数里的TIM_SetCompare1没换成TIM_SetCompare2。
HRTIM_OutputCfgTypeDef HRTIM_TIM_OutputStructure;//配置输出特性,高低电平等
HRTIM_BaseInitTypeDef HRTIM_BaseInitStructure;//配置基本参数,这部分和普通定时器一样
HRTIM_TimerInitTypeDef HRTIM_TimerInitStructure;  //配置不同模式
HRTIM_TimerCfgTypeDef HRTIM_TimerWaveStructure;//配置波形参数,错误等
HRTIM_CompareCfgTypeDef HRTIM_CompareStructure;//配置比较寄存器
用以上几个部分就能产生最简单的PWM波形

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

qiuyuqiang001 回答时间:2018-8-14 13:45:26
feixiang20 发表于 2018-8-13 23:19
可以参考类似的实例,引脚配置好了吗?可以先试下用高级/通用定时器输出PWM,成功了再换HRTIM。或许是主函 ...

暂时没有找到HAL库的例子,管脚配置我找不出毛病来,
qiuyuqiang001 回答时间:2018-8-14 13:47:29
wenyangzeng 发表于 2018-8-13 21:17
HTIM我也没玩过。
其实你要输出PWM直接用定时器TIMx就很方便,为何要用HRTIM?
搬运工,搬运一个网上下载的 ...

因为HRTIM功能比较强大,向后面熟悉了做数字电源用,程序我试一下,谢谢
budaoweng 回答时间:2018-8-18 08:30:04
现在比较忙,没时间仔细看你得帖子,不过我有一个好办法能帮助你在很短的时间里搞定。多看HRTIM的寄存器,一个礼拜的时间就能把你想学的都学到手了。要有耐心,才调一天,不算什么

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

qiuyuqiang001 回答时间:2018-8-20 10:04:18
budaoweng 发表于 2018-8-18 08:30
现在比较忙,没时间仔细看你得帖子,不过我有一个好办法能帮助你在很短的时间里搞定。多看HRTIM的寄存器, ...

谢谢!你说的有道理,我觉得还是回到根本,重新再看一遍寄存器
butterflyspring 回答时间:2018-8-20 11:50:02
output函数调用了没?试试\STM32Cube_FW_F3_V1.10.0\Projects\STM32F3348-Discovery\Examples\HRTIM\HRTIM_BasicPWM里面的例程?

/* TD1 output toggles at ~430kHz (this frequency can vary depending on compiler and optimizations options) */
    HAL_HRTIM_WaveformSetOutputLevel(&hhrtim, HRTIM_TIMERINDEX_TIMER_D, HRTIM_OUTPUT_TD1, HRTIM_OUTPUTLEVEL_ACTIVE);
    HAL_HRTIM_WaveformSetOutputLevel(&hhrtim, HRTIM_TIMERINDEX_TIMER_D, HRTIM_OUTPUT_TD1, HRTIM_OUTPUTLEVEL_INACTIVE);

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

qiuyuqiang001 回答时间:2018-8-20 12:35:22
butterflyspring 发表于 2018-8-20 11:50
output函数调用了没?试试\STM32Cube_FW_F3_V1.10.0\Projects\STM32F3348-Discovery\Examples\HRTIM\HRTIM_B ...

好的,我试一下,谢谢!
dapan100 回答时间:2018-8-20 15:19:13
万能的debug,看一下寄存器就知道为什么不输出了。
1.检查GPIO是否设为复用模式,复用序号对不对
2.检查ONER,ODSR是否设为正常输出状态
3.检查SET和RST寄存器选择的置位和复位信号
4.观察CNT确定计数器在运行

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

qiuyuqiang001 回答时间:2018-8-20 18:07:30
butterflyspring 发表于 2018-8-20 11:50
output函数调用了没?试试\STM32Cube_FW_F3_V1.10.0\Projects\STM32F3348-Discovery\Examples\HRTIM\HRTIM_B ...

这个函数调用之后确实开始有输出了,但是这个函数的作用很奇怪,我暂时没弄清楚他的作用,感觉不应该用在这里
12下一页

所属标签

相似问题

官网相关资源

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