论坛元老
 
- 积分
- 3071
- 金钱
- 3071
- 注册时间
- 2018-2-7
- 在线时间
- 285 小时
|
发表于 2019-10-30 19:40:43
|
显示全部楼层
- #include "timer3.h"
- void TIM3_PWM_Init(u16 arr, u16 psc)
- {
- TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
- TIM_OCInitTypeDef TIM_OCInitStructure;
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE); //复用时钟
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
- 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_0 | GPIO_Pin_1;
- GPIO_Init(GPIOB, &GPIO_InitStructure);
- TIM_TimeBaseInitStructure.TIM_Period = arr;
- TIM_TimeBaseInitStructure.TIM_Prescaler = psc;
- TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0; //只有高级定时器需要设置,其他定时器可以不设置。
- TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
- TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
- TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStructure);
- TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
- TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
- TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
- TIM_OC1Init(TIM3, &TIM_OCInitStructure); //TIM3_OC1 PA6
- TIM_OC2Init(TIM3, &TIM_OCInitStructure); //TIM3_OC2 PA7
- TIM_OC3Init(TIM3, &TIM_OCInitStructure); //TIM3_OC1 PB0
- TIM_OC4Init(TIM3, &TIM_OCInitStructure); //TIM3_OC1 PB1
- TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);
- TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);
- TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);
- TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);
- TIM_Cmd(TIM3, ENABLE);
- }
- //APB1时钟分频为2 TIM2-7 时钟数为APB1 2倍
- // Tout= (arr+1)*(psc+1) / Tclk
- void TIM3_PWM_Rem_Init(u16 arr, u16 psc)
- {
- TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
- GPIO_InitTypeDef GPIO_InitStructure;
- TIM_OCInitTypeDef TIM_OCInitStructure;
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOB, ENABLE); //复用时钟
- //禁止J-Tag引脚功能 需要2步 1.使能复用时钟功能 2.禁止JTAG PB4 PA13 PA14 PA15
- //RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
- GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST, ENABLE); //Full SWJ Enabled (JTAG-DP + SW-DP) but without JTRST
-
- GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE); //定时器3 部分重映射
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOB, &GPIO_InitStructure);
- GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); //JTAG-DP Disabled and SW-DP Enabled/
-
- TIM_TimeBaseInitStructure.TIM_Period = arr;
- TIM_TimeBaseInitStructure.TIM_Prescaler = psc;
- TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0; //只有高级定时器需要设置,其他定时器可以不设置。
- TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
- TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
- TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStructure);
- TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
- TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
- TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
-
- TIM_OC1Init(TIM3, &TIM_OCInitStructure); //TIM3_OC1 PA6-->PB4
- TIM_OC2Init(TIM3, &TIM_OCInitStructure); //TIM3_OC2 PA7-->PB5
- TIM_OC3Init(TIM3, &TIM_OCInitStructure); //TIM3_OC1 PB0
- TIM_OC4Init(TIM3, &TIM_OCInitStructure); //TIM3_OC1 PB1
- //未选择预装载特性,写入的数值会立即传输至当前寄存器。 允许预装载功能,写入的数值发生更新事件时,才会传输到比较寄存器中
- TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);
- TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);
- TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);
- TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);
-
- TIM_Cmd(TIM3, ENABLE);
- }
复制代码
|
|