Страница 400 из 446

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

Добавлено: Сб янв 07, 2023 11:58:54
VladislavS
1. DMA1_Channel2 привязан к DMAMUX1_Channel1. Нумерация у них разная.
2. RequestGenerator тебе не нужен.

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

Добавлено: Сб янв 07, 2023 12:06:35
Eddy_Em
VladislavS, о, спасибо! Я и не обратил внимания, что у MUX с нуля нумерация, а у DMA - с единицы. Вот же засранцы!
О RequestGenerator понял. Получил одну передачу, но прерывание не отработало. Это уж буду смотреть, где я накосячил.
А, все просто: я забыл в функции usart3_sendbuf() вставить строчку

Код: Выделить всё

DMA1_Channel2->CCR &= ~DMA_CCR_EN;
в самом начале - иначе настройки не прокатывают же.

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

Добавлено: Сб янв 07, 2023 12:31:56
VladislavS
Eddy_Em, ну вот зачем все эти

Код: Выделить всё

DMA1_Channel2->CCR &= ~DMA_CCR_EN; 
DMA1_Channel2->CCR |= DMA_CCR_EN;
Можно же проще сделать

Код: Выделить всё

void Send_USART2_DMA(uint32_t cnt)
{    
  uint32_t ccr = _VAL2FLD(DMA_CCR_MSIZE,0) | _VAL2FLD(DMA_CCR_PSIZE,0) | DMA_CCR_DIR | DMA_CCR_MINC;
  DMA1_Channel1->CCR = ccr;
  DMA1_Channel1->CNDTR = cnt;
  DMA1_Channel1->CCR = ccr | DMA_CCR_EN;
}
Задефайнить ccr константой или сделать параметром шаблона это уже тонкости реализации, но смысл в том что это константная часть, которую ты сам же раньше и задал. Зачем её вычитывать из DMA чтобы добавить один-два бита?

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

Добавлено: Сб янв 07, 2023 13:44:01
Eddy_Em
VladislavS, вроде как классика ☺
Но да, согласен, так лучше - не нужно лишних операций проводить.

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

Добавлено: Сб янв 07, 2023 14:05:49
Reflector
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4349809#p4349809"]

Код: Выделить всё

USART3->BRR = 640000 / 1152;
[/uquote]
Вот это я понимаю оптимизация, целых четыре нолика сократил :) На С++ я бы так написал:

Код: Выделить всё

USART3->BRR = (64_MHz + 115'200 / 2) / 115'200;
И результат, кстати, будет 556, а не 555, как у тебя.

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

Добавлено: Сб янв 07, 2023 14:14:59
Eddy_Em
Reflector, 115'200 - это макрос что ли? Зачем там апостроф?
Ну, а разница между 555 и 556 невелика, ничего страшного - работает же.
С помощью всех собравшихся, особенно Владислава, таки получилось. USART полностью на DMA (и Tx, и Rx). Конец строки - как обычно - '\n'. В случае переполнения буфера возвращается флаг, что предыдущее сообщение пошло коту под хвост.
P.S. Кстати, в Cortex-M0+ ведь тоже деление не завезли! Уныло, однако. Уж флоаты-то почти никогда не нужны на МК, а вот деление!..
Теперь, пожалуй, еще I2C прикручу к G070, да на этом пока удовлетворюсь. Надо еще какую-нибудь железяку с полноценным SPI прикупить, чтобы SPI тестировать, а то у меня все, что есть - MOSI only.

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

Добавлено: Сб янв 07, 2023 14:35:30
Reflector
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4349883#p4349883"]115'200 - это макрос что ли? Зачем там апостроф?[/uquote]
Обычный разделитель, будет и в С23. А 64_MHz - это строковый литерал, по сути константа, задается следующим образом:

Код: Выделить всё

consteval uint32_t operator "" _MHz(unsigned long long val) { return val * 1'000'000; }
Eddy_Em писал(а):Ну, а разница между 555 и 556 невелика, ничего страшного - работает же.
Здесь невелика, а для других частот и скоростей может и 1% получится. Или тебе парочки инструкций жалко?

Добавлено after 2 minutes 35 seconds:
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4349883#p4349883"]Надо еще какую-нибудь железяку с полноценным SPI прикупить, чтобы SPI тестировать, а то у меня все, что есть - MOSI only.[/uquote]
Соедини SPI1 с SPI2 и тестируй :)

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

Добавлено: Сб янв 07, 2023 14:39:51
Eddy_Em
Reflector, ну, ОК, для красоты и точности:

Код: Выделить всё

#define USART_BRR(speed)    ((64000000 + speed/2) / speed)
...
USART3->BRR = USART_BRR(115200);
Добавлено after 40 seconds:
Соедини SPI1 с SPI2 и тестируй :)
Для этого сначала надо убедиться, что оно работает в обе стороны ☺

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

Добавлено: Сб янв 07, 2023 16:29:53
ARV
[uquote="VladislavS",url="/forum/viewtopic.php?p=4349762#p4349762"][uquote="Dimon456",url="/forum/viewtopic.php?p=4349725#p4349725"]Что-то вас совсем не пойму.[/uquote]Всё просто. Если задача не сделать, а найти причину не делать - результат очевиден.[/uquote]
почти угадали: нет задачи, которую надо решить, есть желание чем-то занять свободное время с пользой. но совсем не хочется потратить его впустую в борьбе с ПО, если существует вариант обойтись без этого. я скорее заставляю себя ковырять ARM, нежели испытываю острое желание это делать.

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

Добавлено: Сб янв 07, 2023 16:45:13
Eddy_Em
ARV, ну вот, коль времени свободного полно - как раз в кайф будет изучить с нуля. Написать Makefile, сделать стартап, линкер под себя написать…
А IDE - это уже последнее, о чем стоит думать. Отлаживать крайне удобно в консоли при помощи gdb. Хотя я все еще считаю отладку нафиг ненужной штукой, но когда вот так, как я, тупишь: смотришь в свой говнокод и очевидных косяков не видишь - да, отладка может помочь. Но, с другой стороны, если ты - не раззвиздяй, как я, то отладчик тебе никогда не понадобится.

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

Добавлено: Сб янв 07, 2023 17:56:43
Dimon456
Eddy_Em писал(а):отладчик тебе никогда не понадобится
Давайте тогда и протеус удалим, и будем методом тыка, типа работает не работает, как в старые добрые времена.
Eddy_Em писал(а):Отлаживать крайне удобно в консоли при помощи gdb.
А можете небольшое видео снять, как это выглядит на деле.

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

Добавлено: Сб янв 07, 2023 18:09:16
tonyk
Reflector, ну, ОК, для красоты и точности:
Код:
#define USART_BRR(speed) ((64000000 + speed/2) / speed)
...
USART3->BRR = USART_BRR(115200);
Это отнюдь не "ОК". А дробная часть (досчёт) в UART у G0 отсутствует? Её почему не вычисляешь? И тупо вписывать частоту как-то нехорошо, впрочем, как и делитель для шины. Так-то в CMSIS есть SystemCoreClock, и код делителя для шины тоже должен быть в регистрах конфигурации.

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

Добавлено: Сб янв 07, 2023 18:22:21
Eddy_Em
[uquote="Dimon456",url="/forum/viewtopic.php?p=4349977#p4349977"]Давайте тогда и протеус удалим[/uquote]
Я без понятия, что это и зачем оно нужно. И вообще, мастдайки у меня на домашних и рабочих компьютерах уже не меньше 15 (а то и всех 20) лет нет!
А можете небольшое видео снять, как это выглядит на деле.
А смысл? Тупо пишешь "b function" - добавил брейк, "watch var" - добавил трассировку изменения переменной (таким образом, кстати, можно еще, как у убогого сеггера, выводить отладочные сообщения и прочую лабуду), ^C - остановил выполнение, "s" - перешел на шаг, "p /x var" - отобразил переменную в 16-ной форме и т.д., и т.п. Все вполне легко и непринужденно делается. И мыша вообще не нужна.
Но я сам отладку стал лишь последние пару недель использовать, когда совсем уж последние мозги пробухал и просто внимательно свой же код читать уже не мог. Если вылечусь, то все будет хорошо, и дебаггер мне больше никогда не понадобится.

Добавлено after 4 minutes 24 seconds:
[uquote="tonyk",url="/forum/viewtopic.php?p=4349985#p4349985"]Это отнюдь не "ОК". А дробная часть (досчёт) в UART у G0 отсутствует?[/uquote]
Никогда про такое не слышал. Разве где-то такое бывает, чтобы частоту "неровно" делили? В любом случае, погрешность в пределах 5% от скорости для UART'а — вообще ни о чем! Там критическая погрешность где-то с 10% начинается.
Так-то в CMSIS есть SystemCoreClock
А мне-то какое дело? Я вообще не смотрю, что там "внутри" есть. Я только макросы использую, да настройку systick. Об этой переменной впервые слышу!
И да: если сюда записать вместо констант или макросов переменную, то будет лишняя операция деления. Мелочь, а неприятно. Тут вон, Владислав за лишние операции чтения и логических и/или переживал, а то такая адово длинная дичь, как софтовое деление!!!

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

Добавлено: Сб янв 07, 2023 18:23:55
Dimon456
Eddy_Em писал(а):А смысл?
Охота в реальности увидеть, как это там усе происходит.

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

Добавлено: Сб янв 07, 2023 18:27:39
Eddy_Em
Dimon456, дык, а самому попробовать - слабо что ли?

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

Добавлено: Сб янв 07, 2023 18:36:39
tonyk
Eddy_Em писал(а):Никогда про такое не слышал.
А ты не слушай, а читай документацию.

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

Добавлено: Сб янв 07, 2023 18:41:18
Reflector
[uquote="tonyk",url="/forum/viewtopic.php?p=4349985#p4349985"]А дробная часть (досчёт) в UART у G0 отсутствует? Её почему не вычисляешь?[/uquote]
Если оверсемплинг равен 16, то она на автомате вычисляется.

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

Добавлено: Сб янв 07, 2023 18:45:01
Eddy_Em
tonyk, у меня оверсемплинг равен 16. Нафиг его вообще в 8 ставить?

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

Добавлено: Сб янв 07, 2023 18:48:45
tonyk
Eddy_Em писал(а):Я вообще не смотрю, что там "внутри" есть
Вылезай из анального огорода и посмотри вокруг, особенно на то, что уже сделано другими.
Eddy_Em писал(а):И да: если сюда записать вместо констант или макросов переменную, то будет лишняя операция деления. Мелочь, а неприятно. Тут вон, Владислав за лишние операции чтения и логических и/или переживал, а то такая адово длинная дичь, как софтовое деление!!!
В твоих проектах катастрофическая нехватка ПЗУ?
Настройка UART делается не часто, поэтому даже софтовое деление погоды не сделает, зато один раз разобрался, вдумчиво написал, чтобы потом просто перекидывать код из одного проекта в другой. Если не ошибаюсь, то такой же UART и в G4, H7 и, вроде, F7.

Добавлено after 1 minute 45 seconds:
Eddy_Em писал(а):Нафиг его вообще в 8 ставить?
В других UART это удваивает скорость обмена.

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

Добавлено: Сб янв 07, 2023 18:54:06
Eddy_Em
Мне 10Мбод от уарта не нужно.
Что до "вбивания гвоздями" этих чисел, то у меня-то абсолютно все проекты абсолютно одинаково тактируются. Если там есть HSI48, тактирование от него идет, если нет - от кварца 8МГц. Да и вообще, давненько уже я не делал железяк, на которых бы не было USB. Даже если они должны работать на CAN-шине, то USB используется для конфигурации и отладки (да и просто глянуть, что за пакеты в сети бегают: воткнул смартфон в USB, да смотри себе).