Перейти к содержанию
    

Не обновляется регистр CNT

Добрый день.

Хочу занести свое значение в регистр CNT:

	TIM2 	->	CNT 	=	0x112233;
	TIM2 	->	ARR 	=	0x334455;
	TIM2	->	EGR 	|= 	TIM_EGR_UG; 

С ARR проблем никаких нет, он обновляется  и значение остается тем, которое я задал.

CNT по началу принимает заданное значение, но буквально через пару тактов после TIM2 -> EGR |= IM_EGR_UG;  сбрасывается опять в 0 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Считываю по UART значение.  Таймер на момент считывания значения CNT, даже не запущен. 

После запуска, считать начинает с 0.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 minutes ago, Nosaer said:

Считываю по UART значение.  Таймер на момент считывания значения CNT, даже не запущен. 

 

Приведите всю инициализацию таймера.

В том числе тактирование самого таймера (через RCC).

 

Не лишним будет указать семейство контроллеров (вангую, что речь идет о неком STM32).

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

// Изначальная инициализация:
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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Честно говоря, не очень хочется разбираться в подобной смеси хала и прямого обращения к регистрам, эту лучше доверить автору такого кода :)

Могу посоветовать смотреть состояния регистров таймера, сверяя их с даташитом,

Для этого есть смысл включить отладочный режим для TIM2 в DBGMCU, чтобы спокойно ходить по инициализации включенного и даже работающего таймера под отладчиком по шагам.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На данном этапе мне удобнее производить всю инициализацию на HAL.

Постепенно осваиваю CMSIS, т.к. некоторые функции от HAL выполняются очень долго и то что освоил пробую писать на CMSIS. Поэтому пока такая мусорка))

Штатными функциями HAL принудительно изменить значение регистра CNT тоже не получилось. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Nosaer, согласно документации, запись TIM2->EGR = TIM_EGR_UG приводит к сбросу счетчика таймера, если он настроен на режим счета "вверх" или режим "выровненный по центру", иначе его значение инициализируется величиной из регистра ARR.

Изменено пользователем ivan24190

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...