Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 05.09.2011, 12:28  
tanq
Гражданин KAZUS.RU
 
Регистрация: 12.10.2009
Сообщений: 576
Сказал спасибо: 30
Сказали Спасибо 138 раз(а) в 110 сообщении(ях)
tanq на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

^smbd^
В этом коде похоже что событие для TRGO выбрано не то. Кроме того, из-за криворукости инженеров АЦП запускается от TRGO не по фронту, а по уровню. Обнаружил это на STM8, но там почти такой же АЦП. По этой причине Запутить АЦП от таймера можно только по переполнению, а по compare event - уже нет, потому что он начинает постоянно там запускаться, когда TRGO=1.

Сообщение от pve70 Посмотреть сообщение
А успеет процессор сделать это?
Успеет, прерывание срабатывает при более высоком напряжении чем собственно отключение процессора.
Реклама:
tanq вне форума  
Непрочитано 05.09.2011, 14:39  
^smbd^
Частый гость
 
Регистрация: 18.01.2011
Сообщений: 21
Сказал спасибо: 5
Сказали Спасибо 1 раз в 1 сообщении
^smbd^ на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от tanq Посмотреть сообщение
^smbd^
В этом коде похоже что событие для TRGO выбрано не то. Кроме того, из-за криворукости инженеров АЦП запускается от TRGO не по фронту, а по уровню. Обнаружил это на STM8, но там почти такой же АЦП. По этой причине Запутить АЦП от таймера можно только по переполнению, а по compare event - уже нет, потому что он начинает постоянно там запускаться, когда TRGO=1.


Успеет, прерывание срабатывает при более высоком напряжении чем собственно отключение процессора.
а я и не по компаре эвент я по TRGO timer 3.
Что значит не то?

А если делаю вот так:
Цитата:
void ADC_Init(void) // Инициализация ацп
{
RCC-›APB2ENR |= RCC_APB2ENR_ADC1EN; // подаем такты на АЦП
ADC1-›CR2 |= ADC_CR2_ADON; // подаем питание на АЦП
ADC1-›CR2 |= ADC_CR2_EXTTRIG; // включаем запуск от внешнего события
ADC1-›CR2 |= ADC_CR2_EXTSEL_2; // Запуск по TRGO Timer 3
//ADC1-›CR2 |= ADC_CR2_DMA; // включаю DMA
ADC1-›CR1 |= ADC_CR1_EOCIE; // вкл. прерывания
ADC1-›SQR1&=~ ADC_SQR1_L;
//ADC1-›SQR1|= ADC_SQR1_L_0; // Выставили колличество преобразований равным 2
ADC1-›CR1 |= ADC_CR1_SCAN; // Режим сканирования

ADC1-›SQR3 |= ADC_SQR3_SQ1_1 | ADC_SQR3_SQ1_2|ADC_SQR3_SQ1_3;//На 14 канал 1-е преобр
//ADC1-›SQR3 |=ADC_SQR3_SQ2_0| ADC_SQR3_SQ2_1 | ADC_SQR3_SQ2_2|ADC_SQR3_SQ2_3; //На 15 канал 2-е преобр

for (i=0; i‹20; i++) __NOP(); //wait 1 us
ADC1-›CR2 |= ADC_CR2_CAL; //start calibration
while(ADC1-›CR2 & ADC_CR2_CAL); //wait
NVIC_SetPriority(ADC1_IRQn, 10);

}
и вот такое прерывание:
Цитата:
void ADC1_IRQHandler(void)
{

/*Написали на монитор*/
lcd_clear();
set_cursor(0,0);
lcd_print ("ADC:");
set_cursor(0,1);
lcd_print(itoa(ADC1-›DR,10));

ADC1-›SR&=~ADC_SR_EOC;

}
Все отлично работает.
Так что дело вряд ли в ТРГО. Внизу кусок референса.
Миниатюры:
Нажмите на изображение для увеличения
Название: TRGO.JPG
Просмотров: 83
Размер:	19.6 Кб
ID:	25707  

Последний раз редактировалось ^smbd^; 05.09.2011 в 14:42.
^smbd^ вне форума  
Непрочитано 05.09.2011, 17:55  
tanq
Гражданин KAZUS.RU
 
Регистрация: 12.10.2009
Сообщений: 576
Сказал спасибо: 30
Сказали Спасибо 138 раз(а) в 110 сообщении(ях)
tanq на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

^smbd^
Я не об этом. Я не понял что у таймера используется в качестве выхода TRGO? Для update должно быть 0b010.

В инициализаторе DMA мне не навится следующее: размерность данных надо 16 бит, а не 32; memory increment действительно нужен; надо использовать циклический режим.
Видимо, проблема в том что не использован циклический режим. Без него DMA сам отключится после запонения буфера 256 байтов. А с повторным включением там что-то не так. У меня тоже были странности после того как АЦП пытался слить данные в выключенный канал DMA.
tanq вне форума  
Сказали "Спасибо" tanq
<smbd> (05.09.2011)
Непрочитано 05.09.2011, 19:00  
<smbd>
Частый гость
 
Регистрация: 20.03.2010
Сообщений: 27
Сказал спасибо: 10
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
<smbd> на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от tanq Посмотреть сообщение
^smbd^
Я не об этом. Я не понял что у таймера используется в качестве выхода TRGO? Для update должно быть 0b010.

В инициализаторе DMA мне не навится следующее: размерность данных надо 16 бит, а не 32; memory increment действительно нужен; надо использовать циклический режим.
Видимо, проблема в том что не использован циклический режим. Без него DMA сам отключится после запонения буфера 256 байтов. А с повторным включением там что-то не так. У меня тоже были странности после того как АЦП пытался слить данные в выключенный канал DMA.
Где должно быть 0b010? В TIM3-›СR2?

Дак он чет ни разу в прерывание не выпадывал...
Спробую завтра с циклическим режимом. О результатах напишу.

Последний раз редактировалось <smbd>; 05.09.2011 в 19:09.
<smbd> вне форума  
Непрочитано 05.09.2011, 20:04  
tanq
Гражданин KAZUS.RU
 
Регистрация: 12.10.2009
Сообщений: 576
Сказал спасибо: 30
Сказали Спасибо 138 раз(а) в 110 сообщении(ях)
tanq на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от ‹smbd› Посмотреть сообщение
Где должно быть 0b010? В TIM3-›СR2?
да, но c необходимым сдвигом
Сообщение от ‹smbd› Посмотреть сообщение
Дак он чет ни разу в прерывание не выпадывал...
Это вообще не понятно, хоть один раз должен был вызвать прерывание.

TIM3 тоже неверно настроен. Там надо сначала задать все параметры, потом вручную сделать update, после этого уже включать отсчет. Иначе ARR и проч. пропишутся только после первого переполнения.
Инициализация тоже не так, логичнее сначала DMA включить, потом ADC, а после уж таймер. В текущем варианте DMA настраивается при уже работающем АЦП... Тут необходимо понимать, что в STM много глюков в тех местах, которые на практике не используются и не нужны. Если инициалазаровать переферию задом наперед, то произойдет какое-нибудь нестандартное поведение, которое не описано в документации и вообще лишено смысла.
tanq вне форума  
Эти 2 пользователя(ей) сказали Спасибо tanq за это сообщение:
<smbd> (05.09.2011), ^smbd^ (06.09.2011)
Непрочитано 06.09.2011, 07:59  
^smbd^
Частый гость
 
Регистрация: 18.01.2011
Сообщений: 21
Сказал спасибо: 5
Сказали Спасибо 1 раз в 1 сообщении
^smbd^ на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Я пишу этот бит
Цитата:
#define TIM_CR2_MMS_1 ((uint16_t)0x0020) /*!‹Bit 1 */
исходя из
Цитата:
010: Update - The update event is selected as trigger output (TRGO). For instance a master
timer can then be used as a prescaler for a slave timer.
вручную поставил
Цитата:
TIM3-›EGR |=TIM_EGR_UG; // Сгенерировали update
Включил циклический режим DMA:
Цитата:
DMA1_Channel1-›CCR |=DMA_CCR1_CIRC ; //Включил циклический режимì
Изменил размерность на 16 бит.Кстати , там точно не ссылка на память должна быть , как мне вначале сделать хотелось?
Цитата:
DMA1_Channel1-›CCR |= DMA_CCR1_MSIZE_0; //размер памяти 16 bit
DMA1_Channel1-›CCR |=DMA_CCR1_PSIZE_0 ; //размер периферии 16 bit
Изменил порядок инициализации периферии.

Цитата:
RCC_Init();
Port_Init();
DMA_Init();
ADC_Init();
TIM3_Init();
Все равно не работает. Теперь почему-то и уходит куда-то в файл инициализации. То есть не заходит в главный цикл. Похоже теперь проблема с прерыванием. Если тормознуть , то в буфере в первой ячейке есть что-то. В прерывание как не падало так и не падает.
Вложения:
Тип файла: rar Termostat.rar (369.4 Кб, 71 просмотров)

Последний раз редактировалось ^smbd^; 06.09.2011 в 12:27.
^smbd^ вне форума  
Непрочитано 06.09.2011, 12:14  
tanq
Гражданин KAZUS.RU
 
Регистрация: 12.10.2009
Сообщений: 576
Сказал спасибо: 30
Сказали Спасибо 138 раз(а) в 110 сообщении(ях)
tanq на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

TIM, надо настраивать, а потом уже включать...
Примерно так:

Код:
TIM3-›PSC = 999;
TIM3-›ARR =10000;
TIM3-›CR1 = TIM_CR1_URS | TIM_CR1_ARPE;
TIM3-›EGR =TIM_EGR_UG;
TIM3-›CR2 |= TIM_CR2_MMS_1;
NVIC_SetPriority(TIM3_IRQn, 13);
TIM3-›CR1 |= TIM_CR1_CEN
В регистры DMA надо вставлять адрес первого элемента, но вроде так и сделано?
tanq вне форума  
Непрочитано 06.09.2011, 14:02  
zheleznjakov
Прописка
 
Аватар для zheleznjakov
 
Регистрация: 31.03.2010
Сообщений: 200
Сказал спасибо: 3
Сказали Спасибо 48 раз(а) в 41 сообщении(ях)
zheleznjakov на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Если не совсем понимаете работу почему бы не воспользоваться либами, а потом уже "выдрать" нужные битики?
__________________
ziblog.ru
zheleznjakov вне форума  
Непрочитано 06.09.2011, 14:28  
^smbd^
Частый гость
 
Регистрация: 18.01.2011
Сообщений: 21
Сказал спасибо: 5
Сказали Спасибо 1 раз в 1 сообщении
^smbd^ на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от zheleznjakov Посмотреть сообщение
Если не совсем понимаете работу почему бы не воспользоваться либами, а потом уже "выдрать" нужные битики?
Ну вот к чему этот Ваш комментарий? Помощи-ноль, или для бахвальства сугубо?
^smbd^ вне форума  
Непрочитано 06.09.2011, 17:01  
zheleznjakov
Прописка
 
Аватар для zheleznjakov
 
Регистрация: 31.03.2010
Сообщений: 200
Сказал спасибо: 3
Сказали Спасибо 48 раз(а) в 41 сообщении(ях)
zheleznjakov на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от ^smbd^ Посмотреть сообщение
Ну вот к чему этот Ваш комментарий? Помощи-ноль, или для бахвальства сугубо?
Я задал вам вопрос и хотел узнать почему вы не пошли по этому пути?
Без всяких претензий к вам. Когда у меня есть время и возможность я стараюсь всегда помочь. Да и проще помочь с один простым вопросом, чем с большой задачей. Я сам самоучка и то же много чего не понимаю.
__________________
ziblog.ru
zheleznjakov вне форума  
 

Закладки
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Школа АRMрестлинга Uragan90 Микроконтроллеры, АЦП, память и т.д 54 22.08.2011 16:13
ARM Cortex M3 + Linux SiMiLya Микроконтроллеры, АЦП, память и т.д 10 17.06.2011 17:20
Помогите с STM32 - очень нужно... yakuzaa Микроконтроллеры, АЦП, память и т.д 60 04.08.2010 11:04
Как добавить поддержку для STM32 SFHK Микроконтроллеры, АЦП, память и т.д 11 18.12.2009 18:09


Часовой пояс GMT +4, время: 19:52.


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