switch_test/User/tim.c

85 lines
3.2 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "basic.h"
void TIM3_Configuration(void)
{
//声明一个定时器结构体变量
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructrue;
//声明一个中断优先分组的结构体变量
NVIC_InitTypeDef NVIC_InitStructure;
//使能定时器3的外设时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
//设置定时器中断的优先分组
NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01; //抢占优先级为1
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x03; //响应优先级为3
TIM_TimeBaseInitStructrue.TIM_Period=99; //Tout=(ARR+1)(PSC+1)/Tclk (999+1)(83+1)/(1*84M)
TIM_TimeBaseInitStructrue.TIM_Prescaler=83; //定时1ms
TIM_TimeBaseInitStructrue.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseInitStructrue.TIM_ClockDivision=TIM_CKD_DIV1;
//初始化定时器3
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructrue);
//设置优先级分组 为组2
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
//初始化优先级分组
NVIC_Init(&NVIC_InitStructure);
//配置定时器的中断的中断源
TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);
//使能定时器3
TIM_Cmd(TIM3,ENABLE);
}
//TIM4 PWM部分初始化
//arr自动重装值
//psc时钟预分频数
void TIM4_PWM_Init(u16 arr,u16 arrtime)
{
//**结构体声明**//
GPIO_InitTypeDef GPIO_InitStructure; //声明GPIO
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; //声明定时器
TIM_OCInitTypeDef TIM_OCInitStructure; //声明PWM通道
//**时钟使能**//
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); //使能定时器TIM4时钟
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
//****//
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; //LED0-->PD15 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ;
GPIO_Init(GPIOD, &GPIO_InitStructure); //根据设定参数初始化GPIOD.15
GPIO_ResetBits(GPIOD,GPIO_Pin_15);
GPIO_PinAFConfig(GPIOD,GPIO_PinSource15,GPIO_AF_TIM4);
//初始化TIM4
TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值
TIM_TimeBaseStructure.TIM_Prescaler =839; //设置用来作为TIMx时钟频率除数的预分频值
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式
TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
//初始化TIM4 Channe41 PWM模式
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式1
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //输出极性:TIM输出比较极性高
TIM_OCInitStructure.TIM_Pulse = arrtime; //(arr+1)*0.15; //设置待装入捕获比较寄存器的脉冲值,高于脉冲值就会产生高电平
TIM_OC4Init(TIM4, &TIM_OCInitStructure); //根据T指定的参数初始化外设TIM3 OC4
TIM_OC4PreloadConfig(TIM4, TIM_OCPreload_Enable); //使能TIM4_CH4预装载寄存器
TIM_ARRPreloadConfig(TIM4, ENABLE);
TIM_Cmd(TIM4, ENABLE); //使能TIM4
}