求助tim5->ccer &= 0<<5和tim5->ccer |= ~(1<<5)有什么区别

2019-07-21 01:01发布

大哥们,我在写电容输入捕获的时候,沿上升沿捕获,需要把TIM5->CCER的第五位写0。用tim5->ccer &= 0<<5这样子跑不出来,换成tim5->ccer |= ~(1<<5)是可以的,
void capa_init(u16 arr,u16 psc)

{
//浮空输入,用于输入捕获
RCC->APB1ENR |=1<<3;//使能tim5时钟
RCC->APB2ENR |= 1<<2;
TIM5->ARR = arr;
TIM5->PSC =psc;
TIM5->CCMR1 &= 0x00ff;
TIM5->CCMR1 |= 0x0100;
// TIM5->CCMR1|=1<<8;  //CC2S=01  选择输入端 IC2 映射到 TI2 上   
// TIM5->CCMR1|=0<<12;  //IC2F=0011 配置输入滤波器 8 个定时器时钟周期滤波   
// TIM5->CCMR1|=0<<10;  //IC2PS=00  配置输入分频,不分频

TIM5->CCER |= 1<<4;
TIM5->CCER &= ~(1<<5);
// TIM5->CCER |= 0<<5;

GPIOA->CRL &= 0xffffff0f;
GPIOA->CRL |= 0x00000040;
TIM5->CR1 |= 0x01;
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
程功之道
1楼-- · 2019-07-21 01:37
本帖最后由 程功之道 于 2019-5-17 09:27 编辑

tim5->ccer &= 0<<5  是把ccer寄存器所有的值都清0啦
tim5->ccer |= ~(1<<5) 这个是1左移5次,寄存器的第5bit为1  其他的bit位为0  那么就是00000020  再取反就是ffffffdf  然后寄存器再或啦
想变强的大斗师
2楼-- · 2019-07-21 02:33
 精彩回答 2  元偷偷看……
edmund1234
3楼-- · 2019-07-21 07:44
tim5->ccer &= 0<<5      ==                tim5->ccer &= 0            ==      0
你从哪儿看到tim5->ccer &= 0<<5 ?
正点原子
4楼-- · 2019-07-21 09:41
仿真看看两种写法导致的ccer值是多少,你就知道为什么了
想变强的大斗师
5楼-- · 2019-07-21 11:50
edmund1234 发表于 2019-5-16 00:09
tim5->ccer &= 0ccer &= 0

我自己在写led实验的时候尝试出来的
想变强的大斗师
6楼-- · 2019-07-21 13:11
正点原子 发表于 2019-5-16 02:11
仿真看看两种写法导致的ccer值是多少,你就知道为什么了

好的,谢谢原子哥。我去试试看

一周热门 更多>