Jump to content

    

Search the Community

Showing results for tags 'stm32'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Сайт и форум
    • Новости и обсуждения сайта и форума
    • Другие известные форумы и сайты по электронике
    • В помощь начинающему
    • International Forum
    • Образование в области электроники
    • Обучающие видео-материалы и обмен опытом
  • Cистемный уровень проектирования
    • Вопросы системного уровня проектирования
    • Математика и Физика
    • Операционные системы
    • Документация
    • Системы CAD/CAM/CAE/PLM
    • Разработка цифровых, аналоговых, аналого-цифровых ИС
    • Электробезопасность и ЭМС
    • Управление проектами
    • Neural networks and machine learning (NN/ML)
  • Программируемая логика ПЛИС (FPGA,CPLD, PLD)
    • Среды разработки - обсуждаем САПРы
    • Работаем с ПЛИС, области применения, выбор
    • Языки проектирования на ПЛИС (FPGA)
    • Системы на ПЛИС - System on a Programmable Chip (SoPC)
  • Цифровая обработка сигналов - ЦОС (DSP)
    • Сигнальные процессоры и их программирование - DSP
    • Алгоритмы ЦОС (DSP)
  • Микроконтроллеры (MCs)
    • Cредства разработки для МК
    • ARM
    • AVR
    • MSP430
    • Все остальные микроконтроллеры
    • Отладочные платы
  • Печатные платы (PCB)
    • Разрабатываем ПП в САПР - PCB development
    • Работаем с трассировкой
    • Изготовление ПП - PCB manufacturing
  • Сборка РЭУ
  • Аналоговая и цифровая техника, прикладная электроника
  • Силовая Электроника - Power Electronics
  • Интерфейсы
  • Поставщики компонентов для электроники
  • Майнеры криптовалют и их разработка, BitCoin, LightCoin, Dash, Zcash, Эфир
  • Дополнительные разделы - Additional sections

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


AIM


MSN


Сайт


ICQ


Yahoo


Jabber


Skype


Город


Код проверки


skype


Facebook


Vkontakte


LinkedIn


Twitter


G+


Одноклассники

  1. Привет, народ! Заметил такую странность, которую не знаю как объяснить. Плата 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: Почему вызов этой функции может давать строго обратный эффект?
  2. Привет, народ. Пытаюсь разобраться как прошивать плату STM32F103C8T6 (Blue Pill) по miniUSB-кабелю. Свои изыскания я записываю здесь: Как прошивать Blue Pill STM32 F103 через обычный USB-кабель в Linux Затык происходит на том, что я прошиваю DFU-бутлоадер в плату, плата становится видна по USB: [25760.232130] usb 2-2: new full-speed USB device number 7 using xhci_hcd [25760.385437] usb 2-2: New USB device found, idVendor=1eaf, idProduct=0004, bcdDevice= 2.00 [25760.385444] usb 2-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0 [25760.385447] usb 2-2: Product: Maple [25760.385449] usb 2-2: Manufacturer: LeafLabs [25760.424009] cdc_acm 2-2:1.0: ttyACM0: USB ACM device [25760.424307] usbcore: registered new interface driver cdc_acm [25760.424310] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters Однако утилита dfu-util (версии 0.9) ни одной платы не видит. И версия 0.8 тоже не видит: > dfu-util --list dfu-util 0.9 Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc. Copyright 2010-2016 Tormod Volden and Stefan Schmidt This program is Free Software and has ABSOLUTELY NO WARRANTY Please report bugs to http://sourceforge.net/p/dfu-util/tickets/ Пробовал давать команду с указанием id-шников устройства: dfu-util -d 1eaf:0004 --list так тоже DFU-устройство не обнаруживается. Пробовал и под рутом, и от обычного пользователя, хотя DBUS правило для доступа пользователем прописывается при установке пакета dfu-util (Debian Linux 11). Что еще нужно донастроить, чтобы увидеть DFU-устройство?
  3. Продаются оказавшиеся лишними новые компоненты: STM32L151CCT6 80 шт - по 1000 р STM32L151C6U6A 29 шт - по 500 р atmega328pb 7 шт по 600 р Резисторы SQP 10 Вт 36 Ом 200 шт по 20 р BD244C TO-220 100 шт по 80 р itcrs собак sibnet.ru Возможны различные варианты как по оплате так и по доставке.
  4. Привет, народ. Купил себе на пробу STM32F103C8T6 (BluePill) с программатором STLink-V2. Вот что о нем рассказывает st-info --probe: Found 1 stlink programmers serial: 132014026315303030303032 openocd: "\x13\x20\x14\x02\x63\x15\x30\x30\x30\x30\x30\x32" flash: 65536 (pagesize: 1024) sram: 20480 chipid: 0x0410 descr: F1 Medium-density device Установил среду STM32CubeIDE Version: 1.8.0 Build: 11526_20211125_0815 (UTC). И попытался собрать и запустить программку мигания светодиодом. Сделал новый проект для STM32F103C8Tx, настройки брал из вот этого видео: https://www.youtube.com/watch?v=e_NSqz5P8Qk По-сути сгенерировался дефолный проект для STM32F103C8Tx, частота настроена на 72MHz, активирован пин PC13 на режим Output. В коде в бесконечный цикл вписаны команды: while (1) { HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13); HAL_Delay(500); } По ходу попыток запуска, вначале STM32CubeIDE сказал, что прошивка устарела, и надо обновить. Я согласился, но пришлось пару раз вставить-вытащиить программатор в USB, так как была ошибка: st-link is not in the DFU mode. Please restart it. Прошивка залилась, а в сети нашел инфу что если обновление прошивки предваряется такой ошибкой, то это нормально. Потом пришлось подредактировать файл stm32f1x.cfg, так как при запуске была ошибка: linux gdb ST-LINK: Could not verify ST device! Abort connection. Эту ошибку убрал по инструкции: https://stackoverflow.com/questions/58783393/atollic-couldnt-verify-st-device, заодно отладку переключил с STLink GDB Server на STLink OpenOCD (сам GDB, естественно, установлен и работает, обычный C/C++ код через него отлаживается). В результате, после устранения предыдущей ошибки, стали появляться другие ошибки: Error: STM32F103C8Tx.cpu -- clearing lockup after double fault Polling target STM32F103C8Tx.cpu failed, trying to reexamine Насколько я понял, эти ошибки возможны из-за того, что программа либо не запускается, либо крашится уже на самом микроконтроллере по причине неправильной настройки диапазонов адресного пространства или какой-то периферии. Тогда я решил снова сделать новый проект, все повторил заново, и на этот раз почти получилось. Во всяком случае, явных ошибок в логе запуска нет. Но светодиод не мигает, отладка не работает: Open On-Chip Debugger 0.11.0+dev-00438-ga75fc63 (2021-11-03-15:26) Licensed under GNU GPL v2 For bug reports, read http://openocd.org/doc/doxygen/bugs.html Info : Listening on port 6666 for tcl connections Info : Listening on port 4444 for telnet connections Info : STLINK V2J39S7 (API v2) VID:PID 0483:3748 Info : Target voltage: 2.427853 Info : Unable to match requested speed 8000 kHz, using 4000 kHz Info : Unable to match requested speed 8000 kHz, using 4000 kHz Info : clock speed 4000 kHz Info : stlink_dap_op_connect(connect) Info : SWD DPIDR 0x2ba01477 Info : STM32F103C8Tx.cpu: Cortex-M3 r2p1 processor detected Info : STM32F103C8Tx.cpu: target has 6 breakpoints, 4 watchpoints Info : starting gdb server for STM32F103C8Tx.cpu on 3333 Info : Listening on port 3333 for gdb connections Info : accepting 'gdb' connection on tcp/3333 Info : device id = 0x20036410 Info : flash size = 64kbytes undefined debug reason 8 - target needs reset O.K. O.K.:0xE00FFFD0 undefined debug reason 8 - target needs reset shutdown command invoked Info : dropped 'gdb' connection Я пробовал собрать и запуститься в режиме релиза (переткнул и конфигурацию и билд на Release), но почему-то при запуске RUN все равно IDE пытается запустить дебаггер, ей это не удается, лог запуска все тот же. Дальше я уже не знаю что делать. Прошу посоветовать что где еще надо докрутить, чтобы помигать светодиодом. * * * UPD: Иногда запуск почему-то происходит по-другому, хотя ничего ни в коде ни в конфигурации не меняю. Запуск сопровождается появлением окна с ошибкой: Could not verify STM device! Хотя, как написано выше, такая ошибка была, и верификация устройства отключена (в начало файла stm32f1x.cfg добавлена строка set CPUTAPID 0). Выхлоп запуска при этом немного другой, строки с Info те же самые, но в конце такие ошибки: undefined debug reason 8 - target needs reset O.K. O.K.:0xE00FFFD0 Error: Failed to read memory at 0xfffffffe Error: Failed to read memory at 0xfffffffe undefined debug reason 8 - target needs reset shutdown command invoked Info : dropped 'gdb' connection Вот как выглядит скриншот: https://ibb.co/JvyD2HK
  5. Куплю или приму в дар ссылку на магазин, где продается этот микроконтроллер)
  6. Добрый вечер, настроена база для передачи информации по сети CAN. не работает простой колбек (помигать светодиодом при получении сообщения) . Если смотреть при отладке код вылетает из if как я понял в моменте проверки на наличие инфы в FIFO. Rx data после отправки сообщения остается пустым. Буду благодарен за любой совет, готов ответить на конкретизирующие вопросы. /* Private variables ---------------------------------------------------------*/ ADC_HandleTypeDef hadc; CAN_HandleTypeDef hcan; TIM_HandleTypeDef htim1; /* USER CODE BEGIN PV */ CAN_TxHeaderTypeDef TxHeader; CAN_RxHeaderTypeDef RxHeader; uint32_t TxMailbox = 0; uint8_t TxData[8] = {0,}; uint8_t RxData[8] = {0,}; CAN_FilterTypeDef sFilterConfig; /* USER CODE END PV */ /* Private function prototypes -----------------------------------------------*/ void SystemClock_Config(void); static void MX_GPIO_Init(void); static void MX_ADC_Init(void); static void MX_CAN_Init(void); static void MX_TIM1_Init(void); /* USER CODE BEGIN PFP */ /* USER CODE END PFP */ /* Private user code ---------------------------------------------------------*/ /* USER CODE BEGIN 0 */ /* USER CODE END 0 */ /** * @brief The application entry point. * @retval int */ int main(void) { /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_ADC_Init(); MX_CAN_Init(); MX_TIM1_Init(); /* USER CODE BEGIN 2 */ HAL_TIM_Base_Start(&htim1); HAL_CAN_Start(&hcan); TxHeader.ExtId = 0; TxHeader.RTR = CAN_RTR_DATA; TxHeader.IDE = CAN_ID_STD; TxHeader.DLC = 8; TxHeader.TransmitGlobalTime = ENABLE; HAL_CAN_ActivateNotification(&hcan, CAN_IT_RX_FIFO0_MSG_PENDING | CAN_IT_ERROR | CAN_IT_BUSOFF | CAN_IT_LAST_ERROR_CODE); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { if(HAL_CAN_GetTxMailboxesFreeLevel(&hcan) > 0) { TxHeader.StdId = 0x0378; for (uint8_t i = 0; i < 8; i++) { TxData[i] = i; } } HAL_CAN_AddTxMessage(&hcan, &TxHeader, TxData, &TxMailbox); HAL_Delay(500); HAL_CAN_GetRxMessage(&hcan, CAN_RX_FIFO0, &RxHeader, RxData); if(HAL_CAN_GetRxMessage(&hcan, CAN_RX_FIFO0, &RxHeader, RxData) == HAL_OK) { HAL_GPIO_WritePin(Led2_GPIO_Port,Led2_Pin, GPIO_PIN_SET); HAL_Delay(50); HAL_GPIO_WritePin(Led2_GPIO_Port,Led2_Pin, GPIO_PIN_RESET); } HAL_Delay(500); /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ } ....описание функицй static void MX_CAN_Init(void) { /* USER CODE BEGIN CAN_Init 0 */ /* USER CODE END CAN_Init 0 */ /* USER CODE BEGIN CAN_Init 1 */ /* USER CODE END CAN_Init 1 */ hcan.Instance = CAN; hcan.Init.Prescaler = 4; hcan.Init.Mode = CAN_MODE_NORMAL; hcan.Init.SyncJumpWidth = CAN_SJW_1TQ; hcan.Init.TimeSeg1 = CAN_BS1_8TQ; hcan.Init.TimeSeg2 = CAN_BS2_7TQ; hcan.Init.TimeTriggeredMode = DISABLE; hcan.Init.AutoBusOff = DISABLE; hcan.Init.AutoWakeUp = DISABLE; hcan.Init.AutoRetransmission = DISABLE; hcan.Init.ReceiveFifoLocked = DISABLE; hcan.Init.TransmitFifoPriority = DISABLE; if (HAL_CAN_Init(&hcan) != HAL_OK) { Error_Handler(); } /* USER CODE BEGIN CAN_Init 2 */ sFilterConfig.FilterBank = 0; sFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK; sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT; sFilterConfig.FilterIdHigh = 0x0000; sFilterConfig.FilterIdLow = 0x0000; sFilterConfig.FilterMaskIdHigh = 0x0000; sFilterConfig.FilterMaskIdLow = 0x0000; sFilterConfig.FilterFIFOAssignment = CAN_RX_FIFO0; sFilterConfig.FilterActivation = ENABLE; sFilterConfig.SlaveStartFilterBank = 14; /* USER CODE END CAN_Init 2 */ } void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan) { if(HAL_CAN_GetRxMessage(hcan, CAN_RX_FIFO0, &RxHeader, RxData) == HAL_OK) { HAL_GPIO_WritePin(Led2_GPIO_Port,Led2_Pin, GPIO_PIN_SET); HAL_Delay(50); HAL_GPIO_WritePin(Led2_GPIO_Port,Led2_Pin, GPIO_PIN_RESET); HAL_Delay(50); } }
  7. Всем добрый день! На работе поручили заняться разработкой нового прибора на микроконтроллере STM32 (исходя из технической задачи мой выбор пал на STM32F407VE) с обязательным условием - использование ОСРВ FreeRTOS. С микроконтроллерами знаком, разрабатывал на их основе пару приборов, но с данной ОСР не работал никогда, и поэтому хочу попросить здесь совета. Работаю в STM32CubeIDE. Одна из возможностей моего девайся - это ручное управление коллекторным двигателем. В проекте я настроил две ножки на внешние прерывания GPIO_EXTI_3 и GPIO_EXTI_4. Включена подтяжка по питанию и срабатывание прерывания по любому изменению фронта сигнала (прибор должен реагировать на нажатие/отпускание кнопок. Пока одна из кнопок нажата - крутим вверх или вниз, а если отпустили, то остановка). Схемотехнически нажатие кнопки коммутирует вход МК с землёй. Программно я себе это представлял так: Срабатывание прерывания на одном из входов -> В перывании определяем, какой именно фронт пришёл -> Если фронт низкий, то крутим двигатель || Если фронт высокий, то останавливаемся. Вставлять в прерывание функцию вращения двигателем я, разумеется не стал. Вместо этого я решил в зависимости от статуса кнопки пересылать в функцию управления двигателем семафор. Условно говоря, код выглядит так: void EXTI3_IRQHandler(void) //Кнопка вращения двигателя вверх { HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_3); if(HAL_GPIO_ReadPin(GPIOD,GPIO_PIN_3) == GPIO_PIN_SET) //Если на входе высокий уровень, то пока ничего не делаем { asm("nop"); } else //Если уровень изменился, то { xSemaphoreGiveFromISR(sem_curr_upHandle,NULL); //Даём семафор из прерывания } } // void EXTI4_IRQHandler(void) //Кнопка вращения двигателя вниз { HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_4); if(HAL_GPIO_ReadPin(GPIOD,GPIO_PIN_4) == GPIO_PIN_SET) //Если высокий уровень, то ничего не делаем { asm("nop"); } else //В противном случае выдаём семафор { xSemaphoreGiveFromISR(sem_curr_downHandle,NULL); } } Задача, в которой я собираюсь вращать двигателем, выглядит так: void poll_button(void const * argument) { for(;;) { if(xSemaphoreTake(sem_curr_upHandle,portMAX_DELAY) == pdPASS) //Если семафор на вращение вверх принят функцией и равен одному (время ожидания семафора максимальное) { HAL_GPIO_WritePin(GPIOA,GPIO_PIN_9,GPIO_PIN_SET); } else if(xSemaphoreTake(sem_curr_downHandle,portMAX_DELAY) == pdPASS) //Если семафор на вращение вниз принят функцией и равен одному (время ожидания семафора максимальное) { HAL_GPIO_WritePin(GPIOA,GPIO_PIN_10,GPIO_PIN_SET); } } } В качестве отлаживающего механизма использую светодиоды (их и пытаюсь зажечь на отладочной плате в зависимости от полученного семафора), но после прошивки платы ничего не происходит. Я понимаю, что код ещё не дописан, так как после отжатия кнопки мне надо вернуть семафор обратно (правильно ли - "вернуть"?), но по идее данная конструкция уже должна его "выдать", а задача - "принять", и в соответствии с этим что-то сделать. Поэтому мои вопросы заключаются в следующем: 1. Правильна ли моя идея с использованием семафоров в принципе для данной ситуации? В любом случае, эту ОСРВ мне надо изучать по работе; 2. После отдачи семафора по нажатию кнопки - как его вернуть обратно после её отжатия? 3. Задача poll_button не реагирует на полученный семафор. Если в одном из условий изменить "== pdPass" на "!= pdPass", то светодиод будет гореть, но если так сделать в двух условиях, то всё равно будет гореть только один светодиод, будто бы задача по какой-то причине зависает. Что это может быть? Заранее всех благодарю за ответы.
  8. Клоны STM32

    Поднимаю тему так как на рынке сейчас чехарда, а брэндовые stm32 по некоторым позициям подорожали в 6-10 раз. Пытался (и пытаюсь) пол года как уже объездить CH32F103C8T6 клон от китайской компании WCH Здесь буду описывать грабли, которые прошел лично с данными МК, дабы другие не налетали. В принципе, чипы рабочие, если как рыбу "фугу" уметь их готовить. Они дешевле оригинальных STM32 в несколько раз, имеют широкий диапазон питания по напряжению. Купить их можно только на Али либо в Китае. Даже на англоязычном сайте WCH они не упоминаются, только в китайской его части. Кто сталкивался или интересуется - прошу высказыватся.
  9. В продолжение темы про защиту открытого бинарника прошивки ... Уже давно хочу сделать простенький вариант ЧПУ контроллера. Чтоб можно было и с готовыми ЧПУ системам (Mach3, LinuxCNC, ...) юзать. И, при желании, со своим вариантом ЧПУ связку сделать. Одна только проблема - в электронике не силён. Все варианты схем и разводки платы буду выкладывать прямо здесь. Опытных людей здесь много. Поэтому, если не трудно, посмотрите, что у меня получилось и обязательно дайте пинка где что исправить. Проект рисовал в easyeda, чтоб было удобно расшарить и, в последствии, заказать изготовление плат (с монтажом или без). Что требуется от контроллера: Быстрая коммуникация c ПК по сети (Ethernet 10/100) Достаточное кол-во цифровых входов/выходов (с переключаемыми уровнями 5..24V) для управления шаговыми (и серво) драйверами, лазерными модулями, энкодерами, концевиками, индуктивными датчиками и т.п. Как минимум один порт RS485 для управления частотниками (VFD) https://oshwlab.com/MX_Master/MX32 Schematic_MX32_2021-08-18.pdf Schematic_MX32_2021-08-18.svg
  10. Друзья, привет. Есть код и схема для сборки частотомера на STM32, но нет сейчас возможности проверить работоспособность данного устройства. Если у кого-нибудь есть свободные 5 минут, не могли бы вы хотя бы без запуска, беглым взглядом посмотрев код, подсказать будет ли оно работать или нет и подсказать ошибки. В лучшем случае протестировать работает ли устройство или нет. Если кто поможет, буду чрезвычайно благодарен.
  11. Здорова орлы. Проект: stm32h743 читает кадры с камеры по DCMI и кидает их по UDP(lwip работает), на стороне ПК работает прога на Qt, принимает кадры, отображает(я сделал минимальную обвязку типа протокола), все хорошо, 20-30 FPS. Разрешение: 640х512, 1 байт на пиксель, размер кадра 327.680 байт, JPEG не используется. Задача: отобразить это видео в браузере, без Qt программки. Смотрел в сторону RTSP-библиотек, но не нашел ничего относительно простого под embedded, посоветуйте что-нибудь.
  12. Здравствуйте! Имеется разработанная плата с 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 для передачи данных. Буду рад любым подсказкам.
  13. Разработка электроники. Полное ведение проекта, от проработки устройства, написания софта и firmware до отладки образца. FPGA Xilinx - проекты любой сложности. Опыт больше 20 лет. STM32 - включая BLE устройства. Большой опыт разработки для разных заказчиков. Altium Designer - разработка печатных плат. Опыт работы с JKLC PCB. Сделаны многие проекты. Написание приложений под ОС Android. ADC приложения и ЦОС (DSP). Почта для связи vorrommodem@mail.ru
  14. здравствуйте уважаемые форумчане. хочу познакомиться с микроконтроллерами и попытаться мигнуть светодиодом без IDE и библиотек. помогите пожалуйста с выбором для этой цели самого микрокотроллера и остального необходимого для этой цели. если проще, то скажите пожалуйста что нужно купить чтобы мигнуть светодиодом без IDE и библиотек. какой контроллер, какой программатор и uart, если он нужен. бюджет небольшой. желательно чтобы это можно было купить на Aliexpress. пожалуйста отнеситесь серьезно. потому что я могу не понять вашей шутки, если вдруг вы решите пошутить...
  15. Доброй всем, кто подскажет по какой то причине после загорания флажка RXFLVL при преёме setup паккета. после чтения флаг не тухнет. может я нетак четайо с fifo? в документах написано что должен сам тухнуть. code: ;define OTG_FS_H equ 0x5000 OTG_FS_L equ 0x0000 RX_FIFO_STR equ 0x1000 __usb_int proc push {LR} movw r9,#OTG_FS_L movt r9,#OTG_FS_H ldr r0,[r9,#OTG_GINTSTS_B] tst r0,#USBRST beq jmp_usb_int_reset_skip bl _device_init b jmp_usb_int_end jmp_usb_int_reset_skip tst r0,#ENUMDNE beq jmp_usb_int_enmflag_skip bl _device_enmflag b jmp_usb_int_end jmp_usb_int_enmflag_skip tst r0,#RXFLVL beq jmp_usb_int_rx_skip ldr r0,[r9,#OTG_GRXSTSR_B] ; and r1,r0,#EPNUM_MASK cmp r1,#ENPOINT0 bne jmp_usb_int_rx_endpoint1 bl _endpoint0_rx b jmp_usb_int_end jmp_usb_int_rx_endpoint1 b jmp_usb_int_end jmp_usb_int_rx_skip tst r0,#IEPINT jmp_usb_int_end pop {LR} BX LR endp _endpoint0_rx proc push {LR} ;acording to datasheet add r8,r9,#(RX_FIFO_STR) ;point to rxfifo start and r1,r0,#PKTSTS_MASK cmp r1,#PKTSTS_SETUP_REC bne jmp_endpoint0_rx_setup_rec ;disable ldr r1,[r9,#OTG_GINTMSK_B] bic r1,#(RXFLVL) str r1,[r9,#OTG_GINTMSK_B] mov r1,#BCNT_MASK ands r1,r0 ;adviced to test BYT_COUNT before poping fifo to avoid undefined behavior!!! beq jmp_endpoint0_rx_end ;first 4byt are status data ldr r0,[r8] mov r1,#BCNT_MASK and r1,r0 lsr r1,#4 ;byte received and r2,r0,#FRMNUM_MASK lsr r2,#21 ldr r3,[r8] ;only 4byt read alowed ldr r4,[r8] ;ldr r5,[r8],#4 mov32 r0,#(PKTCNT_CNT_OUT_MASK|STUPCNT_3PACK|0x40) ;pack size max 64 str r0,[r9,#OTG_DOEPTSIZ0_B] mov r0,#(CNAK) str r0,[r9,#OTG_DOEPCTL0_B] tst r3,#GET_BIT beq jmp_endpoint0_rx_setup_set and r1,r3,#GET_2BYT_MASK cmp r1,#GET_DESKRIPTOR bne jmp_endpoint0_rx_setup_get_next and r1,r3,#GET_4BYT_MASK cmp r1,#DEVICE_DESCRIPTOR bne jmp_endpoint0_rx_setup_get_next_descriptor ; bl _send_device_descriptor b jmp_endpoint0_rx_setup_get_end jmp_endpoint0_rx_setup_get_next_descriptor b jmp_endpoint0_rx_end ;---------- setup get ---------------------------------------- jmp_endpoint0_rx_setup_get_next jmp_endpoint0_rx_setup_get_end ldr r0,[r9,#OTG_GINTMSK_B] orr r0,#(RXFLVL) str r0,[r9,#OTG_GINTMSK_B] b jmp_endpoint0_rx_end ;*****SETUP set cmd *************************** jmp_endpoint0_rx_setup_set ldr r0,[r9,#OTG_GINTMSK_B] mov r0,#(RXFLVL) str r0,[r9,#OTG_GINTMSK_B] b jmp_endpoint0_rx_end jmp_endpoint0_rx_setup_rec cmp r1,#PKTSTS_SETUP_CMPL bne jmp_endpoint0_rx_out_cmpl mov32 r0,#(PKTCNT_CNT_OUT_MASK|STUPCNT_3PACK|0x40) ;pack size max 64 str r0,[r9,#OTG_DOEPTSIZ0_B] mov r0,#(CNAK) str r0,[r9,#OTG_DOEPCTL0_B] ;bl _send_device_descriptor b jmp_endpoint0_rx_end jmp_endpoint0_rx_out_cmpl cmp r1,#PKTSTS_OUT_CMPL bne jmp_endpoint0_rx_next ldr r0,[r8] b jmp_endpoint0_rx_end jmp_endpoint0_rx_next ldr r0,[r9,#OTG_GINTMSK_B] ;bic r0,#(RXFLVL) ;str r0,[r9,#OTG_GINTMSK_B] ;ldr r0,[r8] ;mov r0,#0 ;str r0,[r8] jmp_endpoint0_rx_end pop {LR} BX LR endp
  16. Добрый день! Пытаюсь настроить связь МК STM32l072 с трансивером SX1276 по шине SPI. Использую HAL библиотеку. На осциллограмме вижу, что CLK, MOSI и NSS какие нужно, а вот на приеме MISO тишина. Пробую на отладочной плате B-L072Z-LRWAN1 Код настройки SPI и осциллограмму прикладываю void MX_SPI2_Init(void) { SPI_HandleTypeDef hspi2; hspi2.Instance = SPI2; hspi2.Init.Mode = SPI_MODE_MASTER; hspi2.Init.Direction = SPI_DIRECTION_2LINES; hspi2.Init.DataSize = SPI_DATASIZE_8BIT; hspi2.Init.CLKPolarity = SPI_POLARITY_LOW; hspi2.Init.CLKPhase = SPI_PHASE_1EDGE; hspi2.Init.NSS = SPI_NSS_SOFT; hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_128; hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB; hspi2.Init.TIMode = SPI_TIMODE_DISABLE; hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; hspi2.Init.CRCPolynomial = 7; if (HAL_SPI_Init(&hspi2) != HAL_OK) { Error_Handler(); } } void HAL_SPI_MspInit(SPI_HandleTypeDef* spiHandle) { GPIO_InitTypeDef GPIO_InitStruct = {0}; if(spiHandle->Instance==SPI2) { /* USER CODE BEGIN SPI2_MspInit 0 */ /* USER CODE END SPI2_MspInit 0 */ /* SPI2 clock enable */ __HAL_RCC_SPI2_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); GPIO_InitStruct.Pin = GPIO_SPI2_MOSI|GPIO_SPI2_MISO; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF_SPI2; HAL_GPIO_Init(GPIO_SPI2_PORT_M, &GPIO_InitStruct); GPIO_InitStruct.Pin = GPIO_SPI2_SCK; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF_SPI2; HAL_GPIO_Init(GPIO_SPI2_PORT_SCK, &GPIO_InitStruct); /* USER CODE BEGIN SPI2_MspInit 1 */ /* USER CODE END SPI2_MspInit 1 */ } } У кого какие мысли?)
  17. Я полный чайник в МК. Прикупил себе STM32-E407 и установил keil 5.24. Перед тем как суваться в keil. Я попытался прошить через Arduino по инструкции из даташита. Все было успешно. Потом, я пытался уже что-то сделать в keil. Для начало хотел просто убедиться, что keil видит плату, но увы. Я прочитал куча решений и ни одна мне не помогла. Устанавливал дрова из этой папки F:\Keil_v5\ARM\STLink\USBDriver. Все равно не видит. Поменял STLinkUSBDriver.dll, все равно никакого отклика. Диспетчер устройств находит его вот так. Назначал через программу Zadig драйвер WinUSB. Подключение платы выглядит следующим образом Мне кажется, что я уже все поломал и у меня куча драйвер уже установлено на компьютер. Запутался, что делать?
  18. Всем привет! Имеется МК STM32F072RBT6, который программируется и отлаживается с помощью OpenOCD через кабель на базе FT2232H. Всё прекрасно работает, пока не выполняется включение защиты от чтения. После отдачи команды lock 0 через OpenOCD (установка защиты от чтения RDP Level 1) начинаются странные эффекты: команда reset halt в OpenOCD перестает работать, при этом МК уходит в HardFault: > reset halt adapter speed: 1000 kHz SWD DPIDR 0x0bb11477 target halted due to debug-request, current mode: Handler HardFault xPSR: 0xc1000003 pc: 0xfffffffe msp: 0xfffffffc И после этого начинается самое интересное: МК перестаёт реагировать на внешний сигнал NRST. При этом его по-прежнему возможно отресетить путем записи в память, например, с помощью команды mww 0x40022010 0x2080, которая устанавливает бит OBL_LAUNCH в регистре FLASH_CR и перезагружает МК изнутри. При этом повторный reset halt приводит МК в то же самое состояние. Что это может быть? Это проявление какого-то встроенного механизма защиты STM32, который блокирует ресет при попытке чтения внутренней памяти? PS: Не то чтобы эта особенность очень мешает жить, но хочется разобраться в этом странном поведении МК.
  19. Компания Рикор, реализующая полный цикл проектирования и производства серверных компонентов, включая разработку конструкторской документации и программного обеспечения, полноценное производство и монтаж серверных печатных плат, серверных корпусов и т.д., ищет в команду Инженера-системотехника. Обязанности: · участие в разработке схемотехнических решений для таких электронных устройств, как серверные материнские платы, десктопные материнские платы, RAID-контроллеры, сетевые маршрутизаторы и т.д; · разработка низкоуровневого (встроенного) программного обеспечения; · запуск, настройка и отладка экспериментальных образцов; · ведение журнала выявленных ошибок; · написание инструкций для серийного производства. Требования: · понимание архитектуры компьютера/сервера; · навыки работы с измерительной техникой (мультиметр, осциллограф и т.д.); · опытный пользователь ОС Linux; · умение читать и разбираться в схемах электрических принципиальных. Будет преимуществом: · владение такими системами проектирования, как OrCAD Allegro, Altium Designer; · уверенное знание С и ассемблера x86/x64; · опыт работы с UEFI BIOS; · опыт работы с контроллерами типа AVR, STM32; · знание языков VHDL/Verilog. Условия: · оформление по ТК РФ · белая конкурентная заработная плата · пешая доступность от м.Курская (7 минут) +7 (495)-363-45-50 доб. 513 Виктория
  20. Уважаемые коллеги, здравствуйте! Делаю устройство на STM32F427 с использованием LWIP Sockets. Отправляю в сокет пакеты длиной 9 байт с частотой 120Гц. На приёмной стороне среднее количество полученных девятибайтовых пакетов за секунду 120. То есть все пакеты доходят до адресата отлично. Но! Wireshark мне показывает вот такую картину. Он говорит, что за секунду отправляется 5 TCP пакетов с payload 216 байт. То есть 24 девятибайтовых посылки в одном пакете. Мне нужно передавать быстроменяющийся сигнал, и за 200мс он безнадежно устареет. Вопрос такой. Как сделать, чтобы LWIP старался отправить TCP пакет сразу, а не накапливал данные в буфере? Я понимаю, что такой подход неэффективен, но нужно именно так. Заранее благодарю за ответы.
  21. Добрый день! Нужна помощь! Есть проект на отладочной плате nuclei-h743 реализует tcp сервер на lwip, полностью рабочий, нареканий нет. Написал идентичный проект в cubeide, при котором контроллер не подключается к сети, а по определяет как неопознанную сеть... подскажите, пожалуйста, что с этим делать? Куда копать?
  22. Здравствуйте! Имеется задача. С аналоговой камеры видеосигнал поступает в STM32 через встроенный АЦП. Необходимо вывести изображение на дисплей. В качестве видеобуфера используется RAM контроллера. Изображение размером 160x120, поэтому встроенной RAM достаточно. Изображение буду выводить через LTDC. Вот тут вычитал, что руководить этим должен LTDC. В смысле, если используется несколько видеобуферов, то LTDC должен формировать прерывание в конце кадра и в прерывании менять адреса видеобуфера. Запуск камеры, я так понимаю, тоже должен быть в этом прерывании. Но какими должны быть частоты работы камеры и вывода изображения на дисплей в этом случае? В смысле, кто быстрее должен работать? или нужно подобрать одинаковые частоты? Действительно ли требуется минимум 3 видеобуфера или при определенных соотношениях частот достаточно 2?
  23. Я пытаюсь выводить картинку на дисплей через LTDC. Контроллер STM32H743IIT6, дисплей UG-6028GDEBF02. Дисплей имеет разрешение 160x128. Цвет каждого пикселя определяется данными, которые поступают за три такта пиксельной частоты — по такту на цвет (R, G, B). Я хочу выводить Ч/Б изображение используя пиксельный формат L8. Для этого каждый пиксель буду определять тремя одинаковыми значениями по цветам (R=G=B). Раз каждый пиксель определяется тремя тактами пиксельной частоты, то в одной строке должно быть 160х3 = 480 тактов — или 480 пикселей. Таким образом для LTDC мое изображение преобразуется в 480х128. Дисплей можно настроить на режим работы 160х120 (с помощью встроенного в дисплей контроллера), что я и сделал. Попробовал вывести на дисплей изображение формата 160х120 с помощью встроенного в дисплей контроллера — все получилось как и должно быть.Теперь пытаюсь выводить на дисплей картинку по интерфейсу RGB используя LTDC. Настроил все на регистрах и по ДШ. Сформировал массив на 57600 пикселей (160х120х3). В массиве закрасил первый пиксель в первой строке (нулевой пиксель в нулевой строке), первый пиксель в третьей строке (нулевой пиксель во второй строке) и последний пиксель в кадре 57600 (57599). Вывожу на дисплей — вижу картинку как на картинке. Первый пиксель в первой строке горит не в начале дисплея, он смещен вправо, также как и первый пиксель в третьей строке. Последний горит слева от первого. Картинка отобразилась не до конца, почему то LTDC не отобразил весь буфер, а не дождавшись конца начал отображать первый пиксель, хотя адрес для нового кадра взял не первый в буфере, а тот с которого он прекратил отображать.Пробовал поиграться с настройками — проблему не победил. Не подскажите что-нибудь дельное? С какими регистрами поиграть и как? Возможно я косячу с параметрами синхронизации. Вот все что относится к RGB интерфейсу дисплея: Если я косячу с параметрами синхронизации, то что тут принять за них? Я принял следующие: #define HSYNC_WIDTH ((uint16_t)3) #define VSYNC_WIDTH ((uint16_t)1) #define HBP ((uint16_t)0) #define VBP ((uint16_t)0) #define ACTIVE_WIDTH ((uint16_t)480) #define ACTIVE_HEIGHT ((uint16_t)120) #define HFP ((uint16_t)0) #define VFP ((uint16_t)0) Полный код прилагаю: lar_ltdc.h lar_ltdc.c
  24. Спроектирую, отлажу небольшие электронные устройства на микроконтроллерах pic, AVR, stm32. Проекты выполняю использую инструменты open source. А также полностью передаю исходники и права на проект заказчику. Также занимаюсь монтажом печатных плат.
  25. STM32F7LWIP

    Плата NUCLEO stm32f767ZI . Задача передать поток с камеры ov2640 2-10Мегабит. Делал такое уже на w5500 и stm32f4. Сейчас разогнал мк В кубе включил TCM interface для flash.ART Accelerator,instruction perfetch настройки адреса flash изменил вручную, т.к. куб не прописывает для KEIL почему то.Потребление камня заметно возросло производительность тоже. Использую DMA (для DСMI) оно вроде как и FLASH( по умолчанию) работает через шину AHB->AXI и там вроде как могут пробыть проблемы если включить кэш команд и данных.Поэтому сделал как написал выше. В планах разместись стек и кучу и FIFO буфер в DTCM и обработчики прерываний в ITCM. Работаю без RTOS RAW API.Проблема в том, ЧТО Я НЕ МОГУ ПОЛУЧИТЬ нормальные 10 Мегабит не говоря уже о 10 Мегабайтах в секунду о которых пишут. Передаю пакеты размером 16Кило след. образом. while(ETH_TXBUF_SIZE > get_tcp_sndbuf_free(&CI)) MX_LWIP_Process(); tcp_write(CI.tcp_client_pcb,ETH_TX_buf,ETH_TXBUF_SIZE, 1); tcp_output(CI.tcp_client_pcb); Проблема в том что пришлось выкрутить TCP_TMR_INTERVAL в 1 вместо 250? Иначе не работает на таких скоростях. По идее TCP_TMR_INTERVAL я вообще не должен трогать!!! Сейчас удается передать поток 5 Мегабит с камеры, есть tcp retransmission,tcp dup ACK. Есть логи отладки через stats_display(); там все ОК. lwipopts.h