Nosaer 0 27 декабря, 2018 Опубликовано 27 декабря, 2018 · Жалоба Добрый день. Хочу занести свое значение в регистр CNT: TIM2 -> CNT = 0x112233; TIM2 -> ARR = 0x334455; TIM2 -> EGR |= TIM_EGR_UG; С ARR проблем никаких нет, он обновляется и значение остается тем, которое я задал. CNT по началу принимает заданное значение, но буквально через пару тактов после TIM2 -> EGR |= IM_EGR_UG; сбрасывается опять в 0 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 17 27 декабря, 2018 Опубликовано 27 декабря, 2018 · Жалоба Каким образом проверяете, что прошло всего несколько тактов, а не больше? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nosaer 0 27 декабря, 2018 Опубликовано 27 декабря, 2018 · Жалоба Считываю по UART значение. Таймер на момент считывания значения CNT, даже не запущен. После запуска, считать начинает с 0. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 17 27 декабря, 2018 Опубликовано 27 декабря, 2018 · Жалоба 4 minutes ago, Nosaer said: Считываю по UART значение. Таймер на момент считывания значения CNT, даже не запущен. Приведите всю инициализацию таймера. В том числе тактирование самого таймера (через RCC). Не лишним будет указать семейство контроллеров (вангую, что речь идет о неком STM32). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nosaer 0 27 декабря, 2018 Опубликовано 27 декабря, 2018 · Жалоба // Изначальная инициализация: static void MX_TIM2_Init(void) { TIM_ClockConfigTypeDef sClockSourceConfig = {0}; TIM_MasterConfigTypeDef sMasterConfig = {0}; htim2.Instance = TIM2; htim2.Init.Prescaler = 24999; htim2.Init.CounterMode = TIM_COUNTERMODE_UP; htim2.Init.Period = 68399999; htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; HAL_TIM_Base_Init(&htim2); sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig); sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig); } // Перезапуск с другими условиями RCC -> APB1ENR |= RCC_APB1ENR_TIM2EN; TIM2 -> CR1 |= TIM_CR1_URS; TIM2 -> CNT = 0x112233; TIM2 -> ARR = 0x334455; TIM2 -> EGR |= TIM_EGR_UG; TIM2 -> SR &= ~TIM_SR_UIF; TIM2 -> DIER |= TIM_DIER_UIE; NVIC_EnableIRQ(TIM2_IRQn); TIM2 -> CR1 |= TIM_CR1_CEN; МК STM32F4 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 17 27 декабря, 2018 Опубликовано 27 декабря, 2018 · Жалоба Честно говоря, не очень хочется разбираться в подобной смеси хала и прямого обращения к регистрам, эту лучше доверить автору такого кода :) Могу посоветовать смотреть состояния регистров таймера, сверяя их с даташитом, Для этого есть смысл включить отладочный режим для TIM2 в DBGMCU, чтобы спокойно ходить по инициализации включенного и даже работающего таймера под отладчиком по шагам. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nosaer 0 27 декабря, 2018 Опубликовано 27 декабря, 2018 · Жалоба На данном этапе мне удобнее производить всю инициализацию на HAL. Постепенно осваиваю CMSIS, т.к. некоторые функции от HAL выполняются очень долго и то что освоил пробую писать на CMSIS. Поэтому пока такая мусорка)) Штатными функциями HAL принудительно изменить значение регистра CNT тоже не получилось. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ivan24190 0 27 декабря, 2018 Опубликовано 27 декабря, 2018 (изменено) · Жалоба Nosaer, согласно документации, запись TIM2->EGR = TIM_EGR_UG приводит к сбросу счетчика таймера, если он настроен на режим счета "вверх" или режим "выровненный по центру", иначе его значение инициализируется величиной из регистра ARR. Изменено 27 декабря, 2018 пользователем ivan24190 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nosaer 0 27 декабря, 2018 Опубликовано 27 декабря, 2018 · Жалоба ivan24190, Большое спасибо, помогло. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться