Форум РадиоКот https://radiokot.ru/forum/ |
|
STM32: генерирование частот порядка единиц МГц таймером https://radiokot.ru/forum/viewtopic.php?f=59&t=143210 |
Страница 1 из 1 |
Автор: | KT315B [ Ср мар 15, 2017 22:44:34 ] |
Заголовок сообщения: | STM32: генерирование частот порядка единиц МГц таймером |
Всем привет! Поясните не совсем понимающему, реально ли осуществить сабж? Подозреваю, что реально, посредством использование режима таймера 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); И... ничего не происходит. Выходная нога, будто в воздухе висит. Что я делаю не так? |
Автор: | BorisSPB [ Чт мар 16, 2017 06:35:57 ] |
Заголовок сообщения: | Re: STM32: генерирование частот порядка единиц МГц таймером |
Период таймера 2, а значение канала 100 - вот он и не срабатывает. |
Автор: | KT315B [ Чт мар 16, 2017 08:04:21 ] |
Заголовок сообщения: | Re: STM32: генерирование частот порядка единиц МГц таймером |
Нашел этот косяк - исправил, все равно тишина. |
Автор: | Serg1987 [ Вс апр 02, 2017 00:16:13 ] |
Заголовок сообщения: | Re: STM32: генерирование частот порядка единиц МГц таймером |
А таймер сам стартанули хоть?? Функция халовская такая есть - HAL_TIM_Base_Start(&htim) . По умолчанию Куб таймер не стартует. Одной функции TIM_Init недостаточно. Вы его сами должны стартануть вот этой функцией. И он пойдет тикать. И советую уходить от Куба, и чем скорее, тем лучше. Он пригоден только для того, чтобы что-то подсмотреть, чтобы легче разобраться. А так.. не советую. Получите тормоза с кодом, нулевую оптимизацию со всеми вытекающими. И если стоит задача генерации импульсов с частотой единицы мегагерц, то можно попробовать использовать прерывание таймера, в котором при переполнении просто будет инвертироваться нужная нога. В обработчике прерывания достаточно добавить (GPIOx->ODR ^= GPIO_ODR_ODRx;) Но таким способом на практике больше 5МГц на бюджетных контроллерах получить проблематично. Это ерунда, что пишут, что частота GPIO может быть 50Мгц. Чушь полнейшая. Проверено не раз. Больше 5МГц по таймеру.. увы. |
Автор: | KT315B [ Вс апр 02, 2017 15:54:35 ] |
Заголовок сообщения: | Re: STM32: генерирование частот порядка единиц МГц таймером |
Да все, разобрался уже, спасибо! Таймер стартовал. Проблема была в некорректных настройках PLL, которые почему то Куб предложил - так что с этим надо быть осторожнее. Все уже давно работает и еще как ) |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |