首页 > 其他分享 >TIMx_ETR外部时钟源模式2配置方法

TIMx_ETR外部时钟源模式2配置方法

时间:2022-12-08 23:24:17浏览次数:46  
标签:ETR TIM3 TIMx NVIC TIM InitStructure GPIO void 时钟

由于stm32中的时钟源对应的GPIO口都是ST原厂已经分配好的,可以查看数据手册了解,所以我们要将外部触发信号连接到对应的时钟源GPIO pin口,这样才能起到外部时钟源的作用。

例如:TIM3_ETR外部时钟源是接在PD2口的,如果你连接其他GPIO_Pin口,此时不会进入中断函数,也就没有起到外部时钟源的作用。

 

Timer.c

#include "stm32f10x.h"
extern uint16_t Num;

void Timer_Init(void)
{
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
	
	//配置GPIO
	GPIO_InitTypeDef	GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOD,&GPIO_InitStructure);
	
	TIM_ETRClockMode2Config(TIM3, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_Inverted,0x00);
	
//	TIM_InternalClockConfig(TIM2);	//单片机上电自动默认TMI2,可不写
	TIM_TimeBaseInitTypeDef	TIM_TimeBaseInitStructure;
	TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
	TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
	TIM_TimeBaseInitStructure.TIM_Period = 10 -1;	// 0~65535
	TIM_TimeBaseInitStructure.TIM_Prescaler = 1 -1;	// 0~65535
	TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;
	TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStructure);
	
	TIM_ClearFlag(TIM3, TIM_FLAG_Update);	//避免刚好初始化就进入中断
	TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);

	TIM_Cmd(TIM3,ENABLE);
	
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	
	NVIC_InitTypeDef	NVIC_InitStructure;
	NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
	NVIC_Init(&NVIC_InitStructure);
	

}


uint16_t Timer_GetCounter(void)
{
	return TIM_GetCounter(TIM3);
}

void TIM2_IRQHandler(void)
{
	if(TIM_GetITStatus(TIM3, TIM_IT_Update) == SET)
	{
		Num++;
		TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
	}
}

 Timer.h

#ifndef __TIMER_H
#define __TIMER_H

void Timer_Init(void);
uint16_t Timer_GetCounter(void);

#endif

main.c

#include "stm32f10x.h"
#include "Delay.h"
#include "OLED.h"
#include "Timer.h"

uint16_t Num;

int main(void)
{
	OLED_Init();
	Timer_Init();
	OLED_ShowString(1, 1, "Num:");
	OLED_ShowString(2, 1, "CNT:");

	while(1)
	{		
		OLED_ShowNum(1, 5, Num, 5);
		OLED_ShowNum(2, 5, Timer_GetCounter(), 5);
	}
}

  

  

 

标签:ETR,TIM3,TIMx,NVIC,TIM,InitStructure,GPIO,void,时钟
From: https://www.cnblogs.com/kevin-hou1991/p/16967711.html

相关文章

  • Public Key Retrieval is not allowed 解决 Mysql
    一、导致“PublicKeyRetrievalisnotallowed”原因当禁用SSL/TLS协议传输后,客户端会使用服务器的公钥进行传输,默认情况下客户端不会主动去找服务器拿公钥,进而会出现......
  • SourceTree免注册并连码云
    1在C:\Users\用户\AppData\Local\Atlassian\SourceTree目录下新建accounts.json其中AppData是隐藏文件夹2输入 [{"$id":"1","$type":"Sou......
  • retry快速重试
    1.引用guava中的重试类<dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId>......
  • Poetry 的使用
    什么是poetry?-一款python包的管理和打包工具。 作为包的管理工具,我们怎么在项目中应用呢?方法1.(适用于新项目,从模块安装开始)poetryinit.在此过程中,poetry......
  • 【高精密时钟】NTP网络校时服务器在WIN平台下调试步骤
    【高精密时钟】NTP网络校时服务器在WIN平台下调试步骤【高精密时钟】NTP网络校时服务器在WIN平台下调试步骤京准电子科技官微——ahjzsz以下是WindowsXP、win10等系统......
  • ByteTrack——报错解决ModuleNotFoundError: No module named ‘yolox‘
    一、完整报错​​File"tools/demo_track.py",line10,in<module>​​​​fromyolox.data.data_augmentimportpreproc​​​​ModuleNotFoundError:Nomodulenamed......
  • 【《硬件架构的艺术》读书笔记】03 处理多个时钟(3)
    3.8异步FIFO(双时钟FIFO)  如上图,X通过xclk将数据写入FIFO,Y通过yclk将数据读出。注意这里写满标志信号在写时钟域,空信号在读时钟域。对比握手信号,异步FIFO用于对性能......
  • spring控制事务回滚:TransactionAspectSupport.currentTransactionStatus().setRollbac
    spring事务控制手动回滚:TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();1、说明事务是我们开发过程中经常会使用到的,为了在业务执行过程中出......
  • 【高精度模组】GPS北斗网络时钟同步发生器
    【高精度模组】GPS北斗网络时钟同步发生器【高精度模组】GPS北斗网络时钟同步发生器京准电子科技官微——ahjzsz该产品专为高性能计算和数据中心各个网络系统之间时钟同......
  • ServletRequest接口
    WEB-INF目录WEB-INF目录下的资源是受保护的,在浏览器上不能通过路径直接访问,所以HTML,CSS,JS,image等一些静态资源一定放到WEB-INF之外。ServletRequest接口HttpServle......