OpenEdv-开源电子网

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

stm32f429 多路pwm输出控制云台 只能输出一路

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2019-7-7
在线时间
3 小时
发表于 2019-8-7 22:52:30 | 显示全部楼层 |阅读模式
1金钱
用的是HAL库,不懂为什么只能输出一路?


TIM_HandleTypeDef TIM4_Handler;         //定时器9PWM句柄
TIM_HandleTypeDef TIM2_Handler;         //定时器2PWM句柄
TIM_OC_InitTypeDef TIM4_CHxHandler;        //定时器9通道x句柄
TIM_OC_InitTypeDef TIM2_CHxHandler;        //定时器2通道x句柄
u16 GPIO_PIN_x;

//TIM3 PWM部分初始化
//PWM输出初始化
//arr:自动重装值
//psc:时钟预分频数
void TIM4_PWM_Init(u16 arr,u16 psc,u16 TIM_CHANNEL)
{
    TIM4_Handler.Instance=TIM4;            //定时器9
    TIM4_Handler.Init.Prescaler=psc;       //定时器分频
    TIM4_Handler.Init.CounterMode=TIM_COUNTERMODE_UP;//向上计数模式
    TIM4_Handler.Init.Period=arr;          //自动重装载值
    TIM4_Handler.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;
    HAL_TIM_PWM_Init(&TIM4_Handler);       //初始化PWM
   
    TIM4_CHxHandler.OCMode=TIM_OCMODE_PWM1; //模式选择PWM1
    TIM4_CHxHandler.Pulse=arr/2;            //设置比较值,此值用来确定占空比,默认比较值为自动重装载值的一半,即占空比为50%
    TIM4_CHxHandler.OCPolarity=TIM_OCPOLARITY_HIGH; //输出比较极性为低
    HAL_TIM_PWM_ConfigChannel(&TIM4_Handler,&TIM4_CHxHandler,TIM_CHANNEL);//配置TIM4通道x
   
    HAL_TIM_PWM_Start(&TIM4_Handler,TIM_CHANNEL);//开启PWM通道x
}

//TIM2 PWM部分初始化
//PWM输出初始化
//arr:自动重装值
//psc:时钟预分频数
void TIM2_PWM_Init(u16 arr,u16 psc,u16 TIM_CHANNEL)
{
    TIM2_Handler.Instance=TIM2;            //定时器2
    TIM2_Handler.Init.Prescaler=psc;       //定时器分频
    TIM2_Handler.Init.CounterMode=TIM_COUNTERMODE_UP;//向上计数模式
    TIM2_Handler.Init.Period=arr;          //自动重装载值
    TIM2_Handler.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;
    HAL_TIM_PWM_Init(&TIM2_Handler);       //初始化PWM
   
    TIM2_CHxHandler.OCMode=TIM_OCMODE_PWM1; //模式选择PWM1
    TIM2_CHxHandler.Pulse=arr/2;            //设置比较值,此值用来确定占空比,默认比较值为自动重装载值的一半,即占空比为50%
    TIM2_CHxHandler.OCPolarity=TIM_OCPOLARITY_HIGH; //输出比较极性为低
    HAL_TIM_PWM_ConfigChannel(&TIM2_Handler,&TIM2_CHxHandler,TIM_CHANNEL);//配置TIM9通道x
   
    HAL_TIM_PWM_Start(&TIM2_Handler,TIM_CHANNEL);//开启PWM通道x
}

//定时器底层驱动,时钟使能,引脚配置
//此函数会被HAL_TIM_PWM_Init()调用
//htim:定时器句柄
void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim)
{
    if(htim==&TIM4_Handler)
    {
        GPIO_InitTypeDef GPIO_Initure;
        __HAL_RCC_TIM4_CLK_ENABLE();            //使能定时器4
        __HAL_RCC_GPIOB_CLK_ENABLE();            //开启GPIOB时钟
   
        GPIO_Initure.Pin=GPIO_PIN_10;               //PB10
        GPIO_Initure.Mode=GPIO_MODE_AF_PP;      //复用推挽输出
        GPIO_Initure.Pull=GPIO_PULLUP;          //上拉
        GPIO_Initure.Speed=GPIO_SPEED_HIGH;     //高速
        GPIO_Initure.Alternate= GPIO_AF2_TIM4;    //PEx复用为TIM9_CH1
        HAL_GPIO_Init(GPIOB,&GPIO_Initure);
    }
    if(htim==&TIM2_Handler)
    {
        GPIO_InitTypeDef GPIO_Initure;
        __HAL_RCC_TIM2_CLK_ENABLE();            //使能定时器2
        __HAL_RCC_GPIOA_CLK_ENABLE();            //开启GPIOA时钟
   
        GPIO_Initure.Pin=GPIO_PIN_0;               //PA0
        GPIO_Initure.Mode=GPIO_MODE_AF_PP;      //复用推挽输出
        GPIO_Initure.Pull=GPIO_PULLUP;          //上拉
        GPIO_Initure.Speed=GPIO_SPEED_HIGH;     //高速
        GPIO_Initure.Alternate= GPIO_AF1_TIM2;    //PA0复用为TIM2_CH1
        HAL_GPIO_Init(GPIOA,&GPIO_Initure);
    }
}


//设置TIM4通道1的占空比
//compare:比较值
void TIM_SetTIM4Compare(u32 compare)
{
        TIM4->CCR1=compare;
}

//设置TIM2通道1的占空比
//compare:比较值
void TIM_SetTIM2Compare(u32 compare)
{
        TIM2->CCR1=compare;
}

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

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-28 01:24

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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