OpenEdv-开源电子网

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

TIM9编码器模式求大神帮帮忙

[复制链接]

1

主题

2

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2019-3-11
在线时间
12 小时
发表于 2019-7-8 17:31:18 | 显示全部楼层 |阅读模式
5金钱
void TIM9_Mode_Config(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        TIM_ICInitTypeDef TIM_ICInitStructure;          

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM9, ENABLE);
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);
       
        GPIO_PinAFConfig(GPIOE,GPIO_PinSource5,GPIO_AF_TIM9);
        GPIO_PinAFConfig(GPIOE,GPIO_PinSource6,GPIO_AF_TIM9);
       
        /*编码器输入引脚PE->5   PE->6 -*/
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6;         
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
  GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP ;
        GPIO_Init(GPIOE, &GPIO_InitStructure);                           

        /*- TIM9编码器模式 -*/
        TIM_DeInit(TIM9);
        TIM_TimeBaseStructure.TIM_Period = 65535;
        TIM_TimeBaseStructure.TIM_Prescaler = 0;
        TIM_TimeBaseStructure.TIM_ClockDivision =TIM_CKD_DIV1 ;
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
        TIM_TimeBaseInit(TIM9, &TIM_TimeBaseStructure);              

        TIM_EncoderInterfaceConfig(TIM9, TIM_EncoderMode_TI12, TIM_ICPolarity_BothEdge ,TIM_ICPolarity_BothEdge);        //配置编码器触发模式和极性
       
        TIM_ICStructInit(&TIM_ICInitStructure);                                                                                                        //设置滤波器
        TIM_ICInitStructure.TIM_ICFilter = 0xf;
        TIM_ICInit(TIM9, &TIM_ICInitStructure);
       
        TIM_ITConfig(TIM9,TIM_IT_Update,ENABLE);
        TIM_ClearFlag(TIM9, TIM_FLAG_Update);
               
        TIM_SetCounter(TIM9, 32768);

        TIM_Cmd(TIM9, ENABLE);   //使能TIM9
}
int main(void)
{
        LED_Init();                                       
         delay_init(168);
         uart_init(115200);
        TIM9_Mode_Config();
        while(1)
        {
               
       
                Enc0Pos = TIM_GetCounter(TIM9);

               Enc0Pos /= 2;

                LED0 =!LED0;
                delay_ms (500);
                printf("Position = %d\n\r", Enc0Pos);
        }


}
打印的数据始终为零,这是怎么回事啊?求帮忙


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

使用道具 举报

31

主题

2183

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
14367
金钱
14367
注册时间
2018-8-3
在线时间
1155 小时
发表于 2019-7-8 18:55:14 | 显示全部楼层
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2019-3-11
在线时间
12 小时
 楼主| 发表于 2019-7-9 08:15:46 | 显示全部楼层
翼行园子 发表于 2019-7-8 18:55
参考下论坛的帖子:http://www.openedv.com/forum.php?mod=viewthread&tid=76163

没什么区别啊
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2019-12-16
在线时间
5 小时
发表于 2021-1-26 19:36:54 | 显示全部楼层
75416db054343733c1df8262b4508c2.png cfc65183125669282531de641378fa6.png
084b45d34fa60dcebecd48a22063260.png

STM32F4库函数中编码器模式可以配置TIM9,但是有的芯片TIM9不支持编码器功能,以参考手册为准。
跟程序配置没有关系,芯片没这功能......
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-28 21:30

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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