ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
29 марта
925993 Топик полностью
evgeniy1294 (07.06.2019 10:44, просмотров: 313) ответил Sl на Я наивно полагал, что на одно EXTI0 только одна ножка может быть заведена. Прямого запрета на несколько ножек на одно EXTI0в в документации не видел. Проверяли, реально работает от нескольких ног?
Там мультиплексор стоит. Ксения просто в доке не разобралась ещё, поэтому задаёт странные вопросы:  /** @brief Pin number list [_0:_15] */ enum class Pin { //! @cond Doxygen_Suppress _0 = 0, _1 = 1, _2 = 2, _3 = 3, _4 = 4, _5 = 5, _6 = 6, _7 = 7, _8 = 8, _9 = 9, _10 = 10, _11 = 11, _12 = 12, _13 = 13, _14 = 14, _15 = 15, //! @endcond }; struct Gpio { GPIO_TypeDef* const port; const Pin pin; bool inverted; Gpio(GPIO_TypeDef* port, Pin pin, bool inverted = false): port(port), pin(pin), inverted(inverted){} }; enum class Trigger { falling, rising, both, }; /** @brief Config EXTI trigger for GPIO @param [in] gpio gpio instance, @param [in] trigger rising, falling or both. */ void gpio::ConfigEXTI(Gpio& gpio, Trigger trig) { uint32_t p = static_cast<uint32_t>(gpio.pin); // 1 - Calc "port number" uint16_t port = (uint16_t)(((uint32_t)gpio.port - GPIOA_BASE)>>10); // 2 - Calc "group number" uint8_t grp = p >> 2; // 3 - Calc offset uint8_t offset = (p - (grp << 2)) << 2; // 4 - Connect EXTI to pin SYSCFG->EXTICR[grp] |= port<<offset; // 5 - Enable EXTI EXTI->IMR |= (1 << p); // 6 - Set trigger if ((trig == Trigger::falling)||(trig == Trigger::both)) EXTI->FTSR |= (1 << p); if ((trig == Trigger::rising)||(trig == Trigger::both)) EXTI->RTSR |= (1 << p); return; } Главное не забыть затактовать SYSCFG: RCC->APB2ENR |= RCC_APB2ENR_SYSCFGEN;