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

Про TIM8 STM32F722

Здравствуйте, уважаемые коллеги, подскажите в чем может быть дело. Настраиваю TIM8 CH4 на выход через PC9, а на выходе сигнала нет. В отладчике KEIL проверил: периферия конфигурируется,  таймер стартует, счет идет, но на выходе порта - сигнала нет. Какую еще инициализацию нужно TIM8 для формирования простого миандра?

void MX_TIM8_Init(u32 Period)
{  htim8.Instance = TIM8;
  htim8.Init.Prescaler = 0;
  htim8.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim8.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;	
 HAL_TIM_Base_Init(&htim8):		//  RCC peripheral clock enabling  
TIM8->CR1 |= TIM_COUNTERMODE_UP;
TIM8->CR1 |= TIM_CLOCKDIVISION_DIV1;
TIM8->CCMR2 |= TIM_CCMR2_OC4M_0 | TIM_CCMR2_OC4M_1 | TIM_CCMR2_OC4M_2;
TIM8->PSC = 0;
TIM8->CCER |= TIM_CCER_CC4E;					
TIM8->ARR = Period;						
TIM8->CCR4 = Period / 2;	 
TIM8->SR = 0x0000;
 HAL_TIM_MspPostInit(&htim8);
TIM8->CR1 |= TIM_CR1_CEN;
} // MX_TIM8_Init(void)

void HAL_TIM_MspPostInit (void)
{    __HAL_RCC_GPIOC_CLK_ENABLE();
    GPIO_InitStruct.Pin = GPIO_PIN_9;			// PC9     ------> TIM8_CH4
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    GPIO_InitStruct.Alternate = GPIO_AF3_TIM8;
    HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);	
}  // HAL_TIM_MspPostInit (void)	

 

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


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

В 08.04.2024 в 23:22, Vladimir_T сказал:

Здравствуйте, уважаемые коллеги, подскажите в чем может быть дело.

А теперь сконфигурируйте с помощью CubeMX и сравните регистры двух версий программы.

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


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

2 minutes ago, HardEgor said:

А теперь сконфигурируйте с помощью CubeMX и сравните регистры двух версий программы.

C CubeMX также не работает. Думал, что комплементарность нужно настроить, но CubeMX тоже без нее обходится.

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


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

On 4/8/2024 at 7:22 PM, Vladimir_T said:

Здравствуйте, уважаемые коллеги, подскажите в чем может быть дело. Настраиваю TIM8 CH4 на выход через PC9, а на выходе сигнала нет. В отладчике KEIL проверил: периферия конфигурируется,  таймер стартует, счет идет, но на выходе порта - сигнала нет. Какую еще инициализацию нужно TIM8 для формирования простого миандра?

Каша какая-то. И HAL и регистры. Вы уж на чем-то одном остановитесь.
Во все тонкости приведенного вами кода не вникал, но явно не хватает настройки регистра BDTR, бит MOE.

On 4/8/2024 at 7:48 PM, Vladimir_T said:

C CubeMX также не работает. Думал, что комплементарность нужно настроить, но CubeMX тоже без нее обходится.

Доку надо читать. У СН4 нет комплементарного выхода.

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


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

10 hours ago, Vladimir_T said:

Здравствуйте, уважаемые коллеги, подскажите в чем может быть дело. Настраиваю TIM8 CH4 на выход через PC9, а на выходе сигнала нет. В отладчике KEIL проверил: периферия конфигурируется,  таймер стартует, счет идет, но на выходе порта - сигнала нет. Какую еще инициализацию нужно TIM8 для формирования простого миандра?

void MX_TIM8_Init(u32 Period)
{  htim8.Instance = TIM8;
  htim8.Init.Prescaler = 0;
  htim8.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim8.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;	
 HAL_TIM_Base_Init(&htim8):		//  RCC peripheral clock enabling  
TIM8->CR1 |= TIM_COUNTERMODE_UP;
TIM8->CR1 |= TIM_CLOCKDIVISION_DIV1;
TIM8->CCMR2 |= TIM_CCMR2_OC4M_0 | TIM_CCMR2_OC4M_1 | TIM_CCMR2_OC4M_2;
TIM8->PSC = 0;
TIM8->CCER |= TIM_CCER_CC4E;					
TIM8->ARR = Period;						
TIM8->CCR4 = Period / 2;	 
TIM8->SR = 0x0000;
 HAL_TIM_MspPostInit(&htim8);
TIM8->CR1 |= TIM_CR1_CEN;
} // MX_TIM8_Init(void)

void HAL_TIM_MspPostInit (void)
{    __HAL_RCC_GPIOC_CLK_ENABLE();
    GPIO_InitStruct.Pin = GPIO_PIN_9;			// PC9     ------> TIM8_CH4
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    GPIO_InitStruct.Alternate = GPIO_AF3_TIM8;
    HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);	
}  // HAL_TIM_MspPostInit (void)	

 

"Абрам Моисеевич, вы или трусы наденьте, или крестик снимите!"

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


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

13 hours ago, dimka76 said:

Каша какая-то. И HAL и регистры. Вы уж на чем-то одном остановитесь.
Во все тонкости приведенного вами кода не вникал, но явно не хватает настройки регистра BDTR, бит MOE.

Доку надо читать. У СН4 нет комплементарного выхода.

Благодарю за критику! Это только отладочный момент. Проект перетек из 4-го семейства на 7-е. На 4-м пользовался SPL. Для 7-го библиотеку SPL не нашел. Если есть, то пришлите ссылку. 

У TIM8 CH4 комплементарного выхода, потому регистр BDTR игнорировал, беспечность подвела.

	TIM8->BDTR |= TIM_BDTR_MOE;		// Main output enable. OC output are enabled if their respective enable bits are set

Теперь работает. 

 

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


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

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

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

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

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

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

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

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

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

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