@dobruybarmaley она просто инициализируется однократно, поэтому не функционирует, например так будет уже работать нормально:
static bool t = btn.isPress(); t = btn.isPress();
да вот что то картинка не загрузилась, в ожидании модерации висит
Какая картинка?
Всем привет. Нигде не могу найти как сделать включения канала от кнопки и выключение по сопротивлению например 1 кОм.
@autoelectric87 Включение какого канала?
Какая кнопка?
Информации мало, что бы понять что вы хотите.
Приветствую всех.
Мне нужно начать работать с мк STM32, конкретно с F303C6T6. На нём уже собран контроллер управления лабораторной установкой. На плате есть разъём IDC-20 male, остальные разъёмы для питания, измерений, связи. Есть также 2 изолированных канала RS485. Какой мне нужен программатор, чтобы прошивать эту плату и отлаживать?
@eduard_ivanov Доброго времени суток, в теории должны быть выведены сигналы SWCLK, SWDATA для ST-Link программатора (самый распространенный вариант).
Доброго времени суток!
Пытаюсь отойти от HAL в сторону CMSIS. Занялся таймерами и тут же возникли проблемы. Мне необходимо чтобы первый таймер считал раз в секунду и с этим проблем нет. Но вот для второго таймера задача посложнее. Он должен считать по сбросу первого таймера до 5 и зажигать светодиоды (плата STM32F3DISCOVERY). Вот тут видимо я что-то настроил неправильно и светодиоды просто горят. В отладчике вроде в прерывание второго таймера я попадаю, но точно не каждые 5 секунд как рассчитывал. Может кто помочь?
Мою настройку из программы привел ниже:
void TIM1_sets(void) // Настройка TIM1 { RCC -> APB2ENR |= RCC_APB2ENR_TIM1EN; // Разрешение тактирования от АРВ2 ??? TIM1->SMCR &= ~ TIM_SMCR_SMS; // биты SMS в 000 TIM1->PSC = 1999; // биты предделителя (PSC + 1) TIM1->ARR = 23999; // биты счетчика (ARR + 1) TIM1->DIER |= TIM_DIER_UIE; // разрешаем прерывание по переполнению в регистре таймера TIM1->CR2 |= 1<<5; // включаем TRGO UPDATE для использвания следующим счетчиком // TIM1->RCR |= 1; // количество повторений основного счетчика (RCR+1) до появления события NVIC_EnableIRQ(TIM1_BRK_TIM15_IRQn); // разрешение прерывания TIM1 в регистре прерываний NVIC_EnableIRQ(TIM1_UP_TIM16_IRQn); // разрешение прерывания TIM1 в регистре прерываний NVIC_SetPriority(TIM1_BRK_TIM15_IRQn, 1); // установка приоритета прерывания в регистре прерываний NVIC_SetPriority(TIM1_UP_TIM16_IRQn, 1); // установка приоритета прерывания в регистре прерываний } void TIM2_sets(void) // Настройка TIM2 { RCC->APB1ENR |= RCC_APB1ENR_TIM2EN; TIM2->SMCR |=7; // биты SMS в 0111 для настройки генерации в режиме подчиненного External Clock Mode 1 TIM2->ARR = 4; // биты счетчика (ARR + 1) до скольки вести счет +1 TIM2->DIER |= 1<<6; // разрешаем прерывание по переполнению в регистре таймера TIM2->CR2 |= 1<<5; // включаем TRGO UPDATE для использвания следующим счетчиком NVIC_EnableIRQ(TIM2_IRQn); // разрешение прерывания TIM2 в регистре прерываний NVIC_SetPriority(TIM2_IRQn, 1); // установка приоритета прерывания в регистре прерываний } void TIM1_UP_TIM16_IRQHandler(void) // Обработчик прерывания TIM1 { TIM1->SR &= ~ TIM_SR_UIF; } void TIM2_IRQHandler(void) // Обработчик прерывания TIM2 { GPIOE->ODR ^= 0xFF00; TIM2->SR &= ~ TIM_SR_UIF; } Далее в основной функции инициализирую, обнуляю счетчики и включаю тактирование TIM1_sets(); TIM2_sets(); TIM1 -> CNT = 0; TIM2 -> CNT = 0; TIM2 -> CR1 = TIM_CR1_CEN; TIM1 -> CR1 = TIM_CR1_CEN;
@jebo Доброго времени!
По описанию как будто TIM2 тут избыточен) Инкрементируем переменную по переполнению первого таймера - дошли до нужного значения - делаем действия.
@jebo Доброго времени!
По описанию как будто TIM2 тут избыточен) Инкрементируем переменную по переполнению первого таймера - дошли до нужного значения - делаем действия.
Для этой задачи второй таймер избыточен. Но я изучаю таймеры и возможность работы таймера от таймера - весьма интересная штука. В интернете есть и пример под HAL. Я пытался разобраться как там настройка работает, но к сожалению мозгов не хватает. Может вы сможете помочь с настройкой? Или хотя бы на что обратить внимание, какой-то конкретный аспект?