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