Прошу не кидать в меня тапками за тупой вопрос, но я действительно кое-что не догоняю.
Я пытаюсь разбирать чужие коды и с удивлением обнаруживаю, что при работе с регистрами разные люди используют разный код, мне приходится "переводить" с одного языка (понимаю, что везде Си, но я не знаю, как корректно выразиться) на другой. Например, человек инициализирует I2C и пишет:
Код: Выделить всё
SET_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPBEN); //Запуск тактирование порта B
SET_BIT(RCC->APB2ENR, RCC_APB2ENR_AFIOEN); //Запуск тактирования альтернативных функций
SET_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C1EN); //Запуск тактирования I2C1
....
//Настройки ножек SDA и SCL
//PB7 SDA (I2C Data I/O) Alternate function open drain
MODIFY_REG(GPIOB->CRL, GPIO_CRL_CNF7_Msk, 0b11 << GPIO_CRL_CNF7_Pos); //Alternate function open drain
MODIFY_REG(GPIOB->CRL, GPIO_CRL_MODE7_Msk, 0b11 << GPIO_CRL_MODE7_Pos); //Maximum output speed 50 MHzКод: Выделить всё
tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C1EN);
//Disable acknowledge on Own Address2 match address
CLEAR_BIT(I2C1->OAR2, I2C_OAR2_ENDUAL);Код: Выделить всё
RCC->APB1ENR |= RCC_APB1ENR_I2C1EN;
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOBEN; // enable GPIOB
GPIOB->AFR[1] |= (4 << (4 * 0)); // PB8 - I2C1_SCL - for AF4
GPIOB->AFR[1] |= (4 << (4 * 1)); // PB9 - I2C1_SDA - for AF4
GPIOB->MODER &= ~(GPIO_MODER_MODER9 |GPIO_MODER_MODER8); // AF open drain mode, external pull-ups
GPIOB->MODER |= (GPIO_MODER_MODER9_1 | GPIO_MODER_MODER8_1);
GPIOB->OTYPER |=(GPIO_OTYPER_OT_9 |GPIO_OTYPER_OT_8);Как же соотносятся между собой эти команды?


