当前位置: 首页 > news >正文

网站建设域名注册免费百度网盘登录首页

网站建设域名注册免费,百度网盘登录首页,tp框架做展示网站,制作网站编程目录1.定时器的输入捕获模式定时器输入捕获实验代码实现程序说明实现思路实现效果知识要点2.定时器的编码器模式定时器编码器实验代码实现实验思路知识要点参考资料先导知识 [1] STM32入门笔记(02):定时器之定时器中断、输入捕获和PWM输出(SPL库函数版)…

目录

  • 1.定时器的输入捕获模式
    • 定时器输入捕获实验
      • 代码实现
      • 程序说明
      • 实现思路
      • 实现效果
      • 知识要点
  • 2.定时器的编码器模式
    • 定时器编码器实验
    • 代码实现
    • 实验思路
    • 知识要点
  • 参考资料


先导知识

  • [1] STM32入门笔记(02):定时器之定时器中断、输入捕获和PWM输出(SPL库函数版)

1.定时器的输入捕获模式

本实验以 STM32F103C8T6 捕获 PB0(TIM3_CH3)引脚 高电平时间长度为例讲解定时器输入捕获。

按键一端接 PB0引脚,按键另一端接 3.3V 引脚,按键按下时 PB0引脚就会接通高电平。

定时器输入捕获实验

代码实现

TIMER.h

#ifndef __TIMER_H
#define __TIMER_H	
#include "sys.h"
#include "stm32f10x_tim.h"void TIM3_Cap_Init(u16 arr,u16 psc);#endif

TIMER.c

#include "TIMER.h"
#include "usart.h"//定时器3通道3输入捕获配置初始化函数
void TIM3_Cap_Init(u16 arr,u16 psc)
{	 //定义相关结构体GPIO_InitTypeDef GPIO_InitStructure; //定义一个GPIO初始化的结构体TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure; //定义一个定时器初始化的结构体TIM_ICInitTypeDef  TIM3_ICInitStructure; //定义一个定时器捕获输入初始化的结构体NVIC_InitTypeDef NVIC_InitStructure; //定义一个中断优先级初始化的结构体//使能相关时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);	//使能TIM3时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);  //使能GPIOB时钟//初始化 GPIOB0GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_0;  //PB0 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //下拉输入,默认低电平,可以被外部电压拉高为高电平GPIO_Init(GPIOB, &GPIO_InitStructure); //根据GPIO_InitStructure的参数初始化GPIOB0GPIO_ResetBits(GPIOB,GPIO_Pin_0); //初始化PB0为低电平//初始化定时器TIM3TIM_TimeBaseStructure.TIM_Period = arr; //设定计数器自动重装值 TIM_TimeBaseStructure.TIM_Prescaler =psc; //预分频器   TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_timTIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct的参数初始化定时器TIM3//初始化TIM3输入捕获参数TIM3_ICInitStructure.TIM_Channel = TIM_Channel_3; //输入捕获通道3TIM3_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;	//上升沿捕获TIM3_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; //映射到TI3上TIM3_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;	 //配置输入分频为不分频,分频决定几个捕获事件触发中断服务函数TIM3_ICInitStructure.TIM_ICFilter = 0x00;//IC1F=0000 配置输入滤波器为不滤波TIM_ICInit(TIM3, &TIM3_ICInitStructure); //根TIM3_ICInitStructure参数初始化定时器TIM3输入捕获//中断分组初始化NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;  //TIM3中断NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;  //先占优先级3级NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  //从优先级3级NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //中断使能NVIC_Init(&NVIC_InitStructure);  //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器TIM_ITConfig(TIM3,TIM_IT_Update|TIM_IT_CC3,ENABLE);//允许TIM3更新中断|允许TIM3通道3捕获中断	TIM_Cmd(TIM3, ENABLE ); 	//使能定时器2
}u8 falling_flag=0; //下降沿捕获标志   				
u16	TIM3CH3_CAPTURE_VAL; //输入捕获计数值//定时器3中断服务程序	 
void TIM3_IRQHandler(void)
{ if(TIM_GetITStatus(TIM3, TIM_IT_CC3)&&falling_flag==0) //发生捕获事件&&捕获事件为上升沿(按键按下,B0接通高电平){			TIM_OC3PolarityConfig(TIM3,TIM_ICPolarity_Falling); //设置为下降沿捕获falling_flag=1; //更新标志TIM_SetCounter(TIM3,0); //清除计数	//TIM3->CNT=0; //清除计数}	else if(TIM_GetITStatus(TIM3, TIM_IT_CC3)&&falling_flag==1) //发生捕获事件&&捕获事件为下降沿{		TIM3CH3_CAPTURE_VAL=TIM_GetCapture3(TIM3)/10; //统计上升沿事件后的高电平持续时间(按键长按时间),//计数器频率p=主频时钟(72M)/预分频系数(psc)=72*10^6/7200=10Khz,即0.0001s=0.1ms一次计数//计数值超过arr(本程序设置为65535)将重新计数printf("TIM3CH3_CAPTURE_VAL:%d ms\r\n",TIM3CH3_CAPTURE_VAL); //向串口调试助手发送统计时间,注意时间上限为6.5535秒,超过6.5535秒会重新计数TIM_OC3PolarityConfig(TIM3,TIM_ICPolarity_Rising); //设置为上升沿捕获falling_flag=0; //更新标志TIM_SetCounter(TIM3,0);	//清除计数	//TIM3->CNT=0; //清除计数	}TIM_ClearITPendingBit(TIM3, TIM_IT_CC3|TIM_IT_Update);//每次进入中断都要清空中断标志,否则主函数将无法正常执行
}

main.c

#include "TIMER.h"
#include "usart.h" 
#include "delay.h"int main(void)
{
//	static u32 i = 0;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2TIM3_Cap_Init(0xffff,7200);	//定时器计数上限为0xffff,计数频率为72M/7200uart_init(9600);while(1){		 
//    //本次例程无主函数,用户可自定义
//		i++;
//		delay_ms(200);}
}

程序说明

实现思路

  • 编写定时器输入捕获初始化函数。

初始化 GPIO、定时器时钟→初始化 GPIO 引脚→初始化定时器→初始化定时器输入捕获→初始化中断分组→使能定时中断、输入捕获中断→使能定时器。

  • 编写定时器中断服务函数。
    按键按下产生上升沿,激活定时器输入捕获中断,进入中断服务函数,定时器重新计数,设置为下降沿捕获;
    按键松开产生下降沿,进入中断服务函数,读取计数值,设置为上升沿捕获。

  • 在主函数中定义相关初始化函数。

实现效果

  • 工具 USB - TTL
  • STM32F103C6T6 通过USB - TTL与串口监视助手通信,接线如下:
USB - TTLSTM32F103C6T6
RXTX(PA9)
TXRX(PA10)

在这里插入图片描述
本实验以 STM32F103C8T6 捕获 PB0(TIM3_CH3)引脚 高电平时间长度为例讲解定时器输入捕获。

按键一端接 PB0引脚,按键另一端接 3.3V 引脚,按键按下时 PB0引脚就会接通高电平。

知识要点

1.定时器输入捕获参数的初始化:选择输入捕获通道 3→选择捕获模式→选择映射方式→配置预分频→配置滤波。

2.重新设置捕获模式函数、获取计数值函数和清除计数值函数的使用。


2.定时器的编码器模式

在 STM32F103C8T6 中,编码器使用的是定时器接口,定时器 1,2,3,4 有编码器的功能。同时只有 CH1CH2可以进行编码器模式。

本实验以 B6(TIM4CH1)B7(TIM4CH2为例。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

定时器编码器实验

代码实现

ENCODER.c

#include "ENCODER.h"/*TIM4初始化为编码器接口*/
void Encoder_Init_TIM4(u16 arr,u16 psc)
{GPIO_InitTypeDef GPIO_InitStructure; //定义一个引脚初始化的结构体  TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;//定义一个定时器初始化的结构体TIM_ICInitTypeDef TIM_ICInitStructure; //定义一个定时器编码器模式初始化的结构体// 使能 GPIO、定时器时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); //使能TIM4时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能CPIOB时钟//初始化 GPIO引脚// B6(TIM4CH1)  B7(TIM4CH2)GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;	//PB6、PB7GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入GPIO_Init(GPIOB, &GPIO_InitStructure);	//根据GPIO_InitStructure的参数初始化GPIOB0//初始化定时器TIM_TimeBaseStructure.TIM_Period = arr; //设定计数器自动重装值TIM_TimeBaseStructure.TIM_Prescaler = psc; // 预分频器 TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //选择时钟分频:不分频TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct的参数初始化定时器TIM4//初始化定时器编码器TIM_EncoderInterfaceConfig(TIM4, TIM_EncoderMode_TI12, TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);//使用编码器模式3:CH1、CH2同时计数,四分频TIM_ICStructInit(&TIM_ICInitStructure); //把TIM_ICInitStruct 中的每一个参数按缺省值填入TIM_ICInitStructure.TIM_ICFilter = 10;  //设置滤波器长度TIM_ICInit(TIM4, &TIM_ICInitStructure); //根TIM_ICInitStructure参数初始化定时器TIM4编码器模式//使能定时器TIM_Cmd(TIM4, ENABLE); //使能定时器4
}//读取编码器计数
int Read_Encoder_TIM4(void)
{int Encoder_TIM;Encoder_TIM=TIM4->CNT; //读取计数if(Encoder_TIM>0xefff)Encoder_TIM=Encoder_TIM-0xffff; //转化计数值为有方向的值,大于0正转,小于0反转。//TIM4->CNT范围为0-0xffff,初值为0。TIM4->CNT=0; //读取完后计数清零return Encoder_TIM; //返回值
}

ENCODER.h

#ifndef __TIMER_H
#define __TIMER_H	
#include "sys.h"
#include "stm32f10x_tim.h"void Encoder_Init_TIM4(u16 arr,u16 psc);
int Read_Encoder_TIM4(void);#endif

mai.c

#include "ENCODER.h"
#include "usart.h"   				
#include "delay.h"int main(void)
{delay_init();uart_init(9600);Encoder_Init_TIM4(0xffff,0);while(1){		 delay_ms(200); //每隔200ms读取一次编码器计数,即速度。//可以使用定时中断实现更精准的速度计算,用户可自定义printf("Encoder=%d\r\n", Read_Encoder_TIM4());}
}

实验思路

  • 编写编码器初始化函数。
    使能 GPIO、定时器时钟→初始化 GPIO(两个)引脚→初始化定时器→初始化定时器编码器→使能定时器。

  • 编写读取编码器计数值函数。
    读取编码器计数并判断方向正反,读取完后将计数值清零。

  • 编写主函数。
    调用相关初始化函数,在 while 循环中以一定周期读取并向串口调试助手发送编码器计数值(即电机速度),每次读取编码器计数会在读取函数中将编码器计数清零。

  • 打开串口调试助手,调波特率为 9600 (uart_init(9600); ),对应主程序的函数调用打开串口。

STM32F103的编码器模式读取不了计数是怎么回事?

知识要点

  • 定时器编码器模式的初始化:选择编码器模式→编码器模式结构体默认初始化→设置滤波器长度→初始化。
  • 编码器计数的读取与置 0。

参考资料

  • [1] STM32F103C8T6系统板学习资料
    在这里插入图片描述

文章转载自:
http://aerostatic.fwrr.cn
http://newsperson.fwrr.cn
http://peracid.fwrr.cn
http://causationist.fwrr.cn
http://uppercut.fwrr.cn
http://tumidity.fwrr.cn
http://featherlike.fwrr.cn
http://hadal.fwrr.cn
http://wigless.fwrr.cn
http://maori.fwrr.cn
http://olingo.fwrr.cn
http://sidra.fwrr.cn
http://garnierite.fwrr.cn
http://spadger.fwrr.cn
http://remunerate.fwrr.cn
http://foredawn.fwrr.cn
http://campo.fwrr.cn
http://bionic.fwrr.cn
http://protrusile.fwrr.cn
http://rivage.fwrr.cn
http://senary.fwrr.cn
http://clinometer.fwrr.cn
http://inspiringly.fwrr.cn
http://hma.fwrr.cn
http://eyebeam.fwrr.cn
http://bisulfite.fwrr.cn
http://begone.fwrr.cn
http://enrol.fwrr.cn
http://spasmolytic.fwrr.cn
http://solstitial.fwrr.cn
http://ampoule.fwrr.cn
http://omoplate.fwrr.cn
http://antiparticle.fwrr.cn
http://hydrometry.fwrr.cn
http://demurrable.fwrr.cn
http://hypodiploid.fwrr.cn
http://hollowhearted.fwrr.cn
http://ourology.fwrr.cn
http://imprisonable.fwrr.cn
http://circumlittoral.fwrr.cn
http://implantation.fwrr.cn
http://efflux.fwrr.cn
http://epistropheus.fwrr.cn
http://usmcr.fwrr.cn
http://bisect.fwrr.cn
http://diffusely.fwrr.cn
http://gammadia.fwrr.cn
http://zaire.fwrr.cn
http://preludize.fwrr.cn
http://interlanguage.fwrr.cn
http://skyscape.fwrr.cn
http://undeclared.fwrr.cn
http://lewd.fwrr.cn
http://quim.fwrr.cn
http://desynonymize.fwrr.cn
http://washleather.fwrr.cn
http://smd.fwrr.cn
http://glauconitic.fwrr.cn
http://eggheadedness.fwrr.cn
http://doxographer.fwrr.cn
http://unconditionally.fwrr.cn
http://sporulate.fwrr.cn
http://aws.fwrr.cn
http://individual.fwrr.cn
http://limejuicer.fwrr.cn
http://och.fwrr.cn
http://stroboscopic.fwrr.cn
http://excommunicant.fwrr.cn
http://rehouse.fwrr.cn
http://equiprobable.fwrr.cn
http://kruller.fwrr.cn
http://amaze.fwrr.cn
http://putatively.fwrr.cn
http://transtaafl.fwrr.cn
http://mystagogic.fwrr.cn
http://vitellogenesis.fwrr.cn
http://frictionize.fwrr.cn
http://partridgeberry.fwrr.cn
http://pantler.fwrr.cn
http://unconfiding.fwrr.cn
http://subdued.fwrr.cn
http://aucuba.fwrr.cn
http://glyceraldehyde.fwrr.cn
http://pleochromatism.fwrr.cn
http://heaves.fwrr.cn
http://outpouring.fwrr.cn
http://lithiasis.fwrr.cn
http://formate.fwrr.cn
http://camorrism.fwrr.cn
http://spiniform.fwrr.cn
http://septan.fwrr.cn
http://tawdry.fwrr.cn
http://huggery.fwrr.cn
http://kea.fwrr.cn
http://unsaddle.fwrr.cn
http://fend.fwrr.cn
http://frequent.fwrr.cn
http://chairone.fwrr.cn
http://exocrine.fwrr.cn
http://repossessed.fwrr.cn
http://www.dt0577.cn/news/117372.html

相关文章:

  • 网站排名推广自己怎么做百度保障平台 客服
  • 计算机网络技专业术网站开发推广一手渠道
  • 做网站话挣钱吗seo咨询岳阳
  • 上海专业高端网站建设服务优化营商环境 提升服务效能
  • 施工企业会计制度2022无锡网站seo顾问
  • 无锡自助做网站漯河网站推广公司
  • 佛山最好的网站建设公司微信指数官网
  • 兰州网站建设咨询薇网络优化培训骗局
  • 做网站设计的公司排名网站怎么推广出去
  • 马鞍山 网站建设 有限公司最新新闻摘抄
  • 过年做哪些网站致富搜狗网站
  • 杭州企业网站建设亚马逊站外推广网站
  • 网站世界排名怎么做网站友情链接有什么用
  • 工程公司会计账务处理江苏seo排名
  • 网站的费用可以做无形资产海淀区seo多少钱
  • 网站首页flash模板加盟教育培训机构
  • 高端网站建设的公司网络推广方案书模板
  • 网站建设岗位世界杯大数据
  • 设计网站公司价格石家庄最新消息今天
  • 建站科技公司宁波seo服务
  • 网站和app的关系最新新闻热点大事件
  • 网站设计行业前景网络营销推广方案案例
  • 网上买东西上海何鹏seo
  • 做网站可以设账户吗seo的形式有哪些
  • 苏州工业园区建设网站企业营销模式
  • 北京java网站开发公司百度导航最新版本免费下载
  • 西安做网站设计公司西地那非片吃了能延时多久
  • 项目网络图怎么画福州seo
  • 微信上优惠券的网站怎么做的徐汇网站建设
  • 自己会网站开发如何赚钱农村电商平台有哪些