OpenEdv-开源电子网

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

编码器模式没有反应,这是为什么呢

[复制链接]

16

主题

74

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
290
金钱
290
注册时间
2019-9-4
在线时间
52 小时
发表于 2019-9-28 11:03:03 | 显示全部楼层 |阅读模式
48金钱
#include "timer.h"
#include "led.h"
#include "delay.h"
TIM_HandleTypeDef TIM3_Handler;         //定时器3PWM句柄
TIM_OC_InitTypeDef TIM3_CH4Handler;            //定时器3通道4句柄
long Interupt_Num=0 ;
long Pulse_Num =0 ;
float Circle_NUm =0;  
//TIM3 PWM部分初始化
//PWM输出初始化
//arr:自动重装值
//psc:时钟预分频数
void TIM3_PWM_Init(u16 arr,u16 psc)
{
    TIM3_Handler.Instance=TIM3;            //定时器3
    TIM3_Handler.Init.Prescaler=psc;       //定时器分频
    TIM3_Handler.Init.CounterMode=TIM_COUNTERMODE_UP;//向上计数模式
    TIM3_Handler.Init.Period=arr;          //自动重装载值
    TIM3_Handler.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;
    HAL_TIM_PWM_Init(&TIM3_Handler);       //初始化PWM

    TIM3_CH4Handler.OCMode=TIM_OCMODE_PWM1; //模式选择PWM1
    TIM3_CH4Handler.Pulse=arr/2;            //设置比较值,此值用来确定占空比,默认比较值为自动重装载值的一半,即占空比为50%
    TIM3_CH4Handler.OCPolarity=TIM_OCPOLARITY_LOW; //输出比较极性为低
    HAL_TIM_PWM_ConfigChannel(&TIM3_Handler,&TIM3_CH4Handler,TIM_CHANNEL_4);//配置TIM3通道4
    HAL_TIM_PWM_Start(&TIM3_Handler,TIM_CHANNEL_4);//开启PWM通道4
}


//定时器底层驱动,时钟使能,引脚配置
//此函数会被HAL_TIM_PWM_Init()调用
//htim:定时器句柄
void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim)
{
    GPIO_InitTypeDef GPIO_Initure;
        __HAL_RCC_TIM3_CLK_ENABLE();                        //使能定时器3
    __HAL_RCC_GPIOB_CLK_ENABLE();                        //开启GPIOB时钟
       
    GPIO_Initure.Pin=GPIO_PIN_1;                   //PB1
    GPIO_Initure.Mode=GPIO_MODE_AF_PP;          //复用推挽输出
    GPIO_Initure.Pull=GPIO_PULLUP;          //上拉
    GPIO_Initure.Speed=GPIO_SPEED_HIGH;     //高速
        GPIO_Initure.Alternate= GPIO_AF2_TIM3;        //PB1复用为TIM3_CH4
    HAL_GPIO_Init(GPIOB,&GPIO_Initure);
}

//设置TIM通道4的占空比
//compare:比较值
void TIM_SetTIM3Compare4(u32 compare)
{
        TIM3->CCR4=compare;
}



TIM_HandleTypeDef TIM4_Handler;      //定时器句柄
TIM_Encoder_InitTypeDef TIM4_Encoder_Handler;
void TIM4_Init(u16 arr,u16 psc)
{  
        TIM4_Handler.Instance=TIM4;
        TIM4_Handler.Init.Prescaler=0x0;                     //分频系数
        TIM4_Handler.Init.CounterMode=TIM_COUNTERMODE_UP;    //向上计数器
        TIM4_Handler.Init.Period=3600;                        //自动装载值
        TIM4_Handler.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;//时钟分频银子
       
        TIM4_Encoder_Handler.EncoderMode=TIM_ENCODERMODE_TI12;
        TIM4_Encoder_Handler.IC1Filter=0;
        TIM4_Encoder_Handler.IC1Polarity=TIM_ICPOLARITY_RISING;
        TIM4_Encoder_Handler.IC1Prescaler=TIM_ICPSC_DIV1;
        TIM4_Encoder_Handler.IC1Selection=TIM_ICSELECTION_DIRECTTI;
               
        TIM4_Encoder_Handler.IC2Filter=0;
        TIM4_Encoder_Handler.IC2Polarity=TIM_ICPOLARITY_RISING;
        TIM4_Encoder_Handler.IC2Selection=TIM_ICSELECTION_DIRECTTI;
        TIM4_Encoder_Handler.IC2Prescaler=TIM_ICPSC_DIV1;
        HAL_TIM_Encoder_Init(&TIM4_Handler,&TIM4_Encoder_Handler);
       
        HAL_TIM_Encoder_Start(&TIM4_Handler,TIM_CHANNEL_ALL);
        HAL_TIM_Encoder_Start_IT(&TIM4_Handler,TIM_CHANNEL_ALL);//开启中断

    __HAL_TIM_ENABLE_IT(&TIM4_Handler,TIM_IT_UPDATE);   //使能更新中断
    __HAL_TIM_ENABLE(&TIM4_Handler);
          
         TIM4->CNT=1000;

}

void TIM4_IRQHandler(void)
{
    HAL_TIM_IRQHandler(&TIM4_Handler);
}

void HAL_TIM_Encoder_MspInit(TIM_HandleTypeDef *htim)
{   
        GPIO_InitTypeDef GPIO_Initure;
        if(htim->Instance==TIM4)
  {
    __HAL_RCC_TIM4_CLK_ENABLE();            //使能TIM4时钟
        HAL_NVIC_SetPriority(TIM4_IRQn,1,3);    //设置中断优先级,抢占优先级1,子优先级3
        HAL_NVIC_EnableIRQ(TIM4_IRQn);          //开启ITM4中断   
        HAL_TIM_Base_Start_IT(&TIM4_Handler); //使能定时器4和定时器4更新中断:TIM_IT_UPDATE   

    __HAL_RCC_GPIOD_CLK_ENABLE();                        //开启GPIOD时钟          
    GPIO_Initure.Pin=GPIO_PIN_12|GPIO_PIN_13;         
    GPIO_Initure.Mode=GPIO_MODE_INPUT;      //输入
    GPIO_Initure.Pull=GPIO_PULLUP;          //上拉
    GPIO_Initure.Alternate=GPIO_AF2_TIM4;   
    HAL_GPIO_Init(GPIOD,&GPIO_Initure);
        }       
}

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
        TIM4->CNT=0;
        delay_ms(100);
        printf("%d",TIM4->CNT);
}


按键控制PWM及转向 - 副本 (2).zip

10.39 MB, 下载次数: 15

最佳答案

查看完整内容[请看2#楼]

.。。。。我弄好了谢谢大家
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

16

主题

74

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
290
金钱
290
注册时间
2019-9-4
在线时间
52 小时
 楼主| 发表于 2019-9-28 11:03:04 | 显示全部楼层
.。。。。我弄好了谢谢大家
回复

使用道具 举报

16

主题

74

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
290
金钱
290
注册时间
2019-9-4
在线时间
52 小时
 楼主| 发表于 2019-9-28 13:33:14 | 显示全部楼层
dingding
回复

使用道具 举报

4

主题

10

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2019-7-12
在线时间
11 小时
发表于 2019-11-13 09:27:15 | 显示全部楼层
可以分享一份吗,学生搞了好久了,没找到问题在哪
回复

使用道具 举报

16

主题

74

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
290
金钱
290
注册时间
2019-9-4
在线时间
52 小时
 楼主| 发表于 2019-11-13 21:34:07 | 显示全部楼层
Amazinga 发表于 2019-11-13 09:27
可以分享一份吗,学生搞了好久了,没找到问题在哪

我有发呀
回复

使用道具 举报

16

主题

74

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
290
金钱
290
注册时间
2019-9-4
在线时间
52 小时
 楼主| 发表于 2019-11-13 21:34:43 | 显示全部楼层
Amazinga 发表于 2019-11-13 09:27
可以分享一份吗,学生搞了好久了,没找到问题在哪

1341756901 你可以加我QQ
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-15 15:44

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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