《双世宠妃电视剧免费》电视剧百度云资源,求

stm32基于定时器计量外部脉冲的实现_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
stm32基于定时器计量外部脉冲的实现
上传于||文档简介
&&主​要​介​绍​采​用​S​T​M2​处​理​器​的​定​时​器​功​能​来​实​现​对​外​部​脉​冲​的​采​集​、​计​数​。
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
你可能喜欢查看: 1857|回复: 4
STM32f103ZET6的TIM1_ETR引脚用作外部脉冲计数,模式2计数
主题帖子精华
初级会员, 积分 108, 距离下一级还需 92 积分
在线时间9 小时
我现在遇到的问题论坛上已经出现过,但是我现在就是想不出还可以去哪里找问题:使用的还PA12定时器1的ETR外部记脉冲功能,现在现象是可以正常记录外部脉冲,而且记录到的数据也正确,但是我配置了计数到1000后溢出中断,可就是进不去中断啊,代码中,在配置开启更新中断语句前,我添加有一句清楚中断的语句,这是为了防止刚开始启动定时器就会进入一次中断,现在我把那句请中断的语句频闭了,那么初始化后可以进入一次中断,属于正常情况,接下来就开始外部脉冲计数,但是就算发生了溢出,再也进不了中断,这是为什么,是在不解,还请大家帮帮忙!调试信息中,计数超过1000后从0开始重新计数(数值跳跃是因为我间隔2S打印一次),但是没有进中断,
811a8a884a247fce00a6abaaa36f05d4_412.png (0 Bytes, 下载次数: 0)
22:54 上传
d09f72fd9ccbc7dc19dcd_574.png (0 Bytes, 下载次数: 0)
22:54 上传
dccdc82d6dcc5fece722ee1_775.png (0 Bytes, 下载次数: 0)
22:54 上传
b126a907811bbb75a6e00a_792.png (0 Bytes, 下载次数: 0)
22:54 上传
回复【3楼】lycreturn:
---------------------------------
这个问题已经解决了,代码是没有问题的,是我自己项目代码在初始化时,影响到了这个地方,问题出在另一个模块的延时干扰,具体的原因我还在查找中。
主题帖子精华
初级会员, 积分 108, 距离下一级还需 92 积分
在线时间9 小时
回复【3楼】lycreturn:
---------------------------------
这个问题已经解决了,代码是没有问题的,是我自己项目代码在初始化时,影响到了这个地方,问题出在另一个模块的延时干扰,具体的原因我还在查找中。
主题帖子精华
在线时间474 小时
主题帖子精华
在线时间359 小时
从模式下用不了更新中断吧
主题帖子精华
初级会员, 积分 103, 距离下一级还需 97 积分
在线时间18 小时
搞定了么,我也是这样情况,外部计数器溢出没有也读不出计数器的值
Powered by使用STM32的定时器进行输入脉冲的计数_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
使用STM32的定时器进行输入脉冲的计数
上传于||暂无简介
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩2页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢查看: 2543|回复: 0
STM32使用ETR引脚进行脉冲计数程序
今天早上开始做项目中的测速部分,采用3144E开关型霍尔传感器数字输出,只要单片机采集模块输出的脉冲个数,从而即可计算出速度。折腾了一下下,现在写下思路。
首先总结下STM32外部脉冲ETR引脚:
TIMER1-----PA12
TIMER2-----PA0
TIMER3-----PD2
TIMER4-----PE0
其他大家有需要再查数据手册的引脚图即可。
这边使用使用定时器TIM1的ETR输入引脚PA12作为采集脉冲输入引脚,定时器TIM1是16位可自动装载初始值的高级计数器,使能GPIO和TIM1时钟后,把GPIO口配置成浮空输入模式,自动重装初始值和分频系数大家可以根据实际情况自己设置,这边开启更新中断TIM_IT_Update,查了数据手册后发现中断向量号是TIM1_UP_IRQn,并不是TIM1_IRQn。
初始化代码
void TIM1_Counter_Init(u32 arr,u16 psc)
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitS
NVIC_InitTypeDef NVIC_InitS
GPIO_InitTypeDef&&GPIO_InitS
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE); ///使能TIM1时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitStructuer.GPIO_Pin=GPIO_Pin_12;
GPIO_InitStructuer.GPIO_Mode=GPIO_Mode_IN_FLOATING;
GPIO_InitStructuer.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructuer);
//timer1 NVIC 配置
NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;//抢占优先级2
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;//子优先级2
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//IRQ通道使能
NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器
&&TIM_TimeBaseInitStructure.TIM_Period =//自动重装载值
TIM_TimeBaseInitStructure.TIM_Prescaler= //定时器分频
TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;//向上计数模式
TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseInit(TIM1,&TIM_TimeBaseInitStructure);//初始化TIM1
TIM_ETRClockMode2Config(TIM1, TIM_ExtTRGPSC_OFF,TIM_ExtTRGPolarity_NonInverted, 5);//5次采样滤波&&外部时钟模式2
TIM_ClearITPendingBit(TIM1,TIM_IT_Update); //清除中断标志位,避免第一次自动进入中断一次
TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE);
TIM_SetCounter(TIM1,0);//设置计数初值
TIM_Cmd(TIM1,ENABLE); //使能定时器1
//定时器1中断服务函数
u8 overflow_cnt=0;//溢出次数
void TIM1_UP_IRQHandler(void)
if(TIM_GetITStatus(TIM1,TIM_IT_Update)==SET) //溢出中断
overflow_cnt++;
printf(&\r\n*********测速计数溢出***********\r\n&);
TIM_ClearITPendingBit(TIM1,TIM_IT_Update); //清除中断标志位
一开始,中断服务函数名称写错成TIM1_IRQHandler,导致没有进入中断,看了下启动文件中的中断函数名发现定时器1有好几个中断函数,于是便看了下数据手册的说明,才发现是错了,改正后,程序正常。
主函数那边printf(&CNT:%d\r\n&,TIM_GetCounter(TIM1));获取计数值,打开串口调试助手,再用小磁钢在模块旁边甩动,一开始小磁钢的方向放错了,导致计数值一直没增加,改用按键输入脉冲调试了一会想到会不会是因为磁场方向问题,换了下小磁钢的方向,计数值就增加了,哎。
因为用了delay函数延时显示避免刷屏,所以有点跳数了,不过数值还是正确的。
Powered by

我要回帖

更多关于 双世宠妃电视剧免费 的文章

 

随机推荐