Alex_Golubev 0 13 апреля, 2021 Опубликовано 13 апреля, 2021 · Жалоба Бит URS тоже не дал результата (. Прерывание вызывается ложно в регистре sr бит TIM_SR_UIF установлен в '1'. Вот код : Скрытый текст TIM16->CR1 = TIM_CR1_OPM | TIM_CR1_URS; TIM16->DIER = TIM_DIER_UIE; TIM16->PSC = 11520 - 1; TIM16->ARR = 20; TIM16->CNT = 0; TIM16->CCR1 = 0; TIM16->RCR = 1 - 1; TIM16->SR = 0; TIM16->SR &= ~TIM_SR_UIF; //MODIFY_REG(TIM16->CCMR1,TIM_CCMR1_OC1M, 1 << TIM_CCMR1_OC1M_Pos); NVIC_SetPriority(TIM16_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(), 0, 0)); // включение прерывания таймера TIM16 NVIC_ClearPendingIRQ(TIM16_IRQn); // гарантированый сброс флга прирывания NVIC_EnableIRQ(TIM16_IRQn); TIM16->CR1 |= TIM_CR1_CEN; Не понимаю почему происходит установка бита 'TIM_SR_UIF'. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 42 13 апреля, 2021 Опубликовано 13 апреля, 2021 · Жалоба TIM16->SR = 0; Вот так лучше. Quote TIM16->CNT = 1; Вот так еще попробуйте проинициализировать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex_Golubev 0 13 апреля, 2021 Опубликовано 13 апреля, 2021 · Жалоба пробовал все равно ложное срабатывание. Скрытый текст TIM16->CR1 = TIM_CR1_OPM | TIM_CR1_URS; TIM16->DIER = TIM_DIER_UIE; TIM16->PSC = 11520 - 1; TIM16->ARR = 20; TIM16->CNT = 1; TIM16->CCR1 = 0; TIM16->RCR = 1 - 1; TIM16->SR = 0; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Plain 168 13 апреля, 2021 Опубликовано 13 апреля, 2021 · Жалоба ->CR1 = TIM_ ->DIER = TIM_ Это что? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex_Golubev 0 14 апреля, 2021 Опубликовано 14 апреля, 2021 · Жалоба Цитата Это что? В регистре CR1 установка битов OPS и URS Скрытый текст #define TIM_CR1_URS_Pos (2U) #define TIM_CR1_URS_Msk (0x1UL << TIM_CR1_URS_Pos) /*!< 0x00000004 */ #define TIM_CR1_URS TIM_CR1_URS_Msk /*!<Update request source */ #define TIM_CR1_OPM_Pos (3U) #define TIM_CR1_OPM_Msk (0x1UL << TIM_CR1_OPM_Pos) /*!< 0x00000008 */ #define TIM_CR1_OPM TIM_CR1_OPM_Msk В регистре DIER установка прерывания по перезагрузки. Скрытый текст #define TIM_DIER_UIE_Pos (0U) #define TIM_DIER_UIE_Msk (0x1UL << TIM_DIER_UIE_Pos) /*!< 0x00000001 */ #define TIM_DIER_UIE TIM_DIER_UIE_Msk /*!<Update interrupt enable */ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Plain 168 14 апреля, 2021 Опубликовано 14 апреля, 2021 · Жалоба 2 часа назад, Alex_Golubev сказал: установка битов А с соседними битами что? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex_Golubev 0 14 апреля, 2021 Опубликовано 14 апреля, 2021 (изменено) · Жалоба нули достаются. Мне подсказали что нужно делать вот так: Скрытый текст Цитата TIM16->EGR = TIM_EGR_UG; TIM16->SR; TIM16->SR = 0; Вроде помогло. Еще не до конца проверил. Но пока работает. Изменено 14 апреля, 2021 пользователем Alex_Golubev Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MasterElectric 0 22 апреля, 2021 Опубликовано 22 апреля, 2021 · Жалоба Это все потому что некоторые регистры буферизируются и их обновление идет при событии Update. TIM16->EGR = TIM_EGR_UG; как раз программно и делает этот Update. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться