85 lines
3.2 KiB
C
85 lines
3.2 KiB
C
|
||
#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
|
||
}
|
||
|