新手上路
- 积分
- 30
- 金钱
- 30
- 注册时间
- 2015-4-8
- 在线时间
- 11 小时
|

楼主 |
发表于 2019-11-22 01:01:15
|
显示全部楼层
自己解决了,贴编码器设置代码
void TIM3_EncoderConfig(void){
// 通道GPIO初始化
// 初始化外设时钟
RCC_AHB1PeriphClockCmd(ENCODER3_GPIO_CLK, ENABLE);
// GPIO初始化结构体
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_StructInit(&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_Pin = ENCODER3_PIN1 | ENCODER3_PIN2;
GPIO_Init(ENCODER3_GPIO_PORT, &GPIO_InitStructure);
// 连接到复用
GPIO_PinAFConfig(ENCODER3_GPIO_PORT, ENCODER3_PINSOURCE1, ENCODER3_ICPWM_AF);
GPIO_PinAFConfig(ENCODER3_GPIO_PORT, ENCODER3_PINSOURCE2, ENCODER3_ICPWM_AF);
// 配置时基
TIM_TimeBaseInitTypeDef TIM3_TimeBaseStructure;
TIM_TimeBaseStructInit(&TIM3_TimeBaseStructure);
RCC_APB1PeriphClockCmd(ENCODER3_TIM3_CLK, ENABLE);
// 180M 90 x 2 溢出时间 = (ARR+1)(PSC+1)/TCLK, 180MHz/180=1MHz, F = TIM_CLK/{(ARR+A)*(PSC+1)}
TIM3_TimeBaseStructure.TIM_Prescaler = 0;
TIM3_TimeBaseStructure.TIM_Period = 0xFFFFFFFF;
TIM3_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM3_TimeBaseStructure.TIM_RepetitionCounter = 0x0;
TIM3_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseInit(ENCODER3_TIM3, &TIM3_TimeBaseStructure);
// 配置编码器
// A
TIM_ICInitTypeDef TIM3_IC1InitStructure;
TIM_ICStructInit(&TIM3_IC1InitStructure);
TIM3_IC1InitStructure.TIM_Channel = ENCODER3_IC1_CHANNEL; // 设置捕获通道
TIM3_IC1InitStructure.TIM_ICFilter = 0x0; // 不滤波
// TIM3_IC1InitStructure.TIM_ICPolarity = TIM_ICPolarity_BothEdge; // 这里其实由TIM_EncoderInterfaceConfig决定的,是否配置都不影响
TIM3_IC1InitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
TIM3_IC1InitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
TIM_ICInit(ENCODER3_TIM3, &TIM3_IC1InitStructure);
TIM_EncoderInterfaceConfig(ENCODER3_TIM3, TIM_EncoderMode_TI1, TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);
// 使能自动重装载的预装载寄存器允许位,控制ARR值改变后是否直接更新,还是到下一个周期开始更新
TIM_ARRPreloadConfig(ENCODER3_TIM3, ENABLE); // DISABLE
// 重置计数器
TIM_SetCounter(ENCODER3_TIM3, 0);
// 使能定时器
TIM_Cmd(ENCODER3_TIM3, ENABLE);
} |
|