一、使用高级定时器TIM8;
二、使用引脚:CH1-PC6, CH1N-PA5, CH2-PC7, CH2N-PB0,CH3-PC8,CH3N-PB1;
三、使用的寄存器:TIMx_CCMRx:选择PWM模式
TIMx_ARR:PWM的周期
TIMx_CCRx:PWM占空比
四、结构体:GPIO_InitTypeDef :GPIO口复用
GPIO_Init();
TIM_TimeBaseInitTypeDef :基本定时结构
TIM_TimeBaseInit();
TIM_OCInitTypeDef :输出比较结构
TIM_OCxInit();
TIM_BDTRInitTypeDef :刹车和死区结构
TIM_BDTRConfig();
五、配置函数
//使能定时器时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8,ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOB|RCC_AHB1Periph_GPIOC,ENABLE);
//GPIO配置:使能GPIO口并复用
GPIO_InitStrcuture.GPIO_Pin = GPIO_Pin_5;
GPIO_InitStrcuture.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStrcuture.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStrcuture.GPIO_OType = GPIO_OType_PP;
GPIO_InitStrcuture.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOA,&GPIO_InitStrcuture);
GPIO_InitStrcuture.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;
GPIO_Init(GPIOB,&GPIO_InitStrcuture);
GPIO_InitStrcuture.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8;
GPIO_Init(GPIOC,&GPIO_InitStrcuture);
GPIO_PinAFConfig(GPIOA,GPIO_PinSource5,GPIO_AF_TIM8);
GPIO_PinAFConfig(GPIOB,GPIO_PinSource0,GPIO_AF_TIM8);
GPIO_PinAFConfig(GPIOB,GPIO_PinSource1,GPIO_AF_TIM8);
GPIO_PinAFConfig(GPIOC,GPIO_PinSource7,GPIO_AF_TIM8);
GPIO_PinAFConfig(GPIOC,GPIO_PinSource8,GPIO_AF_TIM8);
GPIO_PinAFConfig(GPIOC,GPIO_PinSource6,GPIO_AF_TIM8);
//TIM8配置
TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1; //时钟分割
TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;// 向上计数模式
TIM_TimeBaseInitStructure.TIM_Period=arr; //自动重装载寄存器周期的值
TIM_TimeBaseInitStructure.TIM_Prescaler=psc; //预分频值
TIM_TimeBaseInitStructure.TIM_RepetitionCounter=1; //周期计数器值
TIM_TimeBaseInit(TIM8,&TIM_TimeBaseInitStructure);
//PWM配置
TIM_OCInitStruct.TIM_OCIdleState=TIM_OCIdleState_Reset;//当MOE=0重置输出比较空闲状态
TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM1; //脉冲宽度调制模式1
TIM_OCInitStruct.TIM_OCNIdleState=TIM_OCNIdleState_Reset;//当MOE=0重置输出比较N空闲状态
TIM_OCInitStruct.TIM_OCNPolarity=TIM_OCNPolarity_High;// //互补输出比较极性高
TIM_OCInitStruct.TIM_OCPolarity=TIM_OCPolarity_High;//输出比较极性高
TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;//使能输出比较状态
TIM_OCInitStruct.TIM_OutputNState=TIM_OutputNState_Enable;//使能互补输出比较状态
TIM_OCInitStruct.TIM_Pulse=4000;//待装入捕获比较寄存器的脉冲值
TIM_OC1Init(TIM8,&TIM_OCInitStruct);
TIM_OC2Init(TIM8,&TIM_OCInitStruct);
TIM_OC3Init(TIM8,&TIM_OCInitStruct);//根据TIM8_OCInitStruct中指定的参数初始化 TIM8通道x
//使能端的打开
TIM_OC1PreloadConfig(TIM8,TIM_OCPreload_Enable);
TIM_OC2PreloadConfig(TIM8,TIM_OCPreload_Enable);
TIM_OC3PreloadConfig(TIM8,TIM_OCPreload_Enable);//使能TIM8在CCR上的预装载寄存器
//刹车死区配置
TIM_BDTRStructure.TIM_AutomaticOutput=TIM_AutomaticOutput_Enable;// 自动输出功能使能
TIM_BDTRStructure.TIM_Break=TIM_Break_Disable;//失能刹车输入
TIM_BDTRStructure.TIM_BreakPolarity=TIM_BreakPolarity_High; //刹车输入管脚极性高
TIM_BDTRStructure.TIM_DeadTime=100; //输出打开和关闭状态之间的延时
TIM_BDTRStructure.TIM_LOCKLevel=TIM_LOCKLevel_OFF;// 锁电平参数: 不锁任何位
TIM_BDTRStructure.TIM_OSSIState=TIM_OSSIState_Disable; //设置在运行模式下非工作状态选项
TIM_BDTRStructure.TIM_OSSRState=TIM_OSSRState_Disable; //设置在运行模式下非工作状态选项
TIM_BDTRConfig(TIM8,&TIM_BDTRStructure);
TIM_ARRPreloadConfig(TIM8,ENABLE); //使能TIM8在ARR上的预装载寄存器
TIM_CtrlPWMOutputs(TIM8,ENABLE); //PWM使能输出
TIM_Cmd(TIM8,ENABLE); //打开TIM8
上一篇:在STM32平台上实现printf和scanf函数(带回显)
下一篇:stm32f103,407系列的定时器的理解与代码
推荐阅读最新更新时间:2024-11-13 08:14
设计资源 培训 开发板 精华推荐
- 基于L7983PUR稳压器的12V / 0.3A降压DC/DC转换器(VIN = 12至60 V)
- LT1268、7.5A、150kHz 开关稳压器的典型应用电路
- DC1420A,使用来自凌力尔特的 LTC4266 四电源设备 PSE 控制器芯片的演示板
- T12烙铁+858D热风枪二合一返修站_高压+航空头部分
- 用于医疗的 5V 模拟放大器
- AD8604ARQZ-RL放大器光电二极管电路典型应用
- LTC6990MPS6#TRMPBF 全范围 VCO 振荡器的典型应用,具有任何 NDIV 设置(fMAX 至 fMIN,VIN = 0V 至 VSET)
- 具有开路检测功能的 LT4254 正高压热插拔控制器的典型应用
- OM7859: BGA3015演示板,1 GHz 15 dB增益宽带放大器应用
- AM1/4S-0509SZ 9V 0.25 瓦 DC-DC 转换器的典型应用