Простите, если на этот вопрос уже был дан ответ, но я не смог найти ответ ни на этой странице, ни в более широком Интернете.
Я опытный разработчик с приличными знаниями в области низкоуровневого программирования, но относительно новым для встраиваемой разработки. Я учил себя разработке встраиваемых систем с использованием платы ST-NUCLEO144, которая оснащена микроконтроллером STM32F746ZG. Один вопрос, который кажется мне неочевидным, заключается в том, почему логически связанные битовые поля в регистре могут находиться в разных местах.
Одним из примеров является USART_CR1регистр на STM32746ZG. Эти M0и M1битовые поля вместе контролируют длину слова в USART TX / RX, комбинированный 2-битовое значение 0b00специфицирует 8-бит, 0b01указывает 9-бит и т.д. Это все довольно просто, за исключением того, что M0находится на 12 бита и M1находится на бит 28 ... почему это?
Это связано с устаревшим дизайном, например, новая функция была вставлена в ранее зарезервированное пространство? Я не рассматриваю это по причинам, связанным с дизайном чипа, или я не вижу в этом более важной цели?
Очевидно, что это довольно просто преодолеть с помощью маскировки битов, но мне просто любопытно.

