关于定时器ETR计数功能
关于使用定时器计算外部脉冲的方式,除却使用输入捕获方式之外,还可以使用定时器的ETR计数方式。
如下图,首先关于定时器的时钟输入来源,可以分为4类,如下图:
当使用选择外部时钟源模式2时,可在外部时钟输入引脚的每一个上升沿或者下降沿计数,如下图介绍:
关于使用ETR计数功能的初始化配置程序,具体如下:
void TIM_ETR_Init() { GPIO_InitTypeDef GPIO_InitStructure={0}; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure={0}; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_TIM1, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); TIM_TimeBaseStructure.TIM_Period = 0xFFFF; TIM_TimeBaseStructure.TIM_Prescaler = 0x00; TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseStructure.TIM_RepetitionCounter = 0; TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); // Time base configuration //注意使用ETR引脚脉冲计数时,需要选择时钟外部模式2 TIM_ETRClockMode2Config(TIM1, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted, 0); TIM_SetCounter(TIM1, 0); TIM_Cmd(TIM1, ENABLE); }
注意使用ETR计数功能,要选择使用对应的ETR引脚,例程选择使用PA12引脚,如下图。
获取计数器的值,程序如下:
uint32_t Get_TIM1_ETR_Counter(void) { uint32_t u32Counter; u32Counter = TIM_GetCounter(TIM1); TIM_SetCounter(TIM1, 0); return u32Counter; }
关于脉冲频率的计算:
脉冲频率 = 定时器计数个数/计数时间
分类:
32位MCU学习
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~