Поиск по сайту

Результаты поиска по тегам 'stm32'.

  • Поиск по тегам

    Введите теги через запятую.
  • Поиск по автору

Тип публикаций


Категории и разделы

  • Вопрос-Ответ. Для начинающих
    • Песочница (Q&A)
    • Дайте схему!
    • Школьникам и студентам
    • Начинающим
    • Паяльник TV
    • Обсуждение материалов с сайта
  • Радиоэлектроника для профессионалов
    • Световые эффекты и LED
    • Роботы и модели на ДУ-управлении
    • Автоматика
    • Самодельные устройства к компьютеру
    • Программное обеспечение
    • Автомобильная электроника
    • Системы охраны и наблюдения. Личная безопасность
    • Питание
    • Электрика
    • Промышленная электроника
    • Ремонт
    • Металлоискатели
    • Измерительная техника
    • Мастерская радиолюбителя
    • Сотовая связь
    • Спутниковое ТВ
    • КВ и УКВ радиосвязь
    • Жучки
    • Телефония и фрикинг
    • Высокое напряжение
    • Идеи и технологии будущего
    • Справочная радиоэлементов
    • Литература
    • Разное
  • Аудио
    • FAQ, Технологии и компоненты
    • Для начинающих
    • Источники звука
    • Предусилители, темброблоки, фильтры
    • Питание аудио аппаратуры
    • Усилители мощности
    • Акустические системы
    • Авто-аудио
    • Ламповая техника
    • Гитарное оборудование
    • Прочее
  • Микроконтроллеры
    • МК для начинающих
    • AVR
    • PIC
    • STM32
    • Arduino и Raspberry Pi
    • ПЛИС
    • Другие микроконтроллеры и семейства
    • Алгоритмы
    • Программаторы и отладочные модули
    • Периферия и внешние устройства
    • Разное
  • Товары и услуги
    • Коммерческие предложения
    • Продам-Отдам, Услуги
    • Куплю
    • Уголок потребителя
    • Вакансии и разовая работа
    • Наши обзоры и тесты
  • Разное
    • Конкурсы сайта с призами
    • Сайт Паяльник и форум
    • Курилка
    • Технический английский (English)
    • Наши проекты для Android и Web
    • FAQ (Архив)
    • Личные блоги
    • Корзина
    • Вопросы с VK
  • ATX->ЛБП Переделки
  • Юмор в youtube Киловольты юмора
  • Надежность и группы продавцов Радиолюбительская доска объявлений exDIY
  • разные темы Переделки

Блоги

Нет результатов для отображения.

Нет результатов для отображения.

Местоположения

  • Пользователи форума

Группа


ICQ


Skype


Интересы


Город


Сфера радиоэлектроники


Оборудование

Найдено 154 результата

  1. Всем привет! Столкнулся с проблемой которую не удается решить. прописал в файле Drive.h так: typedef struct { uint8_t FlgL; uint8_t FlgR; uint16_t Speed; uint16_t PulseL1; uint16_t PulseL2; uint16_t PulseR1; uint16_t PulseR2; } Motor_; typedef struct { uint8_t Status; } Button_; extern struct Motor_ Motor; extern struct Button_ Button; а в с файле: #include "Drive.h" Motor.Pulse = 3; // зададим значение переменной в структуре Motor в итоге 2 ошибки редефайн.... как правильно с ними работать? За вчера и за сегодня уже наверное 1000 вариантов попробовал.
  2. Передача по SPI

    Добрый день! ПОМОГИТЕ ПОЖАЛУЙСТА! в описании для одного дисплея нашел код для STM на СИ там есть строчка которая мне не понятна, точнее смысл ее понятен но нет объявления аргументов функции помогите пожалуйста. В общем ситуация такая spi_write ( DTA, 0x00 ) spi_write ( CMD, 0x01) вот эта функция DTA - выполняет установку пина в 1 , CMD - выполняет установку пина в 0 0x00 , 0x01, .........0xFF это либо данные либо команда. и все бы ничего но все это нужно передать по HAL_SPI_Transmit помогите написать эту функцию с описанием аргументов и всех действий.
  3. Генератор сигнала на STM32

    Доброго времени суток. Сразу скажу: я не прошу писать за меня код, просто натолкните, как правильнее это реализовать. Имеется STM32F103C8T6, необходимо на ней построить одноканальный генератор сигнала, желательно разной формы (синус/меандр) с регулировкой частоты и скважности от переменного резистора. Регулировки частоты хватило бы в пределах 1Гц - 20кГц (отсюда еще вопрос, годится ли для этого F103C8T6?). Хотелось бы еще иметь разные уровни (5В/12В), но это и сам сообразить могу. Если использовать HAL таймер, то когда он уже будет запущен, можно будет менять частоту/скважность? Как реализовать переключение синус/меандр?
  4. Всем доброго времени суток! Необходима стабилизация частоты вращения двигателей по энкодерам. Энкодеры состоят из одного датчика холла на валу двигателя. Эту задачу на АВР я решил при помощи INT0 и аппаратного таймера , попробовал перенести код на STM32 . Попробовал через EXTI , результат не понравился .. Решил через таймер . void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) { static uint8_t InpCaptIndexL=0, InpCaptIndexR=0; if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1) // =RISING= EDGE DETECTED { // Get =RISING= EDGE Capture value if(InpCaptIndexR==0) { Motor.TimerOldR = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1); InpCaptIndexR=1; } else { Motor.TimerNewR = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1); InpCaptIndexR=0; } if (Motor.TimerOldR > Motor.TimerNewR) { Motor.MotorRData = (Motor.TimerOldR - Motor.TimerNewR); } else { Motor.MotorRData = (Motor.TimerNewR - Motor.TimerOldR); } // Reset Counter After Input Capture Interrupt Occurs __HAL_TIM_SET_COUNTER(&htim1,0x00); } if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_2) // =FALLING= EDGE DETECTED { // Get =FALLING= EDGE Capture value if(InpCaptIndexL==0) { Motor.TimerOldL = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_2); InpCaptIndexL=1; } else { Motor.TimerNewL = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_2); InpCaptIndexL=0; } if (Motor.TimerOldL > Motor.TimerNewL) { Motor.MotorLData = (Motor.TimerOldL - Motor.TimerNewL); } else { Motor.MotorLData = (Motor.TimerNewL - Motor.TimerOldL); } // Reset Counter After Input Capture Interrupt Occurs } StabMotorSpeed1(); __HAL_TIM_SET_COUNTER(&htim2, 0x00); } в интернете подсмотрел применение захвата но получается какая то каша . Осциллографом четко вижу меандр одинаковой частоты , а в юарт сыпет постоянно разные значения ... (имею ввиду переменную Motor.MotorLData и Motor.MotorRData) Тактирование 64МГц настройки таймера такие: TIM_ClockConfigTypeDef sClockSourceConfig = {0}; TIM_MasterConfigTypeDef sMasterConfig = {0}; TIM_IC_InitTypeDef sConfigIC = {0}; htim2.Instance = TIM2; htim2.Init.Prescaler = 6400; htim2.Init.CounterMode = TIM_COUNTERMODE_UP; htim2.Init.Period = 65535; htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; if (HAL_TIM_Base_Init(&htim2) != HAL_OK) { Error_Handler(); } sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) { Error_Handler(); } if (HAL_TIM_IC_Init(&htim2) != HAL_OK) { Error_Handler(); } sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) { Error_Handler(); } sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_RISING; sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI; sConfigIC.ICPrescaler = TIM_ICPSC_DIV1; sConfigIC.ICFilter = 0; if (HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_1) != HAL_OK) { Error_Handler(); } if (HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_2) != HAL_OK) { Error_Handler(); } что то я или недопонимаю , или что то не так приготавливаю.. Пробовал и так: void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) { if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_2) // =RISING= EDGE DETECTED { // Get =RISING= EDGE Capture value Motor.TimerR = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_2); // Reset Counter After Input Capture Interrupt Occurs __HAL_TIM_SET_COUNTER(&htim1,0x00); } if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1) // =FALLING= EDGE DETECTED { // Get =FALLING= EDGE Capture value Motor.TimerL = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1); // Reset Counter After Input Capture Interrupt Occurs } StabMotorSpeed(); __HAL_TIM_SET_COUNTER(&htim2, 0x00); } Результат тоже хуже чем на АВР , и в юарт сыпет каша (имею ввиду переменную Motor.TimerL и Motor.TimerR) Помогите пожалуйста разобраться в чем дело.
  5. Отладочная плата под stm

    Добрый день. Имею желание вкатиться в разработку на stm32. Не много погуглив обнаружил копеечный программатор(tt-link), но отладочной платы как у какой нибудь avr'ки не нашел(аля вставил камень, прошил, впаял в плату). Существует множество всяких discovery и им подобных, для проверки работы штука удобная, но для использовании в конечном устройстве нерациональная. Поэтому хотелось бы знать, существуют ли какие либо платы, переходники и т.д.? И если подобных промышленных вариантов нету, то единственный вариант это развести такую самостоятельно и вкорячивать переходники c LQFPхх и т.д.? P.S. Когда то видел вариант у аврки c tqfp корпусом, когда к подобной домашней плате аврку цепляли с помощью прищепки.
  6. отладки STM32

    есть 2 отладки: 1) TE-STM32F439LCD35, в упаковке, 5500р. 2) STM32F3348-DISCOVERY, 1600р. территориально - Владимирская обл., вышлю почтой, разумный торг уместен.
  7. Передача данных по UART в ПК

    Здравствуйте, имеется задача передачи данных от stm32 на ПК и от ПК в stm по UART. Имеется stm32f411e-disco, созданная программа на пк в Qt creator. UART передатчик - CH340. Программа для stm - Keil, настройка в cubeMX. Основные выдержки из кода Qt (mainwindow.cpp): C++ (Qt)Выделить код 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 // Настройка UART serial = new QSerialPort(this); serial->setPortName("com4"); serial->setBaudRate(QSerialPort::Baud115200); serial->setDataBits(QSerialPort::Data8); serial->setParity(QSerialPort::NoParity); serial->setStopBits(QSerialPort::OneStop); serial->setFlowControl(QSerialPort::NoFlowControl); serial->open(QIODevice::ReadWrite); /*serial->write("ok*"); */ connect(serial, SIGNAL(readyRead()), this, SLOT(serialReceived())); // Запись принятых даннх в текстовое окно void MainWindow::serialReceived() { QByteArray ba; ba=serial->readAll(); ui->label->setText(ba); qDebug()<<ba; } // Отправка "1" и "2" в зависимости от нажатой кнопки void MainWindow::on_pushButton_clicked() { serial->write("1"); } void MainWindow::on_pushButton_2_clicked() { serial->write("2"); } Настроен UART на прием и передачу. При нажатии какой-либо кнопки по UART передаётся 1 или 2ка. Так же принятая информация отображается в текстовом окне label. При замыкании RX и TX у CH340 отправленная 1 или 2 тут же принимаются программой. Программный код для stm создан в CubeMX. Там подключено два UART, один на приём, другой на передачу (можно настроить один для работы в 2 направления). Основные выдержки из кода Keil (main.c): //Настройка UART serial = new QSerialPort(this); serial->setPortName("com4"); serial->setBaudRate(QSerialPort::Baud115200); serial->setDataBits(QSerialPort::Data8); serial->setParity(QSerialPort::NoParity); serial->setStopBits(QSerialPort::OneStop); serial->setFlowControl(QSerialPort::NoFlowControl); serial->open(QIODevice::ReadWrite); /* serial->write("ok*"); */ // Transmiting "ок" to COM Port connect(serial, SIGNAL(readyRead()), this, SLOT(serialReceived())); // Отображение принятых данных в текстовом меню label void MainWindow::serialReceived() { QByteArray ba; ba=serial->readAll(); ui->label->setText(ba); qDebug()<<ba; } // Отправка 1 или 2 в зависимости от нажатой кнопки void MainWindow::on_pushButton_clicked() { serial->write("1"); } void MainWindow::on_pushButton_2_clicked() { serial->write("2"); } Выдержки из кода в Keil (main.c): // Настройка UART static void MX_USART1_UART_Init(void) { huart1.Instance = USART1; huart1.Init.BaudRate = 115200; huart1.Init.WordLength = UART_WORDLENGTH_8B; huart1.Init.StopBits = UART_STOPBITS_1; huart1.Init.Parity = UART_PARITY_NONE; huart1.Init.Mode = UART_MODE_TX_RX; huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; huart1.Init.OverSampling = UART_OVERSAMPLING_16; if (HAL_UART_Init(&huart1) != HAL_OK) { _Error_Handler(__FILE__, __LINE__); } } // 2 массива для принятия и отправки данных uint8_t strTX[1]; uint8_t strRX[1]; // Попытка сделать что-то адекватное int strTX = 1; while(1) { HAL_UART_Transmit_IT(&huart2, (uint8_t*) strTX, 1); HAL_UART_Receive_IT(&huart2, (uint8_t*) strTX, 1); Код в keil явно кривой, в Qt вроде всё работает. Получается передать из stm в Qt, но из Qt в stm нет. Нужно получить следующее: нажимаем в Qt одну из двух кнопок, отправляется в stm либо 1, либо 2 в зависимости от выбранной кнопки. Stm принимает, обрабатывает, если 1, то загорается один светодиод, если 2, то другой. Дальше stm отправляет обратно в Qt информацию о том, какой светодиод загорелся. P.S: довольно далек от программирования, но стараюсь разобраться. Буду благодарен любой помощти, некоторые скриншоты прилагаю.
  8. В наличии 2 штуки. Цена 1300 рублей за штуку. Новые в упаковке производителя.
  9. Генерация ШИМ 30кГц на STM32

    Доброго времени! Делаю часы на газоразрядных индикаторах, которые питаются от 180в. Сделал плату, которая получает на вход ШИМ 30кГц и 5в, а выдает 180в. На Arduino сгенерировать 30кГц получалось, однако сейчас необходимо это сделать на stm32. Есть знатоки?) Спасибо!
  10. Требуется разработать блок управления сплит-системой с функцией обучения по ИК каналу через RS-485 интерфейс на базе МК STM32. Есть ТЗ и список команд управления. Разработка в 2 этапа: 1-разработка принципиальной электрической схемы с указанием элементов на основе структурной из ТЗ (можно в карандаше), 2-написание ПО для МК STM32 в соответствии с ТЗ и списком команд. Оплата поэтапно. Кому интересно - уточняйте детали и оценивайте стоимость работы. Блок управления по ИК каналу Описание.docx Команды MODBUS.xlsx
  11. Требуются разработчики электроники, знающие программирование STM32 или программисты STM32, знающие электронику, возможно студенты. Требования: желание развиваться в данном направлении, наличие собственных проектов на stm32. Возможно официальное оформление или договор подряда. Возможна удалённая работа, но всё равно актуально только для минчан, или для людей, которые в случае чего в течение нескольких часов могут быть в Минске. Связь через ЛС.
  12. Находимся в поиске программиста на длительный проект. Что есть: плата на основе STM32F103 + SIM808 (используется GSM, GPS, Bluetooth) + GPIO Задача - заставить все это работать с сервером (сервер пишется). Подробности при личном общении. Желательно Ростов-на-Дону или Ростовская область. Связь через ЛС или почту Rough_ne(a)mail.ru.
  13. STM32F030C8T6 и "Прерыванько"

    Всем светлым и умным головам привет! Никак не могу найти информацию о данном прерывании TIM1_BRK_UP_TRG_COM. Вопрос 1: Что это за стек или система прерываний? Вопрос 2: Когда будет вызываться обработчик прерывания TIM1_BRK_UP_TRG_COM_IRQHandler, если также есть обработчик прерывания TIM1_CC_IRQHandler? Вопрос 3: период переполнения таймера равен 100 мкс. Сколько раз будет вызываться обработчик прерывания TIM1_BRK_UP_TRG_COM_IRQHandler до обработчика прерывания TIM1_CC_IRQHandler? По логике вещей, предполагаю, что 100 раз? Заранее благодарен! Всем радости))
  14. День добрый! Имеется sim-карта со статическим IP и модем SIM800C, который через UART соединен с STM32F0. Прочитав статью на хабре, которая и являлась отправной точкой, было решено повторить подвиг, но в версии lwip 2.0.3, которой я пользуюсь, ppp изменился до неузнаваемости, что сначала внесло некоторый сумбур. Но в документации к lwip был найден текстовый файл с настройкой ppp-соединения (ppp.txt, прикреплю его ниже), в котором было все, что нужно для счастья, но когда модем начал общаться с контроллером, дальше фазы LCP дело не зашло. Как я понял из документа (ppp_connect.docx), который оказался у меня уже-и-не-помню-откуда, после конфигурирования параметров соединения в фазе LCP контроллер должен посылать в модем пакет с заголовком PAP (C0 23), но он почему-то этого не делает... Он вообще больше ничего не делает. Я пытался проследить в отладчике весь путь запроса, что приходит от модема, но это только больше меня запутало. Собственно, прием данных у меня организован через прерывание. После ввода AT-команды "ATD*99***1#" и получения ответа "CONNECT", устанавливается флаг "ppp_enable" и при приходе байта он кладется в очередь `xQueue_PPP_Package`. void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { uint8_t u8; if(huart == &huart1) { if (ppp_enable == true) { portBASE_TYPE xHigherPriorityTaskWoken_PPP_Rx; u8 = Sim800.UsartRxTemp; xHigherPriorityTaskWoken_PPP_Rx = pdFALSE; xQueueSendFromISR(xQueue_PPP_Package, &u8, &xHigherPriorityTaskWoken_PPP_Rx); } else { /*Reception of AT commands*/ } HAL_UART_Receive_IT(&huart1,&Sim800.UsartRxTemp,1); } } В задаче `StartLwIPTask` в бесконечном цикле проверяется эта очередь и при появлении элементов, записывает их в массив `PPPx.Data` и при фиксации второго HDLC-заголовка (0x7E), отправляет данные в lwip функцией `pppos_input`. P.S. Переменная `PPPx.Last_Index` это размер пришедшего ppp-пакета. void StartLwIPTask(void const * argument) { /* USER CODE BEGIN StartLwIPTask */ /*Создаем очередь*/ xQueue_Sim800_Package = xQueueCreate(128, sizeof(uint8_t)); xQueue_PPP_Package = xQueueCreate(128, sizeof(uint8_t)); uint8_t u8=0; volatile int setup = 0; tcpip_init( NULL, NULL ); /*Инициализация стека tcp/ip*/ /*Create a new PPPoS interface*/ ppp = pppos_create(&ppp_netif, output_cb, status_cb, 0); // /* Auth configuration, this is pretty self-explanatory */ ppp_set_auth(ppp, PPPAUTHTYPE_PAP, "beeline", "beeline"); /* Require peer to authenticate */ ppp_set_auth_required(ppp, 1); /*Only for PPPoS, the PPP session should be up and waiting for input.*/ ppp_set_silent(ppp, 1); /* * Initiate PPP listener (i.e. wait for an incoming connection), can only * be called if PPP session is in the dead state (i.e. disconnected). */ ppp_listen(ppp); /* Infinite loop */ for(;;) { if (sim800_init() == S_RESET) /*Настройка модуля Sim800*/ continue; for (;;) { if (pdPASS == xQueueReceive(xQueue_PPP_Package, &u8, 100/portTICK_RATE_MS)) { if (u8 == 0x7E) t++; PPPx.Data[PPPx.Last_Index++] = u8; if (t==2) { PPPx.Last_Index--; pppos_input(ppp, PPPx.Data, PPPx.Last_Index); t=0; memset(&PPPx, 0, sizeof(PPPx)); } } } } /* USER CODE END StartLwIPTask */ } Как я писал выше, все идет хорошо, пока идет фаза LCP, но после подтверждения контроллера запроса опций, наступает тишина. В интернете мне удалось найти довольно мало исчерпывающей информации и примеров по связке stm32+lwip+ppp, если кто-нибудь занимался подобным или сталкивался с похожей проблемой, буду очень признателен за помощь и за пинки в нужном направлении. Заранее спасибо. ppp.txt ppp_connect.docx
  15. Приветствую! Мы - молодой стартап из Санкт-Петербурга с хорошей финансовой поддержкой. Создаём дроны. Нам не хватает серьезного программиста на полный загруженный график (можно удаленно). Из основных задач, которые нужно будет решать: 1. Программа отслеживания объекта в видеопотоке (процессор STM32F4xx). 2. Программа стабилизации БПЛА по данным с гироскопа и наведение на цель. 3. Создание программы управления бесколлекторным двигателем по закрытому контуру с возможностью бесшовной интеграции с программой просчёта траектории ЧПУ станка. 4. Программирование бортового комплекса управления БПЛА (автопилот) 5. Полный пакет работ по созданию бортового и наземного комплексов управления роем БПЛА. Оформление в штат. ЗП обсуждаема, от 60 000 в месяц. P.S. дроны, беспилотники, авиамодели... это только начало!
  16. Здравствуйте! Прошу помощи ! Столкнулся со следующей проблемой пытаюсь подключить к контроллеру по spi память FRAM FM25CL64 ,компилятор keil , пытаюсь записать одно число и его же считать, а осциллографом вижу, что считывается не то, что записывал. Пытался в разные ячейки памяти разные числа - считываются разные числа, но не те. Пишу 0x2F считывается 0x1С, пишу 0xFF считывается 0xFE, пишу 0x99 считывается 0x20 - ерунда какая то. Куски кода привел ниже: int main(void) { SystemCoreClockUpdate(); SysTick_Config(SystemCoreClock/1000);//1ms LEDs_ini(); Button_ini(); SPI3_FRAM_ini(); delay_ms(50); //проверим FRAM начало запись 1 байта CS_FRAM_ON();// while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_BSY)== SET){}; SPI_I2S_SendData(SPI3, 0x06);//Set Write Enable Latch 6 while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE)== RESET){}; while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_BSY)== SET){};//ждем пока запишется CS_FRAM_OFF(); delay_us(3); //на самом деле задержка выходит около 500нс CS_FRAM_ON(); while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_BSY)== SET){}; SPI_I2S_SendData(SPI3, 0x02);// Write while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE)== RESET){}; while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_BSY)== SET){};//ждем пока запишется SPI_I2S_SendData(SPI3, 0x10);// 13 битный адрес while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE)== RESET){}; while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_BSY)== SET){};//ждем пока запишется SPI_I2S_SendData(SPI3, 0x00);// 13 битный адрес while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE)== RESET){}; while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_BSY)== SET){};//ждем пока запишется SPI_I2S_SendData(SPI3, 0x2F);// данные while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE)== RESET){}; while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_BSY)== SET){};//ждем пока запишется CS_FRAM_OFF(); delay_us(3);//на самом деле задержка выходит около 500нс //проверим FRAM конец запись 1 байта //проверим FRAM начало чтение 1 байта CS_FRAM_ON();// while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_BSY)== SET){}; SPI_I2S_SendData(SPI3, 0x03);// Read while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE)== RESET){}; while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_BSY)== SET){};//ждем пока запишется SPI_I2S_SendData(SPI3, 0x10);// 13 битный адрес while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE)== RESET){}; while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_BSY)== SET){};//ждем пока запишется SPI_I2S_SendData(SPI3, 0x00);// 13 битный адрес while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE)== RESET){}; while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_BSY)== SET){};//ждем пока запишется SPI_I2S_SendData(SPI3, 0x00);// пишем 0 для считывания while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE)== RESET){}; while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_BSY)== SET){};//ждем пока запишется CS_FRAM_OFF(); //проверим FRAM конец чтение 1 байта //LED1_OFF; while(1) { настройки spi: SPI_Init_user3.SPI_Direction = SPI_Direction_2Lines_FullDuplex; SPI_Init_user3.SPI_Mode = SPI_Mode_Master; SPI_Init_user3.SPI_DataSize = SPI_DataSize_8b; SPI_Init_user3.SPI_CPOL = SPI_CPOL_High;//SPI_CPOL_Low SPI_Init_user3.SPI_CPHA = SPI_CPHA_2Edge; SPI_Init_user3.SPI_NSS = SPI_NSS_Soft; SPI_Init_user3.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;//4 SPI_Init_user3.SPI_FirstBit = SPI_FirstBit_MSB; SPI_Init_user3.SPI_CRCPolynomial = 7; SPI_Init(SPI3, &SPI_Init_user3); контакты вроде все пересмотрел, думал провода может длинноваты, клок spi настраивал на разную частоту уменьшал до 1МГц - не влияет, пробовал делать паузу между командой WREN и командой записи 15мс, а записью и считыванием 20мс, всё то же самое не помогло.. приложил осциллограммы: Осциллограмма всех посылок WREN, WITE, READ (тактовый сигнал ch1 и miso FRAM ch2) (синий луч отношения к делу не имеет) Осциллограмма команды WREN (тактовый сигнал ch1 и miso FRAM ch2)(синий луч отношения к делу не имеет) Осциллограмма команды WITE (тактовый сигнал ch1 и miso FRAM ch2) Осциллограмма считанного значения записывал 0x2F, считал 0x1C (тактовый сигнал ch1 и mosi FRAM ch2)
  17. Здравствуйте, хочу изучить семейство Cortex. Начал изучение программирования микроконтроллеров с AVR Attiny2313, Atmega8. Программки писал по самоучителю Белова. Писал простенькие программки чтобы светодиодом при помощи кнопки моргать, бегущие огни, прерывания по таймеру и т.п. Но в моем городе востребованы микроконтроллеры Cortex. В результате нашел вакансию: Требования: • Профильное образование; • Уверенное знание C, опыт разработки от 1-ого года; • Опыт разработки ПО для микроконтроллеров STM32 (ARM CORTEX M) в среде KEIL на языках С и ассемблера. • Опыт работы с интерфейсами передачи данных: Ethernet, UART, I2C, SPI, USB. • Умение читать принципиальные схемы; • Умение пользоваться для отладки осциллографом, JTAG-интерфейсом; • Опыт работы с SVN, Git Отсюда - подскажите литературу где описывается теория, т.е. строение МК, память, регистры и т.д. Также практические примеры использования JTAG, Ethernet, UART, I2C, SPI, USB. Ну и какие железки использовать. В алиэкспресс нашёл: отладочная плата (https://ru.aliexpress.com/item/Free-shipping-100-Original-STM32-Discovery-Board-Stm32f4discovery-Stm32f4-kit-Cortex-m4-STM32-Development-Board-St/32655207218.html?ws_ab_test=searchweb0_0,searchweb201602_2_10152_5722813_10151_10065_10344_10068_10342_5722613_10343_5722913_10340_10341_10543_10698_5711413_10696_10084_10083_5722713_10618_10307_10301_5711213_10059_308_100031_10103_5711513_10624_10623_10622_10621_10620_5722513_5711313_10125,searchweb201603_25,ppcSwitch_5&algo_expid=6bb60057-1829-4c3a-bfcf-64b27a13a331-29&algo_pvid=6bb60057-1829-4c3a-bfcf-64b27a13a331&priceBeautifyAB=0), программатор (https://ru.aliexpress.com/item/1pcs-New-ST-LINK-V2-ST-LINK-V2-CN-ST-LINK-STLINK-Emulator-Download-Manager-STM8/32725864986.html?spm=a2g0v.10010108.1000014.3.2e3e252eARrNY5&traffic_analysisId=recommend_3035_null_null_null&scm=1007.13338.98644.000000000000000&pvid=be1ab406-7b1c-4874-82ab-5ccf70631523&tpp=1). В общем помогите кто чем может.
  18. Всем доброго дня, Начинаю изучать STM32. Запустил пример http://www.avislab.com/blog/stm32-timer-pwm/ в котором при нажатии двух кнопок увеличивается и уменьшается яркость на ножке PB6 все работает. Хотел переключить ШИМ на другую ножку в 28 строке поменял GPIO_Pin_6 на GPIO_Pin_7 переключил светодиод на PB7 код не работает. Подскажите что я не правильно делаю?
  19. Приобрёл "NUCLEO-F030R8, Отладочная плата на базе MCU STM32F030R8T6 (ARM Cortex-M0), ST-LINK/V2-1, Arduino-интерфейс" хочу приобрести два модуля к ней но не знаю о совместимости , кого спрашиваю сомневаются и не отвечают уверенно, 1 модуль это 3,2 TFT ЖК дисплей сенсорный , а второй 8 бит LED 8 бит цифровой Tube 8-разрядный ключ. Кто что может подсказать или посоветовать прошу помочь
  20. Здравствуйте! Разовая работа для программистов из Москвы или московской области. Необходимо написать прошивку для отладочной платы на базе чипа BMI055 Даташит: https://www.mouser.com/ds/2/783/BST-BMI055-DS000-08-786482.pdf Более подробное ТЗ вышлю кандидату. Железо предоставлю. Оплата по договоренности. При успешном выполнении, будут регулярные заказы, а также трудоустройство при желании, конкурентная зп по Москве. Если заинтересованы, просьба в комментах или в ЛС оставить контакты для связи.
  21. Keil mVision V5

    Исследую платку stm32f103c8t6. В качестве ide - Keil mVision v5. Проект на Си++ При работе с UART мне требуется вывести некоторую информацию. Делаю это при помощи следующих функций: void USARTSend(char *ptrOutBuf) { while (*ptrOutBuf) { USART_SendData(USART1, *ptrOutBuf++); while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET) {} } } void USARTSend(int val) { int i = 0; sprintf(buffer, "%x", val); while (buffer[i]) { USART_SendData(USART1, buffer[i]); i++; while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET) {} } } void USARTSend(const unsigned char *ptrOutBuf) { while (*ptrOutBuf) { USART_SendData(USART1, *ptrOutBuf++); while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET) { } } } В некоторых строках вывожу текст следующим вызовом: USARTSend("\r\nUSART1 is ready.\r\n"); Компилируется без ошибок. Вывод сообщений в UART тоже без ошибок. Но в редакторе кода Keil на против последней записи появляется значок warning! Код выполняется верно Как можно избавиться от неприятного предупреждения?
  22. Системная частота SystemCoreClock

    Дорогие гуру, прошу помощи в освоении SystemCoreClock. Как я понимаю это некая функци в STM32, которая возвращает значение установившейся частоты микроконроллера. Но при прямом использовании IAR ругается на то, что эта функция не объявлена. Конечно можно использовать SPL, но мне крайне необходима максимальная скорость и микрозадержки, поэтому хочется получать значение частоты без SPL и HAL. Спасибо за любую наводку.
  23. Тахометр stm32f1x

    Добрый день. Пытаюсь собрать тахометр на stm32f100c8t6b. Вывод информации - четырехразрядный семисегментный индикатор, счетчик - таймер №1, 1ый канал. На системном таймере висит индикация показаний. Вычисление оборотов - в обработчике таймера 1. Проблема в том, что при подаче импульсов на PB13 (Tim1 Ch1) не происходит прерывания. Скажите, пожалуйста, что я упускаю из виду. Заранее большое спасибо. Taho_2.rar
  24. Проблема с SPI

    Доброго времени суток. Изучаю STM32, пользуюсь библиотекой SPL. При изучении SPI возникла проблема. Вся иницилизация проходит успешно, ну когда я пытаюсь прочитать даные с акселерометра, регистр Where_am_i, мне либо ничего не приходит, либо приходит 0xFF. Настраивал все по многим туториалам, результат один и тот же. У людей получается, а у меня нет.
  25. Компания "ОВЕН. Производственное объединение", крупнейший российский разработчик и производитель систем автоматизации, приглашает в свою команду "Инженера-программиста встроенного ПО (Embedded C/C++)". Чем предстоит заниматься: Разработка встроенного ПО для микроконтроллеров семейства ARM (Cortex-M), STM32, AVR на C/C++; Использование встраиваемых операционных систем Segger, Linux; Разработка тестового и отладочного ПО для ПК; Разработка проектной документации. Наши требования: Высшее техническое образование; Опыт работы в области разработки встроенных систем и низкоуровневого программирования от 3-х лет; Опыт разработки на С/С++ под различные платформы и процессоры; Опыт использования встраиваемых операционных и файловых систем; Знание интерфейсов SPI, I2C. Ethernet, USB и протоколов сетевого обмена; Умение работать в системах контроля версий. А если Вы: Знаете промышленные протоколы передачи данных и протоколы IoT; Владеете техническим английским; Имеете широкий кругозор и понимание задач, решаемых с помощью программно-аппаратных разработок; Внимательны к деталям, трудолюбивы и уравновешены. Вы точно тот, кого мы ищем и будем рады отклику! Ценность нашего предложения: "Белая" стабильная заработная плата, полное соблюдение ТК; Участие в разработке высокотехнологичных продуктов для крупных промышленных предприятий; Сильная команда во главе с профессионалами, которые готовы делиться знаниями и опытом; Высококлассная команда поддержки - пунктуальная бухгалтерия, заботливые HR, оперативная техподдержка; Возможности для развития - семинары и мастер - классы для сотрудников. Расположение офиса: м. Авиамоторная Контакты для отправки резюме/вопросов: mygolovanova@gmail.com, Мария