TIM1 高级定时器(资料)

TIM1_ETR	PA12        外部时钟信号(极性,边沿,预分频)
TIM1_CH1	PA8          通道1
TIM1_CH2	PA9          通道2
TIM1_CH3	PA10        通道3
TIM1_CH4	PA11        通道4
TIM1_BKIN	PB12    PA6    刹车
TIM1_CH1N	PB13    PA7    
TIM1_CH2N	PB14    PB0    
TIM1_CH3N	PB15    PB1 
///
//TIM 1 高级定时器
///time1_init(7200,1000,1);//10khz=0.1ms
void time1_init(u16 psc,u16 arr,u8 rcr)//定时  tim1//分频,重载,重复
{
//基础参数
TIM_TimeBaseInitTypeDef  tim_struct;
//中断配置
NVIC_InitTypeDef NVIC_InitStructure;
//通道方向 ETR:PA12         CH1:PA8        CH2:PA9     CH3:PA10       CH4:PA11
//BKin:PB12 CH1N:PB13      CH2N:PB14       CH3N:PB15
TIM_OCInitTypeDef tim1_oc;//输出
TIM_ICInitTypeDef tim1_ic;//输入
//------------------------------------//
///sys-AHB-APB1-APB2
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);//定时器1时钟源72MHz
//TIM_Cmd(TIM1,DISABLE); //定时器 
//tim1 工作  模式
tim_struct.TIM_ClockDivision=TIM_CKD_DIV4;//引脚输入分频    //定时器为72mhz
tim_struct.TIM_CounterMode=TIM_CounterMode_Up;//上计数
tim_struct.TIM_Prescaler=psc-1;//预分频16位65536   。。。。  hz-1
tim_struct.TIM_Period=arr-1;//16位重载计数器65535    arr-1
tim_struct.TIM_RepetitionCounter=rcr;//tim1和8有,重复计数器  N+1
//通道方向-输出
tim1_oc.TIM_OCMode=TIM_OCMode_PWM1;//CH输出工作模式
tim1_oc.TIM_OutputState=TIM_OutputState_Enable;//CH1开
tim1_oc.TIM_OutputNState=TIM_OutputState_Enable;//CH1N开
tim1_oc.TIM_Pulse=10;//(占比)比较器,超过比较值CH电平会取反。(该值和周期比较)
//CH在比较值前电平
tim1_oc.TIM_OCPolarity=TIM_OCPolarity_High;//通道CH1输出起始电平PA8 //TIM_OCPolarity_Low; //TIM_OCPolarity_High;
tim1_oc.TIM_OCNPolarity=TIM_OCNPolarity_Low;//通道1N输出比较后电平
tim1_oc.TIM_OCIdleState=TIM_OCIdleState_Set;//通道CH1空闲状态//TIM_OCIdleState_Set;   Reset;
tim1_oc.TIM_OCNIdleState=TIM_OCNIdleState_Reset;//通道CH1N空闲状态  //TIM_OCIdleState_Reset;
        TIM_OC1Init(TIM1, &tim1_oc); //初始化外设 TIM1 OC1
TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable); //cc1新值不立即更新
TIM_CtrlPWMOutputs(TIM1,ENABLE);//打开pwm开关
//TIM_SetCompare1(TIM1,500); //修改比较值,修改占空比
//TIM_SetCompare4(TIM1,500); //修改比较值,修改占空比
 
//通道方向-输入
tim1_ic.TIM_Channel=TIM_Channel_1;//通道号//TIM_Channel_2 
tim1_ic.TIM_ICPolarity=TIM_ICPolarity_Rising;//TIM1 输入捕获上升沿Rising 下降沿Falling
tim1_ic.TIM_ICSelection=TIM_ICSelection_DirectTI;//引脚复用
tim1_ic.TIM_ICPrescaler=TIM_ICPSC_DIV1;//DIV4捕获每 4 个事件执行一次
//tim1_ic.TIM_ICFilter= 、、滤波,该参数取值在0x0和0xF之间。
//------------------------------------//
TIM_TimeBaseInit(TIM1,&tim_struct);//钟源初始化
TIM_ARRPreloadConfig(TIM1, ENABLE);//预重载开关(结束后更新cnt)
TIM_OC1Init(TIM1,&tim1_oc);//通道CH1输出初始化
//TIM_ICInit(TIM1,&tim1_ic);//通道CH1输入初始化
/
//清中断
  TIM_ClearITPendingBit(TIM1, TIM_IT_Update|    //溢出中断
TIM_IT_CC1|TIM_IT_CC2|TIM_IT_CC3|TIM_IT_CC4|  //捕获中断
TIM_IT_COM|TIM_IT_Trigger|TIM_IT_Break);   //  ,触发,打断
TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE );//③允许定时器  更新中断
NVIC_InitStructure.NVIC_IRQChannel=TIM1_UP_IRQn; //定时器  中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x02; //抢占优先级 1
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x02; //响应优先级 3
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);// ④初始化 NVIC
TIM_Cmd(TIM1,ENABLE); //使能定时器 
}

//tim1中断
void TIM1_BRK_IRQHandler(void)//
{
}
void TIM1_UP_IRQHandler(void)//溢出中断
{//级别25
TIM_ClearITPendingBit(TIM1, TIM_IT_Update);//溢出中断清除
}
void TIM1_TRG_COM_IRQHandler(void)
{
}
void TIM1_CC_IRQHandler(void)//比较中断
{

}




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值