kil00 0 8 июня, 2012 Опубликовано 8 июня, 2012 (изменено) · Жалоба Здравствуйте! Пытаюсь настроить таймеры в TIM3 и TIM5 в stm32f107. Частота шины AHB=70 МГц поэтому делю её, // apb1 RCC->CFGR &=~RCC_CFGR_PPRE1; // предочистка RCC->CFGR |= RCC_CFGR_PPRE1_DIV2; // HCLK divided by 2 и получаю 35 МГц на APB1, где находятся таймеры Настраиваю таймеры RCC->APB1ENR |= 1<<3; TIM5->PSC = 35000 - 1; TIM5->ARR = 1000 - 1; Таймер выходит в прерывание примерно в 2 раза чаще. Тогда я делаю так // apb1 RCC->CFGR &=~RCC_CFGR_PPRE1; // предочистка RCC->CFGR |= RCC_CFGR_PPRE1_DIV1; // HCLK not divided И ничего с таймером не меняется. За то USART2, настроенный на 35МГц и находящийся на той же шине, перестаёт правильно работать. Питаюсь от HSEBYP 10 МГц и умножаю PLL на 7. В чем может быть проблема? Изменено 8 июня, 2012 пользователем MarYuriy Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
maksimp 0 8 июня, 2012 Опубликовано 8 июня, 2012 · Жалоба В документе RM0008 в разделе Connectivity line devices: reset and clock control (RCC) есть на странице 123 Figure 11. Clock tree. И там есть "TIM2,3,4,5,6,7 If(APB1 prescaler =1) x1 else x2" То есть если поставить APB1 prescaler !=1 то таймер умножает частоту на 2 перед использованием. То есть, при RCC->CFGR |= RCC_CFGR_PPRE1_DIV2; // HCLK divided by 2 таймер работает на 70 Мгц. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 18 8 июня, 2012 Опубликовано 8 июня, 2012 · Жалоба Таймерам на вход подаётся APB1, если прескалер APB1 = 1, и APB1*2, если прескалер APB1 > 1. То есть, в обоих ваших случаях это 70 МГц. Смотрите Figure 8. "Clock tree" в RM0008. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kil00 0 8 июня, 2012 Опубликовано 8 июня, 2012 · Жалоба О! Спасибо большое! Посмотрел. Всё понятно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться