硬汉嵌入式论坛

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

[HRTIM] 今天完成V7用户手册更新的两章HRTIM(已经发布)

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2020-2-5 00:26:20 | 显示全部楼层 |阅读模式
白了再复查下,就可以了。

QQ截图20200205002524.png



ps:已经发布

http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980

回复

使用道具 举报

3

主题

1222

回帖

1231

积分

至尊会员

积分
1231
发表于 2020-2-5 10:22:04 | 显示全部楼层
回复

使用道具 举报

98

主题

340

回帖

634

积分

金牌会员

积分
634
发表于 2021-4-27 11:24:03 | 显示全部楼层
请教硬汉哥,HRTIM我用的简单模式下输出一路PWM波形,但发现在程序中无法动态修改输出频率。仿真发现明明对应的寄存器已经该为新设置的值了,但不知为何就是不起作用。
(重新设置前停止PWM输出,停止定时器,甚至HAL_HRTIM_MspDeInit都试过了,都不起作用)。
你是否遇到过这个问题呢?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
 楼主| 发表于 2021-4-28 07:46:23 | 显示全部楼层
云琴箫龙 发表于 2021-4-27 11:24
请教硬汉哥,HRTIM我用的简单模式下输出一路PWM波形,但发现在程序中无法动态修改输出频率。仿真发现明明对 ...

你的程序是怎么动态修改的,貌似是程序问题。
回复

使用道具 举报

98

主题

340

回帖

634

积分

金牌会员

积分
634
发表于 2021-4-28 09:54:36 | 显示全部楼层
eric2013 发表于 2021-4-28 07:46
你的程序是怎么动态修改的,貌似是程序问题。

void MX_HRTIM_Init(void)
{
  HRTIM_TimeBaseCfgTypeDef pTimeBaseCfg = {0};
  HRTIM_SimplePWMChannelCfgTypeDef pSimplePWMChannelCfg = {0};

  hhrtim.Instance = HRTIM1;
  hhrtim.Init.HRTIMInterruptResquests = HRTIM_IT_NONE;
  hhrtim.Init.SyncOptions = HRTIM_SYNCOPTION_NONE;
  if (HAL_HRTIM_Init(&hhrtim) != HAL_OK)
  {
    Error_Handler();
  }
  pTimeBaseCfg.Period = 31250;
  pTimeBaseCfg.RepetitionCounter = 0x00;
  pTimeBaseCfg.PrescalerRatio = HRTIM_PRESCALERRATIO_DIV1;
  pTimeBaseCfg.Mode = HRTIM_MODE_CONTINUOUS;
  if (HAL_HRTIM_TimeBaseConfig(&hhrtim, HRTIM_TIMERINDEX_TIMER_E, &pTimeBaseCfg) != HAL_OK)
  {
    Error_Handler();
  }
  pSimplePWMChannelCfg.Pulse = 15625;
  pSimplePWMChannelCfg.Polarity = HRTIM_OUTPUTPOLARITY_HIGH;
  pSimplePWMChannelCfg.IdleLevel = HRTIM_OUTPUTIDLELEVEL_INACTIVE;
  if (HAL_HRTIM_SimplePWMChannelConfig(&hhrtim, HRTIM_TIMERINDEX_TIMER_E, HRTIM_OUTPUT_TE2, &pSimplePWMChannelCfg) != HAL_OK)
  {
    Error_Handler();
  }
  HAL_HRTIM_MspPostInit(&hhrtim);
}
以上是MX工程生成的初始化程序,动态修改的程序跟它一样,就是pTimeBaseCfg.Period变成了一个入口参数。
后来发现不起作用,就在动态修改频率前把以下3行停止运行的代码停止的也都分别加上试了试,也没有效果,输出的PWM频率就没有变化,感觉它总是以第一次配置的值为准的,因为第一次配置如果把pTimeBaseCfg.Period改成另外一个值后实际是有变化的。
调用HAL_HRTIM_SimplePWMStop后,输出PWM也确实是停止了,但修改频率之后,在调用HAL_HRTIM_SimplePWMStart,寄存器明明已经更新,但输出的频率还是初始化配置的频率。
  HAL_HRTIM_SimplePWMStop(&hhrtim,HRTIM_TIMERINDEX_TIMER_E, HRTIM_OUTPUT_TE2 );
  HAL_HRTIM_SimpleBaseStop(&hhrtim,HRTIM_TIMERINDEX_TIMER_E);
  HAL_HRTIM_MspDeInit(&hhrtim);
回复

使用道具 举报

98

主题

340

回帖

634

积分

金牌会员

积分
634
发表于 2021-4-28 09:56:35 | 显示全部楼层
之前我用普通的定时器做PWM,直接改寄存器就会实时生效,这个HRTIM感觉是不是有啥特殊的地方还没有参悟透。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
 楼主| 发表于 2021-4-28 12:02:39 | 显示全部楼层
云琴箫龙 发表于 2021-4-28 09:54
void MX_HRTIM_Init(void)
{
  HRTIM_TimeBaseCfgTypeDef pTimeBaseCfg = {0};

调用HAL_HRTIM_DeInit
回复

使用道具 举报

98

主题

340

回帖

634

积分

金牌会员

积分
634
发表于 2021-6-11 17:17:00 | 显示全部楼层
eric2013 发表于 2021-4-28 12:02
调用HAL_HRTIM_DeInit

问题已解决,之前用的是HAL_Simple_methods模式,换成HAL_Waveform methods模式之后就可以动态修改了。暂时还没搞明白为啥前者不能动态修改
回复

使用道具 举报

98

主题

340

回帖

634

积分

金牌会员

积分
634
发表于 2021-6-11 17:17:53 | 显示全部楼层
eric2013 发表于 2021-4-28 12:02
调用HAL_HRTIM_DeInit

在Simple模式下调用HAL_HRTIM_DeInit也不起作用
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
 楼主| 发表于 2021-6-11 17:30:53 | 显示全部楼层
云琴箫龙 发表于 2021-6-11 17:17
问题已解决,之前用的是HAL_Simple_methods模式,换成HAL_Waveform methods模式之后就可以动态修改了。暂 ...

谢谢这么久了还来回复这个问题原因
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 20:40 , Processed in 0.204847 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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