Поиск
Показаны результаты для тегов 'stm32'.
-
Микроконтроллеры новые stm32 : STM32F030C8 10шт STM32F030G030C8 10шт STM32F070CBT6 28шт STM32F030F4P6 30шт STM32F030CCT6 30шт STM32F102C8 6шт STM32F103C8 10 шт прочие микросхемы, новые и не только: AD7124-4 демонтаж 5шт AD694 демонтаж 17шт AD7249, демонтаж 4шт AM26LV31ID 40шт AM26LV32ID 40шт КР590КН4 новые 50 шт 14069ug 50 шт LM392M 1000 шт CD4011BCM 2000 шт HCF4069UBEX 100 шт HCF4066BEY 100 шт ad8543arz 100шт Курганская область цена по согласованию Дополню L78L18CD13TR на ленте 1000шт
-
Продам отладочные платы разных производителей: 1. STM32F4 Discovery 2. STM32H743 Nucleo-144 3. OMAP-L138 Development Kit (LCDK) - полный комплект (плата, диск, кабеля, переходники) 4. Чипы OMAP-L138 (на 450 МГц) 5. Olinuxino A13 6. Модуль SOM A13 7. NRF PCA10040 8. NRF PCA10056 + штатная гибкая антенна 9. uBlox ATSAM3U2C + штатная печатная антенна + USB-кабель Фото ниже. Цена договорная. Рассылка по РФ. За подробностями пишите в личку или на почту repstosw2018 @ gmail . com
-
Согласование соединения RS-485
theilush опубликовал тема в Интерфейсы
Здравствуйте! Прошу помочь со следующим вопросом: имеется 3 преобразователя частоты марки Danfoss, которые соединенны с помощью интерфейса RS-485 с МК STM32F103C8 через MAX485. Происходит отправка байтового массива, после чего происходит приём. В таком случае данные приходят не стабильно (что-то теряется и тд), однако если подключить в эту цепь еще одного подчиненного — компьютер через RS-485 - USB (земля, в том числе), в таком случае работает все стабильно. При отключении конвертера от компьютера сразу стабильность теряется. Вопрос: какие возможные причины данной ситуации? А также, как организовать стабильную связь с исключением конвертера и самого ПК? Пробовал установить терминаторы (резисторы сопротивление 120 Ом в начале линии, т.е. на выходе приемника, а также на конце линии), однако это ситуацию не изменило. Спасибо! -
В аппаратно-программной системе проблема при подаче питания. Требуется отладка. Но отладчик STM32CubeIDE отваливается при снятии с STM32 питания. Как быть?
-
Начинающий программист микроконтроллеров AVR, STM32
Кристина Сергеевна опубликовал тема в Ищу работу
Ищу работу/подработку/стажировку, связанную с программированием микроконтроллеров AVR, STM32. Работа в программах AtmelStudio, Proteus, KeiluVision, CubeMX. Знание основ языка программирования С++. Желание развиваться в данном направлении. [email protected] -
Подскажите пожалуйста где можно найти в свободном доступе коллекцию библиотек stm32cube_fw_*?
-
В даташите есть такая схема: Но всё равно не очень понятно, как именно это должно работать. То есть нужно загрузиться из system memory (Boot0 = 1, Boot1 = 0) и прислать на любой USART байт 0x7F и по этому USART'у можно послать прошивку через CubeProg?
- 7 ответов
-
- stm32
- bootloader
-
(и ещё 2 )
C тегом:
-
Я делаю плату разработки на STM32 и хочу сделать отключаемый кварцевый резонатор на выводах OSC32, которые можно будет использовать для других целей, например, в качестве выводов GPIO. Я подключаю резонатор по схеме генератора Пирса, схему подключения смотрите на изображении: Источник изображения: https://www.st.com/resource/en/application_note/an2867-guidelines-for-oscillator-design-on-stm8afals-and-stm32-mcusmpus-stmicroelectronics.pdf Могу ли я поставить только один выключатель (джампер), чтобы полностью отключить генератор от контакта STM32 и сделать так, чтобы он абсолютно не влиял на контакты OSC32_IN/OUT и подключенную к ним периферию, даже если на этих контактах есть какой-либо сигнал, или мне нужно поставить переключатель на оба провода 1 и 2? Дополнение: Я не беспокоюсь о влиянии остальных компонентов на кристалл (исключая случаи, при которых они могут вывести кристалл из строя), а только кристалла на микроконтроллер и периферию, потому что если кристалл отключен от микроконтроллера, он не будет выполнять никаких других задач в этой схеме.
-
В GD32F103RBT6 имеется Timer1. В Timer1 имеется 4 канала. Каждый канал можно настроить в режим захвата по фронту/срезу на пине контроллера и настроить соответствующие прерывания. Собственно я так и настроил. Функция обработки прерывания от Timer1 выглядит так: Когда фронты/срезы поступают на один из 4 каналов, всё работает как надо и вопросов не возникает. Но если фронты/срезы будут поступать одновременно на два и более каналов, то вопросы возникают. Если слать фронты/срезы на канал 0 и канал 1, то на канале 1 будут пропуски в обработке прерываний. Выяснил это просто инкрементируя счётчики фронтов/срезов при обработке прерываний от каналов. Причём, если код как в посте, то пропуски будут на канале 1. Если в коде поменяю местами очерёдность обработки каналов (сначала канал 1, а потом канал 0), то пропуски всё равно будут на канале 1. Если уберу обработку канала 0, и буду слать фронты/срезы на каналы 1 и 2. То пропуски будут на канале 2. Вангую, что мне ответят: 1) читай Джозефа Ю.; 2) не нужно совать всю обработку события в функцию обработки прерывания. Нужно установить флаг события, а уж в основном цикле разбираться; 3) использовать другие таймеры - не могу, остальные все заняты; 4) в UserManualе ответа не нашёл, Erratы не нашёл на сайте производителя. Если есть у кого-нибудь другие комментарии, очень прошу подсказать. Как устранить или минимизировать пропуски? Сам пробовал увеличить стек - не помогло. Приоритет прерываний от Timer1 равен 7. Приоритеты остальных прерываний ниже (значение больше 7).
- 79 ответов
-
- gigadevice
- новичок
-
(и ещё 3 )
C тегом:
-
STM32F407VET6 не принимает данные от DP83848
U_K опубликовал тема в ARM, 32bit
Здравствуйте! Имеется разработанная плата с STM32F407VET6 и PHY DP83848 для реализации Ethernet-передачи(планируется TCP-клиент или сервер). STM32F407VET6 и DP83848 соединяются по MII-интерфейсу. Используется LWIP-стек. DP83848 тактируется от отдельного кварца на 25 МГц, микроконтроллер - также от отдельного на 25 МГц. Плата и ПК соединены напрямую по Ethernet-кабелю, без роутеров и маршрутизаторов. Проект был сгенерирован из CubeMx в Keil v5.27. Далее в цикл While() добавил MX_LWIP_Process(), скомпилировал, прошил. Основная проблема - МК не принимает данные от DP83848. Что было проверено/сделано: 1. Сверил все адреса регистров/значений из даташита на DP83848 с тем, что выдает CubeMx. Пришлось в некоторых местах исправить. 2. Проверил повторно схему, соответствие подключаемых выводов на обоих сторонах (STM32 и DP83848), еще раз сверился с требованиями по подключению DP83848 из даташита. 3. Проверил осциллографом сигналы на RXD0..RXD3 - имеются (т.е. DP83848 принимает сигналы с ПК, и передает затем STM32, но он их не воспринимает что-ли?), RX_CLK и TX_CLK - имеются, генерация от кварца есть. 4. Назначил IP адрес, маску и узел в настройках адаптера Ethernet на ПК. 5. Попытался понять, где же все-таки происходит "затык", прошелся последовательно по функциям: While() -> MX_LWIP_Process() -> ethernetif_input(&gnetif) -> low_level_input(netif) -> HAL_ETH_GetReceivedFrame(&heth). В функции HAL_ETH_GetReceivedFrame(&heth) есть условие: if(((heth->RxDesc->Status & ETH_DMARXDESC_OWN) == (uint32_t)RESET)), в него программа не заходит. Подумал, что возможно что-то с DMA, но так и не получилось понять. 6. Хотел проверить в RMII-режиме - схема и разводка платы не позволяет (P.S.- Хотя конечно, можно настроить "нестандартно" тактирование STM32, пустить 50 МГц с MCO на RX_CLK и X1 у DP83848 через доп.провода) После вышеописанных действий результата нет. Скриншоты с настройкой из CubeMx прикрепил. Также прикрепил пару скриншотов из WireShark, скриншоты "фейкового" пинга из командной строки и общих настроек LWIP. В WireShark видно, что ПК постоянно спрашивает "Who has 192.168.1.1.?", а плата шлет какие-то запросы (наверно связаны с автосогласованием при включении DP83848), но не слышит ПК. Я понимаю, что применять CubeMX не очень "рационально", но имеется потребность в кратчайшие сроки реализовать связь по Ethernet для передачи данных. Буду рад любым подсказкам. -
Продолжение моего прошлого вопроса. До этого хотел реализовать загрузчик с прошивкой в качестве hex-файла, теперь попытался с бинарным и возникла проблема. "Получать прошивку должен по UART. На данный момент загрузчик успешно выполняет передачу управления основной программе и стирает память по адресу, соответствующему программе, при получении прошивки." Отправляю bin-файл через TeraTerm, контроллер его вроде как получает, но пропускает цикл с записью прошивки, не могу понять почему. Проблема находится где-то в районе "strtoul". Пробовал конец строки, что в буфере, добивать нуль-терминирующим символом - безрезультатно. Прикладываю файл загрузчика, буду благодарен за любую помощь.main.c
-
Пишу загрузчик на stm32f103. Получать прошивку должен по UART. На данный момент загрузчик успешно выполняет передачу управления основной программе и стирает память по адресу, соответствующему программе, при получении прошивки. Застрял на моменте отправки hex-файла загрузчику - плохо понимаю как это реализовать. Со стороны компьютера должно быть приложение, позволяющее передать файл прошивки, на это выделено 10 секунд. Пробовал использовать Tera Term, но ничего не выходит. Не знаю, не позволяет приложение или криво написан код. Сам код с получением файла прошивки не мой, планирую сначала проверить его, а затем уже написать свой. Новичок в этом деле, так что прошу не судить строго. main.c
- 20 ответов
-
- stm32
- bootloader
-
(и ещё 2 )
C тегом:
-
Приветствую участников форума, В процессе изучения реального потребления в режиме Standby y HK32F030F4P6 на макетной плате собственной разработки обнаружилось, что вместо 1,64 мкА потребление составляет около 175 мкА. При этом все GPIO переключены в состояние входов, в цепи питания (где измеряется ток) есть только конденсаторы сам микроконтроллер. При старте никакие периферийные блоки, кроме GPIO, не настраиваются и не включаются. Для перехода в режим Standby используется следующий код: // Configure standby mode PWR->CR &= ~PWR_CR_LPDS; PWR->CR |= PWR_CR_PDDS | PWR_CR_CWUF | PWR_CR_CSBF; // PWR->CSR2 SHDS bit to 1 *((uint32_t*)(PWR_BASE + 0x30)) |= (1 << 7); // Set SLEEPDEEP in system control register SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk; while (1) { __WFE(); } Пин BOOT0 подтянут с помощью резистора 100 кОм к земле, NRST подтянут с помощью 100 кОм к питанию. Линии SWD и NRST на время измерения отключаются от кабеля программирования. Поскольку у меня ранее не было нужды и опыта работы с аналогичными STM32 в режиме Standby я возможно упускаю какую-то необходимую настройку? Хотя с точки зрения описания на HK32 я всё сделал правильно, даже взвёл в 1 бит SHDS, отсутствующий у аналогичного STM32. Но тем не менее это не помогает. Был ли у кого-нибудь опыт работы с этими МК в режимах пониженного энергопотребления? Какие есть подводные камни при настройке?
-
Куплю или приму в дар ссылку на магазин, где продается этот микроконтроллер)
-
Использую эту штуку для отладки с st-link'ом. Возник простой вопрос: как поменять "проект" целиком? Я экспортировал все потоки в json-файл, но импортировать обратно можно только удаляя потоки поодиночке. Непонятно где хранятся свойства Dashboard. В общем, может ли кто пояснить, как мониторить другой проект? Или хотя бы как удалить всё и заново загрузить? Последний поток не удаляется.
-
При использовании одного буфера на приём и передачу звука через DMA всё работает нормально, если использовать разные буферы на приём и передачу, появляются лишние шумы и записанного голоса почти не слышно, буфер заполняется при срабатывании callback
-
Сначала суть проблемы, а потом собственно вопрос. Встал вопрос и переносе проекта с PIC18 на STM32 - основная причина - нехватка скорости АПЦ, скорости работы, плюс увеличение разрядности АПЦ с 10 до 12 бит. Раньше с STM32 почти не работал. Выбор пал на STM32F401CCU6. Тактовая устраивает, скорость АЦП тоже. Цена опять же вполне приемлемая. Начал изучать АПЦ - а там чудеса... Внутри не оказалось источника опорного напряжения, даже одного. В корпусах 48/64 вывода вывод Vref+ не выведен на ружу. Точнее он объединен с VDDA. Т.е. диапазон измеряемых напряжение от 0 до 3-х вольт (питания 3В). Vref- даже если в большом корпусе выведен отдельным выводом, он обязательно должен быть соединен с землей. Т.е. смещение шкалы АЦП такого вида не пройдет: на Vref- 0.4В, на Vref+ 2.2В. Измеряем в коридоре 1,8В. С PIC18 такое легко прокатывает. Собственно вопрос - есть ли среди STM32 камни с более развитым модулем АЦП? Чтобы можно было, бы хотя бы, просто на Vref+ подать 2В, не в монструозном корпусе.
-
Всех приветствую. Предлагаю тут выкладывать найденные ошибки в библиотеках HAL. P.S. не нужно тут обсуждать применять или нет библиотеки. Итак. MCU - L433 библиотека - stm32l4xx_hal_i2c.c версия - STM32Cube_FW_L4_V1.17.2 (последняя на 23.06.2022) функция - I2C_IsErrorOccurred Причина: в цикле while (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_STOPF) == RESET) после условия выхода по таймауту if ((HAL_GetTick() - tickstart) > I2C_TIMEOUT_STOPF) нет выхода из цикла. Может остаться на очень долгое время. Решение: добавить break; после status = HAL_ERROR;
-
Поднимаю тему так как на рынке сейчас чехарда, а брэндовые stm32 по некоторым позициям подорожали в 6-10 раз. Пытался (и пытаюсь) пол года как уже объездить CH32F103C8T6 клон от китайской компании WCH Здесь буду описывать грабли, которые прошел лично с данными МК, дабы другие не налетали. В принципе, чипы рабочие, если как рыбу "фугу" уметь их готовить. Они дешевле оригинальных STM32 в несколько раз, имеют широкий диапазон питания по напряжению. Купить их можно только на Али либо в Китае. Даже на англоязычном сайте WCH они не упоминаются, только в китайской его части. Кто сталкивался или интересуется - прошу высказыватся.
-
Как защититься от непростых наводок?!
Black001010 опубликовал тема в ЭМС
День добрый. Задача... Нужна общая линия тревоги, устойчивая к помехам. К ней подключаются 1-10 блоков, каждый на расстоянии 1-5м друг от друга, соотв. максимальная длина линии 50 м. Любой блок может активировать линию (логическое "или") и каждый блок узнает, если линию активировал другой блок. Все блоки питаются 24в с общего БП. В каждом блоке STM32F103. Решение... Линию просаживаю биполярным транзистором с ОК, оптопарой слушал линию. Проблема... На столе работает как нужно. Любой блок может активировать линию, и все об этом узнают. НО когда имитирую работу в тяжелых (нормальных рабочих) условиях, проводами линии обвешиваю 3-х фазный электродвигатель - начинается произвольная активация линии. Предположил открывается транзистор, пытался менять номинал R5 - не помогло, хотя на 2к перестал открываться от касания пальцем. Предположил срабатывает светодиод оптопары, пытался "приглушить" номиналом R3 до 2к - нет разницы. Подскажите пожалуйста, как доработать мою схему (или может другой схемой), решить задачу. В электронике слаб, буду очень признателен, если поправите неправильные номиналы, подскажите что поменять. P.S. Возможна зацепка... При подключении 2-х блоков, наводки как буд-то сильнее и наводятся быстрее, чем если подключены 8 блоков. При 2 блоках светодиоды (имитируют вход МК) горят на 20%, МК активацию линии (лог 0) ловит практически сразу при включении электродвигателя. При 8 блоках светодиоды помаргивают еле еле, МК активацию линии ловит секунд через 10. -
Срочно нужно написать небольшую программу для STM32
SergeySlice опубликовал тема в Предлагаю работу
Место работы - удаленно. Оплата труда - по договоренности. Сроки - как можно быстрее. Суть задачи. Имеется некая новая плата в составе большой установки, на этой плате установлен контроллер STM32F407ZGT6. Есть два импульсных входа, и вход по RS485 для связи с остальной инфраструктурой по протоколу Modbus. Есть служебный разъем для прошивания. По Модбасу приходит команда Start, начиная с этого момента запускается счет импульсов по первому входу, и от него запускается счет по второму входу. По команде Stop счет импульсов прекращается синхронно (первый затем второй). Затем накопленные данные должны быть переданы наверх по Модбасу. Телефон для связи в личке. -
АЦП, ДМА и таймер
NefoRalt опубликовал тема в ARM, 32bit
Здравствуйте! Имеется отладочная плата с STM32F303. Задача: измерять импульсный сигнал длинной 100 мкс и частотой 1000 Гц и выводить измерения на ПК. Запускаю два таймера. Первый имитирует измеряемый сигнал. Второй "толкает" АЦП Измеряю через внутренний 12-битный АЦП с использованием ДМА и запуском по таймеру. и сохраняю измерения в массив. Затем этот массив через ДМА передаю ЮАРТУ и вывожу на ПК. На выходе получаю поток невнятных чисел. Помогите разобраться в чем ошибка. -
stm32 Проблема с записью данных с АЦП на SD карту при помощи FATFS
PadenieShtanov опубликовал тема в STM
Приветствую, столкнулся с проблемой при записи данных с АЦП, посредством библиотеки FATFS на SD карту. Данные с АЦП формируются в массив, после чего последовательностью функций f_mount, f_open, f_write записываются на SD карту, однако иногда функция f_write возвращает результат FR_INVALID_OBJECT и запись прерывается. Копнув глубже увидел что такой статус появляется из за того, что функция HAL_SD_GetCardState возвращает странный статус HAL_SD_CARD_SENDING, который описан как sd card is sending operation information. Большего описания нигде не нашел. Проблема исчезает посредством увеличения делителя частоты тактирования SDIO, что в свою очередь значительно режет скорость передачи созданного файла с данными на пк посредством USB HS, с чем вроде можно и свыкнуться, но хотелось бы разобраться в чём причина. Возможно кто-то сталкивался с подобной проблемой и может помочь. -
Привет, народ! Заметил такую странность, которую не знаю как объяснить. Плата STM32F103C8T6 (Blue Pill) Я хотел сделать мигание светодиодом на ноге A0 при инициализации контроллера на 72MHz. Взял сделанный ранее проект и стал его упрощать. И вот когда оставил в проекте, по-сути, только: - инициализацию на 72Mhz - включение тактирования портов - настройку пина A0, то заметил, что код мигания стал работать медленнее! Т. е. мигание, сделанное в бесконечном цикле, стало в 1.5-2 раза медленнее, чем было до. Я стал разбираться, что могло на это повлиять. И вернул вызов ненужной функции, в которой инициализировались пины A8, A9, B3, B4, B6, B7. И о чудо, мигание стало опять быстрым! Повторюсь, в этой функции делается только инициализация пинов, и она вызывается один раз в начале программы, ничего более. Вот полный код: https://pastebin.com/Z7d0LZif А вот код функции, которая "разгоняет" выполнение кода: // Настройка пинов A8, A9, B3, B4, B6, B7 void otherPortInit(void) { // Для начала сброс конфигурации всех используемых портов в ноль GPIOA->CRH &= ~(GPIO_CRH_MODE8 | GPIO_CRH_CNF8); GPIOA->CRH &= ~(GPIO_CRH_MODE9 | GPIO_CRH_CNF9); GPIOB->CRL &= ~(GPIO_CRL_MODE3 | GPIO_CRL_CNF3); GPIOB->CRL &= ~(GPIO_CRL_MODE4 | GPIO_CRL_CNF4); GPIOB->CRL &= ~(GPIO_CRL_MODE6 | GPIO_CRL_CNF6); GPIOB->CRL &= ~(GPIO_CRL_MODE7 | GPIO_CRL_CNF7); uint32_t mode; uint32_t cnf; mode=0b11; // Режим выхода, с максимальной частотой 50 МГц cnf=0b00; // Режим push-pull GPIOA->CRH |= (mode << GPIO_CRH_MODE8_Pos) | (cnf << GPIO_CRH_CNF8_Pos); GPIOA->CRH |= (mode << GPIO_CRH_MODE9_Pos) | (cnf << GPIO_CRH_CNF9_Pos); mode=0b00; // Режим входа cnf=0b01; // Режим плавающего входа, подтяжки нет GPIOB->CRL |= (mode << GPIO_CRL_MODE3_Pos) | (cnf << GPIO_CRL_CNF3_Pos); GPIOB->CRL |= (mode << GPIO_CRL_MODE4_Pos) | (cnf << GPIO_CRL_CNF4_Pos); GPIOB->CRL |= (mode << GPIO_CRL_MODE6_Pos) | (cnf << GPIO_CRL_CNF6_Pos); GPIOB->CRL |= (mode << GPIO_CRL_MODE7_Pos) | (cnf << GPIO_CRL_CNF7_Pos); } Я не могу эту вещь объяснить. Почему настройки пинов, которые не используются в коде, так странно влияют на скорость выполнения программы контроллером? Мало того, в базовом проекте, на точно таком же коде я обнаружил обратный эффект: вызов этой функции инициализации портов замедляет мигание, а комментирование ее вызова - ускоряет. В общем, я в недоумении. Я вообще не ожидал, что такое поведение возможно. Это тормозит разработку домашнего проекта, потому то в нем критична реакция на сигналы длительностью ~500нс, и тут я вижу, что тупой бесконечный цикл работает с разной скоростью в зависимости от инициализации неиспользуемых портов. Вопрос 1: Как единственный вызов этой функции может влиять на скорость выполнения основного цикла? Вопрос 2: Почему вызов этой функции может давать строго обратный эффект?