初级会员

- 积分
- 87
- 金钱
- 87
- 注册时间
- 2020-5-15
- 在线时间
- 39 小时
|
10金钱
使用407开发板,想用tim2_ch2(对应于PA1)输出100hz,占空比为75的波形,结果不对,换成tim14_ch1,就能正常输出波形,谁能解答一下,万分感激。
pwm.h文件
/*******timer2 ch2********/
#define GENERAL_OCPWM_PIN GPIO_Pin_1
#define GENERAL_OCPWM_GPIO_PORT GPIOA
#define GENERAL_OCPWM_GPIO_CLK RCC_AHB1Periph_GPIOA
#define GENERAL_OCPWM_PINSOURCE GPIO_PinSource1
#define GENERAL_OCPWM_AF GPIO_AF_TIM2
#define GENERAL_TIM TIM2
#define GENERAL_TIM_CLK RCC_APB1Periph_TIM2
pwm.c文件:
/**
* @brief 配置TIM复用输出PWM时用到的I/O
* @param 无
* @retval 无
*/
static void TIMx_GPIO_Config(void)
{
/*定义一个GPIO_InitTypeDef类型的结构体*/
GPIO_InitTypeDef GPIO_InitStructure;
/*开启相关的GPIO外设时钟*/
RCC_AHB1PeriphClockCmd (GENERAL_OCPWM_GPIO_CLK, ENABLE);
/*定时器通道引脚复用 */
GPIO_PinAFConfig(GENERAL_OCPWM_GPIO_PORT,GENERAL_OCPWM_PINSOURCE,GENERAL_OCPWM_AF);
/* 定时器通道引脚配置 */
GPIO_InitStructure.GPIO_Pin = GENERAL_OCPWM_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_Init(GENERAL_OCPWM_GPIO_PORT, &GPIO_InitStructure);
}
static void TIM_PWMOUTPUT_Config(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
// 开启TIMx_CLK,x[2,3,4,5,12,13,14]
RCC_APB1PeriphClockCmd(GENERAL_TIM_CLK, ENABLE);
/*** 通用控制定时器时钟CK_INT = 84MHz ***/
/***CK_CNT=CK_INT/(TIM_Prescaler+1)=10kHz***/
TIM_TimeBaseStructure.TIM_Prescaler = 8400-1;
/* 累计TIM_Period个后产生一个更新或者中断*/
TIM_TimeBaseStructure.TIM_Period = 100-1;
// 采样时钟分频
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
// 计数方式
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
// 初始化定时器TIMx, x[2,3,4,5,12,13,14]
TIM_TimeBaseInit(GENERAL_TIM, &TIM_TimeBaseStructure);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;//配置为PWM模式1,当定时器计数值小于CCR1_Val时为高电平
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//比较输出使能
TIM_OCInitStructure.TIM_Pulse = 75;//占空比75:25
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;//选择OCx高电平有效还是低电平有效
TIM_OC2Init(GENERAL_TIM, &TIM_OCInitStructure); //初始化输出比较通道
TIM_OC2PreloadConfig(GENERAL_TIM, TIM_OCPreload_Enable);//chanel2
TIM_Cmd(GENERAL_TIM, ENABLE); // 使能定时器
//TIM_CtrlPWMOutputs(GENERAL_TIM,ENABLE);//高级定时器要想输出PWM,必须加这个函数
}
|
|