本帖最后由 alanvi 于 2016-5-17 14:32 编辑
诸位 我遇到个问题 想请教下。我想通过配置定时器TIM4 使用编码器接口模式1实现,用TIM4_CH1作为计数方向控制 上升/下降,TIM4_CH2作为计数信号。
但是实际运行后发现,CH1的方向控制没问题 DIR 位会更随改变。但是CH2的计数始终没反应,请帮忙看下我的TIM4的编码器接口模式1是否配置错误。
或者请给予我一份寄存器操作的实例 谢谢。查了很多地方 几乎没看到模式1/2的实例。
同一个芯片上的TIM2 配置编码器模式3 配置且运行成功 和下面程序的差异主要就一个SMS = 3.
我开始怀疑。我是不是理解错这个模式的功能了。。。。 哪位能帮我说明下
//时钟使能
RCC->APB1RSTR |= RCC_APB1RSTR_TIM4RST; //复位TIM4时钟
RCC->APB1RSTR &= ~RCC_APB1RSTR_TIM4RST;
RCC->APB1ENR |= RCC_APB1ENR_TIM4EN; //使能TIM4时钟
RCC->AHBENR |= RCC_AHBENR_GPIOAEN; //使能PA时钟
WAITE_RCC(); //等待时钟稳定
//PA11 CH1 PA12 CH2 配置
GPIOA->OTYPER &= ~(GPIO_OTYPER_OT_11 | GPIO_OTYPER_OT_12);
GPIOA->OTYPER |= (0UL << 11)| //PA11 推挽输出
(0UL << 12); //PA12 推挽输出
GPIOA->OSPEEDR &= ~(GPIO_OSPEEDER_OSPEEDR11 | GPIO_OSPEEDER_OSPEEDR12);
GPIOA->OSPEEDR |= (1UL << 22)| //PA11 中等速度输出
(1UL << 24); //PA12 中等速度输出
GPIOA->PUPDR &= ~(GPIO_PUPDR_PUPDR11 | GPIO_PUPDR_PUPDR12);
GPIOA->PUPDR |= (1UL << 22)| //PA11 上拉输入
(1UL << 24); //PA12 上拉输入
GPIOA->MODER &= ~(GPIO_MODER_MODER11 | GPIO_MODER_MODER12);
GPIOA->MODER |= (2UL << 22)| //PA11 AF模式
(2UL << 24); //PA12 AF模式
GPIOA->AFR[1] &= ~(GPIO_AFRH_AFRH3 |GPIO_AFRH_AFRH4);
GPIOA->AFR[1] |= (10UL<<12) | //PA11 -> TIM4_CH1
(10UL<<16); //PA12 -> TIM4_CH2
//计数模式配置
TIM4->PSC = 0;
TIM4->ARR = 2000;
TIM4->CR1 &= ~TIM_CR1_CKD;
TIM4->CR1 |= 0 << 8; //未分频
TIM4->CR1 &= ~TIM_CR1_CMS;//边沿对齐模式
//编码器接口模式配置
TIM4->CCMR1 &= ~(TIM_CCMR1_CC1S | TIM_CCMR1_CC2S);
TIM4->CCMR1 |= (1UL << 0)| //IC1 mapped ON TI1
(1UL << 8); //IC2 mapped ON TI2
TIM4->CCER &= ~(TIM_CCER_CC1P | TIM_CCER_CC2P); // IC1FP1 = TI1 IC2FP2 = TI2
TIM4->SMCR &= ~TIM_SMCR_SMS;
TIM4->SMCR |= 1; //sms = 0001 TI1FP1做方向 TI2FP2做计数来源
TIM4->CR1 |= TIM_CR1_CEN; //启动定时器
请问 问题出在哪里
|