野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 7510|回复: 3

关于 PE5 PE6 同时发出PWM的疑问!

[复制链接]
发表于 2017-8-17 10:55:48 | 显示全部楼层 |阅读模式
野火的技术人员:您好!

请问 为什么我根据 全彩LED改写的例程 PE5 PE6同时发出PWM则有问题呢?

#ifndef       __MOTOR_H
#define        __MOTOR_H

#include "stm32f4xx.h"

#define FW_Motor_PIN                   GPIO_Pin_5
#define FW_Motor_GPIO_PORT       GPIOE
#define FW_Motor_GPIO_CLK          RCC_AHB1Periph_GPIOE
#define FW_Motor_PINSOURCE          GPIO_PinSource5
#define FW_Motor_AF                          GPIO_AF_TIM9

#define FY_Motor_PIN                   GPIO_Pin_6
#define FY_Motor_GPIO_PORT       GPIOE
#define FY_Motor_GPIO_CLK         RCC_AHB1Periph_GPIOE
#define FY_Motor_PINSOURCE        GPIO_PinSource6
#define FY_Motor_AF                        GPIO_AF_TIM9

#define Motor_TIM                            TIM9
#define Motor_TIM_CLK                        RCC_APB2Periph_TIM9

void Stepmptor_Configuration(void);

#endif /* __GENERAL_TIM_H */


回复

使用道具 举报

 楼主| 发表于 2017-8-17 10:56:10 | 显示全部楼层
static void MOTOR_GPIO_Config(void)
{
    /*定义一个GPIO_InitTypeDef类型的结构体*/
    GPIO_InitTypeDef GPIO_InitStructure;

    /*开启相关的GPIO外设时钟*/
    RCC_AHB1PeriphClockCmd (FW_Motor_GPIO_CLK|FY_Motor_GPIO_CLK, ENABLE);

    /* 定时器通道引脚复用 */
    GPIO_PinAFConfig(FW_Motor_GPIO_PORT,FW_Motor_PINSOURCE,FW_Motor_AF);
    GPIO_PinAFConfig(FY_Motor_GPIO_PORT,FY_Motor_PINSOURCE,FY_Motor_AF);

    /* 定时器通道引脚配置 */
    GPIO_InitStructure.GPIO_Pin = FW_Motor_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(FW_Motor_GPIO_PORT, &GPIO_InitStructure);

    /* 定时器通道引脚配置 */
    GPIO_InitStructure.GPIO_Pin = FY_Motor_PIN;
    GPIO_Init(FY_Motor_GPIO_PORT, &GPIO_InitStructure);

}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-17 10:56:34 | 显示全部楼层
static void MOTOR_PWMOUTPUT_Config(void)
{
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
    TIM_OCInitTypeDef  TIM_OCInitStructure;

    // 开启TIMx_CLK,x[2,3,4,5,12,13,14]
    RCC_APB2PeriphClockCmd(Motor_TIM_CLK, ENABLE);

    /* 累计 TIM_Period个后产生一个更新或者中断*/
    //当定时器从0计数到8999,即为9000次,为一个定时周期
    TIM_TimeBaseStructure.TIM_Period = 50-1;

    // 通用控制定时器时钟源TIMxCLK = HCLK/2=90MHz
    // 设定定时器频率为=TIMxCLK/(TIM_Prescaler+1)=100KHz
    TIM_TimeBaseStructure.TIM_Prescaler = 90-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(Motor_TIM, &TIM_TimeBaseStructure);


    /* PWM1 Mode configuration: Channel1 */
    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;            //配置为PWM模式1
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
    TIM_OCInitStructure.TIM_Pulse = 50-1;
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;            //当定时器计数值小于CCR1_Val时为高电平

    TIM_OC1Init(Motor_TIM, &TIM_OCInitStructure);         //使能通道1
    TIM_OC2Init(Motor_TIM, &TIM_OCInitStructure);         //使能通道2

    /*使能通道1重载*/
    TIM_OC1PreloadConfig(Motor_TIM, TIM_OCPreload_Enable);
    TIM_OC2PreloadConfig(Motor_TIM, TIM_OCPreload_Enable);

    TIM_ARRPreloadConfig(Motor_TIM, ENABLE);                        //使能TIM重载寄存器ARR

    // 使能定时器
    TIM_Cmd(Motor_TIM, ENABLE);
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-17 10:56:58 | 显示全部楼层
void Stepmptor_Configuration(void)
{
    MOTOR_GPIO_Config();

    MOTOR_PWMOUTPUT_Config();

    /* 使能RNG时钟 */
    RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_RNG, ENABLE);
       
    /* 使能RNG外设 */
    RNG_Cmd(ENABLE);

}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-1-16 15:07 , Processed in 0.065286 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表