Перейти к содержанию

STM32 для чайника


ART_ME

Рекомендуемые сообщения

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Да не только регистр, а вообще синтаксис языка проверяет да и вообще если что-то не обьявлено или не так написано подскажет. Сразу если что-то не так подчеркивает и можно посмотреть что ему не нравиться.

 

Изменено пользователем Oxford
Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

на сколько я помню эти две среды раньше точно не могли помогать дописывать #include, что очень напрягало запоминать названия и вбивать их руками. Да и нет перехода по Ctrl + ЛКМ, а есть ли хинт при наведении на что угодно и показывает где объявлено (а там и коммент к переменной можно написать).что очень удобно. Не пойму чем не устраивает Atollic на эклипсе просто шикарная среда разработки. Можно форматирование синтаксиса настроить под себя, прекрасный рефакторинг, в отладчике есть что душе угодно, справа в полосе прокрутке есть рисочки цветные по которым можно перемещаться на ошибку или предупреждение, да плюсов очень много без проблем например подхватывает в проект новые файлы их нужно просто скопировать в папку с проектом. Просто очень удобная среда, которая экономит время на написании кода.

Изменено пользователем MasterElectric
Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

На сколько я помню, атоллик самая свежая среда из всех что есть (обновления не в счет). Поэтому видимо и допиленная хорошо. На счет компилятора только вопрос - там все тот же GCC?

Так то да, эклипс в плане дружественности интерфейса и гибкости редактора пожалуй заплюет всех и все. Основная проблема - тормоза вечные то там то сям, и компилятор

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Ссылка на комментарий
Поделиться на другие сайты

Пока на 407 камне поработал с спи на прерывании на прием, ЮАРТ на передачу, с портами ввода-вывода, и тактированием, все на регистрах прощупал, но тут стал вопрос, о токовой нагрузке 407 камня, цепляю светодиод с напряжением 1,96В, через резистор 100Ом, соответсвенно ток через светодиод должен быть 13,4мА, но светодиод ели светит, и напряжение на нем просаживается до 1,65В и ток 0,013мА., обычно же МК на пин до 20мА должен держать, на сколько помню, добавил резистор чтоы было 200Ом тоже самое, микроамперы, с другими светодиодами тоже самое, может это из за того что использую выхода на максимальную скорость, вычитал что 407 камень на корпус максимум 240мА, на каждый вывод до 25мА, почему тогда у меня не держит ток, может нужно программно отключать энергосбережение, или скорость пинов снизить со 100МГц, до 50МГц?

Ссылка на комментарий
Поделиться на другие сайты

Пин PD13, настраивал регистрами, и кубом только что попробовал одинаково, скорость тоже делал самую маленькую ничего.

Ссылка на комментарий
Поделиться на другие сайты

куб, куб...

а начинаешь разбираться - дело было не в бобине в 99,9% случаев

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Ссылка на комментарий
Поделиться на другие сайты

Учусь программировать STM32L и сталкиваюсь постоянно со многими вопросами, на которые не могу найти ответы. Например, конфигурирую таймер TIM6, который является базовым, то есть самым простым.

Открываю CubeMX, включаю таймер, ставлю частоту тактирования 1 МГц, устанавливаю Prescaler 999 и Counter Period 499 (типа чтобы каждые 500 мс было переполнение), разрешаю прерывания. Генерирую код и вижу такую последовательность (упрощенно):

TIM_HandleTypeDef htim6; // какая-то структура, связанная с TIM6 ...

int main(void)
{
	MX_TIM6_Init(); // тут понятно что инициализируется таймер

	while (1){ }
}

// Далее сама функция инициализации TIM6
static void MX_TIM6_Init(void)
{
	TIM_MasterConfigTypeDef sMasterConfig;
	sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE;
	sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;

	htim6.Instance = TIM6;
	htim6.Init.Prescaler = 999;
	htim6.Init.CounterMode = TIM_COUNTERMODE_UP;
	htim6.Init.Period = 499;
}
}

// Ну и сам обработчик прерывания
void TIM6_IRQHandler(void)
{
	HAL_TIM_IRQHandler(&htim6);
}

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

Я открываю документацию HAL и иду во вкладку 43 - HAL TIM Generic Driver (499 страница).

Далее я вижу последовательно список различных структур и их полей:

TIM_Base_InitTypeDef // что-то мне подсказывает что это как раз на самый простой случай работы таймера и надо бы использовать эту структуру, но нет...
TIM_OC_InitTypeDef
TIM_OnePulse_InitTypeDef
…
TIM_SlaveConfigTypeDef
TIM_HandleTypeDef // это как раз та структура, которая в сгенерированном коде. Его поля выглядят так:
	TIM_TypeDef * Instance
	TIM_Base_InitTypeDef Init
	HAL_TIM_ActiveChannel Channel
	DMA_HandleTypeDef * hdma
	HAL_LockTypeDef Lock
	__IO HAL_TIM_StateTypeDef State

От сюда первый вопрос — почему именно эту структуру надо использовать (TIM_HandleTypeDef)? Если она такая важная, то почему находится в конце списка и почему нет толком никакого описания какая структура для каких целей ;)?Ладно, фиг с ним, идем дальше по документу, раздел 43.2 - TIM Firmware driver API description и подраздел 43.2.2 - How to use this driver. И там написано следующее:

1. Initialize the TIM low level resources by implementing the following functions

depending from feature used :

Time Base : HAL_TIM_Base_MspInit()

Input Capture : HAL_TIM_IC_MspInit()

Output Compare : HAL_TIM_OC_MspInit()

PWM generation : HAL_TIM_PWM_MspInit()

One-pulse mode output : HAL_TIM_OnePulse_MspInit()

Encoder mode output : HAL_TIM_Encoder_MspInit()

Вроде для моей простейшей задачи надо использовать базовую функцию HAL_TIM_Base_MspInit(), но ее нет в сгенерированном коде! Так же я не нашел и включение тактирования, как требует второй пункт:

2. Initialize the TIM low level resources :

a. Enable the TIM interface clock using __HAL_RCC_TIMx_CLK_ENABLE(); …

Короче вообще не понятно что происходит! А теперь снова смотрим на сгенерированный код и видим что в функции инициализации используется структура TIM_MasterConfigTypeDef (ска откуда она взялась???). Оказывается из документа через 40 страниц, пункт 44 - HAL TIM Extension Driver и сразу же описание этой структуры.

По какому принципы все это работает? Как новичку можно во всем этом разобраться если не понятна сама концепция использования библиотекой? Даже когда пытаешься решить задачу задом наперед (по сгенерированому коду понять как надо выбирать структуры и как пользоваться библиотекой), то все равно не получается. Просьба не проходите мимо, думаю что большинство людей сталкиваются с такими вопросами. Буду благодарен за любую помощь.

Изменено пользователем OperAmp
Ссылка на комментарий
Поделиться на другие сайты

это сначала туговато. Потом недельки через две-три становится все ясно как день. Помочь тут сложно, практика нужна. Чем больше, тем лучше.

Если не охота вникать в хал (а многие думают что он говно, и не стесняются об этом говорить), то можно как все по старинке на регистрах это дело быстренько замутить. Да будет не очень читабельно, но работать будет. Я вот на хал все пишу и мне пофик. Поначалу было сложновато вникнуть, но потом прошло само собой и отвыкать уже не охота.

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Ссылка на комментарий
Поделиться на другие сайты

Уважаемый mail_robot, именно Ваш пост надоумил меня перейти на HAL. 

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

Напишите логичный, вытекающий из документации, алгоритм действий, чтобы настроить таймер! Хочу понять логику вещей, так как то что генерит Cube и то что написано в доках не совсем для меня логично. Спасибо!

Ссылка на комментарий
Поделиться на другие сайты

@OperAmp

краснею, но сознаюсь - не смогу обьяснить доступными словами. Да и вручную писать то, что может за секунду начирикать автомат, это мазохизм. Лучше потратить на более качественный основной код, чем пытаться повторить подвиг куба и сотворить стандартный конфиг руками. Если надо в коде перенастроить таймер, ну скопируйте его инитку в код, перезапустите и всех дел. Нафига что-то изобретать?

Изменено пользователем mail_robot

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Ссылка на комментарий
Поделиться на другие сайты

11 час назад, OperAmp сказал:

Уважаемый mail_robot, именно Ваш пост надоумил меня перейти на HAL

Посмотрите https://www.youtube.com/playlist?list=PLJTlt64jBcCuRgAMGImQzxRlYdSKa5Ifk

Много вопросов отпадёт

Ссылка на комментарий
Поделиться на другие сайты

12 часа назад, Darth_Vader сказал:

Посмотрите https://www.youtube.com/playlist?list=PLJTlt64jBcCuRgAMGImQzxRlYdSKa5Ifk

Много вопросов отпадёт

Данный курс, конечно, лучик света в тоннеле HAL, но там он ничего не объясняет. Видео "просто возьми эту функцию и скопируй себе в прогу".

12 часа назад, MasterElectric сказал:

@OperAmp перейти на HAL, это откуда?

Ну громко сказал - ПЕРЕШЕЛ ))). Начинал на SPL писать, потом узнал что он больше не поддерживается и взамен ему HAL выпустили, плюс очень удобный конфигуратор Cube.

16 часов назад, mail_robot сказал:

@OperAmp

краснею, но сознаюсь - не смогу обьяснить доступными словами. Да и вручную писать то, что может за секунду начирикать автомат, это мазохизм. Лучше потратить на более качественный основной код, чем пытаться повторить подвиг куба и сотворить стандартный конфиг руками. Если надо в коде перенастроить таймер, ну скопируйте его инитку в код, перезапустите и всех дел. Нафига что-то изобретать?

Напишите, пжл, чем в документации отличаются описания перифирии в пунктах Generic и Extension? 

43 HAL TIM Generic Driver

44 HAL TIM Extension Driver

На каждую периферию есть эти Generic  и Extension...

(Нашел ответ в самом начале документации. Для особо талантливых написано ;)

The HAL driver APIs are split into two categories: generic APIs which provide common and generic functions for all the STM32 series and extension APIs which include specific and customized functions for a given line or part number.)

Изменено пользователем OperAmp
Ссылка на комментарий
Поделиться на другие сайты

18 минут назад, OperAmp сказал:

Данный курс, конечно, лучик света в тоннеле HAL, но там он ничего не объясняет. Видео "просто возьми эту функцию и скопируй себе в прогу".

Ну не знаю. По-моему, работа с таймерами в CubeMX и HAL прекрасно разжёвана (хоть и не без ошибок, о чём я автору в камментах указал)

Программирование МК STM32. УРОК 5. Библиотека HAL. STM32 CUBE MX. Таймеры

Что вам ещё нужно - не могу представить.

 

Вот ещё можно посмотреть - прям ваши хотелки про 500 мс

STM32Cube. Таймер и прерывания.

Изменено пользователем Darth_Vader
Ссылка на комментарий
Поделиться на другие сайты

10 минут назад, Darth_Vader сказал:

Что вам ещё нужно - не могу представить.

Я хочу понять как люди пользуются документацией. Повторю вопрос, который задавал ранее:

Вот представьте себе что перед Вами есть документация на HAL и вам надо настроить TIM6 чтобы переполнялся каждые 500 мс и вызывал прерывания. Напишите логичный, вытекающий из документации, алгоритм действий, чтобы настроить таймер!

Ссылка на комментарий
Поделиться на другие сайты

3 минуты назад, OperAmp сказал:

Вот представьте себе что перед Вами есть документация на HAL и вам надо настроить TIM6 чтобы переполнялся каждые 500 мс и вызывал прерывания. Напишите логичный, вытекающий из документации, алгоритм действий, чтобы настроить таймер!

Я так не делал, помочь не смогу.

Ссылка на комментарий
Поделиться на другие сайты

Читаю/смотрю/слушаю всю информацию, которую могу получить, а не только документацию.

Изменено пользователем Darth_Vader
Ссылка на комментарий
Поделиться на другие сайты

ответ на вопрос - почему профессиональные программисты стремятся к более высоким уровням абстракции вопреки логике самоучки дерьмокодера

философия высокоуровневого языка:

    Красивое лучше, чем уродливое.
    Явное лучше, чем неявное.
    Простое лучше, чем сложное.
    Сложное лучше, чем запутанное.
    Плоское лучше, чем вложенное.
    Разреженное лучше, чем плотное.
    Читаемость имеет значение.
    Особые случаи не настолько особые, чтобы нарушать правила.
    При этом практичность важнее безупречности.
    Ошибки никогда не должны замалчиваться.
    Если не замалчиваются явно.
    Встретив двусмысленность, отбрось искушение угадать.
    Должен существовать один — и, желательно, только один — очевидный способ сделать это.
    Хотя он поначалу может быть и не очевиден
    Сейчас лучше, чем никогда.
    Хотя никогда зачастую лучше, чем прямо сейчас.
    Если реализацию сложно объяснить — идея плоха.
    Если реализацию легко объяснить — идея, возможно, хороша.
    Пространства имён — отличная вещь! Давайте будем делать их больше!

здесь ответы на все, что кажется странным или громоздким или неправильным в HAL. И именно поэтому он и появился. И если вы все еще пытаетесь поспорить с мировой практикой программирования, то вы просто еще недозревший фрукт

представленная в посте информация носит обезличенный справочно-информационных характер

Изменено пользователем mail_robot

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Сообщения

    • Согласен, очень криво объяснил. Это работа трёх вольтовой линии, просто на диод шотки сдвоенный, на один анод приходит сигнал напрямую с трансформатора, а на второй через дроссель. Вольт/деление 5 вольт в клетке, тайминг по моему 10 МС. Третья фотография это сигнал на катодах уровень земли ровно по центру экрана. Но все линии по итогу в порядке 3.3 в, 5, в, 12 в и -12 в. Нагрузить все линии не могу сразу ,так как тут же выгорают транзисторы (имеется нагрузка 250 ватт по 10 ампер на каждую линию за исключением-12в), поэтому нагружаю 3.3 вольтовую линию на 10 ампер,  подключаю переменный резистор 50 ватт на 15 ом на 5 вольтовую линию и постепенно довожу до той той картины с перекосом (это гдето  50 ватт общее). По поводу микросхемы, вверху имеется скрин где между импульсами проскакивает мини импульс, если так можно сказать, он проскакивает и на одной  и на второй ноге (7,8). Микросхема не tl 494, а lw4933/abx942.1/c9421646. Далее они приходят на базы транзисторов 945g  коллекторы этих транзисторов соединены с  выводами трансформатора. Просто схема типовая, легче мне кажется просто привести фото самого блока, для тех кто разбирается будет гораздо информативне.  Диод шотки по 12 вольтовой линии был подгоревший, заменил на донора. Приводить скрины не буду что бы не захламлять тему. В итоге, пока все так же, при достижении определенной нагрузки суммарно где-то 50 ватт, появляется этот "выброс и перекос". По этому имеются мысли на два варианта, это микросхема , этот мини импульс между периодами, на низкой нагрузке особо не влияет, но при достижении определенной приводит с самовозбуждению входной цепи и непроизвольному открытию транзистора нижнего плеча. Либо дело в "горячей части", плавающий дефект в обвязке силовых ключей.  Спасибо за ответ.
    • @Gomerchik а вы контролировали как меняется уровень сигнала на А1 ардуины?
    • Спасибо за совет. Автором данного проекта я не являюсь, мне нужно было воссоздать уличный датчик для метеостанции взамен пропавшего(( Из разного найденного в интернете этот проект работает с моей станцией Орегон (спасибо автору). В понедельник попробую последовать Вашему совету. Но все равно куча непоняток  как блин это работает)) Если дело в неправильной отправки команды, то как на это влияет подключение датчика температуры? Если совсем не подключать таймер, то передача идет один раз (как и прописано в программе), станция принимает и отображает, но минут через сколько-то естественно станция уже ни чего не показывает, но с таймером питание полностью не пропадает с ардуинки, но передача сигнала каким-то образом работает по таймеру.  В моем понимании данная команда подается один раз потому, что таймер должен отключать питание МК после передачи сигнала и каждые 43 сек снова подавать питание (так того требует станция).  Ардуино передает показания температуры отключается полностью и 43 секунды мк не работает.  Сейчас у меня питание пока сделано на подпитке от солнечной батареи, но пару пасмурных дней и аккумулятор съедается до отключения(
    • thickman Так и сделаю. Вытащу из бу БП.  Буду знать, как отличить. Благодарю. Заменил транзисторы на IRFB20N50K. Картина стала, совсем другой.  Похоже трудность не в драйвере, на момент подвозбуда, переходные процессы, в нем, завершены. Увеличил затворные резисторы до 50ом, стало немного лучше.  Не понятно, почему верхний ключ греется несколько сильнее. Возможно, стоит посмотреть ток в коллекторе.  Снабберные емкости временно удалил, изменений не произошло.  Замена ТГР на другой, на кольце MSTN-16A-TH, так же, результата не принесла.   irfb20n50k.pdf
    • А что нить из ассортимента активных щупов производства СССР..))
    • Типа такого: https://aliexpress.ru/item/2044864227.html?sku_id=58855020183
×
×
  • Создать...