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

STM8的PWM输入功能怪问题

[复制链接]
lazyduck 提问时间:2019-6-16 09:09 /
最近遇到一个问题,比较怪。使用芯片 STM8S103F3P6,TSSOP-20封装,使用TIM1的CH1,用作PWM的输入,检测PWM周期和占空比。
因为默认情况下该芯片没有TIM1的CH1,所以通过选项字打开了重映像功能,使PC6成为TIM1的CH1,初始化过程如下(初始化过程参照数据手册要求的步骤):
static void TIM1_Config(void)
{

  TIM1_PWMIConfig(TIM1_CHANNEL_1, TIM1_ICPOLARITY_RISING,
                  TIM1_ICSELECTION_DIRECTTI, TIM1_ICPSC_DIV8, 0x00);

  TIM1_SelectInputTrigger(TIM1_TIXEXTERNALCLK1SOURCE_TI1);
  TIM1_SelectSlaveMode(TIM1_SLAVEMODE_RESET);
  TIM1_CCxCmd(TIM1_CHANNEL_1, ENABLE);
  TIM1_CCxCmd(TIM1_CHANNEL_2, ENABLE);

  /* Enable TIM1 */
  TIM1_Cmd(ENABLE);

  /* Clear CC1 Flag*/
  TIM1_ClearFlag(TIM1_FLAG_CC1);
}

然后在主程序里循环检测得到的值:
  while (1)
  {
  /* wait a capture on CC1 */
    while((TIM1->SR1 & TIM1_FLAG_CC1) != TIM1_FLAG_CC1);
    /* Get CCR1 value*/
    ICValue1 = TIM1_GetCapture1();
    TIM1_ClearFlag(TIM1_FLAG_CC1);

    /* wait a capture on cc2 */
    while((TIM1->SR1 & TIM1_FLAG_CC2) != TIM1_FLAG_CC2);
    /* Get CCR2 value*/
    ICValue2 = TIM1_GetCapture2();
    TIM1_ClearFlag(TIM1_FLAG_CC2);
  }

比较怪的地方在分频系数这里 :TIM1_ICPSC_DIV8,  无论我写几分频,只要输入频率不变,测量到的结果都没变化。
唯一受到影响的地方在于:当我设置1分频的时候,输入16KHZ频率,使用ST-LINK观察ICValue1,ICValue2,值会不稳定的变化
但是设置为8分频的时候,使用ST-LINK观察ICValue1,ICValue2,值就稳定了,基本不会有太大浮动。
如果输入32KHZ频率,那设置1分频还是8分频,都没有太大浮动。

和单纯的输入捕获功能对比,输入捕获只使用一个通道检测输入信号的周期。这个时候设置分频系数,结果是会受到影响的。
所以,是否在PWM输入的模式下,TIM1_ICPSC_DIV8 这个系数功能变了?

收藏 评论8 发布时间:2019-6-16 09:09

举报

8个回答
lazyduck 回答时间:2019-6-17 19:42:37
自己顶一下~
lazyduck 回答时间:2019-6-19 09:30:49
自己再顶一下
lazyduck 回答时间:2019-7-2 17:35:44
习惯性再顶
butterflyspring 回答时间:2019-7-4 12:23:11
看起来是使用了 TIM1_SelectSlaveMode(TIM1_SLAVEMODE_RESET); 从模式复位这个功能。每次输入的脉冲触发计数器复位。所以无论设置每隔几次捕获都会得到相同的捕获值。你觉得呢

评分

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

查看全部评分

lazyduck 回答时间:2019-7-13 17:36:45
butterflyspring 发表于 2019-7-4 12:23
看起来是使用了 TIM1_SelectSlaveMode(TIM1_SLAVEMODE_RESET); 从模式复位这个功能。每次输入的脉冲触发计 ...

跟这个模式应该没有关系,现在的问题是,无论我选择几分频,输出结果都是按照不分频的模式输出的
stm32f8 回答时间:2019-7-13 21:19:13
顶一下了了了
漂亮的方 回答时间:2020-3-13 21:16:56
搂住现在这个问题解决了吗?  我也遇到这个问题,,,感觉还奇怪。。。
butterflyspring 回答时间:2020-3-19 16:35:23
根据手册上的描述,每次上升沿触发时,计数器复位0.所以间隔8次捕获时,第8次触发时已经计数器清零了,与一次捕获结果是一致的。参考下面手册上的图看看
PWM measure theory.PNG
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版