Метценгерштейн 0 4 июня, 2015 Опубликовано 4 июня, 2015 · Жалоба Допустим, хочу передать данные из МК в UART через DMA. Я просто настраиваю DMA, UART, запускаю работу DMA по прерываниям. Делаю обычную инициализацию UART. Дальше- оно само в UART все передаст, или нужны подобные ф-ии //Функция передачи символа void Usart1_Send_symbol(uint8_t data) { while(!(USART1->SR & USART_SR_TC)); //Проверяем установку флага TC - завершения предыдущей передачи USART1->DR = data; //Записываем значение в регистр данных - передаем символ } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Spider 0 4 июня, 2015 Опубликовано 4 июня, 2015 · Жалоба в общем случае не нужны. В том и фиша, что оено само буфер выпулит в UART по указанной длине. Можно ещё в конце прерывание получить или флаг, что всё готово. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Метценгерштейн 0 4 июня, 2015 Опубликовано 4 июня, 2015 · Жалоба спасибо. А еще вопрос- я все настроил, а где команда старта, что данные пора в DMA выгрузить? Допустим, у меня массив, а как сказать, что там в массиве новые данные и снова их бы отправить надо? Этим? USART_DMACmd(USART1, USART_DMAReq_Tx, ENABLE); Активируем передачу в последовательный порт по запросу DMA Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 7 5 июня, 2015 Опубликовано 5 июня, 2015 · Жалоба ЭТО надо забыть и внимательно изучить reference manual. Там английским языком сказано, что после того, как DMA передаст запрограммированное количество байт, оно останавливается. Потом снова надо записать требуемое количество в регистры и снова запустить передачу. Термин "выгрузить в DMA" некорректный. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Метценгерштейн 0 5 июня, 2015 Опубликовано 5 июня, 2015 · Жалоба вроде так корректно каждый раз инициализировать передачу снова DMA_Cmd (DMA1_Channel4, ENABLE); // однократно передаем данные по DMA Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 7 8 июня, 2015 Опубликовано 8 июня, 2015 · Жалоба Ещё раз предлагаю ознакомиться с reference manual. И сравнить раздел "Channel configuration procedure" и код DMA_Cmd(). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dart191 0 12 июня, 2015 Опубликовано 12 июня, 2015 · Жалоба вроде так корректно каждый раз инициализировать передачу снова DMA_Cmd (DMA1_Channel4, ENABLE); // однократно передаем данные по DMA Одной командой второй запуск не активировать, необходимо заново провести процедуру переинициализации dma. Самый простой способ вызывать тот же алгоритм, который уже вызвался в программе. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться