|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
||||||||||||||||
Передача данных от АЦП по USART09.09.2019, 14:45. Показов 6419. Ответов 16
Здравствуйте, есть задача: оцифровывать аналоговый сигнал на нескольких ножках МК (stm32f411) и полученный результат отправлять в ПК по USART, все это должно выполняться циклично примерно раз в 500 млсек. Настроил ADC, DMA, так же выполнил настройку USART. Но не получается отправить данные. Т.е. АЦП оцифровывает сигнал с 5 ножек, записывает данные в буфер, но полученные буфер не получается отправить (данные АЦП - 12 битные), USART настроен на передачу 8 бит.
Код: main.c
0
|
||||||||||||||||
| 09.09.2019, 14:45 | |
|
Ответы с готовыми решениями:
16
Передача данных с АЦП по USART передача данных с 2 портов can и 1 usart в usart передача данных USART + DMA и непонятные иероглифы |
|
874 / 535 / 175
Регистрация: 30.07.2015
Сообщений: 1,739
|
|||||||||||
| 09.09.2019, 15:29 | |||||||||||
|
DmitryDDDD, Ай яй яй, так делать в прерывании
Два. Так у вас отправится только младший байт измерений, учитывая что оцифровка производится в режиме 12 бит.
Как лучше сделать вашу систему: 1) Настраиваем запуск АЦП по триггеру от таймера (смотрим таблицу триггеров в RM). И настраиваем этот таймер на 500 мс 2) Настраиваем DMA на запись в массив (у вас уже сделано). 3) В прерывании DMA выставляем флаг готовности к отправке. И чистим флаг прерывания. 4) В осовно цикле опрашиваем флаг готовности к отправке -> если 1 то отправляем, и сбрасываем в 0. При желании отправку можно тоже по DMA сделать.
0
|
|||||||||||
|
|
|||
| 09.09.2019, 15:44 | |||
__IO uint16_t ADC1ConvertedValue[5]; В функции передачи указатель на массив преобразуется в char* (в МК должен быть эквивалентен uint8_t*) и отправляется через USART. Но т. к. массив имеет размер 10 байт, а отправляется только 5, получается 2.5 канала, как бы странно это не звучало.
0
|
|||
|
874 / 535 / 175
Регистрация: 30.07.2015
Сообщений: 1,739
|
||
| 09.09.2019, 16:23 | ||
|
locm,
В целом в коде каша намешана. DmitryDDDD, вы перед тем как проектировать устройство, (как бы это просто не звучало) карандашиком "архитектуру" нарисуйте, а то у Вас получается все свалено в кучу. В чем выражается проблема? ДАнные приходят некорректные или они не идут вообще? Если первый вариант, то locm, вам объяснил.
0
|
||
|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
|||||||||||||||||||||||||||||||
| 11.09.2019, 13:36 [ТС] | |||||||||||||||||||||||||||||||
|
Всем спасибо за советы, почитал еще информацию, изменил код:
1) Подключение библиотек и создание буфера под данные Кликните здесь для просмотра всего текста
2) Прерывание по DMA Кликните здесь для просмотра всего текста
3)Отправка данных в ПК Кликните здесь для просмотра всего текста
4) Настройка таймера Кликните здесь для просмотра всего текста
5) Настройка АЦП и ДМА Кликните здесь для просмотра всего текста
6) int main Кликните здесь для просмотра всего текста
В режиме отладки данные заполняются в буфер корректно, однако по USART в ПК приходят все нули. Для упрощения решил пока работать только с 8 битными данными. Не уверен на счет правильности выставления и очистки флагов DMA и USART. Причем данные в ПК приходят не раз в 500 млсек, как настроен таймер, а просто несколько пакетов и передача останавливается. В чем может быть проблема? Добавлено через 30 минут _SayHello , locm, Если перекидывать из буфера в USART данные при помощи DMA, можно использовать тот же DMA только другой канал или необходимо настраивать другой DMA?
0
|
|||||||||||||||||||||||||||||||
|
874 / 535 / 175
Регистрация: 30.07.2015
Сообщений: 1,739
|
||||||||||||||||||||||
| 11.09.2019, 14:11 | ||||||||||||||||||||||
Сообщение было отмечено DmitryDDDD как решение
Решение
DmitryDDDD,
сделай так:
DmitryDDDD, Период поправьте еще:
DmitryDDDD,
1
|
||||||||||||||||||||||
|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
|
| 11.09.2019, 14:18 [ТС] | |
|
_SayHello, изменил код, буфер так же заполняется, данные перестали отправляться
readyToTransmitFlag объявил как uint8_t, в цикле while так же пробовал изменять условие на if (readyToTransmitFlag == 1)
0
|
|
|
874 / 535 / 175
Регистрация: 30.07.2015
Сообщений: 1,739
|
|
| 11.09.2019, 14:23 | |
|
DmitryDDDD, Настройку USART скиньте текущую. Что отладчик говорит?
0
|
|
|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
||||||
| 11.09.2019, 14:25 [ТС] | ||||||
|
_SayHello
Настройка USART
0
|
||||||
|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
|
| 11.09.2019, 14:29 [ТС] | |
|
В цикле while отладчик не попадаетт в условие if, только проверяет его бесконечно
0
|
|
|
874 / 535 / 175
Регистрация: 30.07.2015
Сообщений: 1,739
|
||||||
| 11.09.2019, 14:31 | ||||||
|
DmitryDDDD, А сюда попадает?
0
|
||||||
|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
|
| 11.09.2019, 14:34 [ТС] | |
|
_SayHello
Нет, крутится в while, до while тоже не попадает, но буфер при этом заполнился данными, т.е., если я правильно понимаю, прерывание DMA не срабатывает
0
|
|
|
874 / 535 / 175
Регистрация: 30.07.2015
Сообщений: 1,739
|
||||||
| 11.09.2019, 14:42 | ||||||
|
DmitryDDDD, есть подозрения. У вас включаются прерывания АЦП, а обраьотчика не видно. Возможно это блокирует прерывания DMA. Уберите прерывания АЦП они вам не нужны.
1
|
||||||
|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
|
| 11.09.2019, 14:54 [ТС] | |
|
_SayHello , Вы правы, изменил, данные стали отправляться, корректные, спасибо. Есть еще правда пара вопросов: 1) После того, как верну настройку АЦП на 12 битную оцифровку, как-нибудь можно отправлять восемь 16 битных данных по USART, чтобы потом не пришлось их собирать из шестнадцати 8 битных чисел в терминале? 2) Частота работы ядра показывается 16 МГц, мне хотелось бы выполнить настройку на 100 МГц, я недавно создавал тему с вопросом как это можно реализовать, там необходимо менять файл, но у меня он подключен другой: system_stm32f4xx.c, можете подсказать по этому вопросу? Я могу написать Вам из той темы, чтобы не смешивать ее с этой
0
|
|
|
874 / 535 / 175
Регистрация: 30.07.2015
Сообщений: 1,739
|
|||
| 11.09.2019, 15:19 | |||
|
DmitryDDDD,
Если надо, чтобы в терминале просто отображались в виде строк, а не кодов, то надо делать преобразование в строку и ее уже отправлять.
0
|
|||
|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
|
| 11.09.2019, 15:22 [ТС] | |
|
_SayHello понял, спасибо. Сейчас из той темы напишу
0
|
|
| 11.09.2019, 15:22 | |
|
Помогаю со студенческими работами здесь
17
Инициализация USART и передача данных: прокомментировать код STM32 USART-RS485 передача пакета данных Передача данных по SPI, между АЦП и микроконтроллером Stm32f4 usart + внешний ацп Работа с АЦП PIC18F4550 и передача данных на верхний уровень Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога
Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
|
|
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога
Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|