STM32L151C6
- Stepanov Ivan
- Автор темы
- Посетитель
11 года 11 мес. назад - 11 года 11 мес. назад #3707
от Stepanov Ivan
Stepanov Ivan создал тему: STM32L151C6
Товарищи, помогите пожалйста! Подскажите, как мне настроить прерывание по таймеру TIM2 мк STM32L151C6 (тактовая частота до 4 МГц), вызывающееся не реже чем раз в 10 микросекунд (если раз в 5мкс то вобще АХОНЬ). У меня на тактовой частоте 4 МГц получается вызвать прерывание раз в 25-30 мкс, этого мало :-\
мой код настройки:
//настройка TIM2
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
TIM_TimeBaseInitStructure.TIM_Prescaler = 10;//тактовая частота 4MГц
TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInitStructure.TIM_Period = 10; // 25us
TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV4;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);
/* Clear update interrupt bit */
TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
/* TIM IT enable */
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
/* TIM2 enable counter */
TIM_Cmd(TIM2, ENABLE);
ps: при меньших значения Prescaler и Period прерывания не вызываются вобще, больше-пожалуста, меньше-накасивыкуси
мой код настройки:
//настройка TIM2
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
TIM_TimeBaseInitStructure.TIM_Prescaler = 10;//тактовая частота 4MГц
TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInitStructure.TIM_Period = 10; // 25us
TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV4;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);
/* Clear update interrupt bit */
TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
/* TIM IT enable */
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
/* TIM2 enable counter */
TIM_Cmd(TIM2, ENABLE);
ps: при меньших значения Prescaler и Period прерывания не вызываются вобще, больше-пожалуста, меньше-накасивыкуси
Последнее редактирование: 11 года 11 мес. назад пользователем .
- newseltek
- Посетитель
11 года 11 мес. назад #3709
от newseltek
newseltek ответил в теме Re: STM32L151C6
А почему частота 4 мгц ? - почему нельзя выше ? Ведь на вход и выход из прерывания тратится время - вот у NXP при 60 мгц - это 0.4 мкс - стало быть при 4мгц это будет 0.4*15 = 6мкс .
- Денис Ягов
- Посетитель
11 года 11 мес. назад #3714
от Денис Ягов
Денис Ягов ответил в теме Re: STM32L151C6
Согласен с предыдущим оратором.
На частоте 4МГц за 10 мкс можно выполнить 40 операций. Из них 12 - это вход в прерывание, и 12 - выход.
Кроме того - обязательно снять бит прерывания при выходе/входе - это ещё 2 как минимум. Итого останется максимум 24 команды на тело прерывания.
Однозначно "рулить" регистрами периферии напрямую. Никаких циклов - только линейный код. Никаких вызовов процедур.
Прерывание то что делает?
На частоте 4МГц за 10 мкс можно выполнить 40 операций. Из них 12 - это вход в прерывание, и 12 - выход.
Кроме того - обязательно снять бит прерывания при выходе/входе - это ещё 2 как минимум. Итого останется максимум 24 команды на тело прерывания.
Однозначно "рулить" регистрами периферии напрямую. Никаких циклов - только линейный код. Никаких вызовов процедур.
Прерывание то что делает?
- Stepanov Ivan
- Автор темы
- Посетитель
11 года 11 мес. назад #3742
от Stepanov Ivan
Stepanov Ivan ответил в теме Re: STM32L151C6
Пардон, давно тут не был, проблему решил. Причина как вы и говорили, нехватка быстродействия, а быстрее низя, надо ограничить потребление 1.5 - 1.6 мА, так что тактовая частота вобще 2МГц.
- Stepanov Ivan
- Автор темы
- Посетитель
11 года 11 мес. назад - 11 года 11 мес. назад #3743
от Stepanov Ivan
Stepanov Ivan ответил в теме Re: STM32L151C6
Да и еще, как можно проберить, цел-ли мк? не выжег ли я его? Потребление как было так и осталось порядка 1.4-1.5мА. Просто при попытке перенастройки режима порта (регистр MODER) передал туда значение (видимо в синтаксисе жестко накосячил) и тем самым спалил его к**ям :-\ И еще, если не сложно, подскажите пожалйста, как можно перенастроить режим работы порта правильно при обращении к регистру напрямую? и получится ли заранее настроив порт стандартной процедурой (с использованием структуры инициализации и GPIO_Init), в последующем менять режим его работы (с входа на выход и наоборот) передачей соответствующих значений в регистр MODER?
Последнее редактирование: 11 года 11 мес. назад пользователем .
- Денис Ягов
- Посетитель
11 года 11 мес. назад #3744
от Денис Ягов
Денис Ягов ответил в теме Re: STM32L151C6
Есть много способов узнать "Что делать". Один - на картинке.
Время создания страницы: 0.036 секунд