Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Микроконтроллеры других производителей

Микроконтроллеры других производителей Все, что касается микроконтроллеров и НЕ подошло в раздел Microchip.

Ответ
 
Опции темы Опции просмотра
Старый 16.07.2012, 14:00   #1
Venom
Senior Member
 
Регистрация: 19.05.2009
Сообщений: 319
Вес репутации: 127/44
Venom will become famous soon enoughVenom will become famous soon enough
По умолчанию STM32F4Discovery Timer Interrupt

здравствуйте!
Если кто работал с этим процессором, то буду рад Вашей помощи.
Итак, ногами процессора подергать я успел. Таймер 6 запустил и в основном цикле помониторил флаг и зажег светодиод, а вот с прерыванием начались проблемы. При попытке инициализации прерывания виснет наглухо.
Код:
 
#include "stm32f4xx.h"
#include "define.h"
#include "stm32f4xx_gpio.h"
#include "stm32f4xx_rcc.h"
#include "stm32f4xx_tim.h"
#include "Type.h"
#include "main.h"
#include "misc.h"

...


void INTTIM_Config(void)
{
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE);

  TIM_TimeBaseInitTypeDef base_timer;
  TIM_TimeBaseStructInit(&base_timer);

  base_timer.TIM_Prescaler = 24000 - 1;
  base_timer.TIM_Period = 500;
  TIM_TimeBaseInit(TIM6, &base_timer);


  TIM_ITConfig(TIM6, TIM_IT_Update, ENABLE);

  TIM_Cmd(TIM6, ENABLE);


  NVIC_EnableIRQ(TIM6_DAC_IRQn); //вот тут висну
}

void TIM6_IRQHandler(void)
{
  if (TIM_GetITStatus(TIM6, TIM_IT_Update) != RESET)
  {
    TIM_ClearITPendingBit(TIM6, TIM_IT_Update);
    STM_EVAL_LEDToggle(LED6); 
  }
}
Подскажите, что я еще забыл?
Venom вне форума   Ответить с цитированием
Старый 16.07.2012, 16:29   #2
ELEKTROS
Senior Member
 
Регистрация: 17.06.2011
Возраст: 34
Сообщений: 129
Вес репутации: 100/35
ELEKTROS will become famous soon enoughELEKTROS will become famous soon enough
По умолчанию Re: STM32F4Discovery Timer Interrupt

С этими камнями не рабодал только с M3 и то пока перерыв с ними, а TIM6_DAC_IRQn это точно по переполнению прерывание? может там с названием функций что то не так, а в пошаговом режиме где остановка начинается, заход же в функцию должен быть, тупняк в ней получается наступает, но в каком месте именно.
__________________
Истина ложь, а ложь истина
ELEKTROS вне форума   Ответить с цитированием
Старый 16.07.2012, 17:18   #3
2AplusA
Senior Member
 
Аватар для 2AplusA
 
Регистрация: 26.02.2007
Адрес: Penza
Возраст: 38
Сообщений: 1,383
Вес репутации: 1267/73
2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of
По умолчанию Re: STM32F4Discovery Timer Interrupt

Цитата:
Сообщение от Venom Посмотреть сообщение
Подскажите, что я еще забыл?
Ну во-первых, необходимо сконфигурировать группы приоритетов
например ,вот так
Код:
 NVIC_DeInit();
 // 4 бита на основной приоритет и 0 бит на подприоритет.
 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
Затем само прерывание включается вот так:
Код:
     // настраиваем TIM6 для анализа принятых байтов по DMA1
    TIM6->SR=0;         //сбрасываем флаги 
    TIM6->CNT=0;        
    TIM6->PSC=224L;   // частота на таймер равна 22,5 Мгц/(224+1)=100кГц (1 тик = 10 мксекунд)          
    TIM6->CR1=TIM_CR1_ARPE|TIM_CR1_URS;        //считаем вверх, прерывание только на переполнение
    TIM6->DIER=TIM_DIER_UIE;        // DMA не нужен, а прерывание включили    
    //включаем прерывание от TIM6    
  NVIC_InitStructure.NVIC_IRQChannel = TIM6_DAC_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 4;    
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);    
    TIM6->CR1|=TIM_CR1_CEN;    // включаем таймер
__________________
Лучше день потерять, потом за час долететь!
2AplusA вне форума   Ответить с цитированием
Старый 16.07.2012, 18:32   #4
air
Senior Member
 
Регистрация: 26.02.2007
Адрес: Moscow
Возраст: 52
Сообщений: 130
Вес репутации: 253/51
air is a jewel in the roughair is a jewel in the roughair is a jewel in the rough
Отправить сообщение для air с помощью Skype™
По умолчанию Re: STM32F4Discovery Timer Interrupt

Вот так у меня работает:

Код:
  TIM_TimeBaseInit(TIM6, &base_timer);

  TIM_ClearITPendingBit(TIM6, TIM_IT_Update);

  TIM_ITConfig(TIM6, TIM_IT_Update, ENABLE);
  TIM_Cmd(TIM6, ENABLE);
  NVIC_EnableIRQ(TIM6_DAC_IRQn);
}

void TIM6_DAC_IRQHandler()
{
air вне форума   Ответить с цитированием
Старый 17.07.2012, 08:19   #5
ELEKTROS
Senior Member
 
Регистрация: 17.06.2011
Возраст: 34
Сообщений: 129
Вес репутации: 100/35
ELEKTROS will become famous soon enoughELEKTROS will become famous soon enough
По умолчанию Re: STM32F4Discovery Timer Interrupt

2AplusA, вы привели кусок кода из IAR, можно и без этой всей структуры иницализацию делать хотябы в кейловском исходнике гляньте (или в томже IAR можно самому проще сделать), а вообще вы правы должны быть пару строк настройки прерывания, как то забыл об этом.
__________________
Истина ложь, а ложь истина
ELEKTROS вне форума   Ответить с цитированием
Старый 17.07.2012, 12:29   #6
2AplusA
Senior Member
 
Аватар для 2AplusA
 
Регистрация: 26.02.2007
Адрес: Penza
Возраст: 38
Сообщений: 1,383
Вес репутации: 1267/73
2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of
По умолчанию Re: STM32F4Discovery Timer Interrupt

Цитата:
Сообщение от ELEKTROS Посмотреть сообщение
2AplusA, вы привели кусок кода из IAR, можно и без этой всей структуры иницализацию делать хотябы в кейловском исходнике гляньте (или в томже IAR можно самому проще сделать), а вообще вы правы должны быть пару строк настройки прерывания, как то забыл об этом.
Нет, это Кейл. Везде так свои прерывания инициализирую. Пока проблем не возникало. По началу хотел вообще все ручками делать, но пока влом разбиратся, как они настраиваются. Поэтому юзаю библиотеки лишь только для них.
__________________
Лучше день потерять, потом за час долететь!
2AplusA вне форума   Ответить с цитированием
Старый 17.07.2012, 12:36   #7
ELEKTROS
Senior Member
 
Регистрация: 17.06.2011
Возраст: 34
Сообщений: 129
Вес репутации: 100/35
ELEKTROS will become famous soon enoughELEKTROS will become famous soon enough
По умолчанию Re: STM32F4Discovery Timer Interrupt

Значит я кейловские примеры не такие видел. Это просто один в один как в IAR примеры, ну для инициализации это удобно, структуры юзать, но если по ходу работы изменения нужно делать то приходиться напрямую фактически писать.
__________________
Истина ложь, а ложь истина
ELEKTROS вне форума   Ответить с цитированием
Старый 17.07.2012, 21:15   #8
2AplusA
Senior Member
 
Аватар для 2AplusA
 
Регистрация: 26.02.2007
Адрес: Penza
Возраст: 38
Сообщений: 1,383
Вес репутации: 1267/73
2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of
По умолчанию Re: STM32F4Discovery Timer Interrupt

Цитата:
Сообщение от ELEKTROS Посмотреть сообщение
Значит я кейловские примеры не такие видел. Это просто один в один как в IAR примеры, ну для инициализации это удобно, структуры юзать, но если по ходу работы изменения нужно делать то приходиться напрямую фактически писать.
Я Вам открою секрет. Библиотеки в IAR и Keil отличаются лишь первыми строками, да и те комментарии о принадлежности к тому или иному компилятору. Очень похоже, что эти библиотеки писали сами стмовцы, а потом разработчикам компиляторов их отдавали. Мне не особо приятно юзать структуры, т.к. слишком перегружен код, но скажу честно пока вломы, да и времени нет копать даташит на ядро, чтобы разобратся, как прерывания настраивать. Поэтому, пока юзаю готовые решения.
__________________
Лучше день потерять, потом за час долететь!
2AplusA вне форума   Ответить с цитированием
Старый 19.07.2012, 15:38   #9
Venom
Senior Member
 
Регистрация: 19.05.2009
Сообщений: 319
Вес репутации: 127/44
Venom will become famous soon enoughVenom will become famous soon enough
По умолчанию Re: STM32F4Discovery Timer Interrupt

Сори за отсутствие.
Проблема решилась тем, что я забыл подключить startup_stm32f4xx.s. Этот файл Кейл подключает по умолчанию, а вот IAR 6.3 надо пнуть и вручную добавить файл в проект.
После чего прерывания запрыгали как надо.
Таймеры я сумел запустить, затем ШИМ, ЦАП с DMA. Теперь учусь ЦАПом просто так пользоваться, чтоб вывести нужный уровень на ногу.
Также сейчас в процессе изучения изменение частоты работы ядра. У меня пока только 1 вопрос: а с какой максимальной скоростью Вам удавалось дергать ногами? У меня пока 12 МГц.

Кстати, кто-нибудь в курсе, как включить счетчик тактов в IAR, чтоб определить, за сколько тактов он выполняет ту или иную функцию?

Последний раз редактировалось Venom; 19.07.2012 в 15:45.
Venom вне форума   Ответить с цитированием
Старый 19.07.2012, 16:44   #10
Venom
Senior Member
 
Регистрация: 19.05.2009
Сообщений: 319
Вес репутации: 127/44
Venom will become famous soon enoughVenom will become famous soon enough
По умолчанию Re: STM32F4Discovery Timer Interrupt

Кстати, если кому интересно, могу выложить подборку ссылок на статьи в инете по этому МК, а также готовые разобранные (и чистые от постороннего) примеры.
Venom вне форума   Ответить с цитированием
Старый 19.07.2012, 21:39   #11
Greg
Super Moderator
 
Регистрация: 25.02.2007
Адрес: Moscow, ODBS
Сообщений: 6,945
Вес репутации: 5817/175
Greg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond repute
По умолчанию Re: STM32F4Discovery Timer Interrupt

Цитата:
Сообщение от Venom Посмотреть сообщение
Кстати, кто-нибудь в курсе, как включить счетчик тактов в IAR, чтоб определить, за сколько тактов он выполняет ту или иную функцию?
в симуляторе watch -> register -> CYCLECOUNTER
можно выложить ссылки на статьи
Greg вне форума   Ответить с цитированием
Старый 20.07.2012, 00:00   #12
DimaS
Senior Member
 
Регистрация: 05.04.2008
Адрес: Israel
Возраст: 47
Сообщений: 1,741
Вес репутации: 2423/85
DimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond repute
По умолчанию Re: STM32F4Discovery Timer Interrupt

Цитата:
Сообщение от Venom Посмотреть сообщение
Кстати, если кому интересно, могу выложить подборку ссылок на статьи в инете по этому МК, а также готовые разобранные (и чистые от постороннего) примеры.
Было бы неплохо!

Особенно интересно, из того что нет в Дискавери - пример работы SDIO+FatFs, и HS USB Mass Storage Device с PHY USB3300, если такое есть конечно.
DimaS вне форума   Ответить с цитированием
Старый 23.07.2012, 15:19   #13
Venom
Senior Member
 
Регистрация: 19.05.2009
Сообщений: 319
Вес репутации: 127/44
Venom will become famous soon enoughVenom will become famous soon enough
По умолчанию Re: STM32F4Discovery Timer Interrupt

Greg, спасибо!

Таких статей у меня пока нет, т.к. не искал их даже.
Но будет время - примусь.
Итого пока по имеющимся статьям. Обращаю внимание, здесь есть статьи и для STM32F10xx и для STM32F4xx. Процессоры практически идентичны, отличие в нюансах. Но с ними разберетесь без проблем.
http://easyelectronics.ru/category/arm-uchebnyj-kurs - для совсем новичков. Как создается проект и прочее. Особенно рекомендую статьи rtxonair
http://easyelectronics.ru/arm-uchebn...orty-gpio.html Дергаем ногами
http://how2.org.ua/art/289 Мигаем светодиодами с помощью ШИМ

Теперь по таймерам
http://amarkham.com/?p=12
http://amarkham.com/?p=29
http://robocraft.ru/blog/ARM/739.html - довольно-таки обширная статья

АЦП, АЦП +DMA
http://we.easyelectronics.ru/STM32/s...mery-koda.html

ЦАП и ЦАП+DMA я освоил самостоятельно и быстро, воспользовавшись готовыми примерами из http://www.st.com/internet/evalboard/product/252419.jsp
Там же примеры, даташиты, схемы.

Касаемо запроса DimaS я могу сказать только следующее: FatFS - это файловая система, которая написана на языке C, единственное место, необходимое для доработки руками - это SPI интерфейс. Остальное за Вас сделает компилятор.
Где-то на форуме здесь есть ссылка на готовый набор библиотеки для работы с флэш. Я его успешно запускал на Pic24f.
Venom вне форума   Ответить с цитированием
Старый 23.07.2012, 16:35   #14
DimaS
Senior Member
 
Регистрация: 05.04.2008
Адрес: Israel
Возраст: 47
Сообщений: 1,741
Вес репутации: 2423/85
DimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond repute
По умолчанию Re: STM32F4Discovery Timer Interrupt

Цитата:
Сообщение от Venom Посмотреть сообщение

Касаемо запроса DimaS я могу сказать только следующее: FatFS - это файловая система, которая написана на языке C, единственное место, необходимое для доработки руками - это SPI интерфейс. Остальное за Вас сделает компилятор.
SPI там далеко не единственное, надо написать все функции в diskio.c, включая инициализацию карт (в т.ч. SDHC).
К тому-же, SPI совершенно неинтенесно, при наличии SDIO.


Цитата:
Где-то на форуме здесь есть ссылка на готовый набор библиотеки для работы с флэш.
Где не припомните?

Цитата:
Я его успешно запускал на Pic24f.
У пик24 если мне память не изменяет, нет интерфейса к флешкартам (SDIO)

А на HS USB ничего нет?
DimaS вне форума   Ответить с цитированием
Старый 23.07.2012, 16:54   #15
Venom
Senior Member
 
Регистрация: 19.05.2009
Сообщений: 319
Вес репутации: 127/44
Venom will become famous soon enoughVenom will become famous soon enough
По умолчанию Re: STM32F4Discovery Timer Interrupt

Цитата:
Сообщение от DimaS Посмотреть сообщение
SPI там далеко не единственное, надо написать все функции в diskio.c, включая инициализацию карт (в т.ч. SDHC).
К тому-же, SPI совершенно неинтенесно, при наличии SDIO.
SD карты имеют интерфейс SPI. Потому правильно подключите SD к ногам пика, подтягивающие резисторы - и все будет работать. Была опробована запись сразу в файл, который потом с компа читал. Как текст, так и бинарный

Цитата:
Сообщение от DimaS Посмотреть сообщение
Где не припомните?
http://www.microchip.su/showthread.php?t=10581
Там в аттаче у Антон_1000. Небезызвестная библиотека от Чана.

Цитата:
Сообщение от DimaS Посмотреть сообщение
У пик24 если мне память не изменяет, нет интерфейса к флешкартам (SDIO)
См. выше.

Цитата:
Сообщение от DimaS Посмотреть сообщение
А на HS USB ничего нет?
Пока нет, но скоро начну искать, т.к. самому надо.
Venom вне форума   Ответить с цитированием
Старый 24.07.2012, 00:40   #16
DimaS
Senior Member
 
Регистрация: 05.04.2008
Адрес: Israel
Возраст: 47
Сообщений: 1,741
Вес репутации: 2423/85
DimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond repute
По умолчанию Re: STM32F4Discovery Timer Interrupt

Цитата:
Сообщение от Venom Посмотреть сообщение
SD карты имеют интерфейс SPI.
Во 1-х - не все, попадаются микроSD которые по SPI не работают, во 2-х - как я уже говорил - через обычный SPI это не интересно, это медленно, нужно через 4-х битный SDIO. У обсуждаемых процессоров он есть.
Цитата:
Потому правильно подключите SD к ногам пика, подтягивающие резисторы - и все будет работать.
причем тут пик, если речь шла о stm32f4* ?


Цитата:
См. выше.
"Выше" - про SPI у пик24, а я говорил про SDIO.

Цитата:
STM32F10xx и для STM32F4xx. Процессоры практически идентичны, отличие в нюансах
Нихренассе, "практически идентичны" - то Кортекс М3, а то М3.
У 4х почти в 2.5 раза выше тактовая, это можно считать "ньюансом", а вот остальное посущественнее - есть блоки плавающей точки (FPU) и DSP команд, отдельная память для ядра, но самое главное - некоторая периферия устроена по другому, и с F1 не совпадает (даже просто пины ввода-вывода по другому настраиваются, не говоря уже про RTC, CRC, USB и прочее), библиотеки совсем другие.

Последний раз редактировалось DimaS; 24.07.2012 в 00:50.
DimaS вне форума   Ответить с цитированием
Старый 24.07.2012, 17:18   #17
Venom
Senior Member
 
Регистрация: 19.05.2009
Сообщений: 319
Вес репутации: 127/44
Venom will become famous soon enoughVenom will become famous soon enough
По умолчанию Re: STM32F4Discovery Timer Interrupt

Сори, вчера я уже конкретно перегрелся. Радиатор на голову надо.

Если именно SDIO - то это самому интересно.
Venom вне форума   Ответить с цитированием
Старый 24.07.2012, 21:33   #18
HHIMERA
Senior Member
 
Регистрация: 10.06.2008
Возраст: 58
Сообщений: 2,866
Вес репутации: 3992/111
HHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond repute
По умолчанию Re: STM32F4Discovery Timer Interrupt

Цитата:
Сообщение от DimaS Посмотреть сообщение
"Выше" - про SPI у пик24, а я говорил про SDIO.
А что с SDIO??? Сиреневый туман???
ИМХО, информации вполне хватает...
Цитата:
Нихренассе, "практически идентичны" - то Кортекс М3, а то М3.
У 4х почти в 2.5 раза выше тактовая, это можно считать "ньюансом", а вот остальное посущественнее - есть блоки плавающей точки (FPU) и DSP команд, отдельная память для ядра, но самое главное - некоторая периферия устроена по другому, и с F1 не совпадает (даже просто пины ввода-вывода по другому настраиваются, не говоря уже про RTC, CRC, USB и прочее), библиотеки совсем другие.
Это из области "Стакан наполовину пуст или полон?"...
Если брать начинающего с нуля, то это одно...
А если уже прогрыз все камни начиная с F1 то... "Ну посмотрел я на карту, да сколько там той Одессы!?"...
HHIMERA вне форума   Ответить с цитированием
Старый 25.07.2012, 11:55   #19
Venom
Senior Member
 
Регистрация: 19.05.2009
Сообщений: 319
Вес репутации: 127/44
Venom will become famous soon enoughVenom will become famous soon enough
По умолчанию Re: STM32F4Discovery Timer Interrupt

С АЦП возникла проблема: я запустил имеющийся в инете проект, и стал конвертировать температуру с внутреннего датчика.
Запустил, после двух конвертирований (результат в переменной "а" равен 273) процессор задумывается на строке while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET); в функции readADC1.
Судя по всему, в этот момент АЦП находится в состоянии сброса RESET. Если кто знает, в чем дело - подскажите, пожалуйста.

Код:
 
#include "stm32f4xx.h"
#include "define.h"
#include "stm32f4xx_gpio.h"
#include "stm32f4xx_rcc.h"
#include "stm32f4xx_tim.h"
#include "stm32f4xx_dma.h"
#include <stm32f4xx_adc.h>
#include "Type.h"
#include "main.h"
#include "GlobalVariables.h"

unsigned int a=0;

int main()
{
  adc_init();
  ADC_TempSensorVrefintCmd(ENABLE);
  while(1)
  { a=readADC1(16);
    Delay(5000000); 
  };

}

void adc_init(void)
{
       ADC_InitTypeDef ADC_InitStructure;
       ADC_CommonInitTypeDef adc_init;
       /* Запуск тактирования АЦП */
       RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
       /* Сбрасываем настройки АЦП */
       ADC_DeInit();

       /* Независимая работа АЦП1 и АЦП2 */
       adc_init.ADC_Mode = ADC_Mode_Independent;
       adc_init.ADC_Prescaler = ADC_Prescaler_Div2;

       /* выключаем scan conversion */
       ADC_InitStructure.ADC_ScanConvMode = DISABLE;
       /*не делаем бесконечные преобразования */
       ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
       /*начинаем преобразование программно, а не по триггеру*/
       ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConvEdge_None;
       /* 12 битное преобразование, результат в младших 12 разрядах */
       ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;

       /*инициализация */
       ADC_CommonInit(&adc_init);
       ADC_Init(ADC1, &ADC_InitStructure);
       /* Включаем АЦП1 */
       ADC_Cmd(ADC1, ENABLE);

}


u16 readADC1(u8 channel)
//читаем канал
{
   ADC_RegularChannelConfig(ADC1, channel, 1,   ADC_SampleTime_3Cycles);
   // запуск преобразования
   ADC_SoftwareStartConv(ADC1);
   // ждем окончания преобразования (ТУТ И ВИСНЕМ!)
   while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET);
   // отдаем результат
   return ADC_GetConversionValue(ADC1);
}

void Delay(unsigned int Val)
//задержка
{
   for( ; Val != 0; Val--)
      __NOP();
}
Venom вне форума   Ответить с цитированием
Старый 25.07.2012, 21:08   #20
DimaS
Senior Member
 
Регистрация: 05.04.2008
Адрес: Israel
Возраст: 47
Сообщений: 1,741
Вес репутации: 2423/85
DimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond repute
По умолчанию Re: STM32F4Discovery Timer Interrupt

Если не прописывть все параметры структур инициализации, то стоит вызывать сначала ADC_CommonStructInit и ADC_StructInit.

Цитата:
я запустил имеющийся в инете проект, и стал конвертировать температуру с внутреннего датчика.
А если сначала запустить пример из библиотеки для VBAT, а потом просто поменять в нем VBAT на термосенсор?

Ну и вообще, как бы можно в отладчике посмотреть в каком состоянии АЦП.
DimaS вне форума   Ответить с цитированием
Старый 04.09.2012, 17:57   #21
Venom
Senior Member
 
Регистрация: 19.05.2009
Сообщений: 319
Вес репутации: 127/44
Venom will become famous soon enoughVenom will become famous soon enough
По умолчанию Re: STM32F4Discovery Timer Interrupt

Понятненько...
В ближайшее время вернусь к проекту, а пока мучаю схемотехнику.
Если у кого есть наработки в USB HS - буду рад помощи.
Просто примеры по FS (CDC, audio и проч) я уже нашел. Осталось только работоспособость проверить.
Venom вне форума   Ответить с цитированием
Старый 11.10.2012, 12:25   #22
Venom
Senior Member
 
Регистрация: 19.05.2009
Сообщений: 319
Вес репутации: 127/44
Venom will become famous soon enoughVenom will become famous soon enough
По умолчанию Re: STM32F4Discovery Timer Interrupt

Сейчас застрял с ЦАПом.
Есть проект
http://yazanamu-iar-workspace-stm32f...eration/main.c
Компилится замечательно, все работает.
Теперь пытаюсь заставить его вывести синус на первый ЦАП.
Я взял функцию
void DAC_Ch1_EscalatorConfig(void)

из выше расположенной ссылки и поменял буфер с базовым адресом (выделено жирным шрифтом).
Не работает. Дополнительно если я выключаю инициализацию одного канала DAC, то второй тоже перестает работать.
Код:
void DAC_Ch1_TriangleDMA(void)
{
  DMA_InitTypeDef DMA_InitStructure;

  /* DAC channel1 Configuration */
  DAC_InitStructure.DAC_Trigger = DAC_Trigger_T6_TRGO;
  DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None;
  DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Enable;
  DAC_Init(DAC_Channel_1, &DAC_InitStructure);

  /* DMA1_Stream6 channel7 configuration **************************************/  
  DMA_DeInit(DMA1_Stream6);
  DMA_InitStructure.DMA_Channel = DMA_Channel_7;  
  DMA_InitStructure.DMA_PeripheralBaseAddr = DAC_DHR12R1_ADDRESS;
  DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&Sine12bit;
  DMA_InitStructure.DMA_BufferSize = 72;
  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
  DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral;
  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
  DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
  DMA_InitStructure.DMA_Priority = DMA_Priority_High;
  DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;         
  DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;
  DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
  DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
  DMA_Init(DMA1_Stream6, &DMA_InitStructure);    

  /* Enable DMA1_Stream6 */
  DMA_Cmd(DMA1_Stream6, ENABLE);
  
  /* Enable DAC Channel1 */
  DAC_Cmd(DAC_Channel_1, ENABLE);

  /* Enable DMA for DAC Channel1 */
  DAC_DMACmd(DAC_Channel_1, ENABLE);
  

#define DAC_DHR12R1_ADDRESS    0x40007408
#define DAC_DHR8R1_ADDRESS     0x40007410
#define DAC_DHR12R2_ADDRESS    0x40007414

}
Сейчас сижу и курю мануал к контроллеру... Может, кто сталкивался и подскажет, откуда проблема?
Что еще для меня непонятно: в таблице 20 Reference Manual я вижу, что DAC1 поддерживается каналом 7 и потоком 5, а в примере используется поток 6. И при этом работает...
Venom вне форума   Ответить с цитированием
Старый 23.10.2012, 13:50   #23
Venom
Senior Member
 
Регистрация: 19.05.2009
Сообщений: 319
Вес репутации: 127/44
Venom will become famous soon enoughVenom will become famous soon enough
По умолчанию Re: STM32F4Discovery Timer Interrupt

Вот код запуска АЦП с двойным буфером и входом в прерывание по заполнению буфера.
Но: я никак не могу заставить его работать с желаемой мною частотой. Сейчас, судя по всему, он работает с 2,5 МГц.
На подключенный тактирующий таймер Timer8 он не реагирует.
Кто сумел справиться, подскажите, в чем проблема?

Код:
void ADC3_CH3_DMA_Config(void)
{
  ADC_InitTypeDef       ADC_InitStructure;
  ADC_CommonInitTypeDef ADC_CommonInitStructure;
  DMA_InitTypeDef       DMA_InitStructure;
  GPIO_InitTypeDef      GPIO_InitStructure;

  /* Enable ADC3, DMA2 and GPIO clocks ****************************************/
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2 | RCC_AHB1Periph_GPIOA, ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC3, ENABLE);

  /* DMA2 Stream0 channel0 configuration **************************************/
  DMA_InitStructure.DMA_Channel = DMA_Channel_2;  
  DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADC3_DR_ADDRESS;
  DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&ADC3ConvertedValue0;
  DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;
  DMA_InitStructure.DMA_BufferSize = MAX_ADC_MASS;
  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
  DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
  DMA_InitStructure.DMA_Priority = DMA_Priority_High;
  DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;         
  DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;
  DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
  DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
  
  //включаем два буфера
  DMA_DoubleBufferModeConfig(DMA2_Stream0, (uint32_t)&ADC3ConvertedValue1, (uint32_t)&ADC3ConvertedValue0);
  DMA_DoubleBufferModeCmd(DMA2_Stream0, ENABLE);
   
  
  DMA_Init(DMA2_Stream0, &DMA_InitStructure);
  
  DMA_ITConfig(DMA2_Stream0, DMA_IT_TC, ENABLE);
  
  DMA_Cmd(DMA2_Stream0, ENABLE);

  /* Configure ADC3 Channel12 pin as analog input ******************************/
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

  /* ADC Common Init **********************************************************/
  ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;
  ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div2;
  ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;
  ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;
  ADC_CommonInit(&ADC_CommonInitStructure);

  /* ADC3 Init ****************************************************************/
  ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
  ADC_InitStructure.ADC_ScanConvMode = DISABLE;
  ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
  ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_Rising;
  ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T8_TRGO;
  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
  ADC_InitStructure.ADC_NbrOfConversion = 0;
  ADC_Init(ADC3, &ADC_InitStructure);

  /* ADC3 regular channel3 configuration *************************************/
  ADC_RegularChannelConfig(ADC3, ADC_Channel_3, 1, ADC_SampleTime_3Cycles);

 /* Enable DMA request after last transfer (Single-ADC mode) */
  ADC_DMARequestAfterLastTransferCmd(ADC3, ENABLE);

  /* Enable ADC3 DMA */
  ADC_DMACmd(ADC3, ENABLE);

  /* Enable ADC3 */
  ADC_Cmd(ADC3, ENABLE);
  
  
    //прерывание
  NVIC_InitTypeDef      NVIC_InitStructure;
  NVIC_InitStructure.NVIC_IRQChannel = DMA2_Stream0_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
  NVIC_EnableIRQ(DMA2_Stream0_IRQn);
  
  ADC_SoftwareStartConv(ADC3);
}
Venom вне форума   Ответить с цитированием
Старый 23.10.2012, 14:29   #24
Venom
Senior Member
 
Регистрация: 19.05.2009
Сообщений: 319
Вес репутации: 127/44
Venom will become famous soon enoughVenom will become famous soon enough
По умолчанию Re: STM32F4Discovery Timer Interrupt

Проблема решилась:
1. Вычеркиваем ADC_SoftwareStartConv(ADC3);
2. ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; //т.к. используется запуск ацп по таймеру
Venom вне форума   Ответить с цитированием
Ответ

Метки
interrupt, stm32, timer


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
MPLAB не находит c018i.o qwerty1 Продукция MICROCHIP 45 22.04.2011 12:14
Знатокам ECAN dsPic33, на какой вектор перейдёт процес? kotlyara Продукция MICROCHIP 5 09.10.2009 19:38
PIC18F4520 проблемы с UART-ом AlHakim Продукция MICROCHIP 4 30.10.2007 07:31
CCP2 в PIC18F4520 не поддается укращению :) AlHakim Продукция MICROCHIP 19 26.09.2007 08:08
ассембл. ISR в MPLAB C30 SergeyKN Продукция MICROCHIP 10 30.08.2007 13:20


Часовой пояс GMT +3, время: 11:48.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd. Перевод: zCarot