mini板stm32外部stm32 etr脉冲计数数怎么写啊

stm32通用定时器用做外部脉冲计数器的例程
09:35:49来源: eefocus 关键字:&&&&&&
最近几天要用到对外部输入脉冲进行计数,很自然想到定时器,可是手上资料没有讲解stm32定时器如何用作外部的,在网上找例程,也没找到几个正确的,自己硬着头皮仔细研究参考手册,终于知道如何配置了,并写了一个例程,希望将来对一些网友有用。其实stm32做计数器,对计数,还是比较简单的,使用外部时钟模式2即可轻松实现,但要注意,这种模式下,外部输入脉冲信号一定要接在相应TIM的ETR引脚上,不能接在TIMx_CHy引脚上。使用stm32定时器的外部时钟模式2,主要就是通过配置TIMx_SMCR寄存器相应位。步骤如下:1. 若不需要滤波器,置TIMx_SMCR寄存器中的ETF[3:0]=0000&2. 设置预分频,TIMx_SMCR寄存器中的ETPS[1:0]&3. 设置ETR的检测极性,TIMx_SMCR寄存器中的ETP位&4. 开启外部时钟模式2,置TIMx_SMCR寄存器中的ECE=1&5. 启动计数器,置TIMx_CR1寄存器中的CEN=1我的例程是利用定时器2,定时产生周期1s的方波信号,通过PB5(LED0)输出,通过导线将PB5的方波信号输入到TIMER3的ETR引脚PD2上,通过TIMER3对该方波信号计数,计数次数到了之后,更改LED1的状态。以下程序已经过测试,可行。//timer2 ,定时器模式void TIM2_Int_Init(u16 arr,u16 psc){RCC->APB1ENR |= 1<<0;//TIM2时钟使能TIM2->ARR =TIM2->PSC =TIM2->DIER |= 1<<0;//允许更新中断TIM2->DIER |= 1<<6;//使能触发中断MY_NVIC_Init(1,2,TIM2_IRQChannel,2);//抢占1,子优先级2,组2TIM2->CR1 |= 1<<0;//使能定时器}//定时器2中断服务程序 &void TIM2_IRQHandler(void){&& & && &if(TIM2->SR&0X0001)//溢出中断{LED0=!LED0; &//PB5,硬件连线:将PB5连接至TIM3_ETR引脚PD2上 & &&&& &&& &} &&TIM2->SR&=~(1<<0);//清除中断标志位&& &}//通用定时器3 用作外部计数器 初始化//arr:计数自动重装值。void TIM3_Int_Init(u16 arr){RCC->APB2ENR|=1<<5;//开启GPIOD端口时钟GPIOD->CRL &= 0xfffff0GPIOD->CRL |= 0x;//PD.2 浮空输入RCC->APB1ENR |= 1<<1;//使能TIM3时钟TIM3->ARR= &//设定计数器自动重装值TIM3->PSC=0; & & & &//不分频& & TIM3->SMCR &= ~(0xf<<8);//无滤波TIM3->SMCR &= ~(3<<12);//关闭预分频TIM3->SMCR |= 1<<15;//ETR被反相,低电平或下降沿有效TIM3->SMCR |= 1<<14;//使能外部时钟模式2TIM3->DIER |= 1<<0;//允许更新中断TIM3->DIER |= 1<<6;//允许触发中断MY_NVIC_Init(1,3,TIM3_IRQChannel,2);//抢占1,子优先级3,组2TIM3->CNT = 0x0;//清零计数器TIM3->CR1 |= 1<<0;//使能定时器,开启计数。&}//定时器3中断服务程序 &void TIM3_IRQHandler(void){&& & && &if(TIM3->SR&0X0001)//溢出中断{LED1=!LED1; && & &&& &&& & } &&TIM3->SR&=~(1<<0);//清除中断标志位&& &}int main(void){ & &Stm32_Clock_Init(9);//系统时钟设置uart_init(72,9600);//串口初始化为9600delay_init(72);&&//延时初始化&LED_Init(); && //初始化与LED连接的硬件接口BEEP_Init(); & & & &&//初始化蜂鸣器端口KEY_Init(); & & & &&//初始化与按键连接的硬件接口TIM3_Int_Init(20); //计数次数TIM2_Int_Init();//时钟周期0.1ms,计数5000次=定时0.5s& & while(1); &}实验结果:LED0 :1s点亮一次,LED1: & & 20s点亮一次。
关键字:&&&&&&
编辑:什么鱼
引用地址:
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
关注eeworld公众号快捷获取更多信息
关注eeworld服务号享受更多官方福利
热门关键词
大学堂最新课程
汇总了TI汽车信息娱乐系统方案、优质音频解决方案、汽车娱乐系统和仪表盘参考设计相关的文档、视频等资源
热门资源推荐
频道白皮书
何立民专栏
北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。&>&STM32外部计数器程序
STM32外部计数器程序
上传大小:1KB
对于需要用STM32读取编码器的反馈值,需要计数外部方波个数的同学有福了,下载可以直接用,本代码提供TIM1 TIM2的外部计数器代码。
综合评分:0
{%username%}回复{%com_username%}{%time%}\
/*点击出现回复框*/
$(".respond_btn").on("click", function (e) {
$(this).parents(".rightLi").children(".respond_box").show();
e.stopPropagation();
$(".cancel_res").on("click", function (e) {
$(this).parents(".res_b").siblings(".res_area").val("");
$(this).parents(".respond_box").hide();
e.stopPropagation();
/*删除评论*/
$(".del_comment_c").on("click", function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_invalid/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parents(".conLi").remove();
alert(data.msg);
$(".res_btn").click(function (e) {
var parentWrap = $(this).parents(".respond_box"),
q = parentWrap.find(".form1").serializeArray(),
resStr = $.trim(parentWrap.find(".res_area_r").val());
console.log(q);
//var res_area_r = $.trim($(".res_area_r").val());
if (resStr == '') {
$(".res_text").css({color: "red"});
$.post("/index.php/comment/do_comment_reply/", q,
function (data) {
if (data.succ == 1) {
var $target,
evt = e || window.
$target = $(evt.target || evt.srcElement);
var $dd = $target.parents('dd');
var $wrapReply = $dd.find('.respond_box');
console.log($wrapReply);
//var mess = $(".res_area_r").val();
var mess = resS
var str = str.replace(/{%header%}/g, data.header)
.replace(/{%href%}/g, 'http://' + window.location.host + '/user/' + data.username)
.replace(/{%username%}/g, data.username)
.replace(/{%com_username%}/g, data.com_username)
.replace(/{%time%}/g, data.time)
.replace(/{%id%}/g, data.id)
.replace(/{%mess%}/g, mess);
$dd.after(str);
$(".respond_box").hide();
$(".res_area_r").val("");
$(".res_area").val("");
$wrapReply.hide();
alert(data.msg);
}, "json");
/*删除回复*/
$(".rightLi").on("click", '.del_comment_r', function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_comment_del/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parent().parent().parent().parent().parent().remove();
$(e.target).parents('.res_list').remove()
alert(data.msg);
//填充回复
function KeyP(v) {
var parentWrap = $(v).parents(".respond_box");
parentWrap.find(".res_area_r").val($.trim(parentWrap.find(".res_area").val()));
评论共有0条
VIP会员动态
CSDN下载频道资源及相关规则调整公告V11.10
下载频道用户反馈专区
下载频道积分规则调整V1710.18
spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip
资源所需积分/C币
当前拥有积分
当前拥有C币
输入下载码
为了良好体验,不建议使用迅雷下载
STM32外部计数器程序
会员到期时间:
剩余下载个数:
剩余积分:0
为了良好体验,不建议使用迅雷下载
积分不足!
资源所需积分/C币
当前拥有积分
您可以选择
程序员的必选
绿色安全资源
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
您的积分不足,将扣除 10 C币
为了良好体验,不建议使用迅雷下载
无法举报自己的资源
你当前的下载分为234。
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可返还被扣除的积分
被举报人:
举报的资源分:
请选择类型
资源无法下载 ( 404页面、下载失败、资源本身问题)
资源无法使用 (文件损坏、内容缺失、题文不符)
侵犯版权资源 (侵犯公司或个人版权)
虚假资源 (恶意欺诈、刷分资源)
含色情、危害国家安全内容
含广告、木马病毒资源
*详细原因:
STM32外部计数器程序查看: 8321|回复: 6
啃求利用通过STM32定时器的外部脉冲计数功能的参考程序
主题帖子精华
高级会员, 积分 536, 距离下一级还需 464 积分
在线时间2 小时
恳求利用通过STM32定时器的外部脉冲计数功能的参考程序
STM32初学者,望多指教
主题帖子精华
金钱128040
在线时间1127 小时
论坛有,搜索下。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
主题帖子精华
中级会员, 积分 334, 距离下一级还需 166 积分
在线时间9 小时
void&Timer2_Init(u16&arr,u16&psc)
{
GPIO_InitTypeDef&GPIO_InitS
TIM_TimeBaseInitTypeDef&&TIM_TimeBaseS
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,&ENABLE);
GPIO_InitStructure.GPIO_Pin&=&GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode&=&GPIO_Mode_IN_FLOATING;& &&//上拉输入
GPIO_InitStructure.GPIO_Speed&=&GPIO_Speed_50MHz;&//50M时钟速度
GPIO_Init(GPIOA,&&GPIO_InitStructure);
&&&&
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,&ENABLE);&//时钟使能
TIM_DeInit(TIM2);
TIM_TimeBaseStructure.TIM_Period&=&&//设置在下一个更新事件装入活动的自动重装载寄存器周期的值 &计数到ms&arr
TIM_TimeBaseStructure.TIM_Prescaler&=&//设置用来作为TIMx时钟频率除数的预分频值&&10Khz的计数频率&&
TIM_TimeBaseStructure.TIM_ClockDivision&=&0;&//设0置时钟分割:TDTS&=&Tck_tim &&&psc
TIM_TimeBaseStructure.TIM_CounterMode&=&TIM_CounterMode_Up;&&//TIM向上计数模式
TIM_TimeBaseInit(TIM2,&&TIM_TimeBaseStructure);&//根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
&
TIM_ETRClockMode2Config(TIM2,&TIM_ExtTRGPSC_OFF,&TIM_ExtTRGPolarity_NonInverted,&0); &&//使用外部计数
TIM_SetCounter(TIM2,&0);
&//计数器清零
TIM_Cmd(TIM2,&ENABLE);&&//使能TIMx外设
主题帖子精华
新手入门, 积分 31, 距离下一级还需 -11 积分
在线时间0 小时
u16&Colour_num=0;
&&//&用于颜色传感器脉冲计数
u8&&Time3_flag=0;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//&定时器中断标志
/*==============================以下为定时器3程序部分=================================*/
/*定时器3中断服务函数*/
void&TIM3_IRQHandler(void)
{&&
if(TIM3-&SR&&&0X0001)&{
//溢出中断
&&&
TIM3-&SR&&=&0xFFFE;
//清除中断标志位&&&
& Time3_flag&=&1;
& EXTI-&IMR&&=&0xFFFFBFFF; //关闭外部中断0
& TIM3-&CR1&&=&0XFFFE;
//关闭定时器3
&&& }&
}
/**********************************************
函数名称:Timer3_Init
函数功能:通用定时器3中断初始化
入口函数:arr(自动重装值)
&&&&&&&&&&psc(时钟预分频数)
返回参数:无
备注:时钟为2倍APB1(36M)
溢出时间(MS)=(arr*(psc+1))/输入时钟频率(72MHZ)&
***********************************************/
void&Timer3_Init(u16&arr,u16&psc)
{
&&&&&RCC-&APB1ENR&|=&1&&1; //使能TIM3时钟
&&&&&TIM3-&ARR&=&
//设置计数器自动重装值(0.1ms)
&&&&&TIM3-&gtSC&=&
//预分频器7200,刚好10khz
&&&&&TIM3-&DIER&|=&1&&0;& //允许更新中断
&&&&&TIM3-&DIER&|=&1&&6;& //允许触发中断
&&&&&TIM3-&CR1&&=&0XFFFE; //失能定时器3
// &TIM3-&CR1&|=&1&&0;
//使能定时器3
}
/*=============================以下为外部中断14程序部分=================================*/
/*外部中断14服务程序*/
void&EXTI15_10_IRQHandler(void)
{
Temp&=&EXTI-&gtR;//取读是哪个引脚的中断
if((Temp&&14)&0x01) {
&&&&EXTI-&gtR&=&1&&14; //清除line14上的中断标志位
Colour_num++;
/******************************************************************************
*&函数名&&&&&&&TCS230_EXTI_Configuration(void)
*&描述&&&&&&&&&配置EXTI线&(使中断线和IO针脚线连接上)
*&输入&&&&&&&&&无&
*&输出&&&&&&&&&无
*&返回值&&&&&&&无
******************************************************************************/
void&TCS230_EXTI_Configuration(void)
{
EXTI_InitTypeDef&EXTI_InitS&&&&&&&
//&连接IO口到中断线&
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,&GPIO_PinSource14);//外部中断EXTI14(Out)
&& //&配置EXTI出现上升沿,则产生中断 &&
&& EXTI_InitStructure.EXTI_Line&=&EXTI_Line14;
&& EXTI_InitStructure.EXTI_Mode&=&EXTI_Mode_I
&& EXTI_InitStructure.EXTI_Trigger&=&EXTI_Trigger_R//“上升沿”中断
&& EXTI_InitStructure.EXTI_LineCmd&=&ENABLE;
&& EXTI_Init(&EXTI_InitStructure);
}
/*
********************************************************************************
**&函数名称&:&TCS230_NVIC_Configuration(void)
**&函数功能&:&中断初始化
**&输&&&&入 :&无
**&输&&&&出 :&无
**&返&&&&回 :&无
********************************************************************************
*/
void&TCS230_NVIC_Configuration(void)
{&
NVIC_InitTypeDef&NVIC_InitS&&&
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);&&
&& NVIC_InitStructure.NVIC_IRQChannel&=&TIM3_IRQn; &&
//更新事件
&& NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority&=&1; //抢占优先级1&
&& NVIC_InitStructure.NVIC_IRQChannelSubPriority&=&0;
&& //响应优先级0
&& NVIC_InitStructure.NVIC_IRQChannelCmd&=&ENABLE;&&&&&&&&&&&&&//允许中断
&& NVIC_Init(&NVIC_InitStructure);
&& //写入设置
&& NVIC_InitStructure.NVIC_IRQChannel&=&EXTI15_10_IRQn; && //更新事件
&& NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority&=&1; //抢占优先级1&
&& NVIC_InitStructure.NVIC_IRQChannelSubPriority&=&1;
&& //响应优先级1
&& NVIC_InitStructure.NVIC_IRQChannelCmd&=&ENABLE;&&&&&&&&&&&&&//允许中断
&& NVIC_Init(&NVIC_InitStructure);
&& //写入设置
/**********************************************************
&函数名称:TCS230_Init
&函数功能:TCS230初始化
&入口参数:无
&返回参数:无
&备&&&&注:初始化外部中断14及定时器中断3及相关I/O口设置
**********************************************************/&
void&TCS230_Init(void)
{
RCC-&APB2ENR&|=&1&&0; //使能AFIO时钟
RCC-&APB2ENR&|=&1&&3;& //使能GPIOB时钟 &&& &
/*&Configure&TCS230&pins:&OUT-PB14,&S0-PB12,&S1-PB11,&S2-PB13,&S3-PB10&*/
//OUT-浮空输入;0S0~S4-推挽输出,50HMz
GPIOB-&CRH&&=&0xF00000FF;
GPIOB-&CRH&|=&0x;
GPIOB-&BSRR&|=&1&&10;
GPIOB-&BSRR&|=&1&&11;
GPIOB-&BSRR&|=&1&&12;
GPIOB-&BSRR&|=&1&&13;
Timer3_Init(40,7199);&//4ms
TCS230_EXTI_Configuration();
TCS230_NVIC_Configuration();
}
/***********************************************
&函数名称:Colour_Init
&函数功能:TCS230内部颜色滤波器设置
&入口参数:Colour
&返回参数:无
&备&&&&注:Colour&选择颜色(Red1/Blue1/Green1)
************************************************/&
void&Colour_Init(u8&Colour)
{
switch(Colour)
& case&Red1:&TCS32_S2&=&0;TCS32_S3&=&0;&
case&Blue1:&TCS32_S2&=&0;TCS32_S3&=&1;&
case&Green1:&TCS32_S2&=&1;TCS32_S3&=&1;&
default&:&
/**********************************************************
&函数名称:TCS230_Start
&函数功能:初始化各变量及定时器3、外部中断14,用于脉冲计数
&入口参数:无
&返回参数:无
**********************************************************/&
void&TCS230_Start(void)
{
Colour_num&=&0;
//计数清零
Time3_flag&=&0;& //定时器标志清零
TIM3-&CR1&|=&0X01; //使能定时器3
EXTI-&IMR&|=&1&&14; //开启外部中断14
主题帖子精华
高级会员, 积分 536, 距离下一级还需 464 积分
在线时间2 小时
哈哈,谢谢
主题帖子精华
初级会员, 积分 71, 距离下一级还需 129 积分
在线时间0 小时
回复【2楼】正点原子:
---------------------------------
哪里有啊&没有找到啊原子哥
主题帖子精华
金钱128040
在线时间1127 小时
&回复【6楼】 我该去向何处 :
---------------------------------
论坛搜:脉冲计数.
就找到答案了,你找资料的能力亟待加强.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
Powered by21ic官方微信-->
ST MCU Finder
安装免费手机应用,
寻找理想的ST MCU
请教,STM32定时器的ETR与外部脉冲计数
初级技术员, 积分 51, 距离下一级还需 49 积分
初级技术员, 积分 51, 距离下一级还需 49 积分
初级技术员, 积分 51, 距离下一级还需 49 积分
初级技术员, 积分 51, 距离下一级还需 49 积分
1.在STM32的计数器中的脉冲输入引脚是ETR,想问一下是不是只有ETR引脚具备脉冲计数功能,而其他通道都不能进行脉冲计数?
2.如果我在一个定时器模式下想同时计数两路脉冲计数,是不是就不能使用脉冲计数功能,而只能使用捕获中断计数?
3.但是捕获中断只能捕获单边沿,外部中断可以捕获双边沿,是使用外部中断计数?有没有比较过外部中断计数和捕获计数那个的精度高?
满意回复+20
1)还可以使用CH1和CH2
2)“同时计数两路脉冲计数”是什么意思?打算怎么做?
3)同时使用2个通道,可以捕获双边沿功能。如果频率不高,外部中断计数和捕获计数 ...
1)还可以使用CH1和CH2
2)“同时计数两路脉冲计数”是什么意思?打算怎么做?
3)同时使用2个通道,可以捕获双边沿功能。如果频率不高,外部中断计数和捕获计数具有相同精度;如果频率较高,使用外部中断有可能响应来不及,会丢失计数。
实习生, 积分 27, 距离下一级还需 23 积分
实习生, 积分 27, 距离下一级还需 23 积分
实习生, 积分 27, 距离下一级还需 23 积分
实习生, 积分 27, 距离下一级还需 23 积分
谢谢;啊‘
实习生, 积分 30, 距离下一级还需 20 积分
实习生, 积分 30, 距离下一级还需 20 积分
实习生, 积分 30, 距离下一级还需 20 积分
实习生, 积分 30, 距离下一级还需 20 积分
请教一下 有没有STM32 定时器 CH1 CH2用作外部脉冲计数的资料,或者例程。。在这里卡了好久都没调出来。。谢谢!
实习生, 积分 46, 距离下一级还需 4 积分
实习生, 积分 46, 距离下一级还需 4 积分
实习生, 积分 46, 距离下一级还需 4 积分
实习生, 积分 46, 距离下一级还需 4 积分
@香水城 请教一下 有没有STM32 定时器 CH1 CH2用作外部脉冲计数的资料,或者例程。。在这里卡了好久都没调 ...
初级技术员, 积分 84, 距离下一级还需 16 积分
初级技术员, 积分 84, 距离下一级还需 16 积分
初级技术员, 积分 84, 距离下一级还需 16 积分
初级技术员, 积分 84, 距离下一级还需 16 积分
@香水城 请教一下 有没有STM32 定时器 CH1 CH2用作外部脉冲计数的资料,或者例程。。在这里卡了好久都没调 ...
你的计数问题解决了没?
扫描二维码,随时随地手机跟帖
荣誉元老奖章
等级类勋章
坚毅之洋流
发帖类勋章
时间类勋章
技术领袖奖章
人才类勋章
技术新星奖章
人才类勋章
技术高手奖章
人才类勋章
时间类勋章
您需要登录后才可以回帖Sina Visitor System

我要回帖

更多关于 stm32 t1 脉冲计数 的文章

 

随机推荐