ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
13 июля
471961 Топик полностью
pav256 (09.12.2013 12:10, просмотров: 82) ответил pav256 на Не работает ADC->DMA в STM32F4
Провел ряд экспериментов с использованием ST-LINK/v2. 1. Судя по всему сброс ADC1->SR &= ~ADC_SR_STRT; - не останавливает ADC, т.к. под отладчиком при пошаговом переходе от строки DMA2_Stream4->CR |= DMA_SxCR_EN; к строке ADC1->CR2 |= ADC_CR2_SWSTART; значение DMA2_Stream4->NDTR уменьшается. Т.е. ADC продолжает выдавать запросы и как только происходит разблокировка DMA, сразу осуществляется пересылка выборки в память. Хотя может быть и сохраняется отложенный запрос и при перезапуске DMA он выполняется? 2. Возникает проблема порядка расположения поканальных данных в памяти. Если невозможно остановить ADC (постоянный последовательный перебор заданных каналов), то как начать складывать данные в память с нужного (в данном случае с 10-го) канала ADC? 3. Попробовал вместо сброса ADC_SR_STRT и ADC_SR_OVR использовать сброс/установку ADC_CR2_ADON (переход в power down mode и обратно). Судя по всему проблема п.п. 2 решается + автоматически сбрасываются флаги ADC_SR_STRT и ADC_SR_OVR. Однако переход в режим низкого потребления и обратно процесс не быстрый, со всеми вытекающими. Если в строке "//обработка выборок..." (между остановкой и перезапуском ADC и DMA) поставить гигантскую задержку (десятки мс) или точку останова, то все начинает работать. Не понятно откуда вообще берутся 0? Ведь DMA пересылает данные только по запросу ADC, который в свою очередь выставляет запрос только после преобразования, в результате которого 0 быть не может (в данном случае). И каждый раз NDTR оказывается равным 0, т.е весь необходимый массив данных передается успешно? Так же непонятно почему первый раз (после инициализации) все работает как надо, а дальше все рушится, хотя восстанавливаю все (смотрел под отладчиком) необходимые регистры ADC и DMA?