如题,本人遇到困境,经测试,只能用tim3计数器模式读取欧姆龙编码器,而其他tim一照着这个使用就傻逼了(下附tim3寄存器配置代码)
RCC->APB1ENR|=1<<1;
RCC->APB2ENR|=1<<0;
RCC->APB2ENR|=1<<2;
GPIOA->CRL&=0X00FFFFFF;
GPIOA->CRL|=0X44000000;
TIM3->ARR=arr;
TIM3->PSC=psc;
TIM3->CCMR1 |= 1<<0;
TIM3->CCMR1 |= 1<<8;
TIM3->CCER |= 0<<1;
TIM3->CCER |= 0<<5;
TIM3->SMCR |= 3<<0;
TIM3->CR1 |= 1<<0;
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
//编码器初始化函数
void encoder_Init(void)
{
RCC->AHB1ENR|=1<<0; //p135 使能PORTA时钟
RCC->AHB1ENR|=1<<1; //p135 使能PORTB时钟
//RCC->APB2ENR|=1<<0; //p146 AFIOEN辅助功能IO时钟使能
//RCC->APB2ENR|=1<<4; //p70 使能PORTC 时钟
RCC->APB1ENR|=1<<1; //p139 定时器3时钟使能
RCC->APB1ENR|=1<<2; //p138 定时器4时钟使能
GPIO_Set(GPIOA,PIN6|PIN7,GPIO_MODE_AF,GPIO_OTYPE_OD,GPIO_SPEED_100M,GPIO_PUPD_PU);//PA6.PA7输入
//GPIOA->CRL&=0X00FFFFff;//PA6.PA7输入
//GPIOA->CRL|=0X44000000;//浮空输入
GPIO_Set(GPIOB,PIN6|PIN7,GPIO_MODE_AF,GPIO_OTYPE_OD,GPIO_SPEED_100M,GPIO_PUPD_PU);//PB6.PB7输入
//GPIOB->CRL&=0X00FFFFff;//PB6.PB7输入
//GPIOB->CRL|=0X44000000;//浮空输入
GPIO_AF_Set(GPIOA,6,2); //PA6,AF2
GPIO_AF_Set(GPIOA,7,2); //PA7,AF2
//AFIO->MAPR&=0XFFFFF0Ff; //p122 定时器3的重映像 CH1/PA6,CH2/PA7
//AFIO->MAPR|=0X00000000;
GPIO_AF_Set(GPIOB,6,2); //PB6,AF2
GPIO_AF_Set(GPIOB,7,2); //PB7,AF2
//AFIO->MAPR&=0XFFFF0fFf; //p122 定时器4的重映像 CH1/PA6,CH2/PA7
//AFIO->MAPR|=0X00000000;
//TIM3->ARR&=0XFFFFFfF0; //自动重装载寄存器
//TIM3->ARR|=0X7fff; //P293 自动重装载寄存器
//TIM4->ARR|=0X7fff; //P293 自动重装载寄存器
TIM3->CCMR1|=1<<0; //CC1S=01捕获/比较模式
TIM3->CCMR1|=1<<8; //CC2S=01
TIM4->CCMR1|=1<<0; //CC1S=01捕获/比较模式
TIM4->CCMR1|=1<<8; //CC2S=01
TIM3->CCER|=0<<1; //CC1P=0 捕获/比较使能
TIM3->CCER|=0<<5; //CC2P=0
//TIM3->CCER&=0XFFFFFfF0; //CC1P和CC2P位
//TIM3->CCER|=0X00000001; //P292 捕获使能
TIM4->CCER|=0<<1; //CC1P=0 捕获/比较使能
TIM4->CCER|=0<<5; //CC2P=0
TIM3->SMCR|=3<<0; //SMS=011
//TIM3->SMCR|=6<<4; //TS=110
TIM4->SMCR|=3<<0; //
//RCC->APB1ENR|=1<<1; //p71 1-TIM3时钟使能 3-TIM5时钟使能
TIM3->CR1|=1<<0;; //CEN使能
//TIM5->CR1|=0x01; //p282 使能定时器3
TIM4->CR1|=1<<0;; //CEN使能
}
一周热门 更多>