OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6110|回复: 1

STM32F767定时器主从模式不成功,求助

[复制链接]

2

主题

7

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2016-12-3
在线时间
6 小时
发表于 2021-8-19 20:00:51 | 显示全部楼层 |阅读模式
1金钱
下面是代码,一直调试不出来。大神帮忙看下。
///****************************************************************
//                                                        头文件
//****************************************************************/

#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "HeaderPath.h"

/****************************************************************
                                                                说明
TIM4产生PWM波形
PD12对应TIM4_CH1
PD13对应TIM4_CH2
****************************************************************/
TIM_HandleTypeDef TIM4_Handler;         //定时器句柄
TIM_OC_InitTypeDef TIM4_CHHandler;     //定时器3通道4句柄
TIM_HandleTypeDef TIM5_Handler;      //定时器句柄
/****************************************************************
功能:TIM4 PWM部分初始化 & PWM输出初始化
参数:        arr:自动重装值
                psc:时钟预分频数
返回值:None
****************************************************************/
void TIM4_PWM_Init(u16 TIM4_arr,u16 TIM4_psc)
{
       
        TIM4_Handler.Instance=TIM4;            //定时器3
    TIM4_Handler.Init.Prescaler=TIM4_psc;       //定时器分频
    TIM4_Handler.Init.CounterMode=TIM_COUNTERMODE_UP;//向上计数模式
    TIM4_Handler.Init.Period=TIM4_arr;          //自动重装载值
    TIM4_Handler.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;
    TIM4_CHHandler.OCMode=TIM_OCMODE_PWM2; //模式选择PWM2
    TIM4_CHHandler.Pulse=TIM4_arr/2;            //设置比较值,此值用来确定占空比,默认比较值为自动重装载值的一半,即占空比为50%
    TIM4_CHHandler.OCPolarity=TIM_OCPOLARITY_HIGH; //输出比较极性为高
        TIM4_Handler.Init.RepetitionCounter=0;
        HAL_TIM_PWM_Init(&TIM4_Handler);       //初始化TIM4
        HAL_TIME4_MasterConfig();
    HAL_TIM_PWM_ConfigChannel(&TIM4_Handler,&TIM4_CHHandler,TIM_CHANNEL_1);//配置TIM4通道1
        HAL_TIM_PWM_ConfigChannel(&TIM4_Handler,&TIM4_CHHandler,TIM_CHANNEL_2);//配置TIM4通道2
        HAL_TIM_PWM_Start(&TIM4_Handler,TIM_CHANNEL_1);//开启PWM通道1
        HAL_TIM_PWM_Start(&TIM4_Handler,TIM_CHANNEL_2);//开启PWM通道2
//        TIM4->CCR1=TIM_CR1_CEN;
//        __HAL_TIM_ENABLE(&TIM4_Handler);
}
/****************************************************************
功能:        //定时器底层驱动,时钟使能,引脚配置
                //此函数会被HAL_TIM_PWM_Init()调用
                //htim:定时器句柄
参数:None
返回值:NoneNone
****************************************************************/

void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim)
{
    GPIO_InitTypeDef GPIO_Initure;
        __HAL_RCC_TIM4_CLK_ENABLE();                        //使能定时器4
    __HAL_RCC_GPIOD_CLK_ENABLE();                        //开启GPIOD时钟
       
    GPIO_Initure.Pin=GPIO_PIN_12|GPIO_PIN_13;//PD12\PD13
    GPIO_Initure.Mode=GPIO_MODE_AF_PP;          //复用推完输出
    GPIO_Initure.Pull=GPIO_PULLDOWN;          //上拉
    GPIO_Initure.Speed=GPIO_SPEED_HIGH;     //高速
        GPIO_Initure.Alternate=GPIO_AF2_TIM4;        //PD12\PD13复用为TIM4
    HAL_GPIO_Init(GPIOD,&GPIO_Initure);
}
/****************************************************************
                                                                说明
主时钟:TIM4
从时钟:TIM5
****************************************************************/

/****************************************************************
功能:Configures the TIM in master mode
参数:None
返回值:NoneNone
****************************************************************/
void HAL_TIME4_MasterConfig()
{
        TIM_MasterConfigTypeDef TIM4_MasterConfig;
        TIM4_MasterConfig.MasterOutputTrigger=TIM_TRGO_UPDATE;
        TIM4_MasterConfig.MasterSlaveMode=TIM_MASTERSLAVEMODE_ENABLE;
        HAL_TIMEx_MasterConfigSynchronization(&TIM4_Handler,&TIM4_MasterConfig);       
}
/****************************************************************
                                                                说明                                                               
定时器溢出时间计算方法:Tout=((arr+1)*(psc+1))/Ft us.
Ft=定时器工作频率,单位:Mhz
这里使用的是定时器5!(定时器5挂在APB1上,时钟为HCLK/2)                                                                                                               
*****************************************************************/

/****************************************************************
功能:TIM5 PWM部分初始化 & PWM输出初始化
参数:        arr:自动重装值
                psc:时钟预分频数
返回值:None
****************************************************************/
void TIM5_Init(u16 TIM5_arr)
{  
    TIM5_Handler.Instance=TIM5;                                 //通用定时器5
    TIM5_Handler.Init.Prescaler=0;                             //分频
    TIM5_Handler.Init.CounterMode=TIM_COUNTERMODE_UP;             //向上计数器
        TIM5_Handler.Init.Period=TIM5_arr;                                 //自动装载值
    TIM5_Handler.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1; //时钟分频因子
        TIM5_Handler.Init.RepetitionCounter=0;
        HAL_TIM_Base_Init(&TIM5_Handler);
//        TIM_ETR_SetConfig(TIM5,0,0,0);
//    __HAL_TIM_ENABLE(&TIM5_Handler);
        HAL_TIM5_SlaveConfig();       
        HAL_TIM_Base_Start_IT(&TIM5_Handler); //使能定时器5和定时器5更新中断:TIM_IT_UPDATE   

//        __HAL_TIM_ENABLE(&TIM5_Handler);
//        TIM5->CCR1=TIM_CR1_CEN;
}

//定时器底册驱动,开启时钟,设置中断优先级
//此函数会被HAL_TIM_Base_Init()函数调用
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)
{
    if(htim==(&TIM5_Handler))
        {
                __HAL_RCC_TIM5_CLK_ENABLE();            //使能TIM5时钟
                HAL_NVIC_SetPriority(TIM5_IRQn ,2,2);    //设置中断优先级,抢占优先级1,子优先级3
                HAL_NVIC_EnableIRQ(TIM5_IRQn);          //开启ITM5中断   
        }  
}
/****************************************************************
                                                                说明
主时钟:TIM4
从时钟:TIM5
****************************************************************/
/****************************************************************
功能:Configures the TIM in Slave mode
参数:None
返回值:None
****************************************************************/
//HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchronization(TIM_HandleTypeDef *htim, TIM_SlaveConfigTypeDef * sSlaveConfig);
void HAL_TIM5_SlaveConfig()
{
        TIM_SlaveConfigTypeDef  TIM5_SlaveConfig;
        TIM5_SlaveConfig.SlaveMode=  TIM_SLAVEMODE_EXTERNAL1 ;
        TIM5_SlaveConfig.InputTrigger=TIM_TS_ITR2 ;
        TIM5_SlaveConfig.TriggerPolarity=TIM_ETRPOLARITY_NONINVERTED;
        TIM5_SlaveConfig.TriggerPrescaler=TIM_TRIGGERPRESCALER_DIV1;
        TIM5_SlaveConfig.TriggerFilter=0;
        HAL_TIM_SlaveConfigSynchronization(&TIM5_Handler,&TIM5_SlaveConfig);
        HAL_TIM_SlaveConfigSynchronization_IT(&TIM5_Handler,&TIM5_SlaveConfig);
}

/****************************************************************
功能:Configures the TIM in Slave mode in interrupt mode
参数:None
返回值:None
****************************************************************/

/****************************************************************
功能://定时器5中断服务函数
参数:None
返回值:None
****************************************************************/

void TIM5_IRQHandler(void)
{
    HAL_TIM_IRQHandler(&TIM5_Handler);
}

/****************************************************************
功能://定时器5中断服务函数调用
参数:None
返回值:None
****************************************************************/

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    if(htim->Instance==TIM5)
    {
                TIM4->CCR1=0;               
                TIM4->CCR2=0;
                TIM5->CNT=0;
                HAL_TIM_Base_Stop_IT(&TIM5_Handler);
    }
}

/****************************************************************
功能://调用定时器4、定时器5初始化函数
参数:TIM4_arr   //定时器4重载值
          TIM4_psc   //定时器4预分频值
          TIM5_arr        //定时器5重载值
返回值:None
****************************************************************/
void Master_Slave_Init(u16 TIM4_arr,u16 TIM4_psc,u16 TIM5_arr)
{
        TIM4_PWM_Init(TIM4_arr,TIM4_psc);
        TIM5_Init(TIM5_arr);
//    HAL_TIM_PWM_Start(&TIM4_Handler,TIM_CHANNEL_1);//开启PWM通道1
//        HAL_TIM_PWM_Start(&TIM4_Handler,TIM_CHANNEL_2);//开启PWM通道2
//        HAL_TIM_Base_Start_IT(&TIM5_Handler); //使能定时器5和定时器5更新中断:TIM_IT_UPDATE   

}






正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

7

主题

480

帖子

0

精华

高级会员

Rank: 4

积分
773
金钱
773
注册时间
2021-4-15
在线时间
304 小时
发表于 2021-8-20 09:58:10 | 显示全部楼层
帮顶!!定时器还分主从的?没见过
日常敲键--头秃一片
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-27 02:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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