Например TDA7294

Форум РадиоКот • Просмотр темы - Stm32 с чего начать изучение...
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Ср дек 17, 2025 17:52:46

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 1036 ]     ... , , , 39, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Stm32 с чего начать изучение...
СообщениеДобавлено: Пн май 02, 2022 11:14:52 
Опытный кот
Аватар пользователя

Карма: -2
Рейтинг сообщений: -23
Зарегистрирован: Сб окт 22, 2016 17:33:32
Сообщений: 760
Откуда: кг
Рейтинг сообщения: 0
В прерывании по окончании измерений вычисляются средние значения с двух каналов АЦП.
Для доступа к ним из процедур расчета и захотелось добавить ATOMIC_BLOCK.
Был огорчён, что такой простой вещи после AVR не нашёл.
До сих пор с STM32 дел никаких не имел.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Stm32 с чего начать изучение...
СообщениеДобавлено: Пн май 02, 2022 11:25:55 
Собутыльник Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 433
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2556
Рейтинг сообщения: 0
Измерения закончены, лежат себе на месте. Берите да вычисляйте. Пока новые измерения не запустите старые не изменятся. Зачем там атомики?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Stm32 с чего начать изучение...
СообщениеДобавлено: Пн май 02, 2022 11:27:24 
Потрогал лапой паяльник
Аватар пользователя

Карма: -6
Рейтинг сообщений: -2
Зарегистрирован: Вс апр 03, 2022 07:01:29
Сообщений: 362
Рейтинг сообщения: 1
Мм... Пока вы находитесь в прерывании DMA1_Channel2_3_IRQHandler, это же самое прервыание само себя не прервет, поэтому всё получается само собой, никаких специальных средств не нужно. И DMA тоже отключен, запуска его не произойдет.

Изучайте мануалы, там всё написано. Подробно про прерывания - Programming Manual. Все доки есть на сайте st.com - находите ваш микроконтроллер, на вкладке Documents всё лежит.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Stm32 с чего начать изучение...
СообщениеДобавлено: Пн май 02, 2022 19:26:06 
Опытный кот
Аватар пользователя

Карма: -2
Рейтинг сообщений: -23
Зарегистрирован: Сб окт 22, 2016 17:33:32
Сообщений: 760
Откуда: кг
Рейтинг сообщения: 0
Спасибо, пнули в нужном направлении. Образно выражаясь.
Оказывается, в Programming manual Cortex-M0 ядро расписано, а в Reference manual - про всё остальное. :))
Просто, хотел сказать спасибо.


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: Stm32 с чего начать изучение...
СообщениеДобавлено: Чт май 12, 2022 11:30:29 
Вымогатель припоя
Аватар пользователя

Зарегистрирован: Пт фев 13, 2009 20:58:13
Сообщений: 601
Откуда: Донецк
Рейтинг сообщения: 0
Доброго дня, друзья!
Продолжая изучать STM32. Решил поковырять таймеры. И, к моему удивлению, обнаружил, что не все таймеры имеют прерывания по переполнению/совпадению. Вернее 1-2 на МК. Причём настройки на совпадение по фронтам есть, а вызова прерывания нет (если верить cubeMX).
Задачу поставил достаточно простую: вычисление времени сигнала (около 5-10 милиСек) и его корректировка (увеличиваем длину на коэффициент). Всё бы ничего, но нужно мерять 4 канала, которые +/- в одно время шлют сигналы. То есть, нужно 4 таймера.

Пока всё пробую на STM32F407VET6, готовое устройство будет на F401CCU6 (Black Pill).

Подскажите, как быть? Доступно только глобальное прерывание, его можно "настроить" на переполнение/совпадение?

Конечно, можно на внешних прерываниях сделать... В них запускать таймер, но хотело бы красиво на таймере всё запустить. Подскажите, как сделать?

_________________
Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Stm32 с чего начать изучение...
СообщениеДобавлено: Чт май 12, 2022 12:01:45 
Собутыльник Кота
Аватар пользователя

Карма: -12
Рейтинг сообщений: -24
Зарегистрирован: Пт июл 12, 2019 22:52:01
Сообщений: 2516
Рейтинг сообщения: 0
не все таймеры имеют прерывания по переполнению/совпадению

Все имеют. Просто у некоторых это вынесено в отдельное прерывание, а у остальных - в общее. Нужно соответствующий флаг проверять и сбрасывать (или только сбрасывать, если кроме CC никаких прерываний у таймера нет).

_________________
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Stm32 с чего начать изучение...
СообщениеДобавлено: Ср июл 27, 2022 13:57:06 
Встал на лапы
Аватар пользователя

Зарегистрирован: Пн апр 02, 2012 15:56:23
Сообщений: 144
Рейтинг сообщения: 0
Добрый день любителям Stm32.

По мотивам достаточно известной статьи Константина Чижова про применение C++ в программировании микроконтроллеров и на основании его же проекта mcucpp развиваю проект Zhele, в котором использую наработки Константина, но стараюсь подробно дкоументировать и покрывать примерами (+ реализация модуля USB, на habr-е можно посмотреть более подробно).

В репозитории есть примеры, также попытался составить уроки, забросил, но идея продолжить их пока сидит в голове.

Буду рад, если кто-то посмотрит, попробует посмотреть на программирование на Stm32 с этой, не совсем классической, стороны, оставит отзывы, готов в меру сил консультировать и отвечать на вопросы.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Stm32 с чего начать изучение...
СообщениеДобавлено: Ср июл 27, 2022 20:35:20 
Поставщик валерьянки для Кота

Карма: 20
Рейтинг сообщений: 256
Зарегистрирован: Вс июн 19, 2016 09:32:03
Сообщений: 2089
Рейтинг сообщения: 0
По мотивам достаточно известной статьи Константина Чижова про применение C++ в программировании микроконтроллеров и на основании его же проекта mcucpp развиваю проект Zhele, в котором использую наработки Константина

Постоянно об этом пишу, Toggle() не стоит реализовывать подобным образом, даже в HAL со временем переделали через BSRR:
Код:
_Regs()->ODR ^= value;

Потокобезопасный вариант выглядит как-то так:
Код:
void toggle() { _Regs()->BSRR = pinsMask << 16 | ~_Regs()->ODR & pinsMask; }

А тут непонятно почему в BSRR пишется два раза:
Код:
void ClearAndSet()
{
    Clear<clearMask>();  // _Regs()->BSRR = clearMask << 16;
    Set<setMask>();      // _Regs()->BSRR = setMask;
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Stm32 с чего начать изучение...
СообщениеДобавлено: Ср июл 27, 2022 21:15:30 
Встал на лапы
Аватар пользователя

Зарегистрирован: Пн апр 02, 2012 15:56:23
Сообщений: 144
Рейтинг сообщения: 0
Reflector, спасибо за обратную связь! Началось всё это еще в 2020, я тогда только начал микроконтроллерами увлекаться, и базовую часть библиотеки (в первую очередь GPIO) перенял практически без изменений (так как не особо разбирался на тот момент). В связи с этим подобных мест, я уверен, немало, и потихоньку буду их исправлять, в том числе хотелось бы это делать благодаря сообществу (если такое все-таки сформируется). Поэтому благодарю за найденное некорректное место, я буквально сегодня исправлю :)
UPD: исправлено


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Stm32 с чего начать изучение...
СообщениеДобавлено: Чт июл 28, 2022 09:17:26 
Поставщик валерьянки для Кота

Карма: 20
Рейтинг сообщений: 256
Зарегистрирован: Вс июн 19, 2016 09:32:03
Сообщений: 2089
Рейтинг сообщения: 0
UPD: исправлено

Там Toggle() и ClearAndSet() по паре функций, шаблонные версии старые остались :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Stm32 с чего начать изучение...
СообщениеДобавлено: Чт июл 28, 2022 09:20:20 
Встал на лапы
Аватар пользователя

Зарегистрирован: Пн апр 02, 2012 15:56:23
Сообщений: 144
Рейтинг сообщения: 0
шаблонные версии старые остались :)

Точно, забыл уже, что делал обычный метод + шаблонный. Хотя все никак руки не доходят выяснить, имеет ли это смысл при включенной оптимизации.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Stm32 с чего начать изучение...
СообщениеДобавлено: Чт июл 28, 2022 09:55:48 
Говорящий с текстолитом

Карма: -7
Рейтинг сообщений: 187
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1649
Рейтинг сообщения: 0
Потокобезопасный вариант выглядит как-то так:
Код:
void toggle() { _Regs()->BSRR = pinsMask << 16 | ~_Regs()->ODR & pinsMask; }
Так себе тут с потокобезопасностью...
В грамотно спроектированных МК, одновременная запись в младшее и старшее полуслово (bitset & bitreset) приводит к toggle.
Непонятно - почему инженеры STM не смогли додуматься до такой простой и логичной вещи?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Stm32 с чего начать изучение...
СообщениеДобавлено: Чт июл 28, 2022 10:02:08 
Встал на лапы
Аватар пользователя

Зарегистрирован: Пн апр 02, 2012 15:56:23
Сообщений: 144
Рейтинг сообщения: 0
Так себе тут с потокобезопасностью...
В условиях, что на STM такого нет и это данность, как лучше всего это реализовать, если в одну операцию в принципе невозможно?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Stm32 с чего начать изучение...
СообщениеДобавлено: Чт июл 28, 2022 10:06:22 
Сверлит текстолит когтями

Зарегистрирован: Вт ноя 19, 2019 06:10:18
Сообщений: 1268
Рейтинг сообщения: 0
azhel12 писал(а):
В условиях, что на STM такого нет и это данность, как лучше всего это реализовать, если в одну операцию в принципе невозможно?

Стандартно. Если есть ОС, то через критические секции. Или просто запрещать прерывания в начале изменений и разрешать после внесения изменений. Кстати, это общий подход к работе с регистрами в многозадачной ОС.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Stm32 с чего начать изучение...
СообщениеДобавлено: Чт июл 28, 2022 10:10:37 
Встал на лапы
Аватар пользователя

Зарегистрирован: Пн апр 02, 2012 15:56:23
Сообщений: 144
Рейтинг сообщения: 0
ОС там нет, насколько я понял, std::atomic примерно про это, но пока не нашел времени разобраться в вопросе применимости его для этих МК.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Stm32 с чего начать изучение...
СообщениеДобавлено: Чт июл 28, 2022 10:14:28 
Поставщик валерьянки для Кота

Карма: 20
Рейтинг сообщений: 256
Зарегистрирован: Вс июн 19, 2016 09:32:03
Сообщений: 2089
Рейтинг сообщения: 0
В грамотно спроектированных МК, одновременная запись в младшее и старшее полуслово (bitset & bitreset) приводит к toggle.

Одновременная запись в младшее и старшее полуслово с приоритетов установки битов полезна сама по себе и используется чаще чем toggle, например:
Код:
void write(uint16_t data)
{
    base()->BSRR = pinsMask << 16 | (data & pinsMask);
}


Добавлено after 3 minutes 2 seconds:
Стандартно. Если есть ОС, то через критические секции. Или просто запрещать прерывания в начале изменений и разрешать после внесения изменений. Кстати, это общий подход к работе с регистрами в многозадачной ОС.

Это нужно если тоглить в разных потоках одинаковые пины, что само по себе практически никогда не нужно.

ps. Кстати, в Pico наоборот запись реализуется через toggle, стандартный подход в официальном SDK:
Код:
void write(uint32_t value) { sio_hw->gpio_togl = (sio_hw->gpio_out ^ value) & pinsMask; }


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Stm32 с чего начать изучение...
СообщениеДобавлено: Чт июл 28, 2022 10:22:20 
Сверлит текстолит когтями

Зарегистрирован: Вт ноя 19, 2019 06:10:18
Сообщений: 1268
Рейтинг сообщения: 0
Reflector писал(а):
Это нужно если тоглить в разных потоках одинаковые пины, что само по себе практически никогда не нужно.

Для пинов- возможно, да. Но GPIO такая же периферия, как и любая другая, к которой могут быть обращения и разных потоков. И и подход к разделению доступа должен быть, и быть единым в рамках ОС или используемой среды программирования.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Stm32 с чего начать изучение...
СообщениеДобавлено: Чт июл 28, 2022 10:35:51 
Говорящий с текстолитом

Карма: -7
Рейтинг сообщений: 187
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1649
Рейтинг сообщения: 0
В условиях, что на STM такого нет и это данность, как лучше всего это реализовать, если в одну операцию в принципе невозможно?
Либо через критическую секцию либо через механизм эксклюзивного доступа ARM.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Stm32 с чего начать изучение...
СообщениеДобавлено: Чт июл 28, 2022 10:41:48 
Встал на лапы
Аватар пользователя

Зарегистрирован: Пн апр 02, 2012 15:56:23
Сообщений: 144
Рейтинг сообщения: 0
Вроде в общем проблему понял, пойду потихоньку разбираться


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Stm32 с чего начать изучение...
СообщениеДобавлено: Сб авг 20, 2022 22:06:32 
Первый раз сказал Мяу!
Аватар пользователя

Карма: 1
Рейтинг сообщений: 5
Зарегистрирован: Сб авг 20, 2022 17:54:06
Сообщений: 35
Рейтинг сообщения: 0
Вот так STM32 в Аrduino. пользую для самого начала знакомства с STM3/

Чтобы был UART и COM порт для отладки,в Аrduino.
Использую для работы с STM32F103C8T6 в плате NUCLEO F103RB.
Ее можно на Али купить..


NUCLEO F103RB подключается напрямую к Ардуино.. там уже есть и загрузка и СОМ порт..


Вложение:




Вот программа для Arduino, работающая с NUCLEO F103RB.

void setup()
{
pinMode(PC13, OUTPUT);
pinMode(PC14, OUTPUT);
/*
*******************************
Nucleo выводит в Serial2.print

*******************************
*/
Serial.begin(9600);
Serial1.begin(9600); /* Serial1 PA10-RX PA9-TX */
Serial2.begin(9600); /* Serial2 PA3-RX PA2-TX */
Serial3.begin(9600); /* Serial3 PB11-RX PB10-TX */
}

void loop()
{

/* Serial нулевой порт */
Serial.println(" STM32 заработал с кирилицей");
Serial.println(" STM32 Serial нулевой порт где не знаю ");
Serial.println(" ");


/* Serial1 первый порт PA10-RX PA9-TX */
Serial1.println(" ");
Serial1.println(" STM32 - заработал с кирилицей через СОМ внешний на штырьках и PA10-RX PA9-TX ");
Serial1.println(" через порт Serial1.println в Ардуино хех ");
Serial1.println(" Этот порт выведен на 4 желтых штырька ");
Serial1.println(" GND 5V Rx Tx ");
Serial1.println(" около 20 контактного разъема ST-LINK");
Serial1.println(" первый порт PA10-RX PA9-TX + штырьки желтые ");
Serial1.println(" ");
Serial1.print(" ");
/* Это виртуальный порт на Nucleo-64 */
/* Serial2 второй порт PA3-RX PA2-TX */
Serial2.println(" скетч STM32__UART___Serial_1__2_3.ino ");
Serial2.println(" ");
Serial2.println(" STM32 на Nucleo-64 заработал с кирилицей ");
Serial2.println(" Serial2.print это Nucleo-64 ");
Serial2.println(" второй порт PA3-RX PA2-TX ");
Serial2.println(" ");

/* Serial3 третий порт PB11-RX PB10-TX */
Serial3.println(" ");
Serial3.println(" ");
Serial3.println(" ");
Serial3.println(" STM32 заработал с кирилицей через СОМ ");
Serial3.println(" через порт Serial1.println в Ардуино ");
Serial3.println(" Serial3.print третий порт PB11-RX PB10-TX ");

/* поморгаем диодиком PC13(на плате Blue pill ) PC14 */

digitalWrite(PC13, HIGH);
digitalWrite(PC14, HIGH);
delay(200);
digitalWrite(PC13, LOW);
digitalWrite(PC14, LOW);
delay(200);


}


Можно и дешевле чем NUCLEO F103RB (2500р). обойтись..
вот такой платой с Али ..
Только придется собирать из трех устройств и проводки соединять
..
1 -- Минимальная плата для разработки системы STM32F103C8T6 ARM STM32, STM модуль для arduino (300р)
2 - STlink-V2 (свисток) (200р)
3 - USB UART TTL на CH340G (60р)
4 - проводки DUPONT female-female
цены ориентровочно..

скетч тот же ...

Вложение:


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 1036 ]     ... , , , 39, , , ...  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y