初级会员

- 积分
- 73
- 金钱
- 73
- 注册时间
- 2013-11-27
- 在线时间
- 0 小时
|
5金钱
void TIM5_Cap_Init(u16 arr,u16 psc)
{
RCC->APB1ENR|=1<<3;
RCC->APB2ENR|=1<<2;
GPIOA->CRL&=0XFFFFFFF0;
GPIOA->CRL|=0X00000008;
GPIOA->ODR|=0<<0;
TIM5->ARR=arr; //设定计数器自动重装值
TIM5-> SC=psc; //预分频器
TIM5->CCMR1|=1<<0; //CC1S=01 选择输入端 IC1映射到TI1上
TIM5->CCMR1|=0<<4; //IC1F=0000 配置输入滤波器 不滤波
TIM5->CCMR1|=0<<10; //IC2PS=00 配置输入分频,不分频
TIM5->CCER|=0<<1; //CC1P=0 上升沿捕获
TIM5->CCER|=1<<0; //CC1E=1 允许捕获计数器的值到捕获寄存器中
TIM5->DIER|=1<<1; //允许捕获中断
TIM5->DIER|=1<<0; //允许更新中断
TIM5->CR1|=0x01; //使能定时器2
MY_NVIC_Init(2,0,TIM5_IRQChannel,2);//抢占2,子优先级0,组2
}
在上面的函数中,对于TIM5->CCMR1函数的赋值有点不懂,或运算“|”与0的组合能改变寄存器的值吗?TIM5->CCMR1|=0<<4;计算结果不是应该维持原值吗?怎么能使IC1F变为0000啊。另一方面,TIM5->CCMR1|=0<<10;这条语句为什么给IC2PSC赋值呢,不是应该给IC1PSC赋值嘛。求指导 |
最佳答案
查看完整内容[请看2#楼]
|=0仅仅起提示作用而已,告诉你第几位是代表什么意思,实际上,这类语句是可以去掉的,但是你看代码来说,当然希望越详细越好了。
至于IC2PSC,完全是备注失误,是个错误的备注而已,一切以代码为准。
有时候备注不一定准确。。。(代码经常改来改去,注释难免忘了改了。。。)
|