|
3 / 3 / 0
Регистрация: 06.12.2016
Сообщений: 1,605
|
||||||
Таймер, ADC и DMA на STM32F4 (Discovery)10.02.2013, 00:33. Показов 33706. Ответов 22
Метки нет (Все метки)
Привет всем.
Надо запускать ADC1 по таймеру. По мотивам доки и форумов написал следующее - вложение. В main пишу:
А вот ADCVal висит в странном значении 2904 и на реальный уровень на входе АЦП никак не реагирует. Там пока просто потенциометр висит ... Вопрос - почему так происходит? Может я что-то недоинициализировал? И ещё. Как сделать, чтобы АЦП запускался от таймера автоматически, без прерывания таймера, а прерывания получать уже от DMA по заполнению буфера? Из доки понял, что это возможно, но как, я не понял, а внятных примеров не нашёл. Спасибо. Если надо, выложу весь код. PS. Видел много тем здесь по форуму и на других, но они все безрезультатно заглохли. Но мне надо довести это до работающего состояния. Бросать это на полпути я не собираюсь. Про STM32F1 просьба не писать, там периферия иная. У меня STM32F407VGT6, плата STM32F4Dyscovery.
0
|
||||||
| 10.02.2013, 00:33 | |
|
Ответы с готовыми решениями:
22
stm32f4 + ADC + DMA STM32F4 + ADC + TIMER + DMA Stm32f4 adc+dma+tim1 |
|
0 / 0 / 0
Регистрация: 13.05.2011
Сообщений: 401
|
||
| 10.02.2013, 10:21 | ||
0
|
||
|
3 / 3 / 0
Регистрация: 06.12.2016
Сообщений: 1,605
|
||
| 10.02.2013, 12:40 | ||
Если есть пример, ткните носом, пожалуйста.
0
|
||
|
0 / 0 / 0
Регистрация: 13.05.2011
Сообщений: 401
|
|
| 10.02.2013, 23:12 | |
|
Прям такого примера нет, я делал просто непрерывное измерение напряжения и перекладывание результатов в переменную, используя DMA. Такой вариант, как Вам нужно тоже можно реализовать, но я сейчас занят отладкой проекта и помочь смогу только на выходные. Посмотрите примеры с сайта ST:
http://www.st.com/internet/som/SOFTWARE ... ery_fw.zip http://www.st.com/internet/som... ph_lib.zip Во втором архиве точно есть пример работы ADC с DMA.
0
|
|
|
3 / 3 / 0
Регистрация: 06.12.2016
Сообщений: 1,605
|
||||||
| 11.02.2013, 01:11 | ||||||
|
Да, спасибо. Эти архивы я видел ... Посмотрю ещё.
Я тут сделал запуск АЦП по таймеру, походил отладкой, виснет на инициализации таймера:
Если у меня что-то получится, стукну здесь.
0
|
||||||
|
3 / 3 / 0
Регистрация: 06.12.2016
Сообщений: 1,605
|
|||||||||||
| 12.02.2013, 12:54 | |||||||||||
|
Вот, нашёл такое на одном из форумов:
Оно работает вроде нормально, наблюдал переменную под отладчиком. Осталось только понять, как повесить на DMA обработчик по заполнению буфера. И непонятно, откуда взялся адрес ADC_CDR_ADDRESS. Из него DMA результаты читает. У меня тут написано DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)(ADC1->DR); Т.е. регистр данных ADC1. Мой код зависал из-за отсутствия этого самого обработчика прерываний DMA. Убрал у себя вот этот кусок:
Может потому, что я с разгону написал тот же ADC_CDR_ADDRESS, что и в примере выше. У меня ведь один АЦП и один канал. В итоге пока что хрень :) . Кто-нибудь знает, как написать обработчик прерываний DMA?
0
|
|||||||||||
|
3 / 3 / 0
Регистрация: 06.12.2016
Сообщений: 1,605
|
|
| 12.02.2013, 13:41 | |
|
Обработчик прерываний DMA для F4:
// dma2 stream 0 irq homdler void DMA2_Stream0_IRQHomdler ( void ) { } Только что в нём писать ?...
0
|
|
|
3 / 3 / 0
Регистрация: 06.12.2016
Сообщений: 1,605
|
||||||||||||||||
| 13.02.2013, 00:14 | ||||||||||||||||
|
Вот так заработал:
Буфер заполняется нормально. Но как только включаю прерывание DMA, всё сразу наглухо виснет даже под отладчиком. Даже IAR аварийно вылетает. Инициализация прерывания:
0
|
||||||||||||||||
|
0 / 0 / 0
Регистрация: 23.05.2012
Сообщений: 214
|
||||||
| 13.02.2013, 09:19 | ||||||
|
Надо:
0
|
||||||
|
3 / 3 / 0
Регистрация: 06.12.2016
Сообщений: 1,605
|
|
| 13.02.2013, 12:15 | |
|
Спасибо. Утром, перед уходом на работу проверил - вроде заработало. Светодиодик мигает, цифра (среднее по буферу) перестаёт меняться в тот момент, когда он зажигается/гаснет.
Вечером детальнее потестирую. Вчера вечером ещё поковырялся отладчиком, увидел что прерывание возникает. Не думал, что надо ещё Transfer Complete очищать, сбил меня порог в половину буфера: DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull; В чём глубокий смысл сего?
0
|
|
|
0 / 0 / 0
Регистрация: 23.05.2012
Сообщений: 214
|
|
| 13.02.2013, 17:59 | |
|
Прерывание по заполнению половины буфера очень важно, можно делать непрерывную обработку выборок по переменно.
0
|
|
|
3 / 3 / 0
Регистрация: 06.12.2016
Сообщений: 1,605
|
||||||
| 14.02.2013, 12:34 | ||||||
|
Да, понятно. Спасибо.
Погонял вчера, нормально работает. Прикладываю полный вариант библиотеки ADC_DMA_Timer. Методов для задания частоты таймера (дискретизации) нету, всё наглухо вшито в инициализацию, но это разделить не проблема. Кому надо, берите. Компилятор - IAR. Пример использования:
АЦП пока цифрует только один канал, вообще в планах сделать одновременный опрос разных каналов 2-х АЦП (а-ля 2-х канальный осциллограф), есть наброски примитивного кода для этого, оно вроде работает, но до конца я не дотестировал. Сделаю, выложу.
0
|
||||||
|
0 / 0 / 0
Регистрация: 23.05.2012
Сообщений: 214
|
||||||
| 14.02.2013, 13:39 | ||||||
|
Сделал одновременную работу 2хАЦП через ПДП в не прерывном режиме.
0
|
||||||
|
3 / 3 / 0
Регистрация: 06.12.2016
Сообщений: 1,605
|
|
| 14.02.2013, 14:34 | |
|
moksir, спасибо.
Дома проверю, отпишусь.
0
|
|
|
Syssott
|
|
| 14.06.2015, 04:42 | |
|
Всем доброго времени суток. Я новичок, камнями сильно не бросайте. Взял отсюда код, спасибо авторам,ну и собсна возникло 2 вопроса, очень глупых, я так считаю, но тем не менее спрошу,перед этим скажу в чем работаю: Coosox, собсна сама платка STM32f4 Dyscovery, первый вопрос: DrawString ( sBuffer, 10, 70, 0xFFE0, 0x0000, 1 );
Компилятор ругается на эту функцию, не могу понять с какой библиотеки стянута эта функция и второй вопрос: Заккоментив вышеупомянутую функцию по усарту с АЦП идет просто мусор, может я что неправильно сделал при сборке всего этого, может нужно значения конвертировать или что делать, я тестирую все на примере 1,5в батарейки, для того, чтобы следить за разницей в показаниях, но вот кроме мусора ничего не видно...если нужно, следующим сообщением прилеплю проектик. Заранее всем спасибо. |
|
|
3 / 3 / 0
Регистрация: 06.12.2016
Сообщений: 1,605
|
|
| 14.06.2015, 08:09 | |
|
Здравствуйте.
DrawString - это вывод строки на дисплей. К АЦП не имеет ни малейшего отношения. Смело можете выкинуть. Или поменять на что-то родственное своё, если вы подключили к плате какой-то дисплей. Насчёт самого АЦП сложно что-то сказать, не видя код. Посмотрите отладчиком в буфер, куда кладёт DMA - там правильные данные? Тут же совершенно непонятно - то ли АЦП у Вас не работает, то ли UART ... Или отключите АЦП, заполните буфер уарта заранее известными данными и проверьте его самого без АЦП.
0
|
|
|
Syssott
|
|
| 14.06.2015, 08:31 | |
|
hd44780, Усарт работает стабильно, проверено сообщениями от SD-карточки, которая тоже прикручена....тут небольшая загвостка....последнее время отладчик ни в какую не работает....в этом и беда....не могу проследить что там по АЦП двигает. По поводу DrawString спасибо, не думал, что на дисплей выходят данные. Собсна код такой, как тут написан, никак не менял, только единственное, что вынес в отдельный модуль - так это инициализацию DMA и АЦП, чтобы Мэйн не распухал, код собирается, Мусор идет, но очень заметна разница, когда висит батарейка на аналоговом входе, он четко пишет какие-то данные, но как я не пытался менять модификаторы в sprymtf и просто prymtf, ничего не меняется...а там точно АЦП 1 вешается на PA0, порылся в Шитах на МК и увидел, там, что на PA1 вход АЦП реализован....может я чего путаю....Хотя, эффекта Нуль, как от PA1, так и от PA0...собсна вот. Еще раз повторюсь, различия входящего мусора на лицо, без батарейки он повторяет опрос АЦП, если данных нет, то опрос повторяется в цикле и "значения" одинаковые приходят, когда батарейка подключена, то стабильно построчно пишется мусор, код могу залить на ФО, проект для кокса. Если кому интересно, то можете глянуть.....единственное что, вот не могу понять почему отладчик отвалился...До этого работал стабильно, потом с перебоями, типа устройство не отсутствует, хотя сам прошивальщик от STM видит и шьет его стабильно...а вот кокс не видит, в настройках все стоит, но вот чот ни туда, ни сюда...ни значения не просмотреть, ни отследить откуда мусор прет..Спасибо за быстрый ответ.
|
|
|
0 / 0 / 0
Регистрация: 31.05.2017
Сообщений: 9
|
|
| 30.09.2019, 10:09 | |
|
что-то не могу скачать бибилиотеку, нет ссылки. В чем прикол?
0
|
|
|
87 / 86 / 4
Регистрация: 20.11.2016
Сообщений: 269
|
|
| 30.09.2019, 19:47 | |
|
marsden, как вы вообще собираетесь заняться программированием если вы даже не можете найти файлы в инете? Если файлы не скачиваются, значит они теперь уже располагаются по другим адресам. Открываете адрес ссылок, "вырезаете" из них имена файлов stm32f4_dsp_stdperiph_lib.zip и stm32f4discovery_fw.zip. Забиваете имена файлов в Яндекс и он вам покажет их новые "адреса" на сайте st.com
0
|
|
|
0 / 0 / 0
Регистрация: 31.05.2017
Сообщений: 9
|
||
| 30.09.2019, 20:15 | ||
|
Radikal_78, ну не надо так категорично. Судя по вашему нику, программированием я занялся тогда, когда вы в школу пошли в первый класс.
А если бы тему внимательно читали, то видели бы, что в Таймер, ADC и DMA на STM32F4 (Discovery) написано "Прикладываю". С утра внизу было
0
|
||
| 30.09.2019, 20:15 | |
|
Помогаю со студенческими работами здесь
20
Инжектрированные каналы АЦП (ADC) в STM32F4 Discovery Прошу помощи с DMA на STM32F4 DISCOVERY [РЕШЕНО] STM32F4 ADC + DMA при передачи 1 байта входит в прерывания через 1 бит stm32f4 cmsis PWM-ADC-DMA STM32F4 ADC + DMA передает только 2 раза и не запускаеться Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
||||
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга,
Ты же видел моря и метели.
Как сменялись короны и стяги,
Как эпохи стрелою летели.
- Этот мир — это крылья и горы,
Снег и пламя, любовь и тревоги,
И бескрайние. . .
|
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1
У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\
А в самом низу файла-профиля. . .
|
PowerShell и онлайн сервисы. Валюта (floatrates.com руб.)
iNNOKENTIY21 11.11.2025
PowerShell функция floatrates-rub
Примеры вызова:
# Указанная валюта 'EUR'
floatrates-rub -Code 'EUR'
# Список имеющихся кодов валют
floatrates-rub -Available
function floatrates-rub {
|
PowerShell и онлайн сервисы. Погода (RP5.ru)
iNNOKENTIY21 11.11.2025
PowerShell функция Get-WeatherRP5rss для получения погоды с сервиса RP5
Примеры вызова
Get-WeatherRP5rss
с указанием id 5484 — Москва (восток, Измайлово) и переносом строки:. . .
|
|
PowerShell и онлайн сервисы. Погода (wttr)
iNNOKENTIY21 11.11.2025
PowerShell Функция для получения погоды с сервиса wttr
Примеры вызова:
Погода в городе Омск с прогнозом на день, можно изменить прогноз на более дней, для этого надо поменять запрос:. . .
|
PowerShell и онлайн сервисы. Валюта (ЦБР)
iNNOKENTIY21 11.11.2025
# Получение курса валют
function cbr (] $Valutes = @('USD', 'EUR', 'CNY')) {
$url = 'https:/ / www. cbr-xml-daily. ru/ daily_json. js'
$data = Invoke-RestMethod -Uri $url
$esc = 27
. . .
|
И решил я переделать этот ноут в машину для распределенных вычислений
Programma_Boinc 09.11.2025
И решил я переделать этот ноут в машину для распределенных вычислений
Всем привет. А вот мой компьютер, переделанный из ноутбука.
Был у меня ноут асус 2011 года. Со временем корпус превратился. . .
|
Мысли в слух
kumehtar 07.11.2025
Заметил среди людей, что по-настоящему верная дружба бывает между теми, с кем нечего делить.
|
Новая зверюга
volvo 07.11.2025
Подарок на Хеллоуин, и теперь у нас кроме Tuxedo Cat есть еще и щенок далматинца:
Хочу еще Симбу взять, очень нравится. . .
|