Кто любит RISC в жизни, заходим, не стесняемся.
Чт июн 07, 2018 12:07:32
Решил чуть по подробнее разобраться с DMA+USART точнее по каким флагам все это завершается.
Пока не понятно, какие флаги состояния сбрасываются, при считывании USART_SR ?
Дело в том что бы дождаться физической завершения передачи, надо:
0) Сбросить флаг USART_SR_TC (считыванием USART_SR )
1) Дождаться самой передачи смотрел DMA_ISR_HTIF2 или DMA_ISR_TCIF2
2) и после этих флагов уже ожидать завершения по USART_SR_TC
В даташите пишут:
"Bit 6TC: Transmission complete
This bit is set by hardware ifthe transmission of a frame containing data is complete and if
TXE is set. An interrupt is generated if TCIE=1in the USART_CR1 register. It is cleared by a
software sequence (a read from the USART_SR register followed by a write to the
USART_DR register). The TC bit can also be cleared by writing a '0' to it. This clearing
sequence is recommended only for multibuffer communication.
0: Transmission is not complete
1: Transmission is complete"По пробовал изменить нулевой пункт на
- Код:
USART3->SR=USART_SR_TC;
Не увидел что он сбрасывается, т.е передача завершается сразу после DMA_ISR_TCIF2, т.е физически ешё 2 байта передаются
Чт июн 07, 2018 13:31:33
А зачем Вам флаги USART если передачей управляет DMA ? USART сам говорит DMA когда ему подавать следующий байт, а DMA сообщит Вам когда отправит все байты в USART.
Чт июн 07, 2018 14:05:59
Ну вообще для RS485, ну и так для понимания
Чт июн 07, 2018 14:40:51
Кстати, у новых МК есть аппаратный выход для дерганья RE/DE.
Может пригодится
Спойлер
[url]
http://www.st.com/content/ccc/resource/ ... 249778.pdf
[/url]
Сб июн 09, 2018 06:48:41
Как узнать когда USART+DMA закончила принимать данные ? В случае переменной длины ответного пакета (СТАРТ,ДАННЫЕ[],СТОП)
Я так понял что флаг DMA_ISR_TCIF3 выставиться, только тогда когда CNDTR==0
т.е изначально надо знать длину ответного пакета, что бы её занести в CNDTR
PS: процессор STM32F103
Сб июн 09, 2018 07:39:11
Можно принять заголовок пакета по прерываниям, в нем указать количество данных, а потом запустить дма и ,желательно, таймер таймаута. Если не дождались всех данных указанных в заголовке, отключаем дма, включаем прерывания, ждем следующий заголовок.
Сб июн 09, 2018 16:19:26
Можно принять заголовок пакета по прерываниям
А в чем смысл изменять способ приема для заголовка (не по dma)?
Сб июн 09, 2018 17:29:25
Чтобы убедиться,что это наш пакет и узнать его длину, затем записать счетчик дма, запутить дма, принять данные.
Если у Вас пакеты разной длины, как Вы организуете приём с помощью дма ?
Сб июн 09, 2018 18:46:33
Заголовки тоже разной длины? Мне просто не понятен смысл инженерного решения.
- Если можно заголовки принимать по прерыванию, зачем хвост принимать по DMA (ведь производительности и так хватает)
- Если заголовок фиксированной длины, почему бы его тоже не принимать по DMA.
С моей точки зрения, есть задача, где надо принимать данные переменной длины. Она сводится к задаче приема 2 чанков известной длины. Менять способ приема байтов для этого не требуется. Либо вы в неявном виде решали какую-то еще задачу, которую не озвучили. Поэтому я спросил, зачем вы так сделали.
Сб июн 09, 2018 20:16:22
Согласен. Для простой связи двух устройств по UART не нужно ничего выдумывать.
Вс июн 10, 2018 00:27:59
Я бы предложил найти по вкусу библиотеку FSM, и научиться расписывать состояния конечного автомата, включая отработку таймаутов. И не пытаться заниматься блочной обработкой, пока с побайтовой не станет получаться идеально (делать через обычные прерывания и не лезть в дма).
Вт июн 12, 2018 04:05:03
pvit, все так и сделал, с прерываниями мне не нравиться, что оно может дергать другие процессы 50-60 раз. В последнее время FSM, начал юзать через адрес функции, а не через swith case, так что в последнем варианте наворотил аж 4 события на каждую команду (передача,прием, передача ок, таймаут)
PS: При помощи DMA сократилось несколько состояний, хотя возможно предыдущий вариант на case был не оптимально написан.
Вт июн 12, 2018 08:45:03
Добрый день знатоки!
Расскажите мне пожалуйста, неужели нельзя сделать какую-нибудь методичку по СТМ32 для идиотов? Ну, для меня т.е.
Как вы умудрились разобраться с ними?
Читал мануал на русском языке по ним. Да, все красиво расписано и даже почти понятно. Читал у Ди-Халта, читал на каком-то сайте Программирование АРМ, смотрел Ютуб...
Однако, создать первый же проект в Кейле вызывает столько трудностей, что я два дня разбирался что и где и сколько скачать и установить, чтобы можно было МК выбрать тот, что у меня.
А у меня STM32А103C8T6 на платке китайской.
Как подключить к нему 4мя проводками СТ-ЛинкV2 вроде разобрался. Но надо ли ставить какие драйвера на сам СТ-Линк не знаю.
От компа зашитая в платку демо-программа тупо мигает светодиодиком.
Потом читал всяческие сайты про ассемблер к СТМ32. И про организацию памяти. Так и не сумев откомпилировать предложенные наборы строк в проекте.
А организация памяти - это вообще отдельная песня! Какие-то от нуля. В десятичных мне говорят, что у него 64 кБайта памяти. А отображают ее в ШЕСТНАДЦАТЕРИЧНЫХ!
Еще и с какими-то дикими нулями... типа 0х200000000
Что это за цифра такая?
почему у нее огромное значение такое? Неужели мне надо переводить все в десятичные?
Я вычитал где-то что у этих МК памяти органзовано (или адресного пространства) до 4 Гбайт.
И как же в этих цифрах ориентироваться теперь?
А вот это вообще меня в ступор загоняет и в уныние. 0хDFFFFFFF.
И почему у него так дико регистры названы? типа: RTE_USART_TX_PORT_ID_DEF GPIO. Как можно это запомнить? Зачем было столько аббревиатур через нижнее подчеркивание перечислять?
Кто-нибудь может популярно и доходчиво объяснить "почему у машины колеса крутятся"? А то я такими темпами быстрее брошу всю эту лабуду.
В видеороликах на Ютубе одно бешенство. Там все сводится к тому, чтобы установить тупой загрузчик от Ардуино и пользоваться АрдуиноИДЕ. Меня это не устраивает.
И всякие ХАЛ и СПЛ пока в сторонку. И всякие визарды-конструкторы тоже.
Хочу разобраться в самой сути этих МК.
З.Ы. Хорошо усвоил зато, что регистры не такие сложные у них, ну по описанию. Все чем-то похоже на АВР. Ставь себе нолики и единички по даташиту и будет работать так, как там и написано. И очень хорошо усвоил, что вся перефирия у него отключена по умолчанию. И чтобы что-то запустить, то это надо разрешать в регистрах.
Понял, что у него ФАПЧ (ПЛЛ) есть, который умножит частоту моего кварца, чтобы работало АЛУ быстрее.
Понял, что у него есть ДМА, которая позволяет без использования АЛУ выкидывать массивы данных быстренько в порты, причем, пока одно выкидывает, другое само подготавливается. Можно клевенько управлять кучей светодиодов типа ВС2812 например.
Ну и другие интересные штучки.
Вт июн 12, 2018 09:40:44
И как же в этих цифрах ориентироваться теперь?
Никак, пиши как все нормальные люди на C/C++ и с этими цифрами практически никогда не будешь пересекаться.
Вт июн 12, 2018 10:12:57
СКАЗОЧНИК писал(а):Однако, создать первый же проект в Кейле вызывает столько трудностей, что я два дня разбирался что и где и сколько скачать и установить, чтобы можно было МК выбрать тот, что у меня.
Кейл это не единственная IDE.
Есть другие.
http://purebasic.mybb.ru/viewtopic.php?id=575https://habr.com/post/191624/ IDE.
https://www.embitz.org/СКАЗОЧНИК писал(а):Но надо ли ставить какие драйвера на сам СТ-Линк не знаю.
Установите STM32 ST-LINK Utility в дистрибутиве которой есть в т. ч. драйвер для ST-Link.
СКАЗОЧНИК писал(а):А организация памяти - это вообще отдельная песня!
Она линейная с адресным пространством 4ГБ.
СКАЗОЧНИК писал(а):В десятичных мне говорят, что у него 64 кБайта памяти.
В STM32F103C8T6 128 кб флеша, только производитель об этом умалчивает.
СКАЗОЧНИК писал(а):Еще и с какими-то дикими нулями... типа 0х200000000
Это адрес начала ОЗУ. Это вам знать не нужно. Компилятор сам поместит переменные по требуемым адресам.
СКАЗОЧНИК писал(а):И всякие ХАЛ и СПЛ пока в сторонку.
Хал может быть, а SPL вполне годная библиотека для начала. Она устроена просто и можно смотреть ее функции чтобы лучше понять как работать с той или иной периферией МК.
СКАЗОЧНИК писал(а):Хочу разобраться в самой сути этих МК.
https://radiokot.ru/forum/viewtopic.php ... 4#p3365804СКАЗОЧНИК писал(а):Понял, что у него есть ДМА, которая позволяет без использования АЛУ выкидывать массивы данных быстренько в порты, причем, пока одно выкидывает, другое само подготавливается. Можно клевенько управлять кучей светодиодов типа ВС2812 например.
Или сделать динамическую индикацию.
http://www.cyberforum.ru/blogs/204791/blog5170.html
Вт июн 12, 2018 10:48:46
Потом читал всяческие сайты про ассемблер к СТМ32. И про организацию памяти.
В детстве, когда дури было много, я из интереса взялся нарисовать шифратор AES на ассемблере, под StrongARM. Было интересно, что получится по сравнению с C. В итоге обнаружил у себя 2 пропущенные оптимизации и 2 ошибки. Больше подобной фигней с ассемблером не страдал. Чего и вам желаю.
Вт июн 12, 2018 11:02:25
Ладно-ладно. Пусть не ассемблер.
однако же где-то было написано, что вся программа может быть на Си. Но обработчики прерывания на ассемблере.. Типа, что АРМ Кортекс-М3 не понимает по другому. Ну, я так понял из прочитанного.
Просто нарвался на сайт типа радиохлама, где про СТМ так уроки подаваются на ассемблере. ))))
Добавлено after 6 minutes 23 seconds:
О!! Тупо стереть флеш с этой платы у меня получилось.
Добавлено after 2 minutes 20 seconds:
Больше не мигает светодиодом... Похоже, что это говорит, что драйвер на СТ-Линк у меня уже установлен совместно с Кейлом.
Кстати, не хочу рассматривать другую среду разработки. Эта бесплатна для вполне себе большого кода. И вроде как официальна нормальная.
А если не хватит, то мы ее крякнем.
Вт июн 12, 2018 11:10:24
СКАЗОЧНИК писал(а):однако же где-то было написано, что вся программа может быть на Си. Но обработчики прерывания на ассемблере.. Типа, что АРМ Кортекс-М3 не понимает по другому.
Там сказки рассказывали.
Проект может быть полностью на C или C++ включая стартап. А может быть на бейсике или паскале, кому как больше нравится.
Вт июн 12, 2018 11:15:52
Есть какая-нибудь школа, методичка, сказка для детей, как работать с этими СТМ32? Так, чтобы занимательно, понятно. Но в то же время не по ардуиновски. Чтобы все же самому можно было туже библиотечку к 1602 ручками сочинить, а не готовую только использовать.
Вт июн 12, 2018 11:24:56
СКАЗОЧНИК писал(а):Кстати, не хочу рассматривать другую среду разработки.
Вот это зря. Для STM32 есть около десятка IDE и каждая со своими особенностями. Стоит попробовать некоторые из них и выбрать наиболее удобную.
СКАЗОЧНИК писал(а):Есть какая-нибудь школа, методичка, сказка для детей, как работать с этими СТМ32?
Есть статьи в интернете.
СКАЗОЧНИК писал(а):Чтобы все же самому можно было туже библиотечку к 1602 ручками сочинить
Для этого достаточно научится работать с портом в/в МК и знать как работать с 1602.
Powered by phpBB © phpBB Group.
phpBB Mobile / SEO by Artodia.