完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
时钟选择
计数器时钟可由下列时钟源提供: ● 内部时钟(CK_INT) ● 外部时钟模式1:外部输入脚(TIx) ● 外部时钟模式2:外部触发输入(ETR) ● 内部触发输入(ITRx):使用一个定时器作为另一个定时器的预分频器,如可以配置一个定时器Timer1而作为另一个定时器Timer2的预分频器。 /------------------------------- 内部时钟(CK_INT)就是最普通的系统时钟分频 外部时钟模式1:外部输入脚(TIx),TI1、TI2,从TIMx_CHx中输入,且TI1可以配置为CH123异或之后的结果。 外部时钟模式2:外部触发输入(ETR),对应的TIMx_ETR引脚。 /------------------------------- 1、内部时钟,这个最简单 TIM2->SMCR 2:0=000;即可,什么其他操作都不需要,剩下的是每种都有的操作 开时钟、预分频、重装值、使能计数器、开中断、分配优先级。 RCC->APB1ENR|=1<<0; //开TIM2时钟 //TIM2->CR1|=UP_DOWN<<4; //DIR第四位,计数方向0:向上;1向下 TIM2->PSC=psc; //时钟预分频 TIM2->ARR=arr; //自动重装值 TIM2->CR1|=1<<0;//CEN第0位,1:使能计数器;0:关闭定时器 TIM2->DIER|=1<<0; //UIE 位0 允许更新中断 0:禁止更新中断;1:允许更新中断。 MY_NVIC_Init(1,3,TIM2_IRQn,2);//抢占1,子优先级3,组2 /----------------------------------------------------------------------------------/ 2、外部时钟模式1:外部输入脚(TIx),TI1、TI2,从TIMx_CHx中输入,且TI1可以配置为CH123异或之后的结果。 这个比较复杂点,只配置了TI2,功能与ETR一样了,这个不对,需要深挖一下,配置过程比较难受,最后也是成功了。 程序讲解分为两部分,配置函数与中断服务函数。先说简单的中断服务函数 void TIM2_IRQHandler(void) { if(TIM2->SR&0X0001)//溢出中断 { LED_G_T; timer++; } TIM2->SR&=~(1<<0);//清除中断标志位 if(TIM2->SR&0X0040)//触发器中断标记.这一种有误差,用处不大,不如加入自动重装值,之后提取加满次数和计数器当前值效果好。 { LED_R_T; HZ++; } TIM2->SR&=~(1<<6);//触发器中断标记 TIM2->SR=0; } 以上就是一个成功计频的中断服务函数,配置中设定一个自动重装值,这样会有两个重要的中断,触发中断和溢出中断,使用时按照固定时间取出溢出次数和CNT当前值计算后得出频率。 触发中断在每次TI2引脚捕捉上升沿之后都会触发,溢出中断在累积捕捉自动重装值次上升沿后触发,这个很简单。 /-------------------------------------------------------- 第二部分配置函数就复杂点,先说明一下做了哪些工作, 开时钟 :TIMx时钟和输入引脚时钟。 配置输入引脚 :下拉输入 8 TI2配置 :CC2通道配置为输入、设置滤波器、设定捕获极性(上下沿触发) 计数器配置 :选择外部时钟1模式、选择触发源、预分频与自动重装值、开计数器使能、选择开启哪些中断,配置优先级。 配置函数: RCC->APB1ENR|=1<<0; //开TIM2时钟 RCC->APB2ENR|=1<<2; //使能PORTA时钟 /输入引脚/ GPIOA->CRL&=0XFFFFFF0F; //PA1 清除之前设置 GPIOA->CRL|=0X00000080; //PA1 输入 GPIOA->ODR|=0<<1; //PA1 下拉 /TI2配置/ TIM2->CCMR1|=01<<8; //TIMx_CCMR1寄存器 9:8位 01:CC2通道被配置为输入,IC2映射在TI2上; TIM2->CCMR1|=000<<12; //位15:12 IC2F[3:0]:输入捕获2滤波器(如果不需要滤波器,保持IC2F=0000) //注: 捕获预分频器不用作触发,所以不需要对它进行配置 TIM2->CCER|=0<<5; //位5 CC2P:输入/捕获2输出极性:0:上升沿;1:下降沿 /计数器配置/ TIM2->SMCR|=7<<0; //SMS=’111’,选择定时器外部时钟模式1 TIM2->SMCR|=6<<4; //位6:4 TS[2:0]:触发选择 110:滤波后的定时器输入2(TI2FP2) 选定TI2作为触发输入源 //TIM2->PSC=10; //时钟预分频 | TIM2->ARR=65535; //自动重装值 |此两项预分频始终效果不好,会丢信号,自动重装值配合运算计频还不错。 TIM2->CR1|=1<<0;//CEN第0位,1:使能计数器;0:关闭定时器 /中断配置/ //TIM2->DIER|=1<<6; //此位开中断后,每次上升沿都会进中断,SR第六位;位6 TIE:触发中断使能0:禁止触发中断;1:使能触发中断。 TIM2->DIER|=1<<0; //UIE 位0 允许更新中断 0:禁止更新中断;1:允许更新中断。 MY_NVIC_Init(1,3,TIM2_IRQn,2);//抢占1,子优先级3,组2 /**-------------------------------------------------------------------------*/ 3、外部时钟模式2:外部触发输入(ETR),对应的TIMx_ETR引脚。 这个相对模式1来说简单得多,配置过模式1之后随随便便就出来了。 这两个非常类似,与1不同的是,选择时钟时不需要SMS三位的配置,只需要第14位置一,因此外部时钟模式1和2可以同时使用!! /-------------------------------------------------------- 中断服务函数与模式1基本一致,只有溢出中断,用法一模一样,甚至可以复制。 配置函数做了哪些工作: 开时钟 :TIMx时钟和输入引脚时钟。 配置输入引脚 :下拉输入 8 计数器配置 :选择滤波器、设置ETR预分频器、外部触发极性、开启外部时钟模式2、预分频与自动重装值、开计数器使能、选择开启哪些中断,配置优先级。 /*时钟*/ RCC->APB1ENR|=1<<0; //开TIM2时钟 RCC->APB2ENR|=1<<2; //使能PORTA时钟 /*输入引脚*/ GPIOA->CRL&=0XFFFFFFF0; //PA0 清除之前设置 GPIOA->CRL|=0X00000008; //PA0 输入 GPIOA->ODR|=0<<1; //PA0 下拉 /*计数器配置*/ TIM2->SMCR|=0<<8; //滤波器 ETF[3:0]=0000 TIM2->SMCR|=0<<12; //设置预分频器 /2 ,置TIMx_SMCR寄存器中的ETPS[1:0]=01,外部触发信号ETRP的频率必须最多是CK_INT频率的1/4 TIM2->SMCR|=1<<14; //开启外部时钟模式2,置TIMx_SMCR寄存器中的ECE=1 0:禁止外部时钟模式2;1:使能外部时钟模式2。 //TIM2->PSC=10; //时钟预分频 | TIM2->ARR=arr; //自动重装值 |此两项预分频始终效果不好,会丢信号,自动重装值配合运算计频还不错。 TIM2->CR1|=1<<0;//CEN第0位,1:使能计数器;0:关闭定时器 /中断配置/ TIM2->DIER|=1<<0; //UIE 位0 允许更新中断 0:禁止更新中断;1:允许更新中断。 MY_NVIC_Init(1,3,TIM2_IRQn,2);//抢占1,子优先级3,组2 /**-------------------------------------------------------------------------*/ |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1561 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1501 浏览 1 评论
933 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
665 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1555 浏览 2 评论
1848浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
610浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
504浏览 3评论
508浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
489浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-10 17:44 , Processed in 0.659333 second(s), Total 45, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号