STM32F407-14.3.3-01 重复计数器

重复计数器


第 14.3.1 节:时基单元介绍如何因计数器上溢/下溢而生成更新事件 (UEV)。实际上,只有当重复计数器达到零时,才会生成更新事件。这在生成 PWM 信号时很有用。
这意味着,每当发生 N+1 个计数器上溢或下溢(其中,N 是 TIMx_RCR 重复计数器寄存器中的值),数据就将从预装载寄存器转移到影子寄存器(TIMx_ARR 自动重载寄存器、TIMx_PSC 预分频器寄存器以及比较模式下的 TIMx_CCRx 捕获/比较寄存器)。
重复计数器在下列情况下递减:
●    递增计数模式下的每个计数器上溢。
●    递减计数模式下的每个计数器下溢。
●    中心对齐模式下每个计数器上溢和计数器下溢。尽管这使得最大重复次数不超过 128 个PWM 周期,但在每个 PWM 周期内可更新占空比两次。当在中心对齐模式下,每个 PWM 周期仅刷新一次比较寄存器时,由于模式的对称性,最大分辨率为 2xTck。
重复计数器是自动重载类型;其重复率为 TIMx_RCR 寄存器所定义的值(请参见图 91)。当更新事件由软件(通过将 TIMx_EGR 寄存器的 UG 位置 1)或硬件(通过从模式控制器)生成时,无论重复计数器的值为多少,更新事件都将立即发生,并且在重复计数器中重新装载 TIMx_RCR 寄存器的内容。
在中心对齐模式下,如果 RCR 值为奇数,更新事件将在上溢或下溢时发生,这取决于何时写入 RCR 寄存器以及何时启动计数器。如果在启动计数器前写入 RCR,则 UEV 在上溢时发生。如果在启动计数器后写入 RCR,则 UEV 在下溢时发生。例如,如果 RCR = 3,UEV 将在每个周期的第四个上溢或下溢事件时生成(取决于何时写入 RCR)。
-------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------

  • 23
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
帮我将代码修改为标准库 void atim_timx_cplm_pwm_init(uint16_t arr, uint16_t psc) { TIM_OC_InitTypeDef sConfigOC ; g_atimx_cplm_pwm_handle.Instance = ATIM_TIMX_CPLM; /* 定时器x */ g_atimx_cplm_pwm_handle.Init.Prescaler = psc; /* 定时器预分频系数 */ g_atimx_cplm_pwm_handle.Init.CounterMode = TIM_COUNTERMODE_UP; /* 向上计数模式 */ g_atimx_cplm_pwm_handle.Init.Period = arr; /* 自动重装载值 */ g_atimx_cplm_pwm_handle.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; /* 时钟分频因子 */ g_atimx_cplm_pwm_handle.Init.RepetitionCounter = 0; /* 重复计数器寄存器为0 */ g_atimx_cplm_pwm_handle.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE; /* 使能影子寄存器TIMx_ARR */ HAL_TIM_PWM_Init(&g_atimx_cplm_pwm_handle) ; /* 设置PWM输出 */ sConfigOC.OCMode = TIM_OCMODE_PWM1; /* PWM模式1 */ sConfigOC.Pulse = 0; /* 比较值为0 */ sConfigOC.OCPolarity = TIM_OCPOLARITY_LOW; /* OCy 低电平有效 */ sConfigOC.OCNPolarity = TIM_OCNPOLARITY_LOW; /* OCyN 低电平有效 */ sConfigOC.OCFastMode = TIM_OCFAST_ENABLE; /* 不使用快速模式 */ sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; /* 主通道的空闲状态 */ sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; /* 互补通道的空闲状态 */ HAL_TIM_PWM_ConfigChannel(&g_atimx_cplm_pwm_handle, &sConfigOC, ATIM_TIMX_CPLM_CHY); /* 配置后默认清CCER的互补输出位 */ /* 设置死区参数,开启死区中断 */ sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_ENABLE; /* OSSR设置为1 */ sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; /* OSSI设置为0 */ sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; /* 上电只能写一次,需要更新死区时间时只能用此值 */ sBreakDeadTimeConfig.DeadTime = 0X0F; /* 死区时间 */ sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; /* BKE = 0, 关闭BKIN检测 */ sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_LOW; /* BKP = 1, BKIN低电平有效 */ sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; /* 使能AOE位,允许刹车后自动恢复输出 */ HAL_TIMEx_ConfigBreakDeadTime(&g_atimx_cplm_pwm_handle, &sBreakDeadTimeConfig); /* 设置BDTR寄存器 */ }
06-09

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值