打印

【新手求助】霸道没有办法配置TIM8以及仿真成功,下载到硬件不行

[复制链接]
386|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
无幻|  楼主 | 2020-4-24 21:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
【新手一枚,求助】霸道无法配置TIM8
现象描述:
1、使用固件库例程进行仿真OK,将端口改为TIM8的chanel 2进行PWM互补输出,编译通过,仿真无结果,大家有无解法?
#ifndef __Andin_PWM_H
#define __Andin_PWM_H

#include "stm32f10x.h"

//PWM GPIO端口定义 默认GPIOC_Pin_7
#define PWM_GPIO_Pin                                                GPIO_Pin_7
#define PWM_GPIO_Port                                                GPIOC
#define PWM_GPIO_CLK                                                (RCC_APB2Periph_GPIOC)
#define PWM_GPIO_APBxClkCmd                        RCC_APB2PeriphClockCmd

//TIMx端口以及时钟
#define PWM_TIMx_APBxClkCmd                        RCC_APB2PeriphClockCmd
#define TIMx_RCC_APB2Periph                        RCC_APB2Periph_TIM8

#define PWM_Period                                                1000                                                                        //定义信号周期系数
#define PWM_PSC                                                        (7200-1)                                                                       //定义时钟分频系数        
#define PWM_Pulse                                                        500                                                                                //定义CCR数值

#define PWM_TIMx                                                        TIM8                                                                        //定义PWM时钟
#define PWM_TIM_OCxInit                                        TIM_OC2Init                                                    //定义输出比较通道
#define        PWM_OCx_Preload_Config        TIM_OC2PreloadConfig                                                 //配置OCx预加载CCR值

#define PWM_IRQ                                                        TIM8_UP_IRQn                                        //配置PWM计数器中断类型
#define PWM_IRQHandler                                        TIM8_UP_IRQHandler                //配置PWM计数器中断类型

void PWM_TIM_Init(void);

#endif        /* __Andin_PWM_H */

------------------------------------------------------------------------------------------------------------
#include "../User/PWM/Andin_PWM.h"

/*
*@ 设置PWM的GPIO结构体以及初始化
*/
static void PWM_TIM_GPIO_Config(void)
{
        GPIO_InitTypeDef PWM_GPIO_StruInit; //GPIO口定义
        
        PWM_GPIO_StruInit.GPIO_Mode = GPIO_Mode_AF_PP;//比较输出时使用AF_PP
        PWM_GPIO_StruInit.GPIO_Pin = PWM_GPIO_Pin;//定义GPIO Pin
        PWM_GPIO_StruInit.GPIO_Speed = GPIO_Speed_50MHz;//定义GPIO速率
        
        GPIO_Init(PWM_GPIO_Port,&PWM_GPIO_StruInit);//GPIO结构体初始化
        
        PWM_GPIO_APBxClkCmd(PWM_GPIO_CLK,ENABLE);//开启PWM对应的GPIO口时钟
}

/*
*@ 设置PWM的时钟模式
*/

static void PWM_TIM_Mode_Config(void)
{
        
        PWM_TIMx_APBxClkCmd(TIMx_RCC_APB2Periph,ENABLE); //开启TIMx时钟
        
/***********************1.设置时基结构体并初始化***********************/

        TIM_TimeBaseInitTypeDef PWM_TimeBaseInit; //时基结构定义
        
        PWM_TimeBaseInit.TIM_ClockDivision = TIM_CKD_DIV1; //时基预分频系数,当使用刹车/死区时间时定义
        
        PWM_TimeBaseInit.TIM_CounterMode = TIM_CounterMode_Up;//定时器向上计数
        
        PWM_TimeBaseInit.TIM_Period = PWM_Period;//定义ARR寄存器,即决定信号周期
        
        PWM_TimeBaseInit.TIM_Prescaler = PWM_PSC;//设定计数器分频因子,决定计数器周期
        
        PWM_TimeBaseInit.TIM_RepetitionCounter = 0;//自动重载不需要设定
        
        TIM_TimeBaseInit(PWM_TIMx,&PWM_TimeBaseInit);//初始化时基结构体
        
/**********************************************************************/        
        
/***********************2.设置输出比较结构体并初始化***********************/

        TIM_OCInitTypeDef        PWM_OC_StruIinit; //输出比较结构定义
        
        PWM_OC_StruIinit.TIM_OCIdleState= TIM_OCIdleState_Reset;//定义正向输出空闲状态时输出低电平
        
        PWM_OC_StruIinit.TIM_OCMode= TIM_OCMode_PWM1;//定义输出比较模式为PWM1模式
        
        PWM_OC_StruIinit.TIM_OCNIdleState=TIM_OCNIdleState_Reset;//定义反向输出空闲状态时输出低电平
        
        PWM_OC_StruIinit.TIM_OCNPolarity=TIM_OCNPolarity_High;//定义反向出发电平为高电平
        
        PWM_OC_StruIinit.TIM_OCPolarity=TIM_OCPolarity_High;//定义正向出发电平为高电平
        
        PWM_OC_StruIinit.TIM_OutputNState=TIM_OutputNState_Enable;//禁用反向输出
        
        PWM_OC_StruIinit.TIM_OutputState=TIM_OutputState_Enable;//使能正向输出
        
        PWM_OC_StruIinit.TIM_Pulse=PWM_Pulse;//对占空比参数进行定义
        
        PWM_TIM_OCxInit(PWM_TIMx,&PWM_OC_StruIinit);//输出比较通道初始化
        
        PWM_OCx_Preload_Config(PWM_TIMx,TIM_OCPreload_Enable);//输出比较CCR预加载使能        
        
/**********************************************************************/        

/****************************3. 其它使能设置****************************/

        TIM_Cmd(PWM_TIMx,DISABLE);//时钟使能

        TIM_CtrlPWMOutputs(PWM_TIMx,ENABLE);//PWM主输出使能
               
        TIM_ITConfig(PWM_TIMx, TIM_IT_Update, ENABLE);//使能update中断
               
        
}
/**********************************************************************/        


/*--------------------------4. 中断等级函数设定--------------------------*/
static void PWM_NVIC_Config(void)
{
  NVIC_InitTypeDef PWM_NVIC_InitStructure;

  /* 嵌套向量中断控制器组选择 */
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

  /* 配置USART为中断源 */
  PWM_NVIC_InitStructure.NVIC_IRQChannel = PWM_IRQ;
  /* 抢断优先级*/
  PWM_NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  /* 子优先级 */
  PWM_NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
  /* 使能中断 */
  PWM_NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  /* 初始化配置NVIC */
  NVIC_Init(&PWM_NVIC_InitStructure);
}
/*----------------------------------------------------------------------*/        


/*---------------------------5. PWM时钟初始化----------------------------*/
void PWM_TIM_Init(void)
{
        PWM_NVIC_Config();
        PWM_TIM_GPIO_Config();
        PWM_TIM_Mode_Config();
}
/*----------------------------------------------------------------------*/        

-------------------------------------------------------------------------------------
2.如果直接配置为PA8 chanel 1,仿真OK,但是下载到开发板,没有办法驱动L289N全桥电路,电机不转。
思路 PA8控制速度(PA8->update中断->CCR赋新值->清除中断->循环...),PC8、PC9控制正反转。
接线如下:
PA8  --> ENA (PWM)
PC8 -> IN1  (正或负,与PC9反相)
PC9 -> IN2  (正或负,与PC8反相)
SDIO GND -> L289N GND (要求必须接地)
out1 ->直流电机端子1
out2 ->直流电机端子2

新手一枚,请多多包涵~

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

431

主题

436

帖子

0

粉丝