ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
27 апреля
811020 Топик полностью
Evgeniy1294 (21.01.2018 20:50 - 20:53, просмотров: 112) ответил Скрипач на А не мелковата абстракция?
Я так и делаю. Даже проще:  void COMMON::initCommon(); void COMMON::initCommon() { InitUSART(); // Ещё что-нибудь } void COMMON::init_usart() { RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN | RCC_AHB1ENR_GPIOGEN; // 1 - RS-422 "for command" // 1.1 - Тактуем блок RCC->APB2ENR |= RCC_APB2ENR_USART1EN; // 1.2 - Настраиваем ноги GPIO::pincfg_alternate(GPIOA, GPIO::PIN::PIN_8, GPIO::AF::USART_1, GPIO::OTYPE::PP, GPIO::OSPEED::HIGH, GPIO::PULL::FLOATING); GPIO::pincfg_alternate(GPIOA, GPIO::PIN::PIN_9, GPIO::AF::USART_1, GPIO::OTYPE::PP, GPIO::OSPEED::HIGH, GPIO::PULL::FLOATING); GPIO::pincfg_output (GPIOG, GPIO::PIN::PIN_8, GPIO::OTYPE::PP, GPIO::OSPEED::LOW, GPIO::PULL::FLOATING); // 1.3 - Настраиваем USART USART::init(USART1, 19200, USART::PARITY::NONE, USART::STOPBIT::STB_1); // 2 - RS-422 "for servo" // 2.1 - Тактуем блок RCC->APB2ENR |= RCC_APB2ENR_USART6EN; // 2.2 - Настраиваем ноги GPIO::pincfg_alternate(GPIOG, GPIO::PIN::PIN_9, GPIO::AF::USART_6, GPIO::OTYPE::PP, GPIO::OSPEED::HIGH, GPIO::PULL::FLOATING); GPIO::pincfg_alternate(GPIOG, GPIO::PIN::PIN_14, GPIO::AF::USART_6, GPIO::OTYPE::PP, GPIO::OSPEED::HIGH, GPIO::PULL::FLOATING); GPIO::pincfg_output (GPIOG, GPIO::PIN::PIN_7, GPIO::OTYPE::PP, GPIO::OSPEED::LOW, GPIO::PULL::FLOATING); // 2.3 - Настраиваем USART USART::init(USART6, 19200, USART::PARITY::NONE, USART::STOPBIT::STB_1); return; } Выглядит страшненько, но удобно. Работает быстро. Конечно, медленнее, чем записать нужную комбинацию бит в регистр. Подобные функции выполняются, как правило, один раз на этапе инициализации МК и на скорость работы не влияют. В критичных местах, например в прерываниях, я нужные комбинации пишу напрямую в регистры.