STM32: генерирование частот порядка единиц МГц таймером

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Аватара пользователя
KT315B
Сверлит текстолит когтями
Сообщения: 1269
Зарегистрирован: Пт июл 21, 2006 15:05:19
Откуда: плод воображения
Контактная информация:

STM32: генерирование частот порядка единиц МГц таймером

Сообщение KT315B »

Всем привет! Поясните не совсем понимающему, реально ли осуществить сабж? Подозреваю, что реально, посредством использование режима таймера Output Compare. Но вот на деле нифига не получается. Инициализационный код генерю Кубом, а именно вот так:
Спойлер

Код: Выделить всё

static void MX_TIM2_Init(void)
{

  TIM_ClockConfigTypeDef sClockSourceConfig;
  TIM_MasterConfigTypeDef sMasterConfig;
  TIM_OC_InitTypeDef sConfigOC;

  htim2.Instance = TIM2;
  htim2.Init.Prescaler = 0;
  htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim2.Init.Period = 2;
  htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
  {
    Error_Handler();
  }

  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
  {
    Error_Handler();
  }

  if (HAL_TIM_OC_Init(&htim2) != HAL_OK)
  {
    Error_Handler();
  }

  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
  {
    Error_Handler();
  }

  sConfigOC.OCMode = TIM_OCMODE_TOGGLE;
  sConfigOC.Pulse = 100;
  sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
  sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  if (HAL_TIM_OC_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
  {
    Error_Handler();
  }

  HAL_TIM_MspPostInit(&htim2);

}
Потом из main() запускаю таймер: HAL_TIM_OC_Start(&htim2,1);

И... ничего не происходит. Выходная нога, будто в воздухе висит. Что я делаю не так?
R2AIV 73!
Реклама
BorisSPB
Встал на лапы
Сообщения: 145
Зарегистрирован: Ср фев 01, 2012 10:55:53

Re: STM32: генерирование частот порядка единиц МГц таймером

Сообщение BorisSPB »

Период таймера 2, а значение канала 100 - вот он и не срабатывает.
Реклама
Аватара пользователя
KT315B
Сверлит текстолит когтями
Сообщения: 1269
Зарегистрирован: Пт июл 21, 2006 15:05:19
Откуда: плод воображения
Контактная информация:

Re: STM32: генерирование частот порядка единиц МГц таймером

Сообщение KT315B »

Нашел этот косяк - исправил, все равно тишина.
R2AIV 73!
Serg1987
Встал на лапы
Сообщения: 129
Зарегистрирован: Пн июн 13, 2016 10:41:52

Re: STM32: генерирование частот порядка единиц МГц таймером

Сообщение Serg1987 »

А таймер сам стартанули хоть??
Функция халовская такая есть - HAL_TIM_Base_Start(&htim) . По умолчанию Куб таймер не стартует. Одной функции TIM_Init недостаточно. Вы его сами должны стартануть вот этой функцией. И он пойдет тикать.

И советую уходить от Куба, и чем скорее, тем лучше. Он пригоден только для того, чтобы что-то подсмотреть, чтобы легче разобраться.
А так.. не советую. Получите тормоза с кодом, нулевую оптимизацию со всеми вытекающими.

И если стоит задача генерации импульсов с частотой единицы мегагерц, то можно попробовать использовать прерывание таймера, в котором при переполнении просто будет инвертироваться нужная нога. В обработчике прерывания достаточно добавить
(GPIOx->ODR ^= GPIO_ODR_ODRx;)
Но таким способом на практике больше 5МГц на бюджетных контроллерах получить проблематично. Это ерунда, что пишут, что частота GPIO может быть 50Мгц. Чушь полнейшая. Проверено не раз. Больше 5МГц по таймеру.. увы.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
KT315B
Сверлит текстолит когтями
Сообщения: 1269
Зарегистрирован: Пт июл 21, 2006 15:05:19
Откуда: плод воображения
Контактная информация:

Re: STM32: генерирование частот порядка единиц МГц таймером

Сообщение KT315B »

Да все, разобрался уже, спасибо! Таймер стартовал. Проблема была в некорректных настройках PLL, которые почему то Куб предложил - так что с этим надо быть осторожнее. Все уже давно работает и еще как )
R2AIV 73!
Реклама
Ответить

Вернуться в «ARM»