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

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

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

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

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

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


 
Опции темы
Непрочитано 19.05.2019, 13:43  
eddy
Почётный гражданин KAZUS.RU
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,581
Сказал спасибо: 115
Сказали Спасибо 806 раз(а) в 583 сообщении(ях)
eddy на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Что-то после STM32F0 мне F1 совсем плохо дается! Пытаюсь запустить АЦП в связке с ПДП. Сам по себе АЦП работает (т.к. содержимое ADC1-›DR меняется), но ПДП не запускается — в принимающем массиве нули!
Код:
static inline void adc_setup(){
    GPIOB-›CRL |= CRL(0, CNF_ANALOG|MODE_INPUT);
    uint32_t ctr = 0;
    // Enable clocking
    RCC-›APB2ENR |= RCC_APB2ENR_ADC1EN;
    RCC-›CFGR &= ~(RCC_CFGR_ADCPRE);
    RCC-›CFGR |= RCC_CFGR_ADCPRE_DIV8; // ADC clock = RCC / 8
    // wake up ADC
    ADC1-›CR2 |= ADC_CR2_ADON;
    // sampling time - 239.5 cycles for channels 8, 16 and 17
    ADC1-›SMPR2 = ADC_SMPR2_SMP8;
    ADC1-›SMPR1 = ADC_SMPR1_SMP16 | ADC_SMPR1_SMP17;
    // we have three conversions in group -› ADC1-›SQR1[L] = 2, order: 8-›16-›17
    ADC1-›SQR3 = 8 | (16‹‹5) | (17‹‹10);
    ADC1-›SQR1 = ADC_SQR1_L_1;
    // calibration
    ADC1-›CR2 |= ADC_CR2_RSTCAL;
    while((ADC1-›CR2 & ADC_CR2_RSTCAL) && ++ctr ‹ 0xfffff);
    ADC1-›CR2 |= ADC_CR2_CAL;
    ctr = 0; while((ADC1-›CR2 & ADC_CR2_CAL) && ++ctr ‹ 0xfffff);
    // DMA configuration
    RCC-›AHBENR |= RCC_AHBENR_DMA1EN;
    DMA1_Channel1-›CPAR = (uint32_t) (&(ADC1-›DR));
    DMA1_Channel1-›CMAR = (uint32_t)(ADC_array);
    DMA1_Channel1-›CNDTR = NUMBER_OF_ADC_CHANNELS * 9;
    DMA1_Channel1-›CCR |= DMA_CCR_MINC | DMA_CCR_MSIZE_0 | DMA_CCR_PSIZE_0 | DMA_CCR_CIRC | DMA_CCR_EN;
    ADC1-›CR1 |= ADC_CR1_SCAN; // scan mode
    // continuous mode & DMA; enable vref & Tsens; start
    ADC1-›CR2 |= ADC_CR2_CONT | ADC_CR2_DMA | ADC_CR2_TSVREFE;
    // turn ON ADC
    ADC1-›CR2 |= ADC_CR2_ADON;
    ADC1-›CR2 |= ADC_CR2_SWSTART;
}
Реклама:
__________________
Смерть бандеровской мразоте!
eddy вне форума  
Непрочитано 19.05.2019, 14:08  
eddy
Почётный гражданин KAZUS.RU
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,581
Сказал спасибо: 115
Сказали Спасибо 806 раз(а) в 583 сообщении(ях)
eddy на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Вот же чертова магия! Чуть поменял порядок — и заработало! Ну и где про это в даташите написано?
Код:
static inline void adc_setup(){
    GPIOB-›CRL |= CRL(0, CNF_ANALOG|MODE_INPUT);
    uint32_t ctr = 0;
    // Enable clocking
    RCC-›APB2ENR |= RCC_APB2ENR_ADC1EN;
    RCC-›CFGR &= ~(RCC_CFGR_ADCPRE);
    RCC-›CFGR |= RCC_CFGR_ADCPRE_DIV8; // ADC clock = RCC / 8
    // sampling time - 239.5 cycles for channels 8, 16 and 17
    ADC1-›SMPR2 = ADC_SMPR2_SMP8;
    ADC1-›SMPR1 = ADC_SMPR1_SMP16 | ADC_SMPR1_SMP17;
    // we have three conversions in group -› ADC1-›SQR1[L] = 2, order: 8-›16-›17
    ADC1-›SQR3 = 8 | (16‹‹5) | (17‹‹10);
    ADC1-›SQR1 = ADC_SQR1_L_1;
    ADC1-›CR1 |= ADC_CR1_SCAN; // scan mode
    // DMA configuration
    RCC-›AHBENR |= RCC_AHBENR_DMA1EN;
    DMA1_Channel1-›CPAR = (uint32_t) (&(ADC1-›DR));
    DMA1_Channel1-›CMAR = (uint32_t)(ADC_array);
    DMA1_Channel1-›CNDTR = NUMBER_OF_ADC_CHANNELS * 9;
    DMA1_Channel1-›CCR |= DMA_CCR_MINC | DMA_CCR_MSIZE_0 | DMA_CCR_PSIZE_0
                          | DMA_CCR_CIRC | DMA_CCR_PL | DMA_CCR_EN;
    // continuous mode & DMA; enable vref & Tsens; wake up ADC
    ADC1-›CR2 |= ADC_CR2_DMA | ADC_CR2_TSVREFE | ADC_CR2_CONT | ADC_CR2_ADON;
                // | ADC_CR2_EXTTRIG | ADC_CR2_EXTSEL | ADC_CR2_JEXTSEL;
    // calibration
    ADC1-›CR2 |= ADC_CR2_RSTCAL;
    while((ADC1-›CR2 & ADC_CR2_RSTCAL) && ++ctr ‹ 0xfffff);
    ADC1-›CR2 |= ADC_CR2_CAL;
    ctr = 0; while((ADC1-›CR2 & ADC_CR2_CAL) && ++ctr ‹ 0xfffff);
    // turn ON ADC
    ADC1-›CR2 |= ADC_CR2_SWSTART;
    ADC1-›CR2 |= ADC_CR2_ADON;
}
__________________
Смерть бандеровской мразоте!
eddy вне форума  
Непрочитано 19.05.2019, 14:17  
pambaru
Почётный гражданин KAZUS.RU
 
Регистрация: 24.03.2007
Сообщений: 1,330
Сказал спасибо: 85
Сказали Спасибо 596 раз(а) в 361 сообщении(ях)
pambaru на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от eddy Посмотреть сообщение
Ну и где про это в даташите написано?
Bit 0 ADON: A/D converter ON / OFF
Conversion starts when this bit holds a value of 1 and a 1 is written to it.

Причем первая запись 1 туда только включит АЦП, а повторная запись даст старт преобразованию.

ADC1-›CR2 |= ADC_CR2_SWSTART, похоже тут лишнее, т.к. не установлены нужные EXTSEL (111b). Видимо оно и отменяло предыдущий старт АЦП.
pambaru вне форума  
Сказали "Спасибо" pambaru
laser532 (20.05.2019)
Непрочитано 19.05.2019, 14:20  
pambaru
Почётный гражданин KAZUS.RU
 
Регистрация: 24.03.2007
Сообщений: 1,330
Сказал спасибо: 85
Сказали Спасибо 596 раз(а) в 361 сообщении(ях)
pambaru на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Диаграмма из даташита. Еще выдержать Tstab.
Миниатюры:
Нажмите на изображение для увеличения
Название: adc.png
Просмотров: 0
Размер:	25.4 Кб
ID:	141976  
pambaru вне форума  
Непрочитано 19.05.2019, 14:53  
eddy
Почётный гражданин KAZUS.RU
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,581
Сказал спасибо: 115
Сказали Спасибо 806 раз(а) в 583 сообщении(ях)
eddy на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от pambaru Посмотреть сообщение
ADC1-›CR2 |= ADC_CR2_SWSTART, похоже тут лишнее
Да, без него работает, спасибо.
Сообщение от pambaru Посмотреть сообщение
Еще выдержать Tstab.
DMA же принимает данные, так что, все ОК с этим.
Сейчас у меня другая проблема: шутки ради запихнул float, получил hardfault! Компилятор и тулчейн - с армовского сайта (потому как гентушный какую-то муть собирает, которая не работает - где-то я накосячил, наверное).
UPD: я Makefile нарукожопил, вот и не работало; переделал. Теперь все ОК.
__________________
Смерть бандеровской мразоте!

Последний раз редактировалось eddy; 19.05.2019 в 15:08.
eddy вне форума  
Непрочитано 20.05.2019, 10:12  
eddy
Почётный гражданин KAZUS.RU
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,581
Сказал спасибо: 115
Сказали Спасибо 806 раз(а) в 583 сообщении(ях)
eddy на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Меня, похоже, в гугле забанили! Не могу найти, для каких целей в STM32F103 используется прерывание по USB_HP.
__________________
Смерть бандеровской мразоте!
eddy вне форума  
Непрочитано 20.05.2019, 12:13  
sat_art
Вид на жительство
 
Регистрация: 27.11.2007
Сообщений: 428
Сказал спасибо: 19
Сказали Спасибо 39 раз(а) в 30 сообщении(ях)
sat_art на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от eddy Посмотреть сообщение
Меня, похоже, в гугле забанили! Не могу найти, для каких целей в STM32F103 используется прерывание по USB_HP.
Я так понимаю разница, какое прерывание, от приоритета зависит.

Цитата:
USB_HP_CAN_TX USB High Priority
USB_LP_CAN_RX0 USB Low Priority
sat_art вне форума  
Непрочитано 20.05.2019, 12:57  
eddy
Почётный гражданин KAZUS.RU
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,581
Сказал спасибо: 115
Сказали Спасибо 806 раз(а) в 583 сообщении(ях)
eddy на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

А кто эти приоритеты расставляет и где?
__________________
Смерть бандеровской мразоте!
eddy вне форума  
Непрочитано 20.05.2019, 13:05  
sat_art
Вид на жительство
 
Регистрация: 27.11.2007
Сообщений: 428
Сказал спасибо: 19
Сказали Спасибо 39 раз(а) в 30 сообщении(ях)
sat_art на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Цитата:
– USB low-priority interrupt (Channel 20): Triggered by all USB events (Correct
transfer, USB reset, etc.). The firmware has to check the interrupt source before
serving the interrupt.
– USB high-priority interrupt (Channel 19): Triggered only by a correct transfer event
for isochronous and double-buffer bulk transfer to reach the highest possible
transfer rate.
Как я понимаю HP нужно для более быстрой обработки именно правильных событий, для увеличения скорости. А остальное в LP хотя туда передаются и события для HP.
sat_art вне форума  
Эти 2 пользователя(ей) сказали Спасибо sat_art за это сообщение:
eddy (20.05.2019), laser532 (20.05.2019)
Непрочитано 20.05.2019, 13:06  
sat_art
Вид на жительство
 
Регистрация: 27.11.2007
Сообщений: 428
Сказал спасибо: 19
Сказали Спасибо 39 раз(а) в 30 сообщении(ях)
sat_art на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

И HP конечно, как более высокоприоритетное важнее.
sat_art вне форума  
 

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

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

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


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