STM32F100C4T6B частотомер
Добавлено: Чт авг 01, 2013 16:39:47
STM32F100C4T6B
Пытаюсь сделать частотомер.
Вывод PA6.
Когда дотрагиваюсь пальцем к выводу - показывает 0...10 KHz (в зависимости как сильно держусь за вывод).
Подключаю вывод с наушников компьютера (предварительно запустив программу - генератор). Ничего не считает.
Код:
fcount обнуляется каждую секунду.
Пытаюсь сделать частотомер.
Вывод PA6.
Когда дотрагиваюсь пальцем к выводу - показывает 0...10 KHz (в зависимости как сильно держусь за вывод).
Подключаю вывод с наушников компьютера (предварительно запустив программу - генератор). Ничего не считает.
Код:
Код: Выделить всё
// инициализация таймера
void InitTimer(void) {
//Разрешение прерывания от таймера 3 и установка приоритета
NVIC_SetPriority(TIM3_IRQn, 1);
NVIC_EnableIRQ(TIM3_IRQn);
/*Инициализация таймера TIM3.*/
RCC->APB1ENR |= RCC_APB1ENR_TIM3EN;//Включаем тактирование TIM3
TIM3->CCMR1 |= TIM_CCMR1_CC1S_0;//Выбор активного входа. Записываем "01" в биты CC1S - связываем регистр TIM3_CCR1 со входом TI1
TIM3->CCMR1 |= (TIM_CCMR1_IC1F_0 | TIM_CCMR1_IC1F_1);//Выбор длительнотси действия фильтра - 8 тактов. IC1F = 0011.
TIM3->CCER &= ~TIM_CCER_CC1P;//По переднему фронту - положительный перепад импульса
TIM3->CCMR1 &= ~TIM_CCMR1_IC1PSC;//Предделитель отключен
TIM3->CCER |= TIM_CCER_CC1E;//Разрешен захват значения счетчика в регистр TIM3_CCR1
TIM3->DIER |= TIM_DIER_CC1IE;//Разрешена генерация прерывания при захвате
TIM3->CR1 |= TIM_CR1_CEN;//Запускаем счет таймера
}Код: Выделить всё
// прерывание таймера
void TIM3_IRQHandler(void) {
fcount++;
}