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

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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版