Uso del temporizador stm32f4 8

1. El temporizador 8 es un temporizador avanzado. Hay cuatro interrupciones y los nombres de las funciones de interrupción son diferentes. Preste especial atención. Necesito averiguarlo.
Inserte la descripción de la imagen aquí

Inserte la descripción de la imagen aquí
2. Código de inicialización:


/*
	@定时器8:定时20ms,50HZ,读取编码器数据,并处理得到
	//注意,定时器1用APB2时钟线

*/
void TIM8_Int_Init(u16 arr,u16 psc)
{
    
    
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8,ENABLE);  	//=====TIM8时钟使能 	

  TIM_TimeBaseInitStructure.TIM_Period = arr; 	//自动重装载值
	TIM_TimeBaseInitStructure.TIM_Prescaler=psc;  //定时器分频
	TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式
	TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1; 
	TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;// 重复计数器的值,没用到不用管
	TIM_TimeBaseInit(TIM8,&TIM_TimeBaseInitStructure);//初始化TIM8
	
	TIM_ITConfig(TIM8,TIM_IT_Update,ENABLE); //允许定时器8更新中断  
  TIM_ClearFlag(TIM8,TIM_FLAG_Update);
	TIM_Cmd(TIM8,DISABLE); //定时器8
	
  //确定定时器8的中断优先级,
  //		//定时器8中断配置
	NVIC_InitStructure.NVIC_IRQChannel=TIM8_UP_TIM13_IRQn; //定时器8更新中断
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x00; //抢占优先级0
	NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x01; //子优先级01
	NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
	NVIC_Init(&NVIC_InitStructure);
}

3. Función de interrupción Tenga en cuenta que el LED1 es el pin F7, así que utilice un analizador lógico para conectarse a F7 en lugar de la luz LED para probar la forma de onda del pin.


//*************************************************
//定时器8中断服务函TIM8_UP_TIM13_IRQHandler

void TIM8_UP_TIM13_IRQHandler(void)
{
    
    
	
  if (TIM_GetITStatus(TIM8, TIM_IT_Update) != RESET)
    {
    
      
         TIM_ClearITPendingBit(TIM8, TIM_IT_Update);
         LED1=!LED1;
    } 
		  

}


4. Función principal

/*
实验室217-2学习代码,希望感兴趣的同学,循序渐进完成。
理解代码,测试代码,修改代码,然后自己完成新的代码;
*/
#include "stm32f4xx.h"
#include "sys.h" //位操作
#include "delay.h"//反客科技提供
#include "delayzd.h"//正点原子提供
#include "led.h"   
#include "beep.h"   
#include "key.h" //独立按键中断------- 
#include "NVIC.h"  
#include "usart.h"  
#include "Lcd_Driver.h"//LCD 显示屏
#include "motor.h"  //电机操作
#include "pwm.h"//PWM
#include "tracksensor.h" //循迹模块传感器
#include "timer.h" //定时器3监控串口

//***************************************引用按键
//定义全局变量

u8 task_flag=0; //任务标签0-255
//
//*****************************函数声明,后面定义
//第一个测试:LED测试
void test1();
//第2个测试:蜂鸣器测试
void test2();
//第2个测试:蜂鸣器测试
void test3();
//*****************************************************************************************************
//
//
int main(void)
{
    
    	
	u16 t=0;
	u8 checktemp0=0;
	
  Delay_Init();		//延时函数初始化
  delay_init(168);
	
	LED_Init();			   //LED初始化
	BEEP_Init();
	KEY_INT_Init();
	Delay_ms(10);
	
	//uart1_init(115200);
	Delay_ms(10);
	
	MotorInit(8000);//8000HZ
	Tracksensor_Init();//

	//定时器时钟 84M,分频系数 8400,所以 84M/8400=10Khz 
//频率是10Khz----那么计算的时钟基准是1/10k=10e-4s=10
//的计数频率,计数 5000 次为 500ms,我们需要是1ms,那么是50 
	//5000次,是500ms,每次是0.1ms=100us
	//TIM3_Int_Init(50-1,8400-1);//定时器3定时1ms,定时100ms,在100ms内检测功能标记是不是等于1
  
	TIM8_Int_Init(200-1,8400-1);	//2000   f=5hz----T=0.2s===200ms.如果200,那么20ms

	Lcd_Init();//初始化函数
  Lcd_Clear(WHITE);//清屏,颜色
	
  LED1=1;
	delay_ms(500);
	LED1=0;
	delay_ms(500);
		
	LED1=1;
	delay_ms(500);
	LED1=0;
	delay_ms(500);
		
  LED1=1;
	delay_ms(500);
	LED1=0;
	delay_ms(500);

	NVIC_Config();
	delay_ms(100);
	
	//初始化:二维码显示屏幕显示++++数据
	//LCD_ShowStringQRcode96(0,0,RED,WHITE,"++++++");		
	//LCD_ShowStringQRcode96(0,0,RED,WHITE,"312+231");	
//	LCD_ShowCharAsc96(0,0,RED,WHITE,'+');//1	
//	LCD_ShowCharAsc96(48,0,RED,WHITE,'+');//2
//	LCD_ShowCharAsc96(96,0,RED,WHITE,'+');//3
//	LCD_ShowCharAsc96(144,0,RED,WHITE,'+');//+	
//	LCD_ShowCharAsc96(0,100,RED,WHITE,'+');//3		
//	LCD_ShowCharAsc96(48,100,RED,WHITE,'+');//2		
//	LCD_ShowCharAsc96(96,100,RED,WHITE,'+');//1
//	Delay_ms(100);


	
	TIM_Cmd(TIM8,ENABLE); //使能定时器8
	while (1)
	{
    
    
	

//  LED1=1;
//	delay_ms(500);
//	LED1=0;
//		delay_ms(500);
//		
//		  LED1=1;
//	delay_ms(500);
//	LED1=0;
//		delay_ms(500);
//		
//		  LED1=1;
//	delay_ms(500);
//	LED1=0;
//		delay_ms(500);
	}

	
}

5 ------------- Forma de onda y análisis
Para la configuración de la plantilla de Fake Technology, (necesita usar un analizador lógico para determinar otras configuraciones de la plantilla, o averiguar la configuración del reloj usted mismo y modificarla)
La forma de onda obtenida por TIM8 (200-1, 8400-1) tiene un período de 20ms y se ingresa una interrupción a los 10ms.
Inserte la descripción de la imagen aquí
Tim8 (200-1, 4200-1) tiene un período de 10 ms, una frecuencia de 100 hz y una interrupción de 5 ms.

Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/lmf666/article/details/112268449
Recomendado
Clasificación