STM32F407--通用定时器

通用定时器

通用定时器溢出中断




通用定时器 反转输出

定时器配置文件

// TIM4_ch1_PD12   定时器4_通道1

// 映射 在引脚  PD12 上面


void Tim4_ch1_PD12_AF()
{
	GPIO_InitTypeDef     GPIO_InitStructure;         //基本引脚结构体
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD,ENABLE);   //引脚时钟结构体初始化
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;        //引脚 PD12
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;     //复用到TIM4 通道1上面。
	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;   //推挽输出  
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //翻转速度100M
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;  //上拉
	GPIO_Init(GPIOD, &GPIO_InitStructure);        //初始化GPIO 
	GPIO_PinAFConfig(GPIOD,GPIO_PinSource12,GPIO_AF_TIM4);   //复用配置 
}


void  Tim4_ch1_init()
{
	TIM_TimeBaseInitTypeDef   TIM_TimeBaseStructure;   //定时器基本结构体
	TIM_OCInitTypeDef   TIM_OCInitStructure;           //定时器比较输出结构体
	NVIC_InitTypeDef    NVIC_InitStructure;            //中断配置结构体

	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);  //定时器4的时钟
    Tim4_ch1_PD12_AF();

	TIM_TimeBaseStructure.TIM_Period =0xffff;    //设置在下一个更新事件装入活动的自动重装载寄存器周期的值	 
	TIM_TimeBaseStructure.TIM_Prescaler =84-1;   //设置用来作为TIMx时钟频率除数的预分频值  不分频   168M
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
	TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位



	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle;     // 比较输出模式:反转输出
	TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;   //比较输出使能
	TIM_OCInitStructure.TIM_OutputNState=TIM_OutputNState_Disable;   //互补比较使能
    TIM_OCInitStructure.TIM_Pulse=0xffff;  //脉冲宽度
	TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;    //输出极性为高
	TIM_OCInitStructure.TIM_OCIdleState=TIM_OCIdleState_Set;   //指定空闲状态下的TIM输出比较pin状态
	TIM_OC1Init(TIM4, &TIM_OCInitStructure);             //根据TIM_OCInitStruct中指定的参数初始化外设TIMx	

	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); 
	NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority =2; 
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
	NVIC_Init(&NVIC_InitStructure);



	TIM_OC1FastConfig(TIM4,TIM_OCFast_Enable);           //快速比较使能
	TIM_OC1PreloadConfig(TIM4,TIM_OCPreload_Disable);    //禁止TIM1在CCR上的预装载寄存器,这里很重要不要使能啊
	TIM_CCxCmd(TIM4,TIM_Channel_1,TIM_CCx_Enable);       //启用TIM捕获比较通道x。
	TIM_ITConfig(TIM4, TIM_IT_CC1,ENABLE);               //启用指定的TIM中断。

	TIM_Cmd(TIM4, ENABLE);                     //使能TIM1
}





int tim_count = 0;
void TIM4_IRQHandler(void)   
{
	if(  TIM_GetITStatus( TIM4 , TIM_IT_CC1) != RESET)
	{ 
		TIM_ClearITPendingBit(TIM4,TIM_IT_CC1);
		tim_count=TIM_GetCapture1(TIM4);   		//得到通道1的计数数值。
		TIM_SetCompare1(TIM4,tim_count+1000);  	//设置新的CCR 值,新的比较数值。
	}
}






主函数

int main(void)
{ 
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
	delay_init(168);  //初始化延时函数
	LED_Init();				//初始化LED端口
  uart_init(115200);

  Tim4_ch1_init();   //只是这里一句即可!!!!

	while(1)
	{
		LED0=!LED0;//DS0翻转
		delay_ms(2);//延时200ms
	};
}

在这里插入图片描述

通用定时器产生PWM







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值