Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

Re: STM32 новичку в ARM что к чему

Чт июн 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 байта передаются

Re: STM32 новичку в ARM что к чему

Чт июн 07, 2018 13:31:33

А зачем Вам флаги USART если передачей управляет DMA ? USART сам говорит DMA когда ему подавать следующий байт, а DMA сообщит Вам когда отправит все байты в USART.

Re: STM32 новичку в ARM что к чему

Чт июн 07, 2018 14:05:59

Ну вообще для RS485, ну и так для понимания

Re: STM32 новичку в ARM что к чему

Чт июн 07, 2018 14:40:51

Кстати, у новых МК есть аппаратный выход для дерганья RE/DE.

Может пригодится

Спойлер[url]
http://www.st.com/content/ccc/resource/ ... 249778.pdf
[/url]

Re: STM32 новичку в ARM что к чему

Сб июн 09, 2018 06:48:41

Как узнать когда USART+DMA закончила принимать данные ? В случае переменной длины ответного пакета (СТАРТ,ДАННЫЕ[],СТОП)
Я так понял что флаг DMA_ISR_TCIF3 выставиться, только тогда когда CNDTR==0
т.е изначально надо знать длину ответного пакета, что бы её занести в CNDTR

PS: процессор STM32F103

Re: STM32 новичку в ARM что к чему

Сб июн 09, 2018 07:39:11

Можно принять заголовок пакета по прерываниям, в нем указать количество данных, а потом запустить дма и ,желательно, таймер таймаута. Если не дождались всех данных указанных в заголовке, отключаем дма, включаем прерывания, ждем следующий заголовок.

Re: STM32 новичку в ARM что к чему

Сб июн 09, 2018 16:19:26

Можно принять заголовок пакета по прерываниям

А в чем смысл изменять способ приема для заголовка (не по dma)?

Re: STM32 новичку в ARM что к чему

Сб июн 09, 2018 17:29:25

Чтобы убедиться,что это наш пакет и узнать его длину, затем записать счетчик дма, запутить дма, принять данные.
Если у Вас пакеты разной длины, как Вы организуете приём с помощью дма ?

Re: STM32 новичку в ARM что к чему

Сб июн 09, 2018 18:46:33

Заголовки тоже разной длины? Мне просто не понятен смысл инженерного решения.

- Если можно заголовки принимать по прерыванию, зачем хвост принимать по DMA (ведь производительности и так хватает)
- Если заголовок фиксированной длины, почему бы его тоже не принимать по DMA.

С моей точки зрения, есть задача, где надо принимать данные переменной длины. Она сводится к задаче приема 2 чанков известной длины. Менять способ приема байтов для этого не требуется. Либо вы в неявном виде решали какую-то еще задачу, которую не озвучили. Поэтому я спросил, зачем вы так сделали.

Re: STM32 новичку в ARM что к чему

Сб июн 09, 2018 20:16:22

Согласен. Для простой связи двух устройств по UART не нужно ничего выдумывать.

Re: STM32 новичку в ARM что к чему

Вс июн 10, 2018 00:27:59

Я бы предложил найти по вкусу библиотеку FSM, и научиться расписывать состояния конечного автомата, включая отработку таймаутов. И не пытаться заниматься блочной обработкой, пока с побайтовой не станет получаться идеально (делать через обычные прерывания и не лезть в дма).

Re: STM32 новичку в ARM что к чему

Вт июн 12, 2018 04:05:03

pvit, все так и сделал, с прерываниями мне не нравиться, что оно может дергать другие процессы 50-60 раз. В последнее время FSM, начал юзать через адрес функции, а не через swith case, так что в последнем варианте наворотил аж 4 события на каждую команду (передача,прием, передача ок, таймаут)
PS: При помощи DMA сократилось несколько состояний, хотя возможно предыдущий вариант на case был не оптимально написан.

Re: STM32 новичку в ARM что к чему

Вт июн 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 например.
Ну и другие интересные штучки.

Re: STM32 новичку в ARM что к чему

Вт июн 12, 2018 09:40:44

И как же в этих цифрах ориентироваться теперь?

Никак, пиши как все нормальные люди на C/C++ и с этими цифрами практически никогда не будешь пересекаться.

Re: STM32 новичку в ARM что к чему

Вт июн 12, 2018 10:12:57

СКАЗОЧНИК писал(а):Однако, создать первый же проект в Кейле вызывает столько трудностей, что я два дня разбирался что и где и сколько скачать и установить, чтобы можно было МК выбрать тот, что у меня.
Кейл это не единственная IDE. :)
Есть другие. :) http://purebasic.mybb.ru/viewtopic.php?id=575
https://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

Re: STM32 новичку в ARM что к чему

Вт июн 12, 2018 10:48:46

Потом читал всяческие сайты про ассемблер к СТМ32. И про организацию памяти.

В детстве, когда дури было много, я из интереса взялся нарисовать шифратор AES на ассемблере, под StrongARM. Было интересно, что получится по сравнению с C. В итоге обнаружил у себя 2 пропущенные оптимизации и 2 ошибки. Больше подобной фигней с ассемблером не страдал. Чего и вам желаю.

Re: STM32 новичку в ARM что к чему

Вт июн 12, 2018 11:02:25

Ладно-ладно. Пусть не ассемблер.
однако же где-то было написано, что вся программа может быть на Си. Но обработчики прерывания на ассемблере.. Типа, что АРМ Кортекс-М3 не понимает по другому. Ну, я так понял из прочитанного.
Просто нарвался на сайт типа радиохлама, где про СТМ так уроки подаваются на ассемблере. ))))

Добавлено after 6 minutes 23 seconds:
О!! Тупо стереть флеш с этой платы у меня получилось.

Добавлено after 2 minutes 20 seconds:
Больше не мигает светодиодом... Похоже, что это говорит, что драйвер на СТ-Линк у меня уже установлен совместно с Кейлом.

Кстати, не хочу рассматривать другую среду разработки. Эта бесплатна для вполне себе большого кода. И вроде как официальна нормальная.
А если не хватит, то мы ее крякнем.

Re: STM32 новичку в ARM что к чему

Вт июн 12, 2018 11:10:24

СКАЗОЧНИК писал(а):однако же где-то было написано, что вся программа может быть на Си. Но обработчики прерывания на ассемблере.. Типа, что АРМ Кортекс-М3 не понимает по другому.
Там сказки рассказывали. :))) Проект может быть полностью на C или C++ включая стартап. А может быть на бейсике или паскале, кому как больше нравится. :)

Re: STM32 новичку в ARM что к чему

Вт июн 12, 2018 11:15:52

Есть какая-нибудь школа, методичка, сказка для детей, как работать с этими СТМ32? Так, чтобы занимательно, понятно. Но в то же время не по ардуиновски. Чтобы все же самому можно было туже библиотечку к 1602 ручками сочинить, а не готовую только использовать.

Re: STM32 новичку в ARM что к чему

Вт июн 12, 2018 11:24:56

СКАЗОЧНИК писал(а):Кстати, не хочу рассматривать другую среду разработки.
Вот это зря. Для STM32 есть около десятка IDE и каждая со своими особенностями. Стоит попробовать некоторые из них и выбрать наиболее удобную. :)

СКАЗОЧНИК писал(а):Есть какая-нибудь школа, методичка, сказка для детей, как работать с этими СТМ32?
Есть статьи в интернете. :)

СКАЗОЧНИК писал(а):Чтобы все же самому можно было туже библиотечку к 1602 ручками сочинить
Для этого достаточно научится работать с портом в/в МК и знать как работать с 1602.
Ответить