2. RequestGenerator тебе не нужен.
STM32 новичку в ARM что к чему
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
1. DMA1_Channel2 привязан к DMAMUX1_Channel1. Нумерация у них разная.
2. RequestGenerator тебе не нужен.
2. RequestGenerator тебе не нужен.
- Реклама
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
VladislavS, о, спасибо! Я и не обратил внимания, что у MUX с нуля нумерация, а у DMA - с единицы. Вот же засранцы!
О RequestGenerator понял. Получил одну передачу, но прерывание не отработало. Это уж буду смотреть, где я накосячил.
А, все просто: я забыл в функции usart3_sendbuf() вставить строчку
в самом начале - иначе настройки не прокатывают же.
О RequestGenerator понял. Получил одну передачу, но прерывание не отработало. Это уж буду смотреть, где я накосячил.
А, все просто: я забыл в функции usart3_sendbuf() вставить строчку
Код: Выделить всё
DMA1_Channel2->CCR &= ~DMA_CCR_EN;Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Я на гитхабе, в ЖЖ
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
Eddy_Em, ну вот зачем все эти
Можно же проще сделать
Задефайнить ccr константой или сделать параметром шаблона это уже тонкости реализации, но смысл в том что это константная часть, которую ты сам же раньше и задал. Зачем её вычитывать из DMA чтобы добавить один-два бита?
Код: Выделить всё
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;
}- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
VladislavS, вроде как классика ☺
Но да, согласен, так лучше - не нужно лишних операций проводить.
Но да, согласен, так лучше - не нужно лишних операций проводить.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Я на гитхабе, в ЖЖ
- Сообщения: 2089
- Зарегистрирован: Вс июн 19, 2016 09:32:03
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4349809#p4349809"][/uquote]
Вот это я понимаю оптимизация, целых четыре нолика сократил
На С++ я бы так написал:
И результат, кстати, будет 556, а не 555, как у тебя.
Код: Выделить всё
USART3->BRR = 640000 / 1152;Вот это я понимаю оптимизация, целых четыре нолика сократил
Код: Выделить всё
USART3->BRR = (64_MHz + 115'200 / 2) / 115'200;- Реклама
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
Reflector, 115'200 - это макрос что ли? Зачем там апостроф?
Ну, а разница между 555 и 556 невелика, ничего страшного - работает же.
С помощью всех собравшихся, особенно Владислава, таки получилось. USART полностью на DMA (и Tx, и Rx). Конец строки - как обычно - '\n'. В случае переполнения буфера возвращается флаг, что предыдущее сообщение пошло коту под хвост.
P.S. Кстати, в Cortex-M0+ ведь тоже деление не завезли! Уныло, однако. Уж флоаты-то почти никогда не нужны на МК, а вот деление!..
Теперь, пожалуй, еще I2C прикручу к G070, да на этом пока удовлетворюсь. Надо еще какую-нибудь железяку с полноценным SPI прикупить, чтобы SPI тестировать, а то у меня все, что есть - MOSI only.
Ну, а разница между 555 и 556 невелика, ничего страшного - работает же.
С помощью всех собравшихся, особенно Владислава, таки получилось. USART полностью на DMA (и Tx, и Rx). Конец строки - как обычно - '\n'. В случае переполнения буфера возвращается флаг, что предыдущее сообщение пошло коту под хвост.
P.S. Кстати, в Cortex-M0+ ведь тоже деление не завезли! Уныло, однако. Уж флоаты-то почти никогда не нужны на МК, а вот деление!..
Теперь, пожалуй, еще I2C прикручу к G070, да на этом пока удовлетворюсь. Надо еще какую-нибудь железяку с полноценным SPI прикупить, чтобы SPI тестировать, а то у меня все, что есть - MOSI only.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Я на гитхабе, в ЖЖ
- Сообщения: 2089
- Зарегистрирован: Вс июн 19, 2016 09:32:03
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4349883#p4349883"]115'200 - это макрос что ли? Зачем там апостроф?[/uquote]
Обычный разделитель, будет и в С23. А 64_MHz - это строковый литерал, по сути константа, задается следующим образом:
Добавлено after 2 minutes 35 seconds:
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4349883#p4349883"]Надо еще какую-нибудь железяку с полноценным SPI прикупить, чтобы SPI тестировать, а то у меня все, что есть - MOSI only.[/uquote]
Соедини SPI1 с SPI2 и тестируй
Обычный разделитель, будет и в С23. А 64_MHz - это строковый литерал, по сути константа, задается следующим образом:
Код: Выделить всё
consteval uint32_t operator "" _MHz(unsigned long long val) { return val * 1'000'000; }Здесь невелика, а для других частот и скоростей может и 1% получится. Или тебе парочки инструкций жалко?Eddy_Em писал(а):Ну, а разница между 555 и 556 невелика, ничего страшного - работает же.
Добавлено after 2 minutes 35 seconds:
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4349883#p4349883"]Надо еще какую-нибудь железяку с полноценным SPI прикупить, чтобы SPI тестировать, а то у меня все, что есть - MOSI only.[/uquote]
Соедини SPI1 с SPI2 и тестируй
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
Reflector, ну, ОК, для красоты и точности:
Добавлено after 40 seconds:
Код: Выделить всё
#define USART_BRR(speed) ((64000000 + speed/2) / speed)
...
USART3->BRR = USART_BRR(115200);
Для этого сначала надо убедиться, что оно работает в обе стороны ☺Соедини SPI1 с SPI2 и тестируй
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Я на гитхабе, в ЖЖ
[uquote="VladislavS",url="/forum/viewtopic.php?p=4349762#p4349762"][uquote="Dimon456",url="/forum/viewtopic.php?p=4349725#p4349725"]Что-то вас совсем не пойму.[/uquote]Всё просто. Если задача не сделать, а найти причину не делать - результат очевиден.[/uquote]
почти угадали: нет задачи, которую надо решить, есть желание чем-то занять свободное время с пользой. но совсем не хочется потратить его впустую в борьбе с ПО, если существует вариант обойтись без этого. я скорее заставляю себя ковырять ARM, нежели испытываю острое желание это делать.
почти угадали: нет задачи, которую надо решить, есть желание чем-то занять свободное время с пользой. но совсем не хочется потратить его впустую в борьбе с ПО, если существует вариант обойтись без этого. я скорее заставляю себя ковырять ARM, нежели испытываю острое желание это делать.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
ARV, ну вот, коль времени свободного полно - как раз в кайф будет изучить с нуля. Написать Makefile, сделать стартап, линкер под себя написать…
А IDE - это уже последнее, о чем стоит думать. Отлаживать крайне удобно в консоли при помощи gdb. Хотя я все еще считаю отладку нафиг ненужной штукой, но когда вот так, как я, тупишь: смотришь в свой говнокод и очевидных косяков не видишь - да, отладка может помочь. Но, с другой стороны, если ты - не раззвиздяй, как я, то отладчик тебе никогда не понадобится.
А IDE - это уже последнее, о чем стоит думать. Отлаживать крайне удобно в консоли при помощи gdb. Хотя я все еще считаю отладку нафиг ненужной штукой, но когда вот так, как я, тупишь: смотришь в свой говнокод и очевидных косяков не видишь - да, отладка может помочь. Но, с другой стороны, если ты - не раззвиздяй, как я, то отладчик тебе никогда не понадобится.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Я на гитхабе, в ЖЖ
- Сообщения: 1849
- Зарегистрирован: Вс дек 25, 2016 08:34:54
Давайте тогда и протеус удалим, и будем методом тыка, типа работает не работает, как в старые добрые времена.Eddy_Em писал(а):отладчик тебе никогда не понадобится
А можете небольшое видео снять, как это выглядит на деле.Eddy_Em писал(а):Отлаживать крайне удобно в консоли при помощи gdb.
- Сообщения: 1339
- Зарегистрирован: Вт ноя 19, 2019 06:10:18
Это отнюдь не "ОК". А дробная часть (досчёт) в UART у G0 отсутствует? Её почему не вычисляешь? И тупо вписывать частоту как-то нехорошо, впрочем, как и делитель для шины. Так-то в CMSIS есть SystemCoreClock, и код делителя для шины тоже должен быть в регистрах конфигурации.Reflector, ну, ОК, для красоты и точности:
Код:
#define USART_BRR(speed) ((64000000 + speed/2) / speed)
...
USART3->BRR = USART_BRR(115200);
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
[uquote="Dimon456",url="/forum/viewtopic.php?p=4349977#p4349977"]Давайте тогда и протеус удалим[/uquote]
Я без понятия, что это и зачем оно нужно. И вообще, мастдайки у меня на домашних и рабочих компьютерах уже не меньше 15 (а то и всех 20) лет нет!
Но я сам отладку стал лишь последние пару недель использовать, когда совсем уж последние мозги пробухал и просто внимательно свой же код читать уже не мог. Если вылечусь, то все будет хорошо, и дебаггер мне больше никогда не понадобится.
Добавлено after 4 minutes 24 seconds:
[uquote="tonyk",url="/forum/viewtopic.php?p=4349985#p4349985"]Это отнюдь не "ОК". А дробная часть (досчёт) в UART у G0 отсутствует?[/uquote]
Никогда про такое не слышал. Разве где-то такое бывает, чтобы частоту "неровно" делили? В любом случае, погрешность в пределах 5% от скорости для UART'а — вообще ни о чем! Там критическая погрешность где-то с 10% начинается.
И да: если сюда записать вместо констант или макросов переменную, то будет лишняя операция деления. Мелочь, а неприятно. Тут вон, Владислав за лишние операции чтения и логических и/или переживал, а то такая адово длинная дичь, как софтовое деление!!!
Я без понятия, что это и зачем оно нужно. И вообще, мастдайки у меня на домашних и рабочих компьютерах уже не меньше 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% начинается.
А мне-то какое дело? Я вообще не смотрю, что там "внутри" есть. Я только макросы использую, да настройку systick. Об этой переменной впервые слышу!Так-то в CMSIS есть SystemCoreClock
И да: если сюда записать вместо констант или макросов переменную, то будет лишняя операция деления. Мелочь, а неприятно. Тут вон, Владислав за лишние операции чтения и логических и/или переживал, а то такая адово длинная дичь, как софтовое деление!!!
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Я на гитхабе, в ЖЖ
- Сообщения: 1849
- Зарегистрирован: Вс дек 25, 2016 08:34:54
Охота в реальности увидеть, как это там усе происходит.Eddy_Em писал(а):А смысл?
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
- Сообщения: 1339
- Зарегистрирован: Вт ноя 19, 2019 06:10:18
А ты не слушай, а читай документацию.Eddy_Em писал(а):Никогда про такое не слышал.
- Вложения
-
- Screenshot_454.jpg
- (66.62 КБ) 37 скачиваний
- Сообщения: 2089
- Зарегистрирован: Вс июн 19, 2016 09:32:03
[uquote="tonyk",url="/forum/viewtopic.php?p=4349985#p4349985"]А дробная часть (досчёт) в UART у G0 отсутствует? Её почему не вычисляешь?[/uquote]
Если оверсемплинг равен 16, то она на автомате вычисляется.
Если оверсемплинг равен 16, то она на автомате вычисляется.
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
- Сообщения: 1339
- Зарегистрирован: Вт ноя 19, 2019 06:10:18
Вылезай из анального огорода и посмотри вокруг, особенно на то, что уже сделано другими.Eddy_Em писал(а):Я вообще не смотрю, что там "внутри" есть
В твоих проектах катастрофическая нехватка ПЗУ?Eddy_Em писал(а):И да: если сюда записать вместо констант или макросов переменную, то будет лишняя операция деления. Мелочь, а неприятно. Тут вон, Владислав за лишние операции чтения и логических и/или переживал, а то такая адово длинная дичь, как софтовое деление!!!
Настройка UART делается не часто, поэтому даже софтовое деление погоды не сделает, зато один раз разобрался, вдумчиво написал, чтобы потом просто перекидывать код из одного проекта в другой. Если не ошибаюсь, то такой же UART и в G4, H7 и, вроде, F7.
Добавлено after 1 minute 45 seconds:
В других UART это удваивает скорость обмена.Eddy_Em писал(а):Нафиг его вообще в 8 ставить?
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
Мне 10Мбод от уарта не нужно.
Что до "вбивания гвоздями" этих чисел, то у меня-то абсолютно все проекты абсолютно одинаково тактируются. Если там есть HSI48, тактирование от него идет, если нет - от кварца 8МГц. Да и вообще, давненько уже я не делал железяк, на которых бы не было USB. Даже если они должны работать на CAN-шине, то USB используется для конфигурации и отладки (да и просто глянуть, что за пакеты в сети бегают: воткнул смартфон в USB, да смотри себе).
Что до "вбивания гвоздями" этих чисел, то у меня-то абсолютно все проекты абсолютно одинаково тактируются. Если там есть HSI48, тактирование от него идет, если нет - от кварца 8МГц. Да и вообще, давненько уже я не делал железяк, на которых бы не было USB. Даже если они должны работать на CAN-шине, то USB используется для конфигурации и отладки (да и просто глянуть, что за пакеты в сети бегают: воткнул смартфон в USB, да смотри себе).
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Я на гитхабе, в ЖЖ


