教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 法律文档 >

stm32 PWM输入捕获(7)

来源:网络收集 时间:2026-09-07
导读: void Capture_Init(u16 arr,u16 psc) { //此部分需手动修改 IO口设置 RCC->APB2ENR|=1 RCC->APB1ENR|=1 APB2ENR|=1 TIM2->ARR=arr; //设定计数器自动重装值//刚好1ms TIM2->PSC=psc; //预分频器, GPIOA->CRL//PA0

void Capture_Init(u16 arr,u16 psc) {

//此部分需手动修改 IO口设置 RCC->APB2ENR|=1<<0; //

RCC->APB1ENR|=1<<0; //TIM2 时钟使能 RCC->APB2ENR|=1<<2; //使能PORTA时钟

TIM2->ARR=arr; //设定计数器自动重装值//刚好1ms TIM2->PSC=psc; //预分频器,

GPIOA->CRL&=0XFFFFFFF0;//PA0 输出 GPIOA->CRL|=0X00000004;//复用功能输出 GPIOA->ODR|=1<<0;//PA0 上拉

TIM2->SMCR|=0x00D4;

//TIM2->SMCR|= 1<<5; //MSM=1 主/从模式 //TIM2->SMCR|= 5<<4; //TS=101 触发选择 //TIM2->SMCR|= 4<<0; //SMS=100 复位模式

TIM2->CCMR1|=1<<0;//CC1S=01 选择输入端 TIM2->CCMR1|=3<<4; //IC1F=0011配置输入滤波器

TIM2->CCER|=0<<1; //CC1P=0选择有效转换边沿 上升沿有效 TIM2->CCMR1|=0<<2; //IC1PS=00 配置输入分频

TIM2->CCER|=1<<0; //CC1E=1 允许捕获计数器的值到捕获寄存器中

TIM2->CCMR1|=2<<8;//CC2S=10 选择输入端

TIM2->CCER|=1<<5; //CC2P=1选择有交转换边沿 下降沿有效 TIM2->CCER|=1<<4; //CC2E=1 允许捕获计数器的值到捕获寄存器中

TIM2->DIER|=1<<1; //允许更新捕获中断

TIM2->CR1|=0x01; //使能定时器2

MY_NVIC_Init(1,3,TIM2_IRQChannel,2);//抢占1,子优先级3,组2 }

//定时器2中断服务程序

void TIM2_IRQHandler(void) {

IC1Value = TIM2->CCR1;//读取CCR1也可以清CC1IF标志位 IC2Value = TIM2->CCR2;//读取CCR1也可以清CC2IF标志位 TIM2->SR&=~(1<<1);//清除中断标志位 }

//===============================================================

还有上面Capture_Init(2000,72-1); 里面的参数与PWM_Init(1000,72-1); 里面的参数有什么具体关系呢? 谢谢!

关系是:Capture_Init(2000,72-1)中的2000是用于计数的,就是触发后到下一次触发的计数,如果捕获的PWM信号周期太长20000不够会有溢出的。PWM_Init(1000,72-1); 中的1000是重载,当设置72-1时,分频为1M,重载1000,就是1M/1000=1K。

如果Capture_Init(2000,72-1)设置72-1,说明分频为1M,1M的频率在计数1K的信号那计数器要计数1000次,这个1000次要在Capture_Init(2000,72-1)中的2000内, 如果1000次大于Capture_Init(2000,72-1)中的2000,那就会溢出了。

所以,如果PWM_Init(1000,72-1); 中的1000这个数很大,那Capture_Init(2000,72-1)中的2000要比它大就得了。这样就不会溢出了。

不稳定不确定说明你重载太少了,已经溢出了。你可以改大一点Capture_Init(65536,72-1); 这样可以测几十HZ.

A:这里是定时器输入口1,我是IC1映射到TI1, 所以是从TI1PF1触发的,具体请看PWM输入图表。

B:通道选择请看手册,CC1通道被配置为输入,IC1映射到TI1上 C:输入滤波器请看手册

D:从输入选择了CCR2,通道TI2.

PWM输入模式 库函数例程位置 : STM32F10x_StdPeriph_Lib_V3.3.0\\Project\\STM32F10x_StdPeriph_Examples\\TIM\\PWM_Input 该模式是输入捕获模式的一个特例 例如,你需要测量

输入到TI1上的PWM信号的长度(TIMx_CCR1寄存器)和占空比(TIMx_CCR2寄存器),具体步骤如下(取决于CK_INT的频率和预分频器的值)

● 选择TIMx_CCR1的有效输入:置TIMx_CCMR1寄存器的CC1S=01(选择TI1)。

● 选择TI1FP1的有效极性(用来捕获数据到TIMx_CCR1中和清除计数器):置CC1P=0(上升沿有效)。

● 选择TIMx_CCR2的有效输入:置TIMx_CCMR1寄存器的CC2S=10(选择TI1)。 ● 选择TI1FP2的有效极性(捕获数据到TIMx_CCR2):置CC2P=1(下降沿有效)。 ● 选择有效的触发输入信号:置TIMx_SMCR寄存器中的TS=101(选择TI1FP1)。 ● 配置从模式控制器为复位模式:置TIMx_SMCR中的SMS=100。 ● 使能捕获:置TIMx_CCER寄存器中CC1E=1且CC2E=1。

stm32 PWM输入捕获(7).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/436323.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)