The advanced timer is similar to the general-purpose timer. Below is a TIM1 PWM program. TIM1 is the STM32's only advanced timer. There are 4 channels with dead zones complementary. First configure the IO pin: GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed ​​= GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed ​​= GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; Void Tim1_Configuration(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; TIM_DeInit(TIM1); //Reset to default value TIM_TimeBaseStructure.TIM_Prescaler = 4000; //Prescaler (clock division) 72M/4000=18K TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; // Count up TIM_TimeBaseStructure.TIM_Period = 144; //Load value 18k/144=125hz means that the top 144 is full. TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //Set the clock segmentation does not know no matter TIM_TimeBaseStructure.TIM_RepetitionCounter = 0x0; //The period counter value does not know no matter TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure); //Initialize the time base unit of TIMx TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //PWM mode 2 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //Forward channel valid PA8 TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable; //The reverse channel is also valid PB13 TIM_OCInitStructure.TIM_Pulse = 40; //40 of the duty time 144 is high, the complementary output is just the opposite TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //Output polarity TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_Low; //polarity of the complementary end TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset; //Non-working status in idle state TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset; //No matter TIM_OC1Init(TIM1,&TIM_OCInitStructure); //Number initializes peripheral TIMx channel 1 here 2.0 library is TIM_OCInit TIM_Cmd(TIM1,ENABLE); TIM_CtrlPWMOutputs(TIM1,ENABLE); } / / Set the capture register 1 Void SetT1Pwm1(u16 pulse) { TIM1-"CCR1=pulse; } / / Add a keyboard scan in MAIN to change the duty cycle #include "STM32Lib\\stm32f10x.h" #include "hal.h" Extern void SetT1Pwm1(u16 pulse); Int main(void) { U16 pulse=40; ChipHalInit (); / / on-chip hardware initialization ChipOutHalInit (); / / off-chip hardware initialization For(;;) { If(GET_UP()) { While(GET_UP()); If(pulse"=144) { Pulse+=5; SetT1Pwm1(pulse); } } If(GET_DOWN()) { While(GET_DOWN()); If(pulse 30) { Pulse-=5; SetT1Pwm1(pulse); } } } } Onlyrelx legend2500 disposable vape pen is portable and fashion disposable electronic cigarette, disposable ecigs pen are trending featured vape pen for vapors as it's safety and easy to use. Disposable vape pod,disposable vape, wholesale vape,vape wholesale,vape pen manufacturer and supplier.disposable vape pen,disposable electronic cigarette,disposable ecigs pen,disposable ecigs stick,disposable e-cigs pen,disposable vape factory,disposable vape pod,disposable vape device,vape pen,vape stick, vape wholesale,wholesale vape,customized disposable vape pen,customized vape pen,OEM&ODM disposable ecigs pen,disposable electronic cigarette wholesale, wholesale disposable electronic cigarette,distribute vape pen,vape pen distribute,high quality vape pen,high quality vape pod. Onlyrelx Legend2500,Customized Vape Brand,disposable Vape Pen,disposable vape bar Shenzhen Onlyrelx Technology Co.,Ltd , https://www.onlyrelxtech.com