如果这个问题已经得到解答,请原谅我,但我无法在此页面或更广泛的 Internet 上找到答案。
我是一位经验丰富的开发人员,对低级编程有相当的了解,但对嵌入式开发相对较新。我一直在使用 ST-NUCLEO144 板自学嵌入式系统开发,该板具有 STM32F746ZG MCU。对我来说似乎不明显的一个问题是,为什么寄存器中逻辑相关的位字段可能位于不同的位置。
一个例子是USART_CR1
STM32746ZG 上的寄存器。和位字段共同控制 USART TX/RX 中的字长M0
,M1
组合的 2 位值0b00
指定 8 位,0b01
指定 9 位等。这一切都非常简单,除了M0
位 12 和M1
位28……这是为什么呢?
这是出于遗留设计原因,例如将新功能插入到先前保留的空间中吗?是因为与芯片设计相关的原因,我没有考虑,还是我没有看到更大的目的?
显然,用位掩码克服这一点非常简单,但我只是好奇。