在线时间1853 小时
UID45393
ST金币0
蝴蝶豆82
注册时间2008-5-4
社区小助手
- 最后登录
- 2020-12-9
|
发表于 2020-4-21 17:32:40
|
显示全部楼层
a0a.1 32b0c
培训资料学习心得
开发项目中需要使用定时器4的TI2输入引脚检测到上升沿后,经过一个延时后在OC1上产生一个延时输出的正脉冲。
图1
下载了《STM32定时器基本原理及常见问题之培训资料v3.10》学习。
掌握了本项目设计中针对定时器配置的要点:
1、使用TI2FP2作为触发源;
2、在TIMx_CCMR1写入CC2S=01,将TI2FP2映射到TI2;
3、在TIMx_CCER写CC2P=0,CC2NP=0,使TI2FP2能够检测到上升沿;
4、在TIMxSMCR写入TS=110,将TI2FP2配置为从模式控制器的触发TRGI;
5、在TIMxSMCR写入SMS=110,以使用TI2FP2启动计数器;
6、TIMx_CR1的OPM置1,配置OC1为单脉冲PWM输出。
使用CubeMX来配置TIM4,可以很方便快捷的根据使用要求配置成功定时器4。
但是在配置过程中发现这个Tim4通道2的TI2FP2居然是灰色,选择不了。这应该是CubeMX的一个bug,见图2。最后只能在生成的代码里修改。希望ST工程师能够改正。
图2
- /* TIM4 init function */
- void MX_TIM4_Init(void)
- {
- TIM_SlaveConfigTypeDef sSlaveConfig;
- TIM_MasterConfigTypeDef sMasterConfig;
- TIM_OC_InitTypeDef sConfigOC;
- TIM_IC_InitTypeDef sConfigIC;
- htim4.Instance = TIM4;
- htim4.Init.Prescaler = 20;
- htim4.Init.CounterMode = TIM_COUNTERMODE_UP;
- htim4.Init.Period = 500;
- htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
- htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
- if (HAL_TIM_Base_Init(&htim4) != HAL_OK)
- {
- _Error_Handler(__FILE__, __LINE__);
- }
- if (HAL_TIM_PWM_Init(&htim4) != HAL_OK)
- {
- _Error_Handler(__FILE__, __LINE__);
- }
- if (HAL_TIM_IC_Init(&htim4) != HAL_OK)
- {
- _Error_Handler(__FILE__, __LINE__);
- }
- if (HAL_TIM_OnePulse_Init(&htim4, TIM_OPMODE_SINGLE) != HAL_OK)
- {
- _Error_Handler(__FILE__, __LINE__);
- }
- sSlaveConfig.SlaveMode = TIM_SLAVEMODE_TRIGGER;
复制代码
补充内容 (2020-4-21 17:35):
这个代码不知为何没有全部显示:
sSlaveConfig.SlaveMode = TIM_SLAVEMODE_TRIGGER;
sSlaveConfig.InputTrigger = TIM_TS_TI2FP2;
if (HAL_TIM_SlaveConfigSynchronization(&htim4, &sSlaveConfig) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
} |
|