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

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

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

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

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

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


 
Опции темы
Непрочитано 16.08.2011, 20:30  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,891
Сказал спасибо: 930
Сказали Спасибо 4,319 раз(а) в 2,581 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от zheleznjakov Посмотреть сообщение
Раньше то же так думал, но сейчас с хорошей начинкой мк и постоянной борьбой за потребление стараюсь по больше спать и по меньше считать
Согласен. Если устройство мобильное. Паузы - плохой тон, согласен. Но не всегда есть смысл в хорошем тоне. Иногда прозрачность кода куда важнее. Хотя, вы меня убедили, напишу задержки на таймере и режиме сна. Хотя стоит ли спать ради 4-5мс? Да и ради 100мс стоит ли?
Реклама:
Easyrider83 вне форума  
Непрочитано 16.08.2011, 21:15  
st_1
Заблокирован
 
Регистрация: 26.12.2009
Сообщений: 3,134
Сказал спасибо: 117
Сказали Спасибо 867 раз(а) в 614 сообщении(ях)
st_1 на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от zheleznjakov Посмотреть сообщение
Раньше то же так думал, но сейчас с хорошей начинкой мк и постоянной борьбой за потребление стараюсь по больше спать и по меньше считать
Всё зависит от задачи и от питания... сетевое или батарейное...
st_1 вне форума  
Непрочитано 16.08.2011, 22:16  
Murka-MakMur
Вид на жительство
 
Аватар для Murka-MakMur
 
Регистрация: 05.09.2007
Адрес: Новороссия ЛНР Рубежное -> РФ Калуга
Сообщений: 343
Сказал спасибо: 10
Сказали Спасибо 69 раз(а) в 54 сообщении(ях)
Murka-MakMur на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от Easyrider83 Посмотреть сообщение
Хотя стоит ли спать ради 4-5мс? Да и ради 100мс стоит ли?
Ну так помехочувствительность будет лучше.
__________________
Политика России будет выглядеть неоднозначной до тех пор, пока не будет решен исход битвы.
Чем больше слёз тем больше облегчения, в слезах и заключается лечение.
Не зли меня
Murka-MakMur вне форума  
Непрочитано 17.08.2011, 06:51  
^smbd^
Частый гость
 
Регистрация: 18.01.2011
Сообщений: 21
Сказал спасибо: 5
Сказали Спасибо 1 раз в 1 сообщении
^smbd^ на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от tanq Посмотреть сообщение
Я так не пробовал, в даташите вроде упоминается что прерывание будет только после последнего преобразования. Может быть, если отключить флаг ADC_CR1_SCAN, тогда прерывание будет выдаваться каждый раз. Но я не пробовал. Я делал зауск преобразования вручную по таймеру, на 1 канал, - работает.
Сейчас прочитал , что обработку более одного канала без дма не сделать.
А как обработку из ДМА сделать?
Ну то есть мне нужно например хотя бы два( три и т.д.) канала ацп, значения из которых обрабатываются программно. Как получить?

Последний раз редактировалось ^smbd^; 17.08.2011 в 08:27.
^smbd^ вне форума  
Непрочитано 17.08.2011, 09:08  
uk8amk
Вид на жительство
 
Регистрация: 05.07.2006
Адрес: Tashkent
Сообщений: 454
Сказал спасибо: 24
Сказали Спасибо 67 раз(а) в 44 сообщении(ях)
uk8amk на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Да, я тоже поддерживаю вопрос ^smbd^ о совместной работе DMA и ADC. Что-то у меня получается совсем не то, что нужно.
Переменный резистор подключен к PC0(ADC IN 10) .
Буфер adc_buf[] на 256 слов, в него складываются результаты преобразований. По окончании работы dma вызывается прерывание(проверено-работает) окончания передачи, в нем отключаются adc и очищается флаг прерывания.
Симптомы: отладчик на дискавери показывает что adc_buf[0]...adc_buf[15], 64...79, 128...143, 192...207 содержат действительные значения данных АЦП. Остальные индексы просто забиты нулями. Что я делаю не так?

Код:
PHP код:
#define STM32F10X_MD_VL

#include "stm32f10x.h"

#define DMA_BUF_LEN    256
unsigned int adc_buf[DMA_BUF_LEN];

// Îáðàáîò÷èê ïðåðûâàíèé
void DMAChannel1_IRQHandler(void)
{
    
ADC1-›CR2 &= (~ADC_CR2_ADON); //power-off ADC
    
DMA1-›IFCR DMA_IFCR_CGIF1 DMA_IFCR_CTCIF1;//clear DMA interrupt flags
}

int main(void)
{
    
unsigned int i;

    
//Clock config
    
RCC-›AHBENR RCC_AHBENR_DMA1EN;
    
RCC-›APB2ENR RCC_APB2ENR_IOPCEN RCC_APB2ENR_AFIOEN RCC_APB2ENR_ADC1EN;

    
GPIOC-›CRL 0// analog input

    //DMA1 Ch1 config
    
DMA1_Channel1-›CPAR = (unsigned int) (&ADC1-›DR);//peripheral adress
    
DMA1_Channel1-›CMAR = (unsigned intadc_buf;//memory adress
    
DMA1_Channel1-›CNDTR = (unsigned intDMA_BUF_LEN;
    
DMA1_Channel1-›CCR DMA_CCR1_MSIZE_1 DMA_CCR1_PSIZE_1 DMA_CCR1_MINC DMA_CCR1_TCIE DMA_CCR1_EN;
    
//DMA1_Channel1-›CCR = (2‹‹10) | (2‹‹8) | (1‹‹7) | (1‹‹1) | (1‹‹0);

    //NVIC config
    
NVIC-›ISER[0] = (1‹‹11);//enable DMA_ch1 line

    //ADC1 config
    //ADC1-›CR2 = ADC_CR2_EXTTRIG | (0x07‹‹17) | ADC_CR2_DMA | ADC_CR2_CONT | ADC_CR2_ADON;
    
ADC1-›CR2 ADC_CR2_CONT ADC_CR2_DMA |  ADC_CR2_ADON;
    
ADC1-›SMPR1 1;//7.5 cycles for ch10
    
ADC1-›SMPR2 0;
    
ADC1-›SQR3 =  10;//len=1, ch=10

    
for(i=0i1000i++);//delay for ADC Tstab
    //ADC1-›CR2 |= ADC_CR2_SWSTART; //start ADC conversion 
    
ADC1-›CR2 |= ADC_CR2_ADON;

    while(
1);

Проект uVision4.
Вложения:
Тип файла: rar ADC_DMA.rar (234.7 Кб, 93 просмотров)
uk8amk вне форума  
Непрочитано 17.08.2011, 12:58  
^smbd^
Частый гость
 
Регистрация: 18.01.2011
Сообщений: 21
Сказал спасибо: 5
Сказали Спасибо 1 раз в 1 сообщении
^smbd^ на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от uk8amk Посмотреть сообщение
Да, я тоже поддерживаю вопрос ^smbd^ о совместной работе DMA и ADC. Что-то у меня получается совсем не то, что нужно.
Переменный резистор подключен к PC0(ADC IN 10) .
Буфер adc_buf[] на 256 слов, в него складываются результаты преобразований. По окончании работы dma вызывается прерывание(проверено-работает) окончания передачи, в нем отключаются adc и очищается флаг прерывания.
Симптомы: отладчик на дискавери показывает что adc_buf[0]...adc_buf[15], 64...79, 128...143, 192...207 содержат действительные значения данных АЦП. Остальные индексы просто забиты нулями. Что я делаю не так?

Код:
PHP код:
 
Проект uVision4.
Это ведь не полный проект?
Я мельком посмотрел и не увидел ни инициализации системы тактирования, ни инициализации портов.
У меня , кстати почему-то и в прерывание твое не убегает.

Вот моя новая настройка АЦП:
Цитата:
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-›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 DMA_init(void)
{
RCC-›AHBENR |= RCC_AHBENR_DMA1EN; // подаю такты на DMA1
DMA1_Channel1-›CPAR= (uint32_t) &ADC1-›DR; //адрес периферийного устройства
DMA1_Channel1-›CMAR = (unsigned int) adc_buf;//адрес памяти
DMA1_Channel1-›CNDTR |= DMA_CNDTR2_NDT; //колличество регистров2
DMA1_Channel1-›CCR |=DMA_CCR1_CIRC //использовать цикличный режим ( не уверен, что надо)
DMA1_Channel1-›CCR |= DMA_CCR1_MSIZE_1; //размер памяти 32 bit
DMA1_Channel1-›CCR |=DMA_CCR1_PSIZE_1 ; //размер периферии 32 bit
DMA1_Channel1-›CCR |=DMA_CCR1_MINC ; //memory increment mode ( не уверен что надо)
DMA1_Channel1-›CCR |= DMA_CCR1_TCIE ; // прерывание по окончанию передачи
DMA1_Channel1-›CCR |=DMA_CCR1_EN; // разрешаем работу

}
в мейне пишу
Цитата:
NVIC_EnableIRQ(DMA1_Channel1_IRQn);
прерывание
Цитата:
void DMAChannel1_IRQHandler(void) // Прерывание от DMA
{



DMA1-›IFCR = DMA_IFCR_CGIF1 | DMA_IFCR_CTCIF1;//clear DMA interrupt flags
}
Компилирую, запускаю.
В прерывание не сваливается, в буфер ниче не пишет.

Что я делаю не так?

Последний раз редактировалось ^smbd^; 17.08.2011 в 13:42.
^smbd^ вне форума  
Непрочитано 17.08.2011, 19:13  
zheleznjakov
Прописка
 
Аватар для zheleznjakov
 
Регистрация: 31.03.2010
Сообщений: 200
Сказал спасибо: 3
Сказали Спасибо 48 раз(а) в 41 сообщении(ях)
zheleznjakov на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Если опыта мало, возьмите пример от либы разберитесь с ним, на его основе попробуйте собрать свое решение, а потом можно уже и отдельные битики переключать.
__________________
ziblog.ru
zheleznjakov вне форума  
Непрочитано 17.08.2011, 19:42  
tanq
Гражданин KAZUS.RU
 
Регистрация: 12.10.2009
Сообщений: 566
Сказал спасибо: 30
Сказали Спасибо 136 раз(а) в 110 сообщении(ях)
tanq на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

У меня DMA нормально работает.
Сообщение от ^smbd^ Посмотреть сообщение
Что я делаю не так?
Вроде все правильно, хотя команды на включение АЦП в этом коде нет.
tanq вне форума  
Непрочитано 17.08.2011, 21:08  
<smbd>
Частый гость
 
Регистрация: 20.03.2010
Сообщений: 27
Сказал спасибо: 10
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
<smbd> на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от ^smbd^ Посмотреть сообщение
ADC1-›CR2 |= ADC_CR2_ADON; // подаем питание на АЦП
А это?
Хотя наверно по логике его в конец инициализации надо...
<smbd> вне форума  
Непрочитано 17.08.2011, 23:22  
tanq
Гражданин KAZUS.RU
 
Регистрация: 12.10.2009
Сообщений: 566
Сказал спасибо: 30
Сказали Спасибо 136 раз(а) в 110 сообщении(ях)
tanq на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Питание - это питание. А для запуска надо еще раз ADON после всех инициализаций.
tanq вне форума  
 

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

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

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, время: 12:08.


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