大学生
最后登录1970-1-1
在线时间 小时
注册时间2016-5-16
|
用定时器读取编码器数值,TIM4可以正常读,TIM9却一直是0.
不知是什么问题?难道是硬件电路有什么冲突?
硬件电路:
PE5 -- LTDC_G0 PE6 -- LTDC_G1
还有
E5 SAI1_SCK_A
E6 SAI1_SD_A | 引脚都没有被用,为什么定时器不能用呢?
定时器 :TIM9 捕获通道:通道1 -- PE5 通道2 -- PE6 .引脚的上拉下拉都配置过啦,还是不行!
同样高级定时器8可以用, 定时器 TIM12 捕获通道:Channel1 -- PB14;Channel2 -- PB15 也不能用
大神来指点一下啊。迷惑死我啦
/**************************************************************************
函数功能:定时器编码器模式
定时器 : TIM4
捕获通道:通道1 -- PB6
通道2 -- PB7
**************************************************************************/
static void Encoder_Init_TIM4(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_ICInitTypeDef TIM_ICInitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE); //TIM4时钟使能
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE); //使能PORTA时钟
GPIO_PinAFConfig(GPIOB,GPIO_PinSource6,GPIO_AF_TIM4); //定时器复用引脚
GPIO_PinAFConfig(GPIOB,GPIO_PinSource7,GPIO_AF_TIM4);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7; //端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //浮空输入
GPIO_Init(GPIOB, &GPIO_InitStructure);
TIM_DeInit(TIM4); //重新将Timer寄存器设置为缺省值
TIM_TimeBaseStructInit(&TIM_TimeBaseStructure); //把TIM_TimeBaseInitStruct 中的每一个参数按缺省值填入
TIM_TimeBaseStructure.TIM_Prescaler = 0x0; // 不分频
TIM_TimeBaseStructure.TIM_Period =0xFFFF; //设定计数器自动重装值
TIM_TimeBaseStructure.TIM_ClockDivision =TIM_CKD_DIV1;//选择时钟分频:不分频
TIM_TimeBaseStructure.TIM_CounterMode =TIM_CounterMode_Up; //向上计数模式(当配置为中央对齐模式或者编码器模式时,此位只读
TIM_TimeBaseInit(TIM4,&TIM_TimeBaseStructure);
TIM_EncoderInterfaceConfig(TIM4,TIM_EncoderMode_TI12,TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);//TI1和TI2的输入均在上升沿有效
//选择模式 :两相计数(速度和方向)
TIM_ICStructInit(&TIM_ICInitStructure);
TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; //不分频
TIM_ICInitStructure.TIM_ICFilter = 10; //0011 对应8个事件输出一个跳变
TIM_ICInit(TIM4,&TIM_ICInitStructure);
TIM_SetCounter(TIM4,0); //设置计数器寄存器初始值为0
TIM_Cmd(TIM4, ENABLE);
}
/**************************************************************************
函数功能:定时器编码器模式
定时器 :TIM9
捕获通道:通道1 -- PE5
通道2 -- PE6
**************************************************************************/
static void Encoder_Init_TIM9(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_ICInitTypeDef TIM_ICInitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
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);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_6; //端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //浮空输入
GPIO_Init(GPIOE, &GPIO_InitStructure);
TIM_DeInit(TIM9);
TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
TIM_TimeBaseStructure.TIM_Prescaler = 0; // 不分频
TIM_TimeBaseStructure.TIM_Period =0xFFFF;
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_Rising, TIM_ICPolarity_Rising);//TI1和TI2的输入均在上升沿有效
TIM_ICStructInit(&TIM_ICInitStructure);
TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
TIM_ICInitStructure.TIM_ICFilter = 10; //0011 对应8个事件输出一个跳变
TIM_ICInit(TIM9,&TIM_ICInitStructure);
TIM_SetCounter(TIM9,0);
TIM_Cmd(TIM9, ENABLE);
}
|
|