реклама на сайте
подробности

 
 
> STM32F4::Discovery -> Помогите с таймером, Что-то с тактовой для TIM6
billidean
сообщение Feb 12 2014, 13:45
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 247
Регистрация: 4-10-10
Из: г. Екатеринбург
Пользователь №: 59 925



Здравствуйте.
Хочу заставить светодиод мигать с тактом 1с.
Казалось бы - задача тривиальней некуда. Но я зашел в тупик.
Пишу простейший код:
CODE
#include "stm32f4xx.h"
#include "stm32f4xx_rcc.h"
#include "stm32f4xx_gpio.h"
#include "stm32f4xx_tim.h"

int counter = 0;
int flag = 0;

void TIM6_DAC_IRQHandler(void)
{
/* Так как этот обработчик вызывается и для ЦАП, нужно проверять,
* произошло ли прерывание по "переполнению" счётчика таймера TIM6.
*/
if (TIM_GetITStatus(TIM6, TIM_IT_Update) != RESET)
{
/* Очищаем бит обрабатываемого прерывания */
TIM_ClearITPendingBit(TIM6, TIM_IT_Update);

flag = 1;
}
}

int main(void)
{
// SystemInit();

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD , ENABLE);

GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOD, &GPIO_InitStructure);

//**********************************************
// Настроим таймер TIM
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE); // включаем тактирование таймера
TIM_TimeBaseInitTypeDef base_timer;
TIM_TimeBaseStructInit(&base_timer);

/* Делитель учитывается как TIM_Prescaler + 1, поэтому отнимаем 1 */
base_timer.TIM_Prescaler = 16 - 1;
base_timer.TIM_Period = 1000-1;
base_timer.TIM_ClockDivision = TIM_CKD_DIV1;
base_timer.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM6, &base_timer);
TIM_ARRPreloadConfig(TIM6, ENABLE);

/* Разрешаем прерывание по обновлению (в данном случае -
* по переполнению) счётчика таймера TIM6.
*/
TIM_ClearITPendingBit(TIM6, TIM_IT_Update);
TIM_ITConfig(TIM6, TIM_IT_Update, ENABLE);
TIM_Cmd(TIM6, ENABLE); // Включаем таймер

/* Разрешаем обработку прерывания по переполнению счётчика
* таймера TIM6. это же прерывание
* отвечает и за опустошение ЦАП.
*/
NVIC_SetPriority(TIM6_DAC_IRQn, 15);
NVIC_EnableIRQ(TIM6_DAC_IRQn);
//**********************************************

while(1)
{
// отсчитываем каждые 1000 тактов таймера и переключаем светодиод
if( flag == 1 )
{
if(counter == 0)
{
GPIO_SetBits(GPIOD, GPIO_Pin_12);
}
counter++;
if(counter == 1000)
{
GPIO_ResetBits(GPIOD, GPIO_Pin_12);
}
if(counter == 2000)
{
counter = 0;
}
flag = 0;
}
}
}

- мигает как надо. Но здесь параметры: base_timer.TIM_Prescaler = 16 - 1; и base_timer.TIM_Period = 1000-1;, т.е. получается, что частота тактирования = 16МГц. Это можно объяснить тем, что идет тактирование от внутреннего генератора (8МГц), но с удвоенной частотой (это, типа, из-за использования предделителей, не равных 1 на шине АРВ1). Но так-то я раситывал на 168МГц.
Пробовал с разными коэффициентами - полная ерунда.
Если я раскомментирую строчку
Код
//    SystemInit();
, то светик мигает почти с тактом в 1 сек, но "ПОЧТИ"=чуть-чуть быстрее.

В чем может быть моя неправда? Ткните носом, ПЛЗ. Или объясните матчасть (может все так и должно быть 05.gif ).

ИМХО, кварц может глючит? (но проверить нечем, нет никаких девайсов) wacko.gif

Сообщение отредактировал IgorKossak - Feb 12 2014, 14:29
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- billidean   STM32F4::Discovery -> Помогите с таймером   Feb 12 2014, 13:45
- - ViKo   Не вижу установки делителей для тактов периферийны...   Feb 12 2014, 14:04
- - billidean   В SystemInit() - вроде какие-то предделители устан...   Feb 12 2014, 14:11
|- - ViKo   Цитата(billidean @ Feb 12 2014, 17:11) В ...   Feb 12 2014, 14:16
- - billidean   В systemInit() dspsdftncz SetSysClock(), код котор...   Feb 12 2014, 14:29
- - ViKo   Получается, на периферийной шине у вас 168 / 4 = 4...   Feb 12 2014, 14:39
- - billidean   При установке base_timer.TIM_Prescaler = (42-1) и ...   Feb 12 2014, 14:51
|- - Thorn   На кварце нагрузочные конденсаторы имеются? Емкост...   Feb 12 2014, 17:34
- - Golikov A.   а где вы включаете внешний генератор, подключаете ...   Feb 12 2014, 17:39
- - ViKo   Можно вывести на светодиод бит SWS1 из RCC_CFGR, ч...   Feb 12 2014, 17:50
- - Golikov A.   а еще не забыть настроить выходную ножку на максим...   Feb 12 2014, 17:58
|- - ViKo   Цитата(Golikov A. @ Feb 12 2014, 20:58) а...   Feb 12 2014, 18:01
- - billidean   Цитата(Golikov A. @ Feb 12 2014, 21:39) в...   Feb 13 2014, 03:06
- - Golikov A.   ага добро пожаловать в мир СТМ, не хрена это не оп...   Feb 13 2014, 06:11
- - billidean   Вы про stm32f4xx.h-файл? Там всякие определения/ра...   Feb 13 2014, 06:44
- - Golikov A.   ага про него. Посмотрите какой проц в итоге опреде...   Feb 13 2014, 06:50
- - ViKo   Да, есть полное соответствие. Ничего больше опреде...   Feb 13 2014, 06:53
|- - billidean   Цитата(ViKo @ Feb 13 2014, 10:53) Да, ест...   Feb 13 2014, 07:10
|- - ViKo   Цитата(billidean @ Feb 13 2014, 10:10) А ...   Feb 13 2014, 07:30
|- - billidean   Цитата(ViKo @ Feb 13 2014, 11:30) В руков...   Feb 13 2014, 08:06
|- - ViKo   Цитата(billidean @ Feb 13 2014, 11:06) Да...   Feb 13 2014, 08:35
- - billidean   Кстати, нашел еще один параметр, который надо поме...   Feb 13 2014, 08:59
|- - ViKo   Цитата(billidean @ Feb 13 2014, 11:59) Я ...   Feb 13 2014, 09:09
- - billidean   ...да... вместо PLL-prescaler нужно понимать presc...   Feb 13 2014, 09:27
- - topkin   Конфигурация тактовой частоты и первоначальных нас...   Feb 13 2014, 10:17
- - Golikov A.   а откуда берется двойная частота без PLL? это скор...   Feb 13 2014, 10:32
|- - billidean   Цитата(Golikov A. @ Feb 13 2014, 13:32) а...   Feb 13 2014, 10:46
- - Golikov A.   я просто пытался обратить ваше внимание на то что ...   Feb 13 2014, 11:08
|- - ViKo   Цитата(Golikov A. @ Feb 13 2014, 14:08) я...   Feb 13 2014, 11:59
- - Golikov A.   ну типа того, в общем периферия системную частоту ...   Feb 13 2014, 12:15
- - billidean   Тут нарыл в даташите: - это к вопросу удвоения ч...   Feb 13 2014, 14:00
- - Golikov A.   забудьте вы про умножение частоты)... нет его там,...   Feb 13 2014, 15:46
|- - billidean   Цитата(Golikov A. @ Feb 13 2014, 18:46) з...   Feb 13 2014, 15:52
- - Golikov A.   не очень понятно падает она теперь или нет, но есл...   Feb 13 2014, 16:10
|- - billidean   Цитата(Golikov A. @ Feb 13 2014, 19:10) н...   Feb 14 2014, 04:30
- - ViKo   Мне кажется с самого начала, что кварцевый генерат...   Feb 13 2014, 17:16
- - billidean   А теперь самое ИНТЕРЕСНОЕ: Вот код моей программки...   Feb 14 2014, 06:58
- - Golikov A.   тут есть хитрость в мануале написано что типа вас ...   Feb 14 2014, 07:18
- - ViKo   Назовем, Из жизни. Женщина установила спираль, чт...   Feb 14 2014, 07:40
- - billidean   Цитататут есть хитрость.. Вы вот это имеете в виду...   Feb 14 2014, 07:49
|- - ViKo   Цитата(billidean @ Feb 14 2014, 10:49) пр...   Feb 14 2014, 08:00
- - Golikov A.   ну да. все вам и написали на домен не может быть б...   Feb 14 2014, 08:00


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 06:34
Рейтинг@Mail.ru


Страница сгенерированна за 0.0139 секунд с 7
ELECTRONIX ©2004-2016