在使用SPI处理CR寄存器时,如何将C中的多个位设置为0? 我知道,为了设置个人比特,我会这样做:

SPI1->CR1 |= (1<<2); // to set bit 2 to 1
SPI1->CR1 &= ~(1<<7); // to set bit 7 to 0

(对于上下文)我正在为波特率设置一个预分频器,在我的例子中,预分频器是2,根据数据表分配给它的二进制值是000.如何将位3-5分配到000. 它会是:

SPI1->CR1 &= ~(1<<3);

在我跟踪的视频中,这些人使用的是:SPI1->CR1 |=(3<<3),但他使用的是011.他有一个不同的微控制器,因此不同. 谢谢你的帮忙!

推荐答案

您可以定义自己的(多位)位模式,而无需转换:

 #define BITS_543 0x38 // == 0b0...111000

(也可以在名称中按从左到右的顺序表示设置位)

要清除您询问的那些位,请执行以下操作:

 SPI1->CR1 &= ~BITS_543;

你 Select 的名字甚至可以更实用;例如"Baud_Rate_Trio"

试一试...

C++相关问答推荐

C限制限定符是否可以通过指针传递?

返回一个包含数组的 struct

为什么我一直收到分段错误?

Rust FFI--如何用给出返回引用的迭代器包装C风格的迭代器?

在C++中通过空指针隐式访问常量变量的值

如何在ASM中访问C struct 成员

在Rust和C之间使用ffi时如何通过 struct 中的[U8;1]成员传递指针

进程在写入管道时挂起

CC2538裸机项目编译但不起作用

用C++从外部ELF符号读取值

在C++中父进程和子进程中的TAILQ队列同步问题

变量的作用域是否在C中的循环未定义行为或实现定义行为的参数中初始化?

按长度对argv中的单词进行排序

GetText不适用于包含国际字符的帐户名称

为什么二进制文件的大小不会随着静态数据的大小而增加?

程序如何解释变量中的值

为什么我在我的代码中得到错误和退出代码-1073741819(0xC0000005),但如果我添加了一个不相关的打印语句,它仍然有效?

I';我试着从.txt文件中读取文本,并用c计算其中的单词数量

C中2个数字的加法 - 简单的人类方法

程序打印一些随机空行