Generated by All in One SEO v4.9.3, this is an llms.txt file, used by LLMs to index the site. # Программирование микроконтроллеров Программирование микроконтроллеров и всё, что с этим связано ## Sitemaps - [XML Sitemap](https://narodstream.ru/sitemap.xml): Contains all public & indexable URLs for this website. ## Записи - [STM Урок 44. SDIO. FATFS](https://narodstream.ru/stm-urok-44-sdio-fatfs/) - Урок 44 SDIO. FATFS Проект создаём из проекта I2CLCD80. Назовем его SDIO_FATFS. Запустим проект в Cube. Лапки портов PD4-PD7, PB8, PB9 отключим, это пережиток прошлых занятий Включим SDIO У нас включатся следующие лапки портов На основе данной информации составим таблицу подключения ножек флеш-карты Micro SD Порядок - [STM Урок 40. Знакомство с платой NUCLEO STM32F767ZI](https://narodstream.ru/stm-urok-40-znakomstvo-s-platoj-nucleo-stm32f767zi/) - Урок 40 Знакомство с платой NUCLEO STM32F767ZI Очень рад вам сообщить, что у меня появилась очередная очень интересная отладочная плата - NUCLEO STM32F767ZI. Данная плата является продуктом компании ST Microelectronics и представляет собой готовое решение для изучения вопросов программирования микроконтроллеров. Ценность плат Nucleo по сравнению с Discovery состоит в том, что данные платы не - [STM Урок 35. HAL. USB. Custom HID](https://narodstream.ru/stm-urok-35-hal-usb-custom-hid/) - Урок 35 HAL. USB. Custom HID Продолжаем работать с шиной USB и также продолжаем работать с классом USB HID. Только сегодня мы уже будем пытаться поработать с классом нестандартным и написать какой-то свой класс HID. Проект создаём из проекта TEST002. Назовем его USB_DEVICE_CUSTOM_HID. Запустим проект в Cube, ничего не отключаем в т.ч. и таймеры - [STM Урок 34. HAL. USB. HID](https://narodstream.ru/stm-urok-34-hal-usb-hid/) - Урок 34 HAL. USB. HID Сегодня мы познакомимся с новым классом для USB - это Human Interface Device или как в народе говорят HID. Данный класс отличается тем, что здесь мы посылаем короткие сообщения, у нас особой вероятности в том, что наши данные все дойдут, но в данный момент это не совсем и важно. - [STM Урок 59. Модуль LCD 16x2 с кнопками](https://narodstream.ru/stm-urok-59-modul-lcd-16x2-s-knopkami/) - Урок 59 Модуль LCD 16x2 с кнопками Сегодня мы попробуем поработать с модулем дисплея 16x2 с кнопками и регулятором контрастности, который я приобрёл уже давно, а урока под STM32 по нему ещё не было. Что поделать, дела. Сегодня мы начнём восполнять данный пробел и подключим данный модуль к плате STM32F4-Discovery. В данном модуле - [STM Урок 54. System Workbench. FREE RTOS](https://narodstream.ru/stm-urok-54-system-workbench-free-rtos/) - Урок 54 System Workbench. FREE RTOS Сегодня мы продолжим работу с бесплатной средой программирования System Workbench for STM32. На прошлом занятии мы уже создали собственный проект и попытались помигать светодиодами и нам это удалось. А теперь мы попытаемся помигать светодиодами уже с использованием ОС. В качестве ОС мы будем использовать операционную системы FreeRTOS. FreeRTOS - [STM Урок 53. System Workbench. Создаём новый проект](https://narodstream.ru/stm-urok-53-system-workbench-sozdajom-novyj-proekt/) - Урок 53 System Workbench Создаём новый проект Сегодня мы продолжим работу с бесплатной средой программирования System Workbench for STM32. На прошлом занятии мы пробовали использовать готовый проект примера, а сегодня уже попытаемся создать свой собственный проект и помигать светодиодами. Начинать всегда лучше с простого, иначе материал не усвоится, по себе знаю. Для примера возьмём - [STM Урок 50 Устанавливаем System Workbench for STM32](https://narodstream.ru/stm-urok-50-ustanavlivaem-system-workbench-for-stm32/) - Урок 50 Устанавливаем System Workbench for STM32 Сегодня мы с вами попытаемся воспользоваться бесплатной средой программирования System Workbench for STM32. Пока я сам, конечно, не до конца разобрался со всеми тонкостями использования данной среды, но, думаю, разобраться придётся и удастся. Ибо деваться нам некуда. Вы конечно можете сказать на это: «Но у нас - [STM Урок 78. HAL. LTDC. EmWin. Window Manager](https://narodstream.ru/stm-urok-78-hal-ltdc-emwin-window-manager/) - Урок 78 HAL. LTDC. EmWin. Window Manager Предыдущий урок Программирование МК STM32 Следующий урок Продолжаем работать над изучением графической библиотеки EmWin. И сегодня настал наконец тот день, когда мы добьёмся от нашего дисплея осознанного отклика на наши действия. То есть мы научимся создавать диалог с элементами управления и научим их реагировать на - [STM Урок 77. LAN. ENC28J60. Подключаем внешние прерывания (EXTI)](https://narodstream.ru/stm_urok-77_lan_enc28j60_podkljuchaem_vneshnie_preryvanija_exti/) - Урок 77 LAN. ENC28J60. Подключаем внешние прерывания (EXTI) Предыдущий урок Программирование МК STM32 Следующий урок В уроке 74 мы разобрались, как можно задействовать и обрабатывать внешние прерывания на микроконтроллерах STM32, причём сделали мы это в основном для того, чтобы данный накопленный опыт использовать для программирования нашего сетевого модуля, так как микросхема ENC28J60, являющаяся его сердцем, умеет - [STM Урок 76. HAL. LTDC. EmWin. MultiLayer. Transparency](https://narodstream.ru/stm-urok-76-hal-ltdc-emwin-multilayer-transparency/) - Урок 76 HAL. LTDC. EmWin. MultiLayer. Transparency Продолжаем работу с библиотекой emWin. Работаем мы также с платой STM32F746-DISCOVERY. Сегодня мы научися работать со слоями и с их прозрачностью, что позволит нам добиться ещё некоторых интересных эффектов и результатов в графическом отображении информации. Мы не будем тратить время на объяснение терминологии слоёв и - [STM Урок 75. HAL. LTDC. EmWin. BMP. Multiple Buffering](https://narodstream.ru/stm-urok-75-hal-ltdc-emwin-bmp-multiple-buffering/) - Урок 75 HAL. LTDC. EmWin. BMP. Multiple Buffering Продолжаем работу с библиотекой emWin. Работаем мы также с платой STM32F746-DISCOVERY. Сегодня мы попробуем поработать с графикой и отобразить изображения в формате BMP, при этом используя многобуферное прорисовывание экрана. Я думаю, все понимают, зачем это нужно. Практически мы этим уже занимались, когда выводили рисунки без - [STM Урок 74. HAL. EXTI или внешние прерывания](https://narodstream.ru/stm-urok-74-hal-exti-ili-vneshnie-preryvaniya/) - Урок 74 HAL. EXTI или внешние прерывания Вот наконец-то и настало время нам попробовать поработать с внешними прерываниям. Данный урок, во-первых, был очень востребован, хотя он и кажется на первый взгляд несложным. Очень много было просьб и я не мог не откликнуться. Во-вторых, мы сейчас работаем с модулем LAN ENC28J60, у которго - [STM Урок 43. Подключаем акселерометр LSM6DS3. Часть 2](https://narodstream.ru/stm-urok-43-podklyuchaem-akselerometr-lsm6ds3-chast-2/) - Урок 43 Часть 2 Подключаем акселерометр LSM6DS3 В предыдущей части урока мы ознакомились с документацией на датчик, создали для него проект, добавили некоторые макросы и настроили библиотечные файлы, также написали функцию считывания идентификатора акселерометра и начали писать функцию инициализации датчика. Продолжим дальше работать с регистрами управления Accel_IO_Write(0xD4,LSM6DS3_ACC_GYRO_CTRL3_C,value); //установим бит BDU value = Accel_IO_Read(0xD4,LSM6DS3_ACC_GYRO_CTRL3_C); value &= ~LSM6DS3_ACC_GYRO_BDU_MASK; value|=LSM6DS3_ACC_GYRO_BDU_BLOCK_UPDATE; Accel_IO_Write(0xD4,LSM6DS3_ACC_GYRO_CTRL3_C,value); - [STM Урок 43. Подключаем акселерометр LSM6DS3. Часть 1](https://narodstream.ru/stm-urok-43-podklyuchaem-akselerometr-lsm6ds3-chast-1/) - Урок 43 Часть 1 Подключаем акселерометр LSM6DS3 Сегодня мы рассмотрим датчик, который также в себе объединяет сразу два функционала – акселерометр и гироскоп. Данный акселерометр – это также акселерометр, выполненный с использованием технологии MEMS – LSM6DS3. Установлен он на плате расширения STEVAL-MKI160V1, которая в свою очередь вставляется в плату расширения X-NUCLEO-IKS01A1, предназначенной для - [STM Урок 42. Подключаем акселерометр LSM6DS0. Часть 2](https://narodstream.ru/stm-urok-42-podklyuchaem-akselerometr-lsm6ds0-chast-2/) - Урок 42 Часть 2 Подключаем акселерометр LSM6DS0 В предыдущей части нашего урока мы ознакомились с документацией на датчик, создали для него проект, добавили некоторые макросы и настроили библиотечные файлы, также написали функцию считывания идентификатора акселерометра и начали писать функцию инициализации датчика. Продолжим писать код в функции AccInit uint8_t value=0; //установим бит BDU value = Accel_IO_Read(0xD6, LSM6DS0_ACC_GYRO_CTRL_REG8); - [STM Урок 42. Подключаем акселерометр LSM6DS0. Часть 1](https://narodstream.ru/stm-urok-42-podklyuchaem-akselerometr-lsm6ds0-chast-1/) - Урок 42 Часть 1 Подключаем акселерометр LSM6DS0 Сегодня мы рассмотрим датчик, который в себе объединяет сразу два функционала – акселерометр и гироскоп. Данный акселерометр – это также акселерометр, выполненный с использованием технологии MEMS – LSM6DS0. Установлен он на плате расширения X-NUCLEO-IKS01A1, предназначенной для работы с отладочной платой Nucleo. Мы будем подключать данную - [STM Урок 36. USB. Host Mass Storage Class. Часть 2](https://narodstream.ru/stm-urok-36-usb-host-mass-storage-class-chast-2/) - Урок 36 Часть 2 USB. Host Mass Storage Class Продолжаем работать с тем же проектом USB_HOST_MSC_FATFS. В файле main.c в функции FileReadWrite продублируем участок кода if(f_mount(&USBDISKFatFs, (TCHAR const*)USBH_Path, 0) != FR_OK) { /* FatFs Initialization Error */ Error_Handler(); } else { if(f_open(&MyFile, "123.txt", FA_READ) - [STM Урок 36. USB. Host Mass Storage Class. Часть 1](https://narodstream.ru/stm-urok-36-usb-host-mass-storage-class-chast-1/) - Урок 36 Часть 1 USB. Host Mass Storage Class Проект создаём из проекта I2CLCD80. Назовем его USB_HOST_MSC_FATFS. Запустим проект в Cube, включим USB_OTG_FS в режим Host_Only включим там Activate_VBUS. В USB_DEVICE в разделе Class For FS IP выберем пункт Mass Storage Host Class Лапки портов PD4-PD7, PB8, PB9 отключим, - [STM Урок 82. LAN. ENC28J60. Удалённый доступ](https://narodstream.ru/stm-urok-82-lan-enc28j60-udalyonnyj-dostup/) - Урок 82 LAN. ENC28J60. Удалённый доступ До сих пор мы при помощи нашего модуля ENC28J60 могли соединяться, принимать и передавать данные только с узлов, находящихся в локальной сети. Я думаю, что настал тот момент, когда мы должны попробовать с помощью него "пообщаться" с сетью внешней — с сетью "Интернет". Также внешняя сеть может быть - [STM Урок 81. LAN. ENC28J60. UDP Client](https://narodstream.ru/stm-urok-81-lan-enc28j60-udp-client/) - Урок 81 LAN. ENC28J60. UDP Client В предыдущем уроке мы познакомились с новым для нас протоколом транспортного уровня UDP и написали примитивный эхо-сервер. Сегодня мы поставим обратную задачу — написать клиент. Как мы уже знаем из нашей практики, что клиент писать зачастую сложнее, чем сервер, так как мы обращаемся по сетевому адресу, - [STM Урок 80. LAN. ENC28J60. UDP Server](https://narodstream.ru/stm-urok-80-lan-enc28j60-udp-server/) - Урок 80 LAN. ENC28J60. UDP Server Ну вот и настало время нам передать через локальную сеть с помощью нашего модуля ENC28J60 какие-нибудь осознанные данные. Для этого нам потребуется обернуть наши данные в какой-нибудь транспортный протокол. Транспортный уровень — это уровень модели OSI, отвечающий за передачу данных к конкретному приложению узла, а не - [STM Урок 79. HAL. LTDC. EmWin. Подключаем акселерометр LSM6DS0](https://narodstream.ru/stm-urok-79-hal-ltdc-emwin-podklyuchaem-akselerometr-lsm6ds0/) - Урок 79 HAL. LTDC. EmWin. Подключаем акселерометр LSM6DS0 Продолжим работу с библиотекой EmWin. И сегодня мы попробуем добавить в наш проект график. И не просто график, а живой график, который нам будет в реальном времени показыавать состояние определённых показателей. А в качестве этих определённых показателей мы возьмём показания осей акселерометра LSM6DS0, который - [STM Урок 33. HAL. USB. Virtual Com Port](https://narodstream.ru/stm-urok-33-hal-usb-virtual-com-port/) - Урок 33 HAL. USB. Virtual Com Port Отладочную плату используем ту же: STM32F4-DISCOVERY. Проект создаём из проекта I2CLCD80. Назовем его USB_OTG_CDC. Запустим проект в Cube, включим USB_OTG_FS в режим Device_Only В USB_DEVICE в разделе Class For FS IP выберем пункт Communication Device Class (Virtual Port Com). Лапки портов PD4-PD7, PB8, PB9 - [STM Урок 32. HAL. DAC. Noise. RNG](https://narodstream.ru/stm-urok-32-hal-dac-noise-rng/) - Урок 32 DAC. Noise. RNG Проект создаём из проекта DAC_NOISE. Назовем его DAC_NOISE_RNG. Запустим проект в Cube, включим RNG. В Clock Configuration произведем автоматическую перегенерацию В Configuration в DAC выключим аппаратный шум (триггер). В настройках таймера включим прерывания. Делитель и период не трогаем. Сгенерируем проект, откроем - [STM Урок 31. DAC. Noise](https://narodstream.ru/stm-urok-31-dac-noise/) - Урок 31 DAC. Noise Проект создаём из проекта DAC_ TRIANGLE. Назовем его DAC_NOISE. Запустим проект в Cube, в настройках DAC выберем следующий режим генерации и амплитуду Настройки таймера пока не трогаем Генерируем и запускаем проект, соберем его, настроим программатор Прошьем контроллер Данная частота слишком велика. Настроим другую частоту. Так как - [STM Урок 30. HAL. DAC. Sinus. DMA](https://narodstream.ru/stm-urok-30-hal-dac-sinus-dma/) - Урок 30 DAC. Sinus. DMA Сегодня мы попробуем также посредством технологии DMA создать колебания синусоидальной формы также из данных, заранее подготовленных в массиве в виду того, что синусоидальные колебания вообще не предусмотрены аппаратно в МК. Также по многочисленным просьбам в различных уроках мы попытаемся измерить частоту колебаний и период в тактах полного синусоидального колебания. - [STM Урок 47. Подключаем гироскоп LSM6DS3. Часть 2](https://narodstream.ru/stm-urok-47-podklyuchaem-giroskop-lsm6ds3-chast-2/) - Урок 47 Часть 2 Подключаем гироскоп LSM6DS3 В предыдущей части нашего занятия мы написали все макросы, которые вносят удобства в чтение и написание кода, написали функцию инициализации и проверили её на практике. Добавим ещё одну функцию Gyro_GetXYZ, предназначенную для опроса осей гироскопа. Сделаем её полностью на основе подобной для акселерометра (Accel_GetXYZ), - [STM Урок 47. Подключаем гироскоп LSM6DS3. Часть 1](https://narodstream.ru/stm-urok-47-podklyuchaem-giroskop-lsm6ds3-chast-1/) - Урок 47 Часть 1 Подключаем гироскоп LSM6DS3 Сегодня мы продолжим работать ещё с одним датчиком, который в себе объединяет сразу два функционала – акселерометр и гироскоп – LSM6DS3. Выполнен он также с использованием технологии MEMS. Установлен на плате расширения STEVAL-MKI160V1, которая в свою очередь вставляется в плату расширения X-NUCLEO-IKS01A1, предназначенной для - [STM Урок 45. Подключаем гироскоп LSM6DS0. Часть 2](https://narodstream.ru/stm-urok-45-podklyuchaem-giroskop-lsm6ds0-chast-2/) - Урок 45 Часть 2 Подключаем гироскоп LSM6DS0 В предыдущей части нашего урока мы написали все макросы, которые внесли удобства в чтение и написание кода, написали функцию инициализации и проверили её на практике. Добавим ещё одну функцию Gyro_GetXYZ, предназначенную для опроса осей гироскопа. Сделаем её полностью на основе подобной для акселерометра (Accel_GetXYZ), скопировав - [STM Урок 45. Подключаем гироскоп LSM6DS0. Часть 1](https://narodstream.ru/stm-urok-45-podklyuchaem-giroskop-lsm6ds0-chast-1/) - Урок 45 Часть 1 Подключаем гироскоп LSM6DS0 Сегодня мы ещё раз поработаем с датчиком, который в себе объединяет сразу два функционала – акселерометр и гироскоп – LSM6DS0. Выполнен он с использованием технологии MEMS. Установлен на плате расширения X-NUCLEO-IKS01A1, предназначенной для работы с отладочной платой Nucleo. Мы будем подключать данную оценочную плату к - [STM Урок 101. HC-05. Передаём температуру](https://narodstream.ru/stm-urok-101-hc-05-peredayom-temperaturu/) - Продолжаем работать с модулем HC-05, который обеспечивает передачу данных без проводов по Bluetooth. Мы уже научились с помощью двух таких модулей передавать данные с одного контроллера на другой, а сегодня мы попробуем передать уже более осознанные данные. У нас уже стало традицией передавать температуру с датчика DS18B20 и мы пока не будем её нарушать. Да - [STM Урок 97. Подключаем bluetooth-модуль HC-05](https://narodstream.ru/stm-urok-97-podklyuchaem-bluetooth-modul-hc-05/) - Настало время немного отдохнуть от передачи данных по интерфейсу LAN. Сегодня мы попробуем передать данные с микроконтроллера куда-нибудь, а также обратно, используя уже беспроводные технологии, то есть такие технологии, благодаря которым передача данных происходит без использования каких-либо проводов. В качестве технологии беспроводной передачи данных мы будем использовать Bluetooth. А в качестве устройства для этого - [STM Урок 89. LAN. ENC28J60. TCP WEB Server. Подключаем карту SD](https://narodstream.ru/stm-urok-89-lan-enc28j60-tcp-web-server-podklyuchaem-kartu-sd/) - Урок 89 LAN. ENC28J60. TCP WEB Server. Подключаем карту SD Продолжаем подключать модуль LAN ENC28J60 к микроконтроллеру STM32F103, расположенному на одноимённой недорогой отладочной плате. Мы смогли ответить клиенту на запрос веб-страницы, но только передавать мы большие документы и изображения все равно не сможем ввиду того, что подошли мы к такому моменту, что на это у - [STM Урок 85. LAN. ENC28J60. TCP Server. Передаём данные](https://narodstream.ru/stm-urok-85-lan-enc28j60-tcp-server-peredayom-dannye/) - Урок 85 LAN. ENC28J60. TCP Server. Передаём данные На прошлом занятии мы плотно познакомились с протоколом передачи данных TCP и научились устанавливать и разрывать соединение, так как это является неотъемлемым условием данного протокола. Теперь перед нами встала задача следующая — а как же нам что-то передать полезное с помощью данного протокола. Иначе зачем он тогда нужен. - [STM Урок 114. FreeRTOS. Продвинутая задержка DelayUntil](https://narodstream.ru/stm-urok-114-freertos-prodvinutaya-zaderzhka-delayuntil/) - До сих пор мы с вами пользовались только одним типом задержки, что в FreeRTOS, что в обычной жизни. Обычная задержка откладывает выполнение дальнейшего кода на определённое количество времени, а в случае использования операционной системы FreeRTOS она также на данное количество времени ещё и переводит задачу, в которой вызывается, в блокированное состояние, давая остальным задачам работать, - [STM Урок 112. FreeRTOS. Таймеры](https://narodstream.ru/stm-urok-112-freertos-tajmery/) - С некоторых пор в операционной системе FreeRTOS появилась возможность использовать программные таймеры. Данная возможность позволяет нам не использовать аппаратные таймеры, если нам, конечно, не нужно отслеживать какие-то очень малые периоды, также периоды, не кратные времени системного кванта. В остальном программные таймеры очень удобны, так как для них возможно использовать отдельную функцию с настраиваемым стеком и - [STM Урок 110. FreeRTOS. Приоритеты задач](https://narodstream.ru/stm-urok-110-freertos-prioritety-zadach/) - До сих пор мы создавали задачи и не думали о том, что всем задачам, которыми управляет наш планировщик, при создании назначается определённый приоритет и обычно мы создавали несколько задач и управляли ими, используя при их создании какой-либо один приоритет для всех задач. Сегодня мы попытаемся назначить задачам приоритет разный и посмотреть, как это повлияет на - [STM Урок 109. NRF24L01. Передаём влажность и температуру с датчика DHT22](https://narodstream.ru/stm-urok-109-nrf24l01-peredayom-vlazhnost-i-temperaturu-s-datchika-dht22/) - В уроке 105 мы научились не просто читать и писать регистры и буферы, а также передавать данные от передатчика к приёмнику, только это был обычный счётчик каких-то неопределённых тиков. А сегодня мы попробуем передать по беспроводной связи с помощью модулей NRF24L01 какие-нибудь осознанные данные. Но так как мы температуру с датчика DS18B20 уже передавали с помощью - [STM Урок 108. FreeRTOS. Параметры](https://narodstream.ru/stm-urok-108-freertos-parametry/) - Продолжаем работу с операционной системой реального времени FreeRTOS. Как я и обещал, поведаю я вам сегодня о том, каким образом можно создать несколько задач с уникальным кодом, используя для них для всех всего одну функцию реализации. Оказывается, есть такой механизм - это механизм передачи параметров в функцию, которые мы туда передаём в момент создания задачи. - [STM Урок 58. System Workbench. LCD. SDIO. Часть 2](https://narodstream.ru/stm-urok-58-system-workbench-lcd-sdio-chast-2/) - Урок 58 Часть 2 System Workbench. System Workbench. LCD. SDIO В предыдущей части урока мы познакомились с организацией памяти SDRAM на плате Discovery и подключили библиотеки, включая SDIO, FATFS, также подготовили проект и примонтировали файловую систему FAT. Теперь собственно начнем писать функцию, которая будет переписывать содержимое файла в нужное место памяти SDRAM - [STM Урок 58. System Workbench. LCD. SDIO. Часть 1](https://narodstream.ru/stm-urok-58-system-workbench-lcd-sdio-chast-1/) - Урок 58 Часть 1 System Workbench. System Workbench. LCD. SDIO Продолжаем работу с бесплатной средой программирования System Workbench for STM32. На прошлом занятии мы подключили к нашему проекту нужную часть библиотеки BSP (Board Support Pack). С помощью данной библиотеки мы инициализировали дисплей и в рамках ОС FreeRTOS смогли с разной частотой в каждой - [STM Урок 56. System Workbench. Подключаем библиотеку BSP. Часть 2](https://narodstream.ru/stm-urok-56-system-workbench-podkljuchaem-biblioteku-bsp-chast-2/) - Урок 56 Часть 2 System Workbench. Подключаем библиотеку BSP В предыдущей части занятия мы кратко узнали о библиотеке BSP, создали и настроили новый проект в Cube MX, подключили файлы библиотеки BSP в проект и попробовали собрать проект с подключенной библиотекой BSP. В файле main.с подключим нужные файлы библиотеки BSP /* USER CODE BEGIN - [STM Урок 56. System Workbench. Подключаем библиотеку BSP. Часть 1](https://narodstream.ru/stm-urok-56-system-workbench-podkljuchaem-biblioteku-bsp-chast-1/) - Урок 56 Часть 1 System Workbench. Подключаем библиотеку BSP Сегодня мы продолжим работу с бесплатной средой программирования System Workbench for STM32. На прошлом занятии мы подключили и смогли успешно использовать операционную систему реального времени FreeRTOS. Сегодня мы продолжим начатое дело и поработаем с другой платой. Для примера возьмём плату STM32F746G-DISCO. С данной - [STM Урок 55. Датчик влажности HTS221. Часть 2](https://narodstream.ru/stm-urok-55-datchik-vlazhnosti-hts221-chast-2/) - Урок 55 Часть 2 Датчик влажности HTS221 В прошлой части нашего занятия мы добавили все макросы, которые вносят удобства в чтение и написание кода, считали идентификатор датчика, написали полностью инициализацию и начали писать считывание и обработку измеренных величин. Продолжим писать нашу функцию чтения температуры tmp = Humidity_IO_Read(HTS221_ADDRESS,HTS221_T0_T1_DEGC_H2); T0_degC_x8_u16 = (((uint16_t)(tmp - [STM Урок 55. Датчик влажности HTS221. Часть 1](https://narodstream.ru/stm-urok-55-datchik-vlazhnosti-hts221-chast-1/) - Урок 55 Часть 1 Датчик влажности HTS221 Сегодня мы познакомимся с датчиком, который измеряет относительную влажность. Относительная влажность – отношение парциального давления паров воды в газе (в первую очередь, в воздухе) к равновесному давлению насыщенных паров при данной температуре. Поэтому, соответственно, в данном датчике присутствует и датчик температуры. Данный датчик установлен - [STM Урок 49. HAL. Магнитометр LSM303DLHC. Часть 2](https://narodstream.ru/stm-urok-49-hal-magnitometr-lsm303dlhc-chast-2/) - Урок 49 Часть 2 HAL. Магнитометр LSM303DLHC В прошлой части урока мы кратко изучили документацию на магнитометр, создали для него проект, добавили некоторые макросы и написали функцию инициализации датчика. Добавим функцию считывания данных с осей магнитометра, скопировав и исправив подобную для осей акселерометра //-------------------------------------------- void Mag_GetXYZ(int16_t* pData) { uint8_t buffer[6]; uint8_t - [STM Урок 49. HAL. Магнитометр LSM303DLHC. Часть 1](https://narodstream.ru/stm-urok-49-hal-magnitometr-lsm303dlhc-chast-1/) - Урок 49. HAL. Магнитометр LSM303DLHC Часть 1 Сегодня мы продолжим тему датчиков с использованием технологии MEMS и вернёмся к датчику, который мы уже частично рассматривали 10 уроков назад – LSM303DLHC. Повторюсь, что данный датчик установлен на плате STM32F3Discovery. И изучим мы сегодня его вторую часть – магнитометр. Магнитометр – это такой датчик, который - [STM Урок 122. LAN87XX. LWIP. NETCONN. UDP. Соединяем два контролера](https://narodstream.ru/stm-urok-122-lan87xx-lwip-netconn-udp-soedinyaem-dva-kontrolera/) - Продолжаем работать со стеком протоколов LWIP с интерфейсом NETCONN и теперь мы попробуем подключить к нашей плате другую плату - STM32F4-Discovery вместе с платой расширения DIS-BB. Причём на этой плате будет по-прежнему использоваться в качестве клиента интерфейс RAW. Другими словами, мы попробуем соединить сразу два урока - урок 118 и урок 120. Тем самым мы - [STM Урок 120. LAN8742A. LWIP. NETCONN. UDP Server](https://narodstream.ru/stm-urok-120-lan8742f-lwip-netconn-udp-server/) - Ну вот и настало время перейти нам на более совершенный API стека протоколов LWIP - NETCONN. Все мы знаем, что мы его не могли использовать потому, что мы не знали, как работать с операционной системой FreeRTOS, которая является необходимым условием использования данного интерфейса. Теперь, посмотрев серию занятий по данной операционной системе, мы уже вполне готовы - [STM Урок 118. LAN8720. LWIP. RAW. UDP Client](https://narodstream.ru/stm-urok-118-lan8720-lwip-raw-udp-client/) - Возвращаемся к теме передачи данных по проводным каналам связи и также возвращаемся к модулю передачи данных по LAN - LAN8720. И, прежде чем перейти к интерфейсу NETCONN API, давайте ещё раз поработаем с интерфейсом RAW API и напишем простенький UDP Client. Во-первых, это вызвано огромным количеством просьб по данному протоколу, а во-вторых, мы, скорее всего, - [STM Урок 117. NRF24L01. Обмен информацией](https://narodstream.ru/stm-urok-117-nrf24l01-obmen-informaciej/) - Продолжаем работу с беспроводным приёмо-передатчиком NRF24L01. И сегодня мы также займёмся передачей информации, но информацию каждый из наших модулей мы научим и принимать и передавать. Думаю, что это будет актуальная тема, так как мы зачастую хотим не просто передать какую-то информацию удалённому устройству, но и получить от него какой-то ответ. То есть каждый из модулей должен - [STM Урок 29. HAL. DAC. Triangle. DMA](https://narodstream.ru/stm-urok-29-hal-dac-triangle-dma/) - Урок 29 HAL. DAC. Triangle. DMA Сегодня мы продолжим работать с треугольными импульсами, которые мы уже формировали на предыдущем занятии. Только формировать данные импульсы мы будем не с помощью аппаратного механизма, встроеенного в ЦАП, а будем формировать их с помощью заранее подготовленного массива, и эти значения уже при помощи технологии DMA мы - [STM Урок 28. HAL. DAC. Triangle](https://narodstream.ru/stm-urok-28-hal-dac-triangle/) - Урок 28 HAL. DAC. Triangle На прошлом занятии мы познакомились с цифро-аналоговым преобразователем (ЦАП) и изучили, каким образом он реализован в микроконтроллерах STM32. Мы также добились того, что занесение какого-нибудь числа в регистр данных ЦАП теперь в нашем проекте влияет на напряжение на определённой ножке, также мы зациклили занесение величин и добились какого-то - [STM Урок 27. HAL. DAC](https://narodstream.ru/stm-urok-27-hal-dac/) - Урок 27 HAL. DAC Сегодня мы начнём изучать интересную технологию - цифро-аналоговый преобразователь (ЦАП) или по-английски Digital-to-analog converter (DAC). Как видно из названия данного преобразователя, он занимается преобразованием цифрового кода или величины в напряжение определённой величины, каким-то образом зависящим от данного цифрового кода. И также из названия видно, что цифро-аналговый преобразователь занимается - [STM Урок 26. HAL. SPI. Драйвер индикатора MAX7219](https://narodstream.ru/stm-urok-26-hal-spi-drajver-indikatora-max7219/) - Урок 26 HAL. SPI. Драйвер индикатора MAX7219 Продолжаем заниматься с шиной SPI. На прошлом занятии мы подключили четыре индикатора к двум сдвиговым регистрам и добились управления разрядами. А сегодня мы также будем управлять многорзрядным индикатором но уже с помощью специализированной микросхемы-драйвера, подключенной также по интерфейсу SPI к микроконтроллеру. Эта микросхема - MAX7219. - [STM Урок 134. LAN8742A. LWIP. SOCKET. TCP Client](https://narodstream.ru/stm-urok-134-lan8742a-lwip-socket-tcp-client/) - Продолжаем работать с интерфейсом SOCKET с протоколом TCP и сегодня мы попытаемся создать клиент. Как мы убедились на примере клиента для интерфейса NETCONN, что с клиентом работать не только не легче, чем с сервером, но ещё и тяжелее. В качестве сервера теперь у нас, наоборот, будет ПК. Проект за основу мы возьмём с прошлого урока - [STM Урок 133. LAN8742A. LWIP. SOCKET. TCP Server](https://narodstream.ru/stm-urok-133-lan8742a-lwip-socket-tcp-server/) - Продолжаем работу с интерфейсом SOCKET библиотеки стека протоколов LWIP и переходим к следующему транспортному протоколу TCP (Transmission Control Protocol, протокол управления передачей). С данным протоколом мы уже встречались неоднократно. Поэтому, хоть он и является непростым, мы его изучили очень неплохо. Мы знаем, как именно происходит создание и разрыв соединения, знаем, как передаются пакеты TCP, как - [STM Урок 132. LAN8742A. LWIP. SOCKET. UDP. Соединяем два контроллера](https://narodstream.ru/stm-urok-132-lan8742a-lwip-socket-udp-soedinyaem-dva-kontrollera/) - Продолжаем работать со стеком протоколов LWIP с интерфейсом SOCKET и теперь мы попробуем подключить к нашей плате STM32F746-Discovery ещё одну такую же плату по интерфейсу LAN. Подобными действиями мы уже занимались ранее, но использовали при этом мы другие интерфейсы. А сегодня мы организуем на одной плате клиент, а на другой сервер, используя API SOCKET. Начнём, - [STM Урок 127. LAN8742A. LWIP. NETCONN. HTTP Server](https://narodstream.ru/stm-urok-127-lan8742a-lwip-netconn-http-server/) - Продолжаем работу со стеком протоколов LWIP, а также с его интерфейсом NETCONN. И сегодня мы начнём работать с протоколом уже прикладного уровня - HTTP. Данный протокол находится выше уровнем, чем протокол TCP, а протокол TCP является для протокола HTTP протоколом транспортного уровня. Со всем этим мы уже знакомы, так как с протоколом HTTP мы работаем - [STM Урок 126. LAN8742A. LWIP. NETCONN. TCP. Соединяем два контролера](https://narodstream.ru/stm-urok-126-lan8742a-lwip-netconn-tcp-soedinyaem-dva-kontrolera/) - Продолжаем работать с протоколом TCP и сегодня мы попытаемся уже созданные нами на прошлых занятиях сервер и клиент соединить между собой и научить их обмениваться данными. Думаю, такой урок может пригодиться в будущем, так как зачастую приходится соединять контроллеры между собой, не прибегая вообще к участию в сети компьютеров. Начнём с сервера. Проект для сервера создадим на основе - [STM Урок 125. LAN8742A. LWIP. NETCONN. TCP Client](https://narodstream.ru/stm-urok-125-lan8742a-lwip-netconn-tcp-client/) - Продолжаем работать с протоколом TCP и сегодня мы попытаемся создать уже клиент. Если кто-то думает, что клиент писать легче чем сервер, то это зря, и мы в этом уже не раз убедились. В качестве сервера теперь у нас, наоборот, будет ПК. В качестве клиента по традиции мы будем использовать плату STM32F746-Discovery, а проект мы создадим - [STM Урок 124. LAN8742A. LWIP. NETCONN. TCP Server](https://narodstream.ru/stm-urok-124-lan8742a-lwip-netconn-tcp-server/) - Переходим к следующему, более серьёзному типу соединения транспортного уровня - TCP (Transmission Control Protocol, протокол управления передачей). С данным протоколом мы уже встречались неоднократно. Поэтому, хоть он и является непростым, мы его изучили очень неплохо. Мы знаем, как именно происходит создание и разрыв соединения, знаем, как передаются пакеты TCP, как они делятся на сегменты. Поэтому работать нам - [STM Урок 70. HAL. LTDC. Вывод текста. Часть 2](https://narodstream.ru/stm-urok-70-hal-ltdc-vyvod-teksta-chast-2/) - Урок 70 Часть 2 HAL. LTDC. Вывод текста В предыдущей части нашего урока мы настроили проект и добавили необходимые функции для дальнейшей работы с выводом текста. Добавим цикл для вывода горизонтальных линий символа offset = 8 *((width + 7)/8) - width ; for(i = 0; i < height; i++) { } - [STM Урок 70. HAL. LTDC. Вывод текста. Часть 1](https://narodstream.ru/stm-urok-70-hal-ltdc-vyvod-teksta-chast-1/) - Урок 70 Часть 1 HAL. LTDC. Вывод текста Продолжаем изучать интерфейс LTDC. Сегодня на повестке дня одна из самых немаловажных тем вывода на дисплей - это вывод текстовой информации. Я понимаю, что это не самая красивая часть вывода информации, но без неё не обойтись, так как постоянно требуется следить за какими-то - [STM Урок 67. HAL. LTDC. BMP. Часть 2](https://narodstream.ru/stm-urok-67-hal-ltdc-bmp-chast-2/) - Урок 67 Часть 2 HAL. LTDC. BMP В предыдущей части нашего урока мы Продолжим писать нашу функцию вывода картинки на экран с именем TFT_DrawBitmap, находящуюся в файле ltdc.c. Добавим ещё одну локальную переменную uint32_t index = 0, ix=0, width = 0, height = 0, bit_pixel = 0; uint32_t address; - [STM Урок 67. HAL. LTDC. BMP. Часть 1](https://narodstream.ru/stm-urok-67-hal-ltdc-bmp-chast-1/) - Урок 67 Часть 1 HAL. LTDC. BMP Сегодня мы попробуем пойти дальше в сфере изучения программирования интерфейса LTDC и вывести из файла формата BMP картинку на экран. Я думаю, нам это удастся, так как мы этим уже занимались, правда с использованием библиотеки BSP, где был для этого готовый функционал. А теперь - [STM Урок 66. HAL. LTDC. SDRAM. Часть 2](https://narodstream.ru/stm-urok-66-hal-ltdc-sdram-chast-2/) - Урок 66 Часть 2 HAL. LTDC. SDRAM В предыдущей части нашего занятия мы настроили проект в MS Cube, сгенерировали проект для Keil и начали писать исходный код. Раскомментируем и немного подправим часть кода в бесконечном цикле, отвечающую за заливку случайными цветами всей области дисплея. Немного добавим задержку, так как несколько - [STM Урок 66. HAL. LTDC. SDRAM. Часть 1](https://narodstream.ru/stm-urok-66-hal-ltdc-sdram-chast-1/) - Урок 66 Часть 1 HAL. LTDC. SDRAM Сегодня мы попробуем в качестве памяти для дисплея воспользоваться внешней памятью типа SDRAM. Работаем мы с платой STM32 F746-DISCOVERY, в которой данная память уже входит в комплект и с которой мы уже научились работать, изучая урок 62. С интерфейсом LTDC мы тажке умеем работать благодаря - [STM Урок 60. F769I-DISCO. WB. LCD. SDIO. Часть 2](https://narodstream.ru/stm-urok-60-f769i-wb-lcd-sdio-chast-2/) - Урок 60 Часть 2 F769I-DISCO. WB. LCD. SDIO Продолжаем работу с бесплатной средой программирования System Workbench for STM32. В прошлой части занятии мы подготовили проект, подготовили и почти подключили файлы BSP. Сегодня мы продолжим данную тему. Если проект у нас нормально собирается, то попробуем инициализировать дисплей и закрасить его в какой-нибудь цвет. В файле main.с подключим нужные - [STM Урок 60. F769I-DISCO. WB. LCD. SDIO. Часть 1](https://narodstream.ru/stm-urok-60-f769i-wb-lcd-sdio-chast-1/) - Урок 60 Часть 1 F769I-DISCO. WB. LCD. SDIO Продолжаем работу с бесплатной средой программирования System Workbench for STM32. На прошлом занятии мы с помощью библиотеки BSP и не только смогли вывести картинки на экран дисплея, причем вывод осуществляется практически мгновенно. Сегодня мы займёмся тем же самым ремеслом, только подключим мы ради эксперимента уже - [STM Урок 93. LAN. W5500. HTTP Server. Сокеты. Часть 2](https://narodstream.ru/stm-urok-93-lan-w5500-http-server-sokety-chast-2/) - Урок 93 Часть 2 LAN. W5500. HTTP Server. Сокеты В предыдущей части урока мы познакомились с понятием сокетов, а также внесли определённые поправки в код для работы с ними. В функции http_request изменим немного вывод в USART имени файла, добавив туда также и номер сокета strcpy(httpsockprop[sn].fname,tmpbuf); } sprintf(str1,"S%d %srn",sn, httpsockprop[sn].fname); HAL_UART_Transmit(&huart2,(uint8_t*)str1,strlen(str1),0x1000); - [STM Урок 93. LAN. W5500. HTTP Server. Сокеты. Часть 1](https://narodstream.ru/stm-urok-93-lan-w5500-http-server-sokety-chast-1/) - Урок 93 Часть 1 LAN. W5500. HTTP Server. Сокеты Сегодня мы для нашего модуля W5500 попробуем организовать сокеты. Сокеты — это такие виртуальные соединения, которые используются для организации нескольких соединений TCP, работающих одновременно. То есть если клиент с сервером хотят создать ещё одно соединение, не закрывая уже созданное, то для этого будет использоваться - [STM Урок 87. LAN. ENC28J60. TCP WEB Server. Передаём страницу побольше. Часть 2](https://narodstream.ru/stm-urok-87-lan-enc28j60-tcp-web-server-peredayom-stranicu-pobolshe-chast-2/) - Урок 87 Часть 2 LAN. ENC28J60. TCP WEB Server. Передаём страницу побольше В предыдущей части урока мы провели определённую оптимизацию проекта и написали код, который отличает запрос клинетом главной страницы от остальных запросов, а также передали ответ на запрос клиентом несуществущего документа. Также мы передали клиенту страницу, состоящую из двух пакетов TCP. - [STM Урок 87. LAN. ENC28J60. TCP WEB Server. Передаём страницу побольше. Часть 1](https://narodstream.ru/stm-urok-87-lan-enc28j60-tcp-web-server-peredayom-stranicu-pobolshe-chast-1/) - Урок 87 Часть 1 LAN. ENC28J60. TCP WEB Server. Передаём страницу побольше Сегодня мы продолжим тему протокола HTTP, который очень активно используется в наше время для передачи данных. На предыдущем занятии мы познакомились с данным протоколом, с его заголовком, с типами сообщений в заголовке, а также смогли сочинить небольшой сервер из нашего - [STM Урок 86. LAN. ENC28J60. TCP WEB Server. Передаём малую страницу. Часть 2](https://narodstream.ru/stm-urok-86-lan-enc28j60-tcp-web-server-peredayom-maluyu-stranicu-chast-2/) - Урок 86 Часть 2 LAN. ENC28J60. TCP WEB Server. Передаём малую страницу В предыдущей части урока мы кратко познакомились с протоколом HTTP, проанализировали запрос HTTP от клиента, а также написали ряд функций для удобства работы с кодом. Теперь наконец-то перейдём к работе с протоколом HTTP и, вернувшись в файл tcp.с подумаем, как - [STM Урок 86. LAN. ENC28J60. TCP WEB Server. Передаём малую страницу. Часть 1](https://narodstream.ru/stm-urok-86-lan-enc28j60-tcp-web-server-peredayom-maluyu-stranicu-chast-1/) - Урок 86 Часть 1 LAN. ENC28J60. TCP WEB Server. Передаём малую страницу Сегодня мы продолжим нашу тему передачи данных с использованием протокола транспортного уровня TCP и попробуем передать по данному протоколу с нашего контроллера WEB-страницу. А чтобы передать или запросить такую страницу, но нам уже для этого потребуется протокол HTTP (HyperText - [STM Урок 84. LAN. ENC28J60. TCP Server. Устанавливаем и разрываем соединение. Часть 2](https://narodstream.ru/stm-urok-84-lan-enc28j60-tcp-server-ustanavlivaem-i-razryvaem-soedinenie-chast-2/) - Урок 84 Часть 2 TCP Server. Устанавливаем и разрываем соединение В предыдущей части урока мы познакомились с протоколом TCP и с его заголовком, также изучили специфику установки и разрыва соединения TCP, создали проект и приняли пакет TCP. Теперь будем думать, как бы нам ответить на данный пакет. Давайте создадим ещё одну функцию в tcp.c - [STM Урок 84. LAN. ENC28J60. TCP Server. Устанавливаем и разрываем соединение. Часть 1](https://narodstream.ru/stm-urok-84-lan-enc28j60-tcp-server-ustanavlivaem-i-razryvaem-soedinenie-chast-1/) - Урок 84 Часть 1 TCP Server. Устанавливаем и разрываем соединение Сегодня мы начинаем знакомство с другим, более сложным, но в то же время и более надёжным протоколом модели OSI транспортного уровня - TCP. По всей видимости, ввиду своей надёжности, TCP (Transmission Control Protocol, протокол управления передачей) является самым распространённым протоколом для передачи - [STM Урок 83. LAN. ENC28J60. NTP. Узнаём точное время. Часть 2](https://narodstream.ru/stm-urok-83-lan-enc28j60-ntp-uznayom-tochnoe-vremya-chast-2/) - Урок 83 Часть 2 LAN. ENC28J60. NTP. Узнаём точное время В предыдущей части нашего урока мы узнали всё необходимое о протоколе NTP и написали код, который отправляет запрос, дождидается ответа от сервера и отображает в терминальной программе мировое время в виде таймштампа в секундах. Теперь же перед нами стоит задача — время в секундах преобразовать в удобочитаемый - [STM Урок 83. LAN. ENC28J60. NTP. Узнаём точное время. Часть 1](https://narodstream.ru/stm-urok-83-lan-enc28j60-ntp-uznayom-tochnoe-vremya-chast-1/) - Урок 83 Часть 1 LAN. ENC28J60. NTP. Узнаём точное время Так как на прошлом уроке мы сумели уже пообщаться с удалённым узлом, а также у нас освоен практически протокол транспортного уровня - UDP, то мы уже вполне можем получить какие-то данные из внешней сети, в частном случае из глобальной мировой сети - [STM Урок 139. LAN8742A. LWIP. SOCKET. HTTP. WebSocket](https://narodstream.ru/stm-urok-139-lan8742a-lwip-socket-http-websocket/) - Продолжим работу с нашим протоколом HTTP, а также с сетью LAN, библиотекой стека протоколов LWIP, её интерфейсом SOCKET, а также с интересующею всех возможностью передачи данных в браузер клиенту, а также обратно от него на сервер без перезагрузки всей страницы. Мы уже на прошлом занятии занимались таким делом и нам, как вы, надеюсь, помните, это - [STM Урок 137. LAN8742A. LWIP. SOCKET. HTTP. AJAX](https://narodstream.ru/stm-urok-137-lan8742a-lwip-socket-http-ajax/) - Продолжим работу с LWIP SOCKET, а также с протоколом HTTP. И сегодня мы попытаемся не просто отправить страничку браузеру с нашего контроллера, но отправить данные в определённое место страницы, причём без перезагрузки всей страницы. В этом нам поможет технология AJAX, которой мы уже с вами пользовались, когда использовали API NETCONN, поэтому, думаю, нам будет гораздо - [STM Урок 136. LAN8742A. LWIP. SOCKET. HTTP Server](https://narodstream.ru/stm-urok-136-lan8742a-lwip-socket-http-server/) - Продолжаем работу со стеком протоколов LWIP, а также с его интерфейсом SOCKET. И сегодня мы начнём работать с протоколом уже прикладного уровня — HTTP. Данный протокол находится выше уровнем, чем протокол TCP, а протокол TCP является для протокола HTTP протоколом транспортного уровня. Со всем этим мы уже знакомы, так как с протоколом HTTP мы работаем - [STM Урок 135. LAN8742A. LWIP. SOCKET. TCP. Соединяем три контролера](https://narodstream.ru/stm-urok-135-lan8742a-lwip-socket-tcp-soedinyaem-tri-kontrolera/) - Продолжаем работать с протоколом TCP и сегодня мы попытаемся уже созданные нами на прошлых занятиях сервер и клиент соединить между собой и научить их обмениваться данными. Думаю, такой урок может пригодиться в будущем, так как зачастую приходится соединять контроллеры между собой, не прибегая вообще к участию в сети компьютеров. Тем более, мы такими вещами уже - [STM Урок 102. LAN8720. LWIP. HTTP RAW. Часть 2](https://narodstream.ru/stm-urok-102-lan8720-lwip-http-raw-chast-2/) - В предыдущей части занятия мы создали и настроили проект, написали и проверили код WEB-сервера, а также написали и проверили код для использования SSI. Теперь наоборот. Нам надо передать из клиентского браузера данные на сервер. Это уже CGI. Мы будем, также как и в примере из репозитория, управлять светодиодами, включая определённые, в зависимости от чекбоксов, в - [STM Урок 102. LAN8720. LWIP. HTTP RAW. Часть 1](https://narodstream.ru/stm-urok-102-lan8720-lwip-http-raw-chast-1/) - Продолжаем работать со стеком протоколов LWIP и микросхемой LAN8720. И теперь мы попробуем создать небольшой, но вполне функциональный и полезный HTTP-сервер на основе нашей микросхемы и контроллера. Использовать мы будем ту же самую отладочную плату STM32F4-Discovery и плату расширения STM32F4DIS-BB. У кого нет такой платы, то вполне может использовать модуль от WaveShare. Просто мне с - [STM Урок 100. LAN8720. LWIP. TCP. Соединяем два контроллера. Часть 2](https://narodstream.ru/stm-urok-100-lan8720-lwip-tcp-soedinyaem-dva-kontrollera-chast-2/) - В предыдущей части нашего урока мы работали над проектом для клиентского МК и проверили данный проект, соединившись с сервером, роль которого пока выполнял компьютер. Переходим теперь к серверу. Проект для сервера мы создадим из проекта урока 98 с именем LAN8720_TCP_SERVER и назовём его LAN8720_TCP_SERVER_LCD. Откроем данный проект в Cube MX, включим I2C Затем перейдём - [STM Урок 100. LAN8720. LWIP. TCP. Соединяем два контроллера. Часть 1](https://narodstream.ru/stm-urok-100-lan8720-lwip-tcp-soedinyaem-dva-kontrollera-chast-1/) - Продолжаем работать с микросхемой сетевого физического уровня LAN8720, а также библиотекой стека протоколов LWIP. Мы уже рассмотрели работу TCP-клиента и TCP-сервера на данной микросхеме, используя RAW API, а также используя для этого отладочную плату STM32F4-Discovery. Теперь нам всем, я думаю, будет интересно наши сервер и клиент между собою соединить, то есть использовать только контроллеры и - [STM Урок 99. HC-05. Master. Соединяем два МК. Часть 2](https://narodstream.ru/stm-urok-99-hc-05-master-soedinyaem-dva-mk-chast-2/) - В предыдущей части нашего занятия мы настроили модуль HC-05 для работы в режиме ведущего устройства, также настроили контроллер, к которому мы будем подключать данный модуль, для работы с дисплеем. Пока не будем подключать модуль, а настроим наш дисплей. Мы сделаем вывод пришедших к нам из модуля строк в нижнюю строку дисплея, при этом верхние мы - [STM Урок 99. HC-05. Master. Соединяем два МК. Часть 1](https://narodstream.ru/stm-urok-99-hc-05-master-soedinyaem-dva-mk-chast-1/) - В уроке 97 мы научились настроенный в обзоре модуль HC-05 в режиме ведомого устройства подключать к ведущему устройству в виде смартфона. Также мы смогли передать данные в обоих направлениях в виде строк. Данные передаются весьма уверенно, поэтому мы можем смело продолжать продвигаться вперёд по данной теме. В рамках сегодняшнего занятия мы попробуем настроить данный модуль в качестве - [STM Урок 98. LAN8720. LWIP. TCP Server. Часть 2](https://narodstream.ru/stm-urok-98-lan8720-lwip-tcp-server-chast-2/) - В предыдущей части нашего занятия мы добавили, а также заменили ряд служебных функций и попытались отреагировать на желание клиента создать с нашим сервером соединение. Начнём писать теперь тело обработчика, который вызывается при получении пакета сервером. Также создадим сначала указатель на структуру static err_t tcp_server_recv(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, err_t err) { - [STM Урок 98. LAN8720. LWIP. TCP Server. Часть 1](https://narodstream.ru/stm-urok-98-lan8720-lwip-tcp-server-chast-1/) - Сегодня мы продолжим работу по программированию микросхемы LAN8720 с использованием библиотеки стека протоколов LWIP и теперь мы попытаемся создать с помощью неё простенький TCP-сервер. Признаться, я думал, что это будет гораздо легче, чем написать клиент, но не тут-то было. Всё дело в том, что структура TCP, которую мы сохраняем на этапе прослушивания порта, затем теряется - [STM Урок 151. LL. I2C. Переходник для LCD 16x2](https://narodstream.ru/stm-urok-151-ll-i2c-perexodnik-dlya-lcd-16x2/) - Продолжаем работу с библиотекой LL, а также с шиной I2C. В прошлом занятии мы уже достаточно глубоко познакомились с аппаратной организацией данной шины, а также подтвердили очень неплохо свои полученные знания на практике, подключив к контроллеру STM32F103 микросхему памяти EEPROM AT24C32 и произведя чтение и запись по шине I2C. Но, думаю, что для более глубокого - [STM Урок 149. LL. PWM (ШИМ). Мигаем светодиодами плавно](https://narodstream.ru/stm-urok-149-ll-pwm-shim-migaem-svetodiodami-plavno/) - Продолжаем изучение библиотеки LL. Также продолжаем работу с таймерами и в данном занятии мы изучим возможность аппаратной реализации широтно-импульсной модуляции (ШИМ или PWM). Что такое широтно-импульсная модуляция, думаю, уже никому объяснять не надо, у нас было уже очень много уроков по данной теме, в том числе и для STM, правда использована была библиотека HAL, но - [STM Урок 148. LL. Динамическая индикация](https://narodstream.ru/stm-urok-148-ll-dinamicheskaya-indikaciya/) - Продолжаем изучение библиотеки LL. И сегодня мы к нашему контроллеру STM32F103 попробуем подключить четырехразрядный семисегментный индикатор. Причём именно сразу четырехразрядный, так как, думаю, работать со статической индикацией и с одноразрядным индикатором смысла нет, так как это используется очень редко и как правило актуально только на этапе изучения индикаторов. Но мы с вами их уже давно - [STM Урок 146. LL. STM32F1. Светодиоды и кнопка](https://narodstream.ru/stm-urok-146-biblioteka-ll-svetodiody-i-knopka/) - В уроке 144 мы с вами познакомились, какие основные режимы пониженного энергопотребления существуют у контроллеров stm32 и поглубже познакомились с одним из них - с режимом SLEEP. И, прежде чем приступить к изучению остальных режимов, давайте познакомимся с библиотекой low-layer drivers или, попросту говоря, LL. Данная библиотека, равно как и библиотека HAL, может спокойно использоваться - [STM Урок 105. NRF24L01. Передаём данные. Часть 2](https://narodstream.ru/stm-urok-105-nrf24l01-peredayom-dannye-chast-2/) - В предыдущей части занятия мы создали проект для передатчика, добавили несколько новых функций, и только в сегодняшней части мы сможем наш код проверить, так как для этого нужен приёмник. Займёмся теперь нашим приёмником. Для него была выбрана плата NUCLEO-F401RE. Подключим к данной схеме модуль. Соответствие ножек можно будет затем посмотреть в проекте Cube MX. Ну, - [STM Урок 105. NRF24L01. Передаём данные. Часть 1](https://narodstream.ru/stm-urok-105-nrf24l01-peredayom-dannye-chast-1/) - Продолжаем изучение модулей беспроводной передачи данных - NRF24L01 (NRF24L01+). В уроке 103 мы с ними основательно познакомились, научились читать и писать их регистры, читать и писать буфер, и убедились в том, что мы действительно это умеем, на практике. Теперь нам предстоит следующая задача - передача данных по воздуху через данные модули. Они, собственно, для этого и созданы. - [STM Урок 104. FreeRTOS. Бинарные (двоичные) семафоры. Часть 2](https://narodstream.ru/stm-urok-104-freertos-binarnye-semafory-chast-2/) - В предыдущей части урока мы познакомились с семафорами, создали и настроили проект для работы с ними. Подключим библиотеки в main.c /* USER CODE BEGIN Includes */ #include "stdint.h" #include "string.h" #include "ltdc.h" #include "MT48LC4M32B2.h" #include "fonts.h" /* USER CODE END Includes */ Подключим память для видеобуфера /* Private variables ---------------------------------------------------------*/ #define LCD_FRAME_BUFFER - [STM Урок 104. FreeRTOS. Бинарные (двоичные) семафоры. Часть 1](https://narodstream.ru/stm-urok-104-freertos-binarnye-semafory-chast-1/) - Продолжим забытую нами тему использования операционной системы реального времени - FreeRTOS. Операционная система реального времени позволяет нам добиться организации процессов, также многозадачности, причём часть работы по данной организации система берёт на себя, но некоторая часть данной организации вопросов также ложится и на разработчика приложения. Например может случиться следующая ситуация. Есть какой-нибудь ответственный процесс, который в - [STM Урок 107. Датчик влажности и температуры DHT22. Часть 2](https://narodstream.ru/stm-urok-107-datchik-vlazhnosti-i-temperatury-dht22-chast-2/) - В предыдущей части урока мы познакомились с датчиком, создали и настроили проект, написали функцию инициализации датчика, а также функцию снятия с него показаний. Переходим в файл main.c и внесём изменения и там. Пока мы будем выводить показания датчика в шину USART через переходник, а уж затем, если всё будет нормально, займёмся выводом данных в индикатор. - [STM Урок 107. Датчик влажности и температуры DHT22. Часть 1](https://narodstream.ru/stm-urok-107-datchik-vlazhnosti-i-temperatury-dht22-chast-1/) - Продолжаем тему датчиков температуры. Сегодня у нас на повестке дня датчик, который измеряет не только температуру, но и влажность - это датчик DHT22. Он также может встречаться под маркой AM2302. Также существует датчик DHT11, урок по которому меня неоднократно просили сделать, он у меня тоже есть. Но таких уроков, во-первых, уже немало, а во-вторых, думаю - [STM Урок 106. FreeRTOS. Динамическое создание и уничтожение задач. Часть 2](https://narodstream.ru/stm-urok-106-freertos-dinamicheskoe-sozdanie-i-unichtozhenie-zadach-chast-2/) - В предыдущей части занятия мы познакомились с возможными состояниями задач в ОС реального времени FreeRTOS, создали проект, добавили функции задач, создали задачу, которая сама затем себя и будет уничтожать, и проверили наш код на практике. Давайте теперь попробуем увидеть наглядно, что задача присутствует в списке задач, а потом при уничтожении из него удаляется. Для этого - [STM Урок 106. FreeRTOS. Динамическое создание и уничтожение задач. Часть 1](https://narodstream.ru/stm-urok-106-freertos-dinamicheskoe-sozdanie-i-unichtozhenie-zadach-chast-1/) - Продолжаем тему по изучению операционной системы реального времени FreeRTOS. После изучения бинарных (двоичных) семафоров я хотел создать урок по использованию NENCONN API в библиотеке стека протоколов LWIP, но потом, почитав ещё гору различной литературы, всё-таки пришёл к выводу, что мы к этому ещё не готовы, так как мы слишком поверхностно знаем программирование наших контроллеров при - [STM Урок 25. HAL. SPI. LED Динамическая индикация](https://narodstream.ru/stm-urok-25-hal-spi-led-dinamicheskaya-indikaciya/) - Урок 25 HAL. SPI. LED Динамическая индикация В предыдущем уроке мы изучили возможность управления посредством шины SPI семисегментным светодиодным индикатором. А на данном занятии мы попробуем управлять уже четырьмя такими индикаторами, и использовать мы будем уже динамическую индикацию. Чем отличается динамическая индикация от обычной статической, вы можете узнать из урока 12. Основное отличие - [STM Урок 24. HAL. SPI. LED Статическая индикация](https://narodstream.ru/stm-urok-24-hal-spi-led-staticheskaya-indikaciya/) - Урок 24 HAL. SPI. LED Статическая индикация На прошлом уроке мы подключили посредством шины SPI микросхему 74HC595, являющуюся сдвиговым регистром. Сегодня мы с помощью данной микросхемы попробуем уже поуправлять семисегментным светодиодным индикатором с общим анодом. Вот распиновка данного индикатора А вот это схема подключения (нажмите на картинку для увеличения изображения) - [ESP32 Урок 10. Возможность отладки кода](https://narodstream.ru/esp32-urok-10-vozmozhnost-otladki-koda/) - На данном уроке мы попробуем подключить схему для отладки кода. Как мы знаем, ESP32 отлаживается по интерфейсу JTAG, поэтому и плата для отладки должна быть выбрана с поддержкой работы с данным интерфейсом. Для данных целей было принято решение использовать недорогую плату с чипом FT232H, который наряду с многими интерфейсами поддерживает также преобразование кода, поступившего по USB - [STM Урок 23. HAL. SPI. Сдвиговый регистр 74HC595](https://narodstream.ru/stm-urok-23-hal-spi-sdvigovyj-registr-74hc595/) - Урок 23 HAL. SPI. Сдвиговый регистр 74HC595 Предыдущий урок Программирование МК STM32 Следующий урок Сегодня мы начинаем цикл занятий по шине SPI (Serial peripheral interface). Рассказывать про то, как данная шина работает, нет никакого смысла, так как на данном сайте вся информация об этом уже есть, достаточно посмотреть урок по данной шине для AVR. Нам - [STM Урок 22. HAL. I2C. I2C to LCD2004](https://narodstream.ru/stm-urok-22-hal-i2c-i2c-to-lcd2004/) - Урок 22 HAL. I2C. Переходник для LCD 20x4 Сегодня мы попробуем подключить символьный дисплей LCD 20x4 подключить через переходник по шине I2C. Это позволит нам сэкономить ножки портов, а также обойтись меньшим количеством проводов. Данный переходник выглядит вот так и его разъём полностью совместим по ножкам с разъёмом дисплея Это ничто иное, как преобразователь - [STM Урок 155. HAL. DMA. MEM2MEM](https://narodstream.ru/stm-urok-155-hal-dma-mem2mem/) - Пришло время познакомиться поближе с технологией DMA, её реализацией в контроллере STM32F1, пока поверхностно, без подробного рассмотрения регистров и их битов, которые мы рассмотрим в одном из следующих занятий, когда будем работать с DMA, применяя функционал библиотеки LL. Также в данном уроке мы остановимся пока на алгоритме передачи данных из одного участка памяти в другой - [STM Урок 154. LL. SPI. Соединяем два контроллера](https://narodstream.ru/stm-urok-154-ll-spi-soedinyaem-dva-kontrollera/) - На прошлом занятии мы научились соединять между собой контроллеры по шине SPI, а также, что самое важное, мы научились настраивать устройство в режиме SLAVE. Цель данного занятия у нас практически та же, но есть и отличие. Теперь мы для достижения данной цели будем уже использовать возможности библиотеки LL. Схема урока остаётся полностью та же как - [ESP32 Урок 12. Отладка. Смотрим регистры контроллера](https://narodstream.ru/esp32-urok-12-otladka-smotrim-registry-kontrollera/) - В уроке 10, в котором мы научились подключить отладчик к плате с контроллером ESP32, нам не удалось увидеть регистры контроллера (его периферии). Благодаря подсказке посетителя данного ресурса, мне удалось всё же это сделать. Для этого нам нужен будет файл с расширением svd с адресами регистров, который мы должны подключить к лаунчеру для отладки. В Espressif - [STM Урок 158. LL. SPI. Interrupt](https://narodstream.ru/stm-urok-158-ll-spi-interrupt/) - На прошлом занятии мы познакомились с механизмом обработки прерываний шины SPI контроллера STM32F1, а также потом немного попрактиковались в данном вопросе. Только всем этим мы занимались с использованием возможностей библиотеки HAL, а в данном занятии мы уже обратимся к помощи библиотеки LL, которая, как известно, такой простотой программирования, как HAL, похвастаться не может, зато она - [STM Урок 157. HAL. SPI. Interrupt](https://narodstream.ru/stm-urok-157-hal-spi-interrupt/) - Продолжаем подробное изучение шины SPI в контроллере STM32. И на данном уроке мы попробуем воспользоваться механизмом прерываний, организованным в периферии SPI в данном контроллере. Использовать сегодня мы будем возможности библиотеки HAL, которые позволят нам также легко отследить передачу большой порции данных по шине SPI. Для того, чтобы попробовать, как работают прерывания в SPI контроллера STM32F1, - [STM Урок 160. LL. SPI. DMA](https://narodstream.ru/stm-urok-160-ll-spi-dma/) - Продолжаем подробное изучение шины SPI в контроллере STM32. И на данном уроке мы мы объединим наши знания по шине SPI и периферии DMA в контроллере STM32 и попробуем применить технологию DMA при передаче данных по интерфейсу SPI. Хотя мы тем же самым занимались на прошлом уроке, но только применяли мы при этом библиотеку HAL, а - [STM Урок 159. HAL. SPI. DMA](https://narodstream.ru/stm-urok-159-hal-spi-dma/) - На данном уроке мы объединим наши знания по шине SPI и периферии DMA в контроллере STM32 и попробуем применить технологию DMA при передаче данных по интерфейсу SPI. Использовать при этом мы будем библиотеку HAL, которая позволит нам с меньшим трудом организовать этот обмен. С DMA мы уже знакомы неплохо, причём мы работали с ней не - [STM Урок 163. LL. USART. Interrupt](https://narodstream.ru/stm-urok-163-ll-usart-interrupt/) - В данном занятии мы поработаем с механизмом обработки прерываний от шины USART. С прерываниями данными мы уже с вами знакомы из урока 14, только использовали мы при этом библиотеку HAL. Теперь нам предстоит работа с библиотекой LL, что не является сильно простой задачей, но так как в уроке 161 мы полностью познакомились с аппаратной частью - [STM Урок 162. LL. USART. Приём данных](https://narodstream.ru/stm-urok-162-ll-usart-priyom-dannyx/) - Продолжая освоение возможностей библиотеки LL, немного усложним задачу по работе с шиной USART контроллера STM32F1. На данном уроке мы помимо передачи данных из контроллера в ПК попробуем также и принять данные из ПК. Причём, прерываниями мы пока также пользоваться не будем. Будем прорабатывать шину постепенно. Так как на прошлом уроке мы плотно изучили регистры и - [ESP32 Урок 13. Программные таймеры](https://narodstream.ru/esp32-urok-13-programmnye-tajmery/) - Когда мы знакомились с семейством микроконтроллеров ESP32, то мы видели, что в данном контроллере существует несколько аппаратных таймеров. Но порой бывают такие задачи, когда нет смысла задействовать аппаратный таймер, обрабатывать лишние прерывания. В таких случаях нам на помощь приходят программные таймеры. И начнём мы изучение таймеров именно с них ещё по той причине, что работа с ними - [STM Урок 165. Библиотека CMSIS. STM32F1. Бегущие огни](https://narodstream.ru/stm-urok-165-biblioteka-cmsis-stm32f1-begushhie-ogni/) - Изучая возможности библиотеки LL и её умение работать на уровне регистров контроллера, мы начали больше понимать в аппаратной организации микроконтроллеров STM. Теперь нам предстоит ещё более углубленное изучение данных контроллеров. В этом нам поможет другая библиотека - CMSIS. CMSIS (Cortex Microcontroller Software Interface Standard) - библиотека стандарта программного обеспечения микроконтроллеров Cortex, являющаяся независимым от производителя - [STM Урок 164. LL. USART. DMA](https://narodstream.ru/stm-urok-164-ll-usart-dma/) - Продолжаем нашу работу с шиной USART контроллера STM32F1. В данном уроке мы поработаем с возможностью использования периферии DMA при передаче данных по интерфейсу USART. С передачей данных по USART с применением DMA мы уже немного знакомы из урока 15, только использовали мы при этом библиотеку HAL. Теперь нам предстоит работа с библиотекой LL, и так - [STM Урок 111. FreeRTOS. Очереди. Часть 2](https://narodstream.ru/stm-urok-111-freertos-ocheredi-chast-2/) - В предыдущей части урока мы познакомились с тем, что такое очередь, какие они бывают, какие у них особенности, а также попробовали в работе очередь, передав через неё пока однотипные данные из одной задачи в другую. Теперь мы попробуем в очереди передать целую структуру. Мы пока будем использовать и однотипный вид очереди и потоковый. Поэтому добавим - [STM Урок 111. FreeRTOS. Очереди. Часть 1](https://narodstream.ru/stm-urok-111-freertos-ocheredi-chast-1/) - Продолжаем изучение операционной системы FreeRTOS и некоторых тонкостей программирования с её применением. Прошлый урок 110 по приоритетам задач показал, что работа с задачами, имеющими одинаковый приоритет, никогда не переходящих в состояние "Блокирована", может привести к некоторым интересным последствиям, особенно если слишком много кода приходится выполнять в функции задач. Поэтому наиболее важный код, который должен быть - [STM Урок 115. NRF24L01. Несколько приемников. Часть 2](https://narodstream.ru/stm-urok-115-nrf24l01-neskolko-priemnikov-chast-2/) - В предыдущей части нашего занятия мы создали и написали проект для приёмника, а также проект для первого передатчика. Проект мы сделаем полностью из проекта первого передатчика NRF24_RX_00 и назовём его NRF24_RX_01 с целью наименьших временных затрат для написания исходного кода. Откроем проект в Cube MX, ничего там не трогая, сгенерируем проект для Keil, откроем его, настроим программатор - [STM Урок 115. NRF24L01. Несколько приемников. Часть 1](https://narodstream.ru/stm-urok-115-nrf24l01-neskolko-priemnikov-chast-1/) - Продолжаем работу с беспроводным приёмо-передатчиком NRF24L01. И сегодня та плата, которая у нас выступала в роли приёмника, будет выступать уже в роли передатчика. И задачу мы уже будем решать обратную. Передать с модуля, подключенного к данной плате пакеты, наоборот, на несколько приемников. Приемников у нас будет три и наша задача будет состоять в том, чтобы с передатчика мы - [ESP32 Урок 14. FreeRTOS. Мьютексы](https://narodstream.ru/esp32-urok-14-freertos-myuteksy/) - Как мы уже знаем, работать с ESP32 нам приходится с использованием операционной системы реального времени FreeRTOS. Это вызвано многими причинами. Во-первых, использование операционной системы обусловлено тем, что контроллер ESP32 имеет на своём борту модуль для работы с беспроводными соединениями. А это сеть и работа с сетевыми протоколами, как мы уже давно знаем, непростая и сервить - [STM Урок 116. FreeRTOS. Прерывания. Очереди в прерываниях. Часть 2](https://narodstream.ru/stm-urok-116-freertos-preryvaniya-ocheredi-v-preryvaniyax-chast-2/) - В предыдущей части нашего занятия мы познакомились с механизмом использования API FreeRTOS в телах обработчиков прерываний, создали и настроили проект и написали код для отправки байта, принятого по шине USART, в очередь. Теперь в функции задачи для обработки байта и разбора строк TaskParseUSART мы создадим несколько локальных переменных и указатель на структуру очереди для передачи строки функции задачи - [STM Урок 116. FreeRTOS. Прерывания. Очереди в прерываниях. Часть 1](https://narodstream.ru/stm-urok-116-freertos-preryvaniya-ocheredi-v-preryvaniyax-chast-1/) - До сих пор мы вызывали различные функции, связанные с системой FreeRTOS, в функциях и процедурах, не связанных с обработчиками прерываний. Но возникает логичный вопрос. А как же всё-таки использовать различный функционал операционной системы FreeRTOS именно в телах обработчиков прерываний, чтобы обработка прерываний оставалась корректной, то есть чтобы она не продолжалась слишком долго и чтобы различные - [STM Урок 123. LAN87XX. LWIP. NETCONN. UDP. Соединяем три контролера. Часть 2](https://narodstream.ru/stm-urok-123-lan87xx-lwip-netconn-udp-soedinyaem-tri-kontrolera-chast-2/) - В предыдущей части нашего урока мы настроили проект для сервера, а также создали и написали проект для первого клиента и проверили работу соединения на практике. Теперь поработаем со вторым клиентом. В качестве него будет ещё одна плата STM32F746G-DISCOVERY. Отключим плату нашего первого клиента от ПК и подключим к независимому источнику, а плату 32F746G-DISCOVERY подключим к - [STM Урок 123. LAN87XX. LWIP. NETCONN. UDP. Соединяем три контролера. Часть 1](https://narodstream.ru/stm-urok-123-lan87xx-lwip-netconn-udp-soedinyaem-tri-kontrolera-chast-1/) - В данном занятии мы попробуем соединить три контроллера по сети LAN с использованием протокола UDP. У нас для этого уже есть все условия, так как мы писали сервер с поддержкой двух одновременных соединений, для которых были организованы раздельные задачи (потоки). Только мы, конечно, не просто подсоединим ещё одну плату к нашей сети, иначе урок бы - [STM Урок 130. LAN8742A. LWIP. NETCONN. NTP. Узнаём точное время. Часть 2](https://narodstream.ru/stm-urok-130-lan8742a-lwip-netconn-ntp-uznayom-tochnoe-vremya-chast-2/) - В предыдущей части занятия мы создали проект, настроили модуль RTC и начали готовить запрос на точное мировое время. Вернёмся в функцию ntp_thread и занесём значение системного таймера в переменную, хранящую старое значение ntpmsg->li_vn_mode = 0x00 | (4 - [STM Урок 130. LAN8742A. LWIP. NETCONN. NTP. Узнаём точное время. Часть 1](https://narodstream.ru/stm-urok-130-lan8742a-lwip-netconn-ntp-uznayom-tochnoe-vremya-chast-1/) - Продолжаем работу с сетью LAN, библиотекой стека протоколов LWIP, её интерфейсом NETCON. Сегодня мы ещё раз поработаем с протоколом транспортного уровня, так сказать, закрепим практически лишний раз наши знания данного протокола, но только целью сегодняшнего занятия мы поставим себе задачу — получить точное время с одного из серверов точного времени по протоколу NTP (Network Time - [STM Урок 131. LAN8742A. LWIP. SOCKET. UDP Server. Часть 2](https://narodstream.ru/stm-urok-131-lan8742a-lwip-socket-udp-server-chast-2/) - В предыдущей части урока мы познакомились с интерфейсом SOCKET, создали и настроили проект и проверили доступ к сетевому интерфейсу нашего сервера. Теперь займёмся наконец-то непосредственно нашим сервером. В функции задачи добавим несколько локальных переменных, указателей и массив static void udp_thread(void *arg) { struct_out *qstruct; struct_sock *arg_sock; int sock, ret; struct sockaddr_in address, remotehost; socklen_t sockaddrsize; - [STM Урок 131. LAN8742A. LWIP. SOCKET. UDP Server. Часть 1](https://narodstream.ru/stm-urok-131-lan8742a-lwip-socket-udp-server-chast-1/) - Немало времени мы изучали с вами интерфейс стека протоколов LWIP - NETCONN, который оказался не таким уж и простым в освоении, но тем не менее с помощью него нам стало гораздо проще решать непростые задачи по программированию передачи данных по сети, стоящие перед нами. Теперь нам предстоит изучение ещё более совершенного интерфейса - SOCKET, который, - [ESP32 Урок 15. Аппаратные таймеры](https://narodstream.ru/esp32-urok-15-apparatnye-tajmery/) - Как было упомянуто в самом первом занятии по знакомству с семейством контроллеров ESP32, данный контроллер имеет на своём борту две группы аппаратных таймеров, которые в свою очередь включают по два 64-разрядных таймера общего назначения. Помимо 64-разрядного счётчика, каждый из 4 таймеров включает 16-разряюный предделитель и работает по простейшему принципу. Режим работы только один - режим счётчика. - [STM Урок 138. Independent watchdog (IWDG). Часть 2](https://narodstream.ru/stm-urok-138-independent-watchdog-iwdg-chast-2/) - В предыдущей части урока мы познакомились со сторожевым таймером, как организован IWDG в контроллере STM32, познакомились со схемой урока, создали и настроили проект. Откроем файл main.c и для наших светодиодов напишем макросы для удобства дальнейшего написания и чтения кода /* USER CODE BEGIN PV */ /* Private variables ---------------------------------------------------------*/ #define LED1_ON() HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_SET) #define - [STM Урок 138. Independent watchdog (IWDG). Часть 1](https://narodstream.ru/stm-urok-138-independent-watchdog-iwdg-chast-1/) - В данном занятии мы познакомимся со сторожевым таймером (Watchdog timer). Watchdog Timer (WDT) — это сторожевой таймер (а если перевести дословно, «сторожевой пёс»), который представляет собой аппаратно-реализованную схему контроля над зависанием системы. Это таймер, который периодически сбрасывается контролируемой системой. Если вдруг сброса не произошло за определённый интервал времени после предыдущего сброса данного таймера, то происходит - [STM Урок 140. Window watchdog (WWDG). Часть 2](https://narodstream.ru/stm-urok-140-window-watchdog-wwdg-chast-2/) - В предыдущей части урока мы познакомились с оконным сторожевым таймером, как организован WWDG в контроллере STM32, познакомились со схемой урока, создали и настроили проект. И у нас второй светодиод, только начав светиться, сразу потухал и процесс начинался сначала. Потому что мы не перезагружаем вовремя наш оконный сторожевой таймер. Давайте теперь посчитаем, в какое приблизительно время, или, - [STM Урок 140. Window watchdog (WWDG). Часть 1](https://narodstream.ru/stm-urok-140-window-watchdog-wwdg-chast-1/) - Продолжим тему сторожевых таймеров в микроконтроллерах STM32. В уроке 138 мы уже подробно познакомились с назначением сторожевого таймера (Watchdog Timer или WDT), для чего он применяется. Также мы узнали, как работает в контроллере STM32 независимый сторожевой таймер (Independent watchdog или IWDG), а также поработали с ним и на практике. А ещё мы узнали, что сторожевых - [STM Урок 168. CMSIS. STM32F1. Таймеры](https://narodstream.ru/stm-urok-168-cmsis-stm32f1-tajmery/) - В прошлом занятии мы познакомились с системным таймером SysTick и получили возможность управлять интервалами задержек. Мы узнали возможности данного таймера, которые далеко не безграничны. Но не всё так плохо, так как у контроллеров STM32 очень много других таймеров с различными возможностями. Мы с ними давно уже знакомы из прошлых занятий, мало того, мы знаем, как - [STM Урок 167. CMSIS. STM32F1. SysTick. Прерывания](https://narodstream.ru/stm-urok-167-cmsis-stm32f1-systick-preryvaniya/) - До сих пор мы, используя библиотеку CMSIS, использовали задержки исполнения кода с помощью пустых тактов, тем самым нам тяжело было даже примерно подсчитать заранее, сколько циклов потребуется для организации задержки на определённое время. Так как в прошлом занятии мы смогли добиться тактирования контроллера строго определённой частотой импульсов, то теперь нам эту задачу решить будет намного - [ESP32 Урок 16. FreeRTOS. Двоичные семафоры](https://narodstream.ru/esp32-urok-16-freertos-dvoichnye-semafory/) - В уроке 14 мы познакомились с мьютексами. Также мы немного определились с вопросом, чем вообще мьютексы отличаются от семафоров вообще и от двоичных семафоров в частности. Хотя это отличие в основном символическое. С семафорами мы встречались и ранее, когда писали код для stm32, поэтому с теорией их использования и назначения мы, в принципе, знакомы. Также - [STM Урок 170. CMSIS. STM32F1. Динамическая индикация](https://narodstream.ru/stm-urok-170-cmsis-stm32f1-dinamicheskaya-indikaciya/) - Продолжаем работать с CMSIS. И сегодня мы к нашему контроллеру STM32F103 попробуем подключить четырехразрядный семисегментный индикатор. Причём именно сразу четырехразрядный, так как, думаю, работать со статической индикацией и с одноразрядным индикатором смысла нет, так как это используется очень редко и как правило актуально только на этапе изучения индикаторов. Но мы с вами их уже давно - [STM Урок 169. CMSIS. STM32F1. GPIO. Input](https://narodstream.ru/stm-urok-169-cmsis-stm32f1-gpio-input/) - В уроке 165 мы настраивали ножки порта на выход. Также мы хорошо знаем, что порт - это такая шина, которая умеет работать также хорошо как на выход, так и на вход. Поэтому сегодня мы попробуем настроить ножку порта на вход. В этом случае контроллер не управляет состоянием тех или иных ножек портов, а, наоборот, следит - [STM Урок 141. USB HS Host MSC Standalone. Часть 2](https://narodstream.ru/stm-urok-141-usb-hs-host-msc-standalone-chast-2/) - В предыдущей части урока мы настроили проект и создали функцию обработки состояний программы. Добавим ещё один глобальный массив для отправки строк в USART для последующего отображения их в терминальной программе в ПК char fn[30] = {0}; char str_usart[512] = {0}; В функции App_File_Operations добавим строковый массив для хранения имени файла void App_File_Operations(char* fname) - [STM Урок 141. USB HS Host MSC Standalone. Часть 1](https://narodstream.ru/stm-urok-141-usb-hs-host-msc-standalone-chast-1/) - Продолжим тему программирования обмена данными по шине USB. Причём поработаем мы с аппаратной шиной USB HS контроллера, скорость которой в 40 раз больше, чем скорость шины USB FS, и составляет 480 мегабит в секунду. На данный урок меня сподвигла не только высокая скорость обмена, но также и то, что мы, используя протокол HTTP и разрабатывая - [STM Урок 143. USB HS Host MSC FREERTOS. Часть 2](https://narodstream.ru/stm-urok-143-usb-hs-host-msc-freertos-chast-2/) - В предыдущей части нашего урока мы создали проект и добавили в него две задачи для работы с шиной USB и библиотекой FATFS. Вернёмся в наш проект и добавим несколько глобальных указателей и переменных } struct_out; FATFS *fs; FIL MyFile; FRESULT res; uint32_t bytesWritten; uint8_t rtext[200]; uint8_t wtext[] = "USB Host Library : Mass Storage - [STM Урок 143. USB HS Host MSC FREERTOS. Часть 1](https://narodstream.ru/stm-urok-143-usb-hs-host-msc-freertos-chast-1/) - Продолжаем тему программирования шины USB, устройства Host (ведущего), класса MSC (Mass Storage Class) с использованием интерфейса HS (High Speed). Только проект мы будем на данном занятии уже разрабатывать для использования с операционной системой реального времени FREERTOS. При использовании данной системы будут свои тонкости. Поэтому такой урок было принято решение сделать. В уроке 141 мы уже - [ESP32 Урок 17. FreeRTOS. Счётные семафоры](https://narodstream.ru/esp32-urok-17-freertos-schyotnye-semafory/) - На прошлом уроке мы уже работали с семафорами, но это были двоичные семафоры. Теперь на повестке дня семафоры счётные. Двоичные семафоры от счётных практически не отличаются ничем, только количество элементов в них всегда равно одному, а в счётных - более одного. Счётные семафоры как правило требуются тогда, когда либо надо подсчитать несколько событий из различных - [STM Урок 144. Режимы пониженного энергопотребления. SLEEP. Часть 2](https://narodstream.ru/stm-urok-144-rezhimy-ponizhennogo-energopotrebleniya-sleep-chast-2/) - В предыдущей части урока мы познакомились с режимами пониженного энергопотребления контроллера STM32, а в частности режима SLEEP, и познакомились со схемой урока. Теперь можно приступить и к более практической части. Проект мы сделаем из проекта урока 140 с именем WWDG01 и дадим ему новое имя - SLEEP. Из папки Src удалим всё, кроме файла main.c, а - [STM Урок 144. Режимы пониженного энергопотребления. SLEEP. Часть 1](https://narodstream.ru/stm-urok-144-rezhimy-ponizhennogo-energopotrebleniya-sleep-chast-1/) - В данном уроке мы начнём знакомство с режимами пониженного энергопотребления микроконтроллеров STM32. Зачем нужны такие режимы контроллеру? Любое устройство, работающее от автономного источника питания, если будет эксплуатироваться только в основном (динамическом) режиме, скорее всего, долго не проработает. Поэтому и существуют данные режимы — режимы пониженного энергопотребления. Режимы пониженного энергопотребления существуют разных видов в зависимости от - [STM Урок 147. LL. Таймеры. Часть 2](https://narodstream.ru/stm-urok-147-ll-tajmery-chast-2/) - В предыдущей части нашего урока мы познакомились с типами таймеров в STM32F1, а также с некоторыми регистрами таймеров, которые мы теперь будем использовать на практике в нашем проекте. Теперь, накопив о таймерах столько знаний, можно перейти и к созданию проекта. Проект создадим из проекта урока 146 с именем LL_BLINK01 и присвоим ему, соответственно, имя LL_TIM2. - [STM Урок 147. LL. Таймеры. Часть 1](https://narodstream.ru/stm-urok-147-ll-tajmery-chast-1/) - Продолжаем знакомство с библиотекой LL (low-layer drivers). На прошлом занятии мы узнали о преимуществах данной библиотеки, поработали с ножками порта, а теперь давайте попробуем поработать с таймерами. С таймерами, вообще-то, мы работаем уже давно и постоянно, но с использованием библиотеки LL мы с ними пока не общались. Что такое таймеры, для чего они нужны и - [STM Урок 21. HAL. ADC. Regular Channel. Trigger](https://narodstream.ru/stm-urok-21-hal-adc-regular-channel-trigger/) - Урок 21 HAL. ADC. Regular Channel. Trigger Проект создаём из ADC_REGULAR, называем его ADC_REGULAR_TRIGGER. Запускаем Cube. Добавим 2 таймер, включив в нем внутреннее тактирование. Включим также PD12 на выход. Затем зайдём в Clock Configuration и посмотрим частоту на этот таймер (стр 67 Ref Manual). Она 21000, поэтому заходим в закладку Configuration и включаем там делитель 20999 и - [STM Урок 20. HAL. ADC. Injected Channel. Interrupt](https://narodstream.ru/stm-urok-20-hal-adc-injected-channel-interrupt/) - Урок 20 HAL. ADC. Injected Channel. Interrupt Сегодня мы продолжим работать с инжекторным каналом АЦП. Только сегодня мы попробуем поработать с прерываниями такого канала, тем самым мы немного автоматизируем процесс, не будем использовать задержки, что придаст нашему проекту большую профессиональность. Проект мы также создадим из предыдущего - из ADC_INJECTED, и назовём его ADC_INJECTED_INT, всего - [ESP32 Урок 9. SPI. FLASH память W25Q. Получение информации из микросхемы](https://narodstream.ru/esp32-urok-9-spi-flash-pamyat-w25q-poluchenie-informacii-iz-mikrosxemy/) - На прошлом уроке мы научились работать с шиной SPI только на передачу данных, а сегодня мы уже попытаемся что-нибудь по данной шине принять от подключаемого устройства. Как нельзя лучше для этой цели подойдёт микросхема FLASH-памяти семейства W25Q. Есть много других вариантов работы с шиной SPI на приём, но с данной микросхемой мы уже работали с - [STM Урок 19. HAL. ADC Injected Channel](https://narodstream.ru/stm-urok-19-hal-adc-injected-channel/) - Урок 19 HAL. ADC Injected Channel Проект создаём из ADC_REGULAR_DMA, называем его ADC_INJECTED. Запускаем Cube. Заходим в Configuration. Отключим там везде DMA. Также отключим прерывания от АЦП, если таковые включены. Они нам пока не нужны. Это тема следующего урока. Настраиваем там вот так Генерируем и запускаем проект. Как всегда - [STM Урок 18. HAL. ADC. Regular Channel. DMA](https://narodstream.ru/stm-urok-18-hal-adc-regular-channel-dma/) - Урок 18 HAL. ADC. Regular Channel. DMA Проект создаём из ADC_REGULAR_INT, называем его ADC_REGULAR_DMA. Запускаем Cube, добавляем в наш ADC1 ещё 3 канала – INT6, INT8, INT8. Заходим в Configuration. Прерывания от ADC можно пока отключить. Заходим по кнопке DMA, там в закладку DMA2 и включим там DMA следующим образом Применяем изменения. Заходим - [Урок 172. CMSIS. STM32F1. I2C. Подключаем внешний EEPROM](https://narodstream.ru/urok-172-cmsis-stm32f1-i2c-podklyuchaem-vneshnij-eeprom/) - Сегодня мы попробуем с помощью библиотеки CMSIS поработать с шиной I2C. В качестве подопытного устройства мы возьмём микросхему EEPROM — AT24C32, которая установлена в модуле с часовой микросхемой DS3231 и также в часовом модуле с микросхемой DS1307. С данной микросхемой мы уже работали, когда изучали программирование шины I2C для контроллеров AVR. Там эта шина называлась - [STM Урок 171. CMSIS. STM32F1. PWM (ШИМ). Мигаем светодиодами плавно](https://narodstream.ru/stm-urok-171-cmsis-stm32f1-pwm-shim-migaem-svetodiodami-plavno/) - Продолжаем работать с CMSIS. Также продолжаем работу с таймерами и в данном занятии мы изучим возможность аппаратной реализации широтно-импульсной модуляции (ШИМ или PWM). Правда, скорее всего мы данную возможность не изучим, так как мы её уже изучили в уроке 149, в котором мы применяли аппаратную реализацию PWM, используя библиотеку LL. Мы изучили все регистры таймеров, - [ESP32 Урок 18. FreeRTOS. Event Groups](https://narodstream.ru/esp32-urok-18-freertos-event-groups/) - На данном занятии мы познакомимся ещё с одним видом межпроцессного взаимодействия и синхронизации потоков - Event Groups (группами событий). Для этого также существуют очереди, семафоры и мьютексы. Но группы событий от них отличаются тем, что во-первых здесь идёт экономия ресурсов, так как за каждое событие отвечает не отдельный объект, а всего лишь один бит, а также - [Урок 174. CMSIS. STM32F1. SPI. Драйвер индикатора MAX7219](https://narodstream.ru/urok-174-cmsis-stm32f1-spi-drajver-indikatora-max7219/) - Сегодня мы попробуем с помощью библиотеки CMSIS поработать с шиной SPI (Serial peripheral interface) в контроллере STM32F1. С данной шиной мы работаем постоянно, но реализация её с помощью функционала библиотеки CMSIS нами ещё не рассматривалась. Поэтому изучать подробно работу шины SPI, её протокол, режимы её работы, мы не будем. Также аппаратная реализация шины SPI в - [Урок 173. CMSIS. STM32F1. I2C. Переходник для LCD 16×2](https://narodstream.ru/urok-173-cmsis-stm32f1-i2c-perexodnik-dlya-lcd-16x2/) - В прошлом уроке, используя багаж наших знаний по аппаратной реализации шины I2C в контроллере STM32F1, мы поработали с данной шиной и на запись и на чтение, подключив к ней микросхему памяти EEPROM AT24C32. При этом мы уже использовали возможности библиотеки CMSIS. Но, думаю, что для более глубокого понимания работы данной шины и её программирования при - [STM Урок 153. HAL. SPI. Соединяем два контроллера. Часть 2](https://narodstream.ru/stm-urok-153-hal-spi-soedinyaem-dva-kontrollera-chast-2/) - В предыдущей части нашего урока мы подключили схему урока, создали и настроили проект для устройства MASTER. Чтобы нам не мучиться с проектом, его мы создадим из проекта для ведущего устройства, только назовём SPI_SLAVE. Откроем проект в Cube MX и отключим для начала ножку PA4, так как управлять мы ею теперь будем по-другому Подключим - [STM Урок 153. HAL. SPI. Соединяем два контроллера. Часть 1](https://narodstream.ru/stm-urok-153-hal-spi-soedinyaem-dva-kontrollera-chast-1/) - По многочисленным просьбам мы на данном уроке попытаемся соединить между собой два контроллера STM32 между собой. Просьбы данные, правда, в большинстве случаев звучали несколько по-другому. Посетители ресурса очень хотят увидеть урок по работе шины SPI в контроллере STM32 в режиме SLAVE. Но, думаю, соединение между собой двух контроллеров по шине SPI и позволит нам проследить - [STM Урок 152. LL. SPI. Драйвер индикатора MAX7219. Часть 2](https://narodstream.ru/stm-urok-152-ll-spi-drajver-indikatora-max7219-chast-2/) - В предыдущей части занятия мы познакомились с аппаратной реализацией шины SPI в контроллере STM32F1 и настроили проект урока. И по нашей славной традиции посмотрим, каким образом происходит у нас инициализация шины SPI. Для этого зайдём в функцию MX_SPI1_Init и посмотрим, что же там происходит. Сначала, как обычно, объявляются структуры, включается тактирование на шины и настраиваются ножки - [STM Урок 152. LL. SPI. Драйвер индикатора MAX7219. Часть 1](https://narodstream.ru/stm-urok-152-ll-spi-drajver-indikatora-max7219-chast-1/) - Продолжая изучать возможности библиотеки LL, на данном уроке мы начнём освоение аппаратной реализации шины SPI (Serial peripheral interface) в контроллере STM32F1. С данной шиной мы работаем постоянно, но реализация её с помощью функционала библиотеки LL нами ещё не рассматривалась. Поэтому изучать подробно работу шины SPI, её протокол, режимы её работы, мы не будем. Подробно работа - [ESP32 Урок 19. Wi-Fi. Режим STA (Станция)](https://narodstream.ru/esp32-urok-19-wi-fi-rezhim-sta-stanciya/) - Ну вот, наконец-то, дошли мы до той темы, которую, я думаю, многие ждали — это приём и передача данных при помощи возможностей ESP32 по беспроводной сети Wi-Fi. С данной темой мы уже работали с применением контроллера ESP8266, причём используя различные протоколы передачи данных модели OSI, поэтому нам будет намного легче. Мы также подробно не будем - [STM Урок 156. LL. DMA. MEM2MEM. Часть 2](https://narodstream.ru/stm-urok-156-ll-dma-mem2mem-chast-2/) - В предыдущей части нашего урока мы познакомились с реализацией передачи данных через DMA в контроллере STM32F1 в режиме MEM2MEM и познакомились с регистрами DMA и со всеми их битами. Схема наша не изменилась, осталась с урока 155 Вернёмся к нашему проекту. Давайте для начала посмотрим, как происходит процесс инициализации DMA и включения режима MEM2MEM. - [STM Урок 156. LL. DMA. MEM2MEM. Часть 1](https://narodstream.ru/stm-urok-156-ll-dma-mem2mem-chast-1/) - На прошлом занятии мы с вами начали плотно изучать DMA в контроллере STM32F1 и на практике, применяя возможности библиотеки HAL, нам удалось скопировать некоторое количество информации из одной области памяти в другую (MEM2MEM). На данном уроке мы продолжим знакомство с DMA и ту же самую процедуру мы проделаем с применением уже возможностей другой библиотеки - - [STM Урок 161. LL. USART. Передача данных. Часть 2](https://narodstream.ru/stm-urok-161-ll-usart-peredacha-dannyx-chast-2/) - В предыдущей части нашего занятия мы познакомились с блок-схемой шины USART в контроллере STM32F1, а также познакомились с регистрами данной шины и с их битами по-отдельности. Думаю, на этой ноте можно уже смело переходить к практической части нашего урока. Работать на данном уроке с шиной USART мы будем пока только на передачу, без всяких прерываний - [STM Урок 161. LL. USART. Передача данных. Часть 1](https://narodstream.ru/stm-urok-161-ll-usart-peredacha-dannyx-chast-1/) - Продолжая изучать возможности библиотеки LL, на данном уроке мы начнём освоение аппаратной реализации шины USART (Universal synchronous asynchronous receiver transmitter) в контроллере STM32F1. С данным интерфейсом мы работаем постоянно, но реализация его с помощью функционала библиотеки LL нами пока не рассматривалась. Поэтому изучать подробно работу шины USART, её протокол, режимы её работы, мы не будем. - [Урок 176. CMSIS. STM32F1. DMA. MEM2MEM](https://narodstream.ru/urok-176-cmsis-stm32f1-dma-mem2mem/) - В данном уроке мы попытаемся поработать с периферией DMA контроллера STM32F1. Мы попробуем скопировать некоторое количество информации из одной области памяти в другую (MEM2MEM). Подобную процедуру мы с вами уже проводили в уроке 155 и уроке 156. Только в данных уроках мы использовали для этого библиотеки HAL и LL. А в данном уроке ту же - [Урок 175. CMSIS. STM32F1. SPI. Соединяем два контроллера](https://narodstream.ru/urok-175-cmsis-stm32f1-spi-soedinyaem-dva-kontrollera/) - На данном уроке мы попытаемся соединить между собой два контроллера STM32 между собой. Подобные уроки у нас уже были, когда мы соединяли два контроллера STM32F1 между собой по шине SPI, но делали мы это с использованием библиотек HAL и LL. Кто не смотрел данные уроки, то обязательно посмотрите. Это урок 153 и урок 154. Теперь - [ESP32 Урок 20. Wi-Fi. STA. UDP Client. Передача данных](https://narodstream.ru/esp32-urok-20-wi-fi-sta-udp-client-peredacha-dannyx/) - Продолжаем тему передачи данных по беспроводной сети. На данном уроке мы попробуем теперь передать какие-то осознанные данные. Для этого мы воспользуемся транспортным протоколом UDP, так как для этого в IDF всё имеется в наличии и нам не потребуется самостоятельно формировать наши пакеты. На данном уроке мы попытаемся сочинить простенький UDP-клиент, который будет передавать в сеть на - [Урок 178. CMSIS. STM32F1. SPI. DMA](https://narodstream.ru/urok-178-cmsis-stm32f1-spi-dma/) - Продолжаем работу с передачей данных по шине SPI между двумя контроллерами STM32F1. И на данном уроке мы объединим наши знания по шине SPI и периферии DMA в контроллере STM32 и попробуем применить технологию DMA при передаче данных по интерфейсу SPI. Хотя мы тем же самым занимались в уроке 159 и уроке 160, но только применяли - [Урок 177. CMSIS. STM32F1. SPI. Interrupt](https://narodstream.ru/urok-177-cmsis-stm32f1-spi-interrupt/) - Продолжаем работу с передачей данных по шине SPI между двумя контроллерами STM32F1. И на данном уроке мы попробуем воспользоваться механизмом прерываний, организованным в периферии SPI в данном контроллере. Такую задачу мы с вами уже выполняли, только использовали мы при этом возможности других библиотек - HAL и LL. Чтобы получить ещё большую гибкость и контроль над - [STM Урок 166. CMSIS. STM32F1. RCC. Часть 2](https://narodstream.ru/stm-urok-166-cmsis-stm32f1-rcc-chast-2/) - В предыдущей части урока мы изучиkb устройство RCC, а также познакомились с его основными регистрами. Сначала напомню то, что схема наша со времён прошлого урока не изменилась Проект мы также сделаем из проекта прошлого урока с именем BLINK01_CMSIS и назовём его CMSIS_RCC. Напомню, как мы делаем проект из другого для Keil без Cube - [STM Урок 166. CMSIS. STM32F1. RCC. Часть 1](https://narodstream.ru/stm-urok-166-cmsis-stm32f1-rcc-chast-1/) - В прошлом занятии мы начали (вернее продолжили) курс по программированию контроллеров STM с использованием библиотеки интерфейсов CMSIS. Нам удалось настроить некоторые ножки портов с целью помигать светодиодами, подключенными к ним, предварительно включив тактирование определённой периферии. Тактированием этим управляет модуль RCC, который мы заставили включить тактирование на два порта ввода вывода и на модуль AFIO. Но, - [STM Урок 48. USB DEVICE AUDIO. Часть 3](https://narodstream.ru/stm-urok-48-usb-device-audio-chast-3/) - Урок 48 Часть 3 USB DEVICE AUDIO Предыдущая часть Программирование МК STM32 Следующий урок В прошлой части нашего урока мы написали ещё несколько функций и подключили их в обработчики команд драйвера звуковой карты. Вставим ещё одну функцию в файл audioplay.c //------------------------------------------------------ uint8_t AudioPlay_SetVolume(uint8_t Volume) { uint8_t ret = AUDIO_OK; /* - [STM Урок 48. USB DEVICE AUDIO. Часть 2](https://narodstream.ru/stm-urok-48-usb-device-audio-chast-2/) - Урок 48 Часть 2 USB DEVICE AUDIO В прошлой части нашего урока мы создали и настроили проект в Cube MX, создали каркас приложения, добавили все макросы и глобальные переменные, которые в процессе написания кода нам потребуются. Также мы начали писать некоторые функции аудио-библиотеки. В файле audioplay.c напишем функции задержки в микросекундах. Данной - [STM Урок 48. USB DEVICE AUDIO. Часть 1](https://narodstream.ru/stm-urok-48-usb-device-audio-chast-1/) - Урок 48 Часть 1 USB DEVICE AUDIO Предыдущий урок Программирование МК STM32 Следующая часть Сегодня мы продолжим изучение нового интерфейса – шины I2S. И работать мы будем также, как и в прошлом уроке по I2S – с микросхемой CS43L22, установленной на плате STM32F4-DISCOVERY. Только в данном занятии мы попытаемся взять цифровой аудиопоток не - [ESP32 Урок 21. Wi-Fi. STA. UDP Client. Приём данных](https://narodstream.ru/esp32-urok-21-wi-fi-sta-udp-client-priyom-dannyx/) - Продолжая тему передачи данных по беспроводной сети посредством протокола UDP, мы теперь попробуем принять данные с сервера. До сих пор мы пока только передавали пакеты с нашего клиента. Поэтому я добавил в мои программки для Android и для Windows ответы на наши пакеты. Программу для Windows я прикрепил внизу страницы, а приложение для Android достаточно - [STM Урок 51. Подключаем магнитометр LIS3MDL. Часть 3](https://narodstream.ru/urok-51-podkljuchaem-magnitometr-lis3mdl-chast-3/) - Урок 51. Часть 3 Магнитометр LIS3MDL В прошлой части нашего урока мы продолжили и закончили писать инициализацию датчика и начали писать код для получения данных с его осей. Начнём теперь вносить изменения в функцию Mag_Read. Для этого будем использовать фрагменты кода из файла lsm303dlhc.c из проекта с занятия по другому магнитометру (lsm303dlhc). - [STM Урок 51. Подключаем магнитометр LIS3MDL. Часть 2](https://narodstream.ru/urok-51-podkljuchaem-magnitometr-lis3mdl-chast-2/) - Урок 51. Часть 2 Магнитометр LIS3MDL В прошлой части нашего урока мы добавили все макросы, которые вносят удобства в чтение и написание кода, начали писать функцию инициализации и проверили код на практике. Продолжим инициализацию датчика. Переименуем функцию GyroInit в MagInit, а функцию AccelInit удалим со всем содержимым, чтобы не мешалась //-------------------------------------------- void - [STM Урок 51. Подключаем магнитометр LIS3MDL. Часть 1](https://narodstream.ru/urok-51-podkljuchaem-magnitometr-lis3mdl-chast-1/) - Урок 51. Часть 1 Магнитометр LIS3MDL Сегодня мы продолжаем работу с датчиками, которые измеряют магнитную индукцию и называются магнитометрами. Мы рассматриваем и изучаем датчик-магнитометр, установленный на плате расширения X-NUCLEO-IKS01A1, предназначенной для работы с отладочной платой Nucleo. Мы будем подключать данную оценочную плату к плате Nucleo STM32F401RE. Выполнен данный датчик также с использованием - [STM Урок 57. Wi-Fi. SPWF01SA11. Команды. Часть 3](https://narodstream.ru/stm-urok-57-wi-fi-spwf01sa11-komandy-chast-3/) - Урок 57 Часть 3 Wi-Fi. SPWF01SA11. Команды В прошлой части занятия мы закончили писать все функции по работе с модулем, и попытались отправить в него пока единственную команду. Теперь давайте попробуем вытащить из модуля ещё какую-нибудь информацию. Введём команду "AT+S.HELP", которая выведет нам список AT-команд (нажмите на картинку для увеличения размера) - [STM Урок 57. Wi-Fi. SPWF01SA11. Команды. Часть 2](https://narodstream.ru/stm-urok-57-wi-fi-spwf01sa11-komandy-chast-2/) - Урок 57 Часть 2 Wi-Fi. SPWF01SA11. Команды В прошлой части занятия мы познакомились с модулем и платой, создали проект и настроили его. Теперь мы перейдём в файл SPWF01SA11.c и добавим туда пару функций для выхода из спящего режима и аппаратной перезагрузки модуля //-------------------------------------------- void wifi_wakeup(wifi_bool wakeup) { //WiFi_Status_t status = WiFi_MODULE_SUCCESS; - [STM Урок 57. Wi-Fi. SPWF01SA11. Команды. Часть 1](https://narodstream.ru/stm-urok-57-wi-fi-spwf01sa11-komandy-chast-1/) - Урок 57 Часть 1 Wi-Fi. SPWF01SA11. Команды Сегодня мы начинаем интересную тему. Это беспроводные технологии для передачи данных, в частности Wi-Fi. Для чего нужна данная технология, я думаю, знают все, так как она очень популярна у всех пользователей компьютеров и интернета. Поэтому и нам, программистам МК, данную тему обойти стороной никак не - [STM Урок 180. HAL. Дисплей TFT 240×320. SPI. DMA](https://narodstream.ru/stm-urok-180-displej-tft-240x320-spi-dma/) - Продолжаем работать с дисплеем TFT разрешением 240x320, который мы подключили в прошлом уроке к контроллеру STM32F4 по шине SPI. Сегодня мы попробуем при передаче данных в дисплей применить технологию DMA, используя одноимённую периферию контроллера STM32F4. С DMA мы также постоянно работаем, знаем отлично, как он организован в контроллере STM32F1. STM32F4 не сильно в этом плане - [STM Урок 179. HAL. Дисплей TFT 240×320. SPI. Часть 2](https://narodstream.ru/stm-urok-179-displej-tft-240x320-spi-chast-2/) - В предыдущей части урока мы подключили дисплей к плате, создали проект, написали инициализацию дисплея, некоторые служебные функции и первые тесты, проверив дисплей затем на практике. Для следующего теста нужны будут маленькие задержки. Добавим функцию задержки в микросекундах /* USER CODE BEGIN 0 */ __STATIC_INLINE void DelayMicro(uint32_t __IO micros) { micros *=(SystemCoreClock/1000000)/5; while(micros--); } - [STM Урок 179. HAL. Дисплей TFT 240×320. SPI. Часть 1](https://narodstream.ru/stm-urok-179-displej-tft-240x320-spi-chast-1/) - На данном уроке мы попробуем к контроллеру STM32 подключить дисплей TFT разрешением 240x320. С подобным дисплеем мы уже работали в далёком уроке 37, только это был модуль, в котором подключение дисплея к контроллеру происходило по 8-битной шине. Тогда мы использовали для этого FSMC контроллера STM32. Это такой удобный контроллер памяти. А теперь мы попытаемся подключить - [ESP32 Урок 22. Wi-Fi. Режим STA (Станция). Smart](https://narodstream.ru/esp32-urok-22-wi-fi-rezhim-sta-stanciya-smart/) - В уроке 19 мы написали проект, который обеспечивает соединение с точкой доступа. То есть мы настроили наш модуль для работы по беспроводной сети в режиме станции. Только при условии исчезновения соединения с точкой доступа вследствие временного отключения последней или из-за каких-то других причин нам пришлось столкнуться с рядом трудностей, хотя с помощью неких костылей они - [STM Урок 182. CMSIS. STM32F1. USART. Приём данных](https://narodstream.ru/stm-urok-182-cmsis-stm32f1-usart-priyom-dannyx/) - Продолжая освоение возможностей библиотеки CMSIS, немного усложним задачу по работе с шиной USART контроллера STM32F1. На данном уроке мы помимо передачи данных из контроллера в ПК попробуем также и принять данные из ПК. Причём, прерываниями и DMA мы пока также пользоваться не будем. Будем прорабатывать шину постепенно. Так как всю аппаратную организацию шины USART мы - [STM Урок 181. CMSIS. STM32F1. USART. Передача данных](https://narodstream.ru/stm-urok-181-cmsis-stm32f1-usart-peredacha-dannyx/) - Продолжая изучать возможности библиотеки CMSIS, на данном уроке мы попытаемся поработать с помощью данной библиотеки с аппаратной реализацией шины USART (Universal synchronous asynchronous receiver transmitter) в контроллере STM32F1. В уроке 161, работая с модулем UASART с использованием библиотеки LL, мы плотно познакомились с его аппаратной организацией в нашем контроллере, поэтому сегодня нам будет намного легче - [STM Урок 17. HAL. ADC. Regular Channel. Interrupt](https://narodstream.ru/stm-urok-17-hal-adc-regular-channel-interrupt/) - Урок 17 HAL. ADC. Regular Channel. Interrupt Проект создаём из ADC_REGULAR, называем его ADC_REGULAR_INT. Запускаем Cube, проверим на всякий случай прерывания, что они включены. Генерируем и запускаем наш проект. Добавим также в него lcd.c. Соберем его. Там же на 108 странице даташита HAL_User_Manual можно посмотреть, как пишется код для АЦП с использованием прерываний. Добавим - [STM Урок 16. HAL. ADC. Regular Channel](https://narodstream.ru/stm-urok-16-hal-adc-regular-channel/) - Урок 16 HAL. ADC. Regular Channel Сегодня мы начинаем серию уроков по программированию аналого-цифрового преобразователя, или, как коротко принято говорить - АЦП. Я думаю все, кто занимается программированием микроконтроллеров знают не понаслышке, что такое АЦП и чем он занимается. А если кто не знает, то посмотрите мои уроки по программированию котроллеров AVR - там - [ESP32 Урок 8. SPI. Драйвер индикатора MAX7219](https://narodstream.ru/esp32-urok-8-spi-drajver-indikatora-max7219/) - На данном занятии мы начнем работу с интерфейсом SPI, который поддерживается аппаратно в микроконтроллере ESP32. С данным интерфейсом мы очень неплохо знакомы, так как мы его постоянно используем при написании кода для других контроллеров, поэтому, дабы не тратить драгоценное время, мы не будем останавливаться на изучении передачи данных по шине и разновидностях режимов этой самой передачи. Как - [STM Урок 15. HAL. USART. DMA](https://narodstream.ru/stm-urok-15-hal-usart-dma/) - STM32. Программирование шины USART с использованием технологии DMA на передачу и прием - [STM Урок 14. HAL. USART. Прием данных](https://narodstream.ru/stm-urok-14-hal-usart-priem-dannyx/) - Урок 14 HAL. USART. Прием данных На прошлом занятии мы разобрались с технологией передачи данных по интерфейсу USART, попробовали это на практике. Во-первых, нужно обрабатывать прерывание от USART, вы ведь не угадаем, когда именно нам принимать. Во-вторых, где-то и как-то это надо отображать. Вот тут-то на помощь нам приходит наш добрый и - [STM Урок 184. CMSIS. STM32F1. USART. DMA](https://narodstream.ru/stm-urok-184-cmsis-stm32f1-usart-dma/) - Продолжаем нашу работу с шиной USART контроллера STM32F1 с применением библиотеки CMSIS. В данном уроке мы поработаем с возможностью использования периферии DMA при передаче данных по интерфейсу USART. С применением DMA в работе с модулем USART мы уже знакомы из урока 15 и урока 164. Правда, тогда мы использовали при этом библиотеки HAL и LL, - [STM Урок 183. CMSIS. STM32F1. USART. Interrupt](https://narodstream.ru/stm-urok-183-cmsis-stm32f1-usart-interrupt/) - В данном занятии мы поработаем с механизмом обработки прерываний от шины USART. С такими прерываниями мы с вами знакомы давно. Мы пользовались ими с применением библиотеки HAL в уроке 14, с применением библиотеки LL в уроке 163. Ко всему этому, зная всю аппаратную организацию шины USART в контроллере STM32F1, нам будет не сложно проделать данную - [ESP32 Урок 23. Wi-Fi. STA. UDP Server](https://narodstream.ru/esp32-urok-23-wi-fi-sta-udp-server/) - Продолжая тему передачи данных по беспроводной сети посредством протокола UDP, на данном уроке мы попробуем создать простой сервер, который будет слушать постоянно какой-нибудь порт, и если вдруг получит на него пакет с числом, то должен будет ответить отправителю подобным пакетом с числом, составляющим разность числа 32767 с данным числом. То есть это та же задача, - [STM Урок 186. LL. STM32F1. ADC. Regular Once. Interrupt](https://narodstream.ru/stm-urok-186-ll-stm32f1-adc-regular-once-interrupt/) - Продолжаем работать с АЦП (ADC) контроллера STM32F1 с использованием библиотеки LL. Также работать мы пока будем с однократным преобразованием и с регулярным каналом, только отследить окончание процесса преобразования мы попробуем при помощи механизма прерываний от АЦП. Думаю, что сделать это будет не сложно, в чём нам поможет библиотека LL. Схему мы используем ту же самую, - [STM Урок 185. LL. STM32F1. ADC. Regular Once. Часть 2](https://narodstream.ru/stm-urok-185-ll-stm32f1-adc-regular-once-chast-2/) - В предыдущей части нашего урока мы познакомились с аппаратной организацией АЦП в контроллере, а также изучили его регистры и их биты. Теперь, думаю, можно приступить к проекту, который мы, чтобы не мучиться с настройкой дисплея (а дисплей мы возьмём символьный разрешением 4 x 20 символов), сделаем из проекта урока 151 с именем LL_I2C_LCD1602 и назовём - [STM Урок 185. LL. STM32F1. ADC. Regular Once. Часть 1](https://narodstream.ru/stm-urok-185-ll-stm32f1-adc-regular-once-chast-1/) - Давно мы не занимались с такой периферией микроконтроллера, как АЦП (Аналого-цифровой преобразователь) или ADC (Analog-to-digital converter). Думаю, сейчас самое время. Тем более, что, изучая возможности библиотеки LL, мы незаслуженно пропустили столь важную часть архитектуры контроллера. С данной периферией мы раньше работали и исследовали очень немало её возможностей. Но их, во-первых, гораздо больше, чем мы проходили - [STM Урок 187. LL. STM32F1. ADC. Regular Continuous. Interrupt](https://narodstream.ru/stm-urok-187-ll-stm32f1-adc-regular-continuous-interrupt/) - Продолжаем работать с АЦП (ADC) контроллера STM32F1 с использованием библиотеки LL. Также работать мы пока будем с регулярным каналом и отслеживать окончание процесса преобразования мы также будем при помощи механизма прерываний от АЦП, только в данном уроке мы попробуем уже поработать не с однократным преобразованием, которое нужно каждый раз в каждой итерации заново запускать, а - [STM Урок 188. LL. STM32F1. ADC. Regular Once. Запуск по таймеру](https://narodstream.ru/stm-urok-188-ll-stm32f1-adc-regular-once-zapusk-po-tajmeru/) - Продолжаем работать с АЦП (ADC) контроллера STM32F1 с использованием библиотеки LL. Также работать мы пока будем с регулярным каналом. Запускать мы будем также наш АЦП на данном уроке автоматически, хотя вернёмся мы в режим однократного преобразования. Как же такое возможно и для чего это нужно? В режиме кольцевого запуска (continuous) АЦП не может запускаться реже - [ESP32 Урок 24. Wi-Fi. STA. TCP Client. Соединение с сервером](https://narodstream.ru/esp32-urok-24-wi-fi-sta-tcp-client-soedinenie-s-serverom/) - Продолжаем работу с беспроводной сетью в режиме станции (STA) контроллера ESP32. И на данном уроке мы уже начнём работать с протоколом TCP (Transmission Control Protocol). Хотя, мы уже давно с данным протоколом работаем, изучили, можно сказать, его вдоль и поперёк. Мы знаем, что по сравнению с протоколом UDP данный протокол обладает рядом преимуществ — это - [STM Урок 189. LL. STM32F1. ADC. Regular Once. DMA](https://narodstream.ru/stm-urok-189-ll-stm32f1-adc-regular-once-dma/) - Продолжаем работать с АЦП (ADC) контроллера STM32F1 с использованием библиотеки LL. Также работать мы пока будем с регулярным каналом. Только теперь мы, используя регулярный канал с однократным преобразованием, попробуем привлечь к процедуре опроса АЦП и конверсии периферию DMA, что позволит нам делать очень интересные вещи. Также теперь мы будем использовать режим SCAN, который сканирует сразу - [STM Урок 190. LL. STM32F1. ADC. Regular Continuous. DMA](https://narodstream.ru/stm-urok-190-ll-stm32f1-adc-regular-continuous-dma/) - Продолжаем работать с АЦП (ADC) контроллера STM32F1 с использованием библиотеки LL. Также работать мы пока будем с регулярными каналами с использованием периферии DMA, только в данном уроке мы попробуем уже поработать не с однократным преобразованием, которое нужно каждый раз в каждой итерации заново запускать, а применим автоматический механизм запуска при помощи режима Continuous. С данным - [STM Урок 61. Модуль LCD 16×2. Работаем с кнопками. Часть 3](https://narodstream.ru/stm-urok-61-modul-lcd-16x2-rabotaem-s-knopkami-chast-3/) - Урок 61 Модуль LCD 16×2. Работаем с кнопками Часть 3 В прошлой части занятия мы написали практически все служебные функции для отслеживания изменения состояний кнопок. Теперь будем писать код для того, чтобы данными функциями воспользоваться. Но прежде нам нужно закончить ещё одну функцию. Вернёмся в button.c и напишем тело нашего обработчика void - [STM Урок 61. Модуль LCD 16×2. Работаем с кнопками. Часть 2](https://narodstream.ru/stm-urok-61-modul-lcd-16x2-rabotaem-s-knopkami-chast-2/) - Урок 61 Модуль LCD 16×2. Работаем с кнопками Часть 2 Продолжаем работать с модулем LCD с кнопками и регулятором контрастности. В прошлой части занятия мы создали проект, настроили его, добавили необходимые переменные и уже написали одну функцию для определениясостояния кнопок. Писать нам ещё много, поэтому продолжим. Теперь напишем функцию - [STM Урок 61. Модуль LCD 16×2. Работаем с кнопками. Часть 1](https://narodstream.ru/stm-urok-61-modul-lcd-16x2-rabotaem-s-knopkami-chast-1/) - Урок 61 Модуль LCD 16×2. Работаем с кнопками Часть 1 Продолжаем работать с модулем LCD с кнопками и регулятором контрастности, с которым мы познакомились и уже написали некоторый код для определения нажатых кнопок в уроке 59. Сегодня же мы постараемся улучшить данный алгоритм работы и написать код реакции на события изменения - [STM Урок 63. Модуль LCD 16×2. МЕНЮ. Часть 3](https://narodstream.ru/stm-urok-63-modul-lcd-16x2-menyu-chast-3/) - Урок 63 Часть 3 Модуль LCD 16×2. МЕНЮ В предыдущей части урока мы уже начали работать с реакцией на пункты нашего меню и написали код в один из кейсов функции пунктов главного меню Добавим код в следующие четыре подобных кейса Соберём проект, прошьём контроллер и посмотрим результат. Все пункты нормально переключаются и мигают, ну - [STM Урок 63. Модуль LCD 16×2. МЕНЮ. Часть 2](https://narodstream.ru/stm-urok-63-modul-lcd-16x2-menyu-chast-2/) - Урок 63 Часть 2 Модуль LCD 16×2. МЕНЮ В предыдущей части нашего занятия мы создали проект, настроили его, создали функцию управления программой и заполнили в ней один кейс. Что ж, продолжим. Подключим ещё одну глобальную переменную в menu.c extern uint16_t menutim_cnt;//счетчик для мигания пунктов extern uint8_t button_state[5]; Добавим код - [STM Урок 63. Модуль LCD 16×2. МЕНЮ. Часть 1](https://narodstream.ru/stm-urok-63-modul-lcd-16x2-menyu-chast-1/) - Урок 63 Часть 1 Модуль LCD 16×2. МЕНЮ На последнем занятии по модулю LCD с кнопками мы проделали огромную работу, научившись отслеживать не только статус нажатия или отжатия кнопок, но и тот момент, когда происходит изменение этого статуса и реализовали это на нашем дисплее с кнопками. Сегодня мы постараемся, используя опыт прошлых занятий, как-то это всё - [ESP32 Урок 25. Wi-Fi. STA. TCP Client. Приём и передача пакетов](https://narodstream.ru/esp32-urok-25-wi-fi-sta-tcp-client-priyom-i-peredacha-paketov/) - Продолжаем работу с протоколом TCP (Transmission Control Protocol). И на данном уроке мы уже попробуем не просто соединиться с сервером и передать тестовый пакет, но и также, передавая пакеты, мы попробуем такие пакеты ещё и принять. Мы также этим раньше занимались с использованием других контроллеров, поэтому нам будет гораздо легче справиться с нашей задачей. Схема - [STM Урок 64. HAL. LTDC. Часть 3](https://narodstream.ru/stm-urok-64-hal-ltdc-chast-3/) - Урок 64 HAL. LTDC Часть 3 В прошлой части нашего занятия мы настроили проект и написали тест заливки экрана случайными цветами. Теперь напишем несколько функций в библиотеку для вывода различных примитивов. Начнём с той же заливки, только заливать мы будем ограниченную прямоугольную область. Создадим функцию в ltdc.c и создадим для неё прототип //------------------------------------------------- void TFT_FillRectangle(uint16_t - [STM Урок 64. HAL. LTDC. Часть 2](https://narodstream.ru/stm-urok-64-hal-ltdc-chast-2/) - Урок 64 HAL. LTDC Часть 2 В прошлой части нашего занятия мы познакомились со схемой подключения дисплея, создали полностью новый проект в MS Cube, настроили его и сгенерирволали проект для Keil. Откроем наш проект, настроим программатор на авторезет и подключим ещё два файла для будущей библиотеки ltdc.c и ltdc.h. Соберём проект и подключим файл ltdc.h в файлах - [STM Урок 64. HAL. LTDC. Часть 1](https://narodstream.ru/stm-urok-64-hal-ltdc-chast-1/) - Урок 64 HAL. LTDC Часть 1 Сегодня мы попробуем поработать непосредственно с интерфейсом LTDC. Это, как мы уже знаем из нашего занятия по LCD, который мы программировали в уроке 58, параллельный интерфейс для управления жидкокристаллическим дисплеем. В сегодняшнем занятии мы также будем работать с тем же дисплеем, который находится на плате STM32F746G-DISCO. Только - [STM Урок 94. DS18B20. Подключаем несколько датчиков на провод. Часть 3](https://narodstream.ru/stm-urok-94-ds18b20-podklyuchaem-neskolko-datchikov-na-provod-chast-3/) - В предыдущей части урока мы написали полностью функцию поиска идентификаторов датчиков и считали уникальные коды со всех датчиков температуры. Перейдём в функцию main() файла main.c и добавим локальную переменную для счётчика char c; uint8_t i; Затем после вызова функции инициализации покажем наши результаты в терминальной программе HAL_UART_Transmit(&huart1,(uint8_t*)str1,strlen(str1),0x1000); sprintf(str1,"Dev count: %d\r\n", Dev_Cnt); HAL_UART_Transmit(&huart1,(uint8_t*)str1,strlen(str1),0x1000); for(i=1;i - [STM Урок 94. DS18B20. Подключаем несколько датчиков на провод. Часть 2](https://narodstream.ru/stm-urok-94-ds18b20-podklyuchaem-neskolko-datchikov-na-provod-chast-2/) - В предыдущей части урока мы изучили, как надо задействовать команду Search ROM устройств 1-WIRE, чтобы считывать идентификационные коды нескольких устройств на одной шине, создали и настроили проект. Перейдём в функцию инициализации ds18b20_init, немного изменив там код. Пока перенесём сброс устройств в условие uint8_t ds18b20_init(uint8_t mode) { if(mode==SKIP_ROM) { if(ds18b20_Reset()) return 1; - [STM Урок 94. DS18B20. Подключаем несколько датчиков на провод. Часть 1](https://narodstream.ru/stm-urok-94-ds18b20-podklyuchaem-neskolko-datchikov-na-provod-chast-1/) - Продолжаем работу с датчиком температуры DS18B20, который подключается посредством однопроводной шины 1-WIRE. Вернее не с датчиком, а с несколькими датчиками, подключенными на один провод. А точнее не с несколькими, а с двумя, потому что больше у меня нет. Данный урок был очень востребован, и, как я и обещал в занятии по данному датчику, он не - [STM Урок 69. HAL. LTDC. DMA2D. Часть 3](https://narodstream.ru/stm-urok-69-hal-ltdc-dma2d-chast-3/) - Урок 69 Часть 3 HAL. LTDC. DMA2D В предыдущей части нашего занятия мы переписали код некоторых наших функций по выводу различной информации на дисплей с использованием функционала видеоускорителя DMA2D и проверили это в тестах. Ну и напоследок самое интересное - смешивание. А раз интересное - значит и сложное. Вернёмся в - [STM Урок 69. HAL. LTDC. DMA2D. Часть 2](https://narodstream.ru/stm-urok-69-hal-ltdc-dma2d-chast-2/) - Урок 69 Часть 2 HAL. LTDC. DMA2D В предыдущей части нашего занятия мы сгенерировали и настроили проект, добавили необходимые переменные, а также произвели их начальную инициализацию. Немного исправим функцию TFT_FillScreen, которая заливает полностью экран одним цветом. Ну немного, это мягко сказано, в принципе мы можем скопировать с прежнего кода только некоторые значения - [STM Урок 69. HAL. LTDC. DMA2D. Часть 1](https://narodstream.ru/stm-urok-69-hal-ltdc-dma2d-chast-1/) - Урок 69 Часть 1 HAL. LTDC. DMA2D Продолжаем изучать интерфейс LTDC. Сегодня мы попробуем восполmзоваться графическим ускорителем Chrom-Art, встроенным в контроллер. Данный ускоритель также называют периферией DMA2D, так как основой его является технология DMA. В принципе, мы уже им пользовались и не раз, сами того не подозревая, когда подключали библиотеку BSP - [ESP32 Урок 26. Wi-Fi. STA. TCP Server](https://narodstream.ru/esp32-urok-26-wi-fi-sta-tcp-server/) - Продолжаем работу с протоколом TCP (Transmission Control Protocol). И на данном уроке мы уже попытаемся создать простенький TCP сервер, который позволит нам обрабатывать пришедшие пакеты от клиентов, а также отвечать на них. Напомню также, что мы также этим раньше подобные задачи решали с использованием других контроллеров, поэтому нам будет гораздо легче справиться с нашей задачей. - [STM Урок 73. HAL. LTDC. EmWin. Подключение библиотеки. Часть 3](https://narodstream.ru/stm-urok-73-hal-ltdc-emwin-podklyuchenie-biblioteki-chast-3/) - Урок 73 Часть 3 HAL. LTDC. EmWin. Подключение библиотеки В предыдущей части занятия мы произвели конфигурирование ряда библиотечных настроек, а также добавили некоторые функции для работы библиотеки emWin с дисплеем. Добавим в конце файла ещё одну функцию-обработчик - HAL_LTDC_LineEvenCallback, которая вызывается в случае, когда происходит прерывание от линии LTDC, сигнализирующее о конце кадра. Мы - [STM Урок 73. HAL. LTDC. EmWin. Подключение библиотеки. Часть 2](https://narodstream.ru/stm-urok-73-hal-ltdc-emwin-podklyuchenie-biblioteki-chast-2/) - Урок 73 Часть 2 HAL. LTDC. EmWin. Подключение библиотеки В предыдущей части занятия мы настроили проект и подключили файлы библиотеки. Теперь зайдём в файл GUIConf.c и исправим там количество памяти #define GUI_NUMBYTES (1024*150) Перейдём теперь в файл конфигурации LCDConf.c и подключим туда main.h #include "GUI.h" #include "GUIDRV_Lin.h" #include "main.h" Двигаемся - [STM Урок 73. HAL. LTDC. EmWin. Подключение библиотеки. Часть 1](https://narodstream.ru/stm-urok-73-hal-ltdc-emwin-podklyuchenie-biblioteki-chast-1/) - Урок 73 Часть 1 HAL. LTDC. EmWin. Подключение библиотеки Ну вот и пришла та заветная пора, когда мы уже как следует изучили подключение и работу интерфейса LTDC, а также панели Touch Screen. И теперь мы можем на нашем дисплее и на нашей плате STM32F746-DISCOVERY попробовать что-нибудь посерьёзнее. Ну и, соответственно, выбор - [STM Урок 92. Датчик температуры DS18B20. Часть 3](https://narodstream.ru/stm-urok-92-datchik-temperatury-ds18b20-chast-3/) - Урок 92 Часть 3 Датчик температуры DS18B20 В предыдущей части урока мы познакомились с организацией памяти датчика, а также написали ещё несколько нужных функций. Следующая функция, которая нам потребуется - это функция считывания памяти, нам же надо узнать температуру. //---------------------------------------------------------- void ds18b20_ReadStratcpad(uint8_t mode, uint8_t *Data, uint8_t DevNum) { uint8_t i; - [STM Урок 92. Датчик температуры DS18B20. Часть 2](https://narodstream.ru/stm-urok-92-datchik-temperatury-ds18b20-chast-2/) - Урок 92 Часть 2 Датчик температуры DS18B20 В предыдущей части урока мы познакомились с датчиком, создали и настроили проект и начали писать функцию инициализации термодатчика. Начнём код с функции чтения бита. Писать её мы будем сразу же после тела функции задержки. Судя по картинке из документации, после притягивания шины к земле мы ждём минимум одну - [STM Урок 92. Датчик температуры DS18B20. Часть 1](https://narodstream.ru/stm-urok-92-datchik-temperatury-ds18b20-chast-1/) - Урок 92 Часть 1 Датчик температуры DS18B20 Сегодня мы рассмотрим работу с датчиком температуры DS18B20, который не смотря на свою кажущуюся на первый взгляд простоту, обрёл очень широкое расспространение благодаря своим характеристикам. К положительным характеристикам данного датчика следует отнести его низкую энергопотребляемость, простоту конструкции благодаря наличию в своем корпусе TO-92 всего - [STM Урок 191. LL. STM32F1. ADC. Regular Once. DMA. Запуск по таймеру](https://narodstream.ru/stm-urok-191-ll-stm32f1-adc-regular-once-dma-zapusk-po-tajmeru/) - Продолжаем работать с АЦП (ADC) контроллера STM32F1 с использованием библиотеки LL. Также работать мы пока будем с регулярными каналами с использованием периферии DMA, только в данном уроке мы также будем запускать АЦП автоматически, но уже не при помощи использования режима Continuous, а по таймеру. С запуском АЦП по событию таймера мы уже знакомы из урока - [ESP32 Урок 27. Wi-Fi. STA. Простой HTTP Server](https://narodstream.ru/esp32-urok-27-wi-fi-sta-prostoj-http-server/) - Продолжаем работу с протоколами модели OSI и на данном уроке мы попытаемся создать простой сервер HTTP, который позволит нам принять запрос документа от клиента, обработать его и в ответ направить клиенту нужную информацию. Также мы раньше подобные задачи решали с использованием других контроллеров, в том числе и родственного ESP8266, поэтому думаю, что с данной задачей - [STM Урок 192. LL. STM32F1. ADC. Injected Once](https://narodstream.ru/stm-urok-192-ll-stm32f1-adc-injected-once/) - Продолжаем работать с АЦП (ADC) контроллера STM32F1 с использованием библиотеки LL. Также работать мы пока будем с однократным преобразованием, но уже использовать мы будем не регулярные каналы, а инжектированые. Про данную группу я кратко говорил в предыдущих уроках, также мы её использовали давно на другом контроллере в уроке 19 и в уроке 20. Тем не - [STM Урок 193. LL. STM32F1. ADC. Injected Once. Interrupt](https://narodstream.ru/stm-urok-193-ll-stm32f1-adc-injected-once-interrupt/) - Продолжаем работать с АЦП (ADC) контроллера STM32F1 с использованием библиотеки LL. Также работать мы пока будем с однократным преобразованием и с инжектированным каналом, только отслеживать окончание процесса преобразования мы будем при помощи механизма прерываний от АЦП. В уроке 186 мы уже работали с прерываниями от АЦП, правда работали мы тогда с регулярным каналом, но, думаю, - [STM Урок 96. LAN8720. LWIP. TCP Client. Часть 3](https://narodstream.ru/stm-urok-96-lan8720-lwip-tcp-client-chast-3/) - В предыдущей части урока мы создали и настроили проект, написали несколько функций и попробовали на практике соединиться с сервером TCP. Теперь надо как-то разъединиться, а мы ещё не писали код. В командной строке с netcat применим комбинацию клавиш Ctrl+C и сервер разорвёт соединение с клиентом Давайте попробуем разъединиться с нашим сервером. Для этого - [STM Урок 96. LAN8720. LWIP. TCP Client. Часть 2](https://narodstream.ru/stm-urok-96-lan8720-lwip-tcp-client-chast-2/) - В предыдущей части урока мы познакомились с микросхемой LAN8720, с межканальными интерфейсами и со стеком протоколов LWIP. Ну, что ж. Давайте наконец-то перейдём к нашему проекту. Наша задача - создать клиент TCP, который будет уметь по своей инициативе соединяться и разъединяться с сервером TCP, а также наша программа должна уметь принимать и видеть пришедшие данные в - [STM Урок 96. LAN8720. LWIP. TCP Client. Часть 1](https://narodstream.ru/stm-urok-96-lan8720-lwip-tcp-client-chast-1/) - Мы уже изучили плотненько две микросхемы, предназначенные для передачи данных по интерфейсу LAN: это ENC28J60 и W5500. Это микросхемы от двух разных производителей. Первая включает в себя два уровня - канальный и физический, а вторая - ко всему этому ещё также сетевой и транспортный, то есть является своего рода воплощением в себе на аппаратном уровне - [ESP32 Урок 28. Wi-Fi. STA. HTTP Server IDF](https://narodstream.ru/esp32-urok-28-wi-fi-sta-http-server-idf/) - Продолжаем работу с нашим сервером HTTP и на данном уроке для ответа клиенту мы будем использовать функционал библиотеки IDF. Благодаря данной библиотеке нам не придётся писать код для многих рутинных процессов, присущих протоколу HTTP. Схема наша, как и в прошлом занятии, будет состоять только из отладочной платы с контроллером ESP32, подключенной к USB-порту компьютера Проект мы - [C Урок 8. Условные операторы if, else, else if](https://narodstream.ru/c-urok-8-uslovnye-operatory-if-else-else-if/) - На данном уроке мы познакомимся с условными операторами. Иногда их называют «операторами ветвлений». Данные операторы существуют для того, чтобы мы могли заставить нашу программу выполнять определённые участки кода только при определённых условиях. У нас было что-то похожее при применении цикла, но в случае использования условных операторов при соблюдении условия код будет выполняться только один раз. - [STM Урок 113. NRF24L01. Несколько передатчиков. Часть 3](https://narodstream.ru/stm-urok-113-nrf24l01-neskolko-peredatchikov-chast-3/) - В предыдущей части урока мы подготовили проекты для двух передатчиков, также в проект приёмника добавили возможность приёма пакетов от двух передатчиков и отображения их в разных строках дисплея и проверили наш код на практике. Теперь займёмся третьим передатчиком. Схема для него будет такая же точно, как и для второго. Подключим теперь третий передатчик к ПК, - [STM Урок 113. NRF24L01. Несколько передатчиков. Часть 2](https://narodstream.ru/stm-urok-113-nrf24l01-neskolko-peredatchikov-chast-2/) - В предыдущей части урока мы подключили символьный LCD-дисплей к плате приёмника, настроили для него проект, также немного подправили наши библиотеки. Передатчик мы также используем пока только один, только для него мы заведём новый проект, сделанный из проекта урока 105 NRF24_TX и назовём его NRF24_TX_PIPE0. Приёмник от ПК отключим, запитаем его отдельно, подключим схему передатчика вместе с - [STM Урок 113. NRF24L01. Несколько передатчиков. Часть 1](https://narodstream.ru/stm-urok-113-nrf24l01-neskolko-peredatchikov-chast-1/) - Продолжим работу с интересным беспроводным приёмо-передатчиком NRF24L01. И сегодня, продолжая развивать нашу тему программирования передачи данных по беспроводным каналам, попытаемся на плате, выступающей в роли приёмника, принять пакеты одновременно с трёх модулей NRF. У меня это получилось, и поэтому хочу незамедлительно этим поделиться и с вами. Во-первых, чтобы наглядно проанализировать приём пакетов на приёмном устройстве, - [STM Урок 119. WS2812B. Лента на умных светодиодах RGB. Часть 3](https://narodstream.ru/stm-urok-119-ws2812b-lenta-na-umnyx-svetodiodax-rgb-chast-3/) - В предыдущей части нашего урока мы создали проект, изучили работу таймера в режиме PWM с использованием DMA, а также научились зажигать определённые светодиоды различными цветами. Также мы написали код, который нам позволил увидеть свечение всех светодиодов различными цветами. Только это была картина статичная. Теперь давайте напишем какие-нибудь динамические тесты. Первый тест у нас будет - - [STM Урок 119. WS2812B. Лента на умных светодиодах RGB. Часть 2](https://narodstream.ru/stm-urok-119-ws2812b-lenta-na-umnyx-svetodiodax-rgb-chast-2/) - В предыдущей части нашего урока мы познакомились поближе с умными светодиодами RGB WS2812B, а также приготовили схему для практического закрепления материала. Думаю, хватит нам на сегодняшний день теории, пора плавно переходить к проекту. Проект мы создадим новый. Для этого запустим проектогенератов Cube MX и выберем наш контроллер Подключим кварцевый резонатор и отладчик - [STM Урок 119. WS2812B. Лента на умных светодиодах RGB. Часть 1](https://narodstream.ru/stm-urok-119-ws2812b-lenta-na-umnyx-svetodiodax-rgb-chast-1/) - На данном занятии мы попробуем поработать со светодиодами RGB, в которые встроен чип для управления их свечением. Таким светодиодом является WS2712B от компании WORLDSEMI. Чтобы понять, что из себя представляет данный светодиод, посмотрим его предшественника - WS2811. Это была просто микросхема, к которой подключался RGB-светодиод. Делалось это, например, вот таким образом Это светодиодная гирлянда, - [STM Урок 13. HAL. USART. Передача данных](https://narodstream.ru/stm-urok-13-hal-usart-peredacha-dannyx/) - Сегодня я расскажу вам, что такое USART и как им пользоваться в контроллерах STM32. USART - это такой интерфейс передачи данных, который происходит по двум проводам между двумя устройствами, при котором передача и прием данных происходит по двум раздельным проводам. Причем контакт передачи данных одного устройсва соединяется с контактом приёма данных другого и наоборот. Подробно - [ESP32 Урок 7. I2C. Переходник для LCD 20×4](https://narodstream.ru/esp32-urok-7-i2c-perexodnik-dlya-lcd-20x4/) - Продолжаем тему поддержки аппаратного I2C в контроллере ESP32 и сегодня мы немного закрепим знания по данной теме, написав небольшую программу по работе с символьным дисплеем разрешением в 4 строки по 20 символов, подключенному по шине I2C к нашему контроллеру. С данным переходником мы неоднократно уже работали, поэтому изучать нам тонкости его работы нет смысла, лишь напомню, - [C Урок 7. Операторы отношения и логические операторы](https://narodstream.ru/c-urok-7-operatory-otnosheniya-i-logicheskie-operatory/) - На данном занятии мы продолжим знакомство с различными операциями в языке C. Пришла пора познакомиться немного с логикой, а также со сравнением величин в выражениях. Для этого в языке C существуют операторы отношения (или как их ещё называют операторы сравнения), которые сравнивают две величины, которые могут быть также результатами тех или иных выражений, а также - [STM Урок 12. HAL. Динамическая индикация](https://narodstream.ru/stm-urok-12-hal-dinamicheskaya-indikaciya/) - Урок 12 HAL. Динамическая индикация Продолжим работать с семисегментными индикаторами. Только работать мы будем уже сразу с несколькими индикаторами, чтобы нам получить на них числа не от 1 до 9, так как это не совсем интересно, а ещё и большие числа. Только подключать мы их будем не к 8 ножкам порта каждый, а - [STM Урок 11. HAL. Статическая индикация](https://narodstream.ru/stm-urok-11-hal-staticheskaya-indikaciya/) - Урок 11 HAL. Статическая индикация Сегодня мы попробуем подключить семисегментный светодиодный индикатор к контроллеру STM32 с помощью библиотеки HAL. Мы уже подключали такой индикатор к микроконтроллеру AVR, пришло время попробовать проделать такое и с контроллером STM. Я думаю, сложностей у нас в этом никаких не возникнет. Семисегментный светодиодный индикатор - это свокупность светодиодных - [STM Урок 194. LL. STM32F1. ADC. Injected Continuous. Interrupt](https://narodstream.ru/stm-urok-194-ll-stm32f1-adc-injected-continuous-interrupt/) - Продолжаем работать с АЦП (ADC) контроллера STM32F1 с использованием библиотеки LL. Также работать мы продолжим с одним инжектированным каналом и отслеживать окончание процесса преобразования мы также будем при помощи механизма прерываний от АЦП, только в данном уроке мы попробуем уже поработать не с однократным преобразованием, которое нужно каждый раз в каждой итерации заново запускать, а - [ESP32 Урок 29. Файловая система SPIFFS](https://narodstream.ru/esp32-urok-29-fajlovaya-sistema-spiffs/) - Продолжаем работу по программированию микроконтроллера ESP32 и на данном уроке мы познакомимся с возможностью использования файловой системы SPIFFS. Хотя познакомимся - громко сказано, мы с ней уже знакомы ещё со времён работы с семейством контроллеров ESP8266. И по аналогии работы с вышеуказанной линейкой контроллеров мы столкнулись с аналогичным неудобством. Мы вполне можем передавать по протоколу HTTP - [C Урок 10. Оператор switch](https://narodstream.ru/c-urok-10-operator-switch/) - Очень часто при составлении исходного кода будущей программы мы сталкиваемся с ситуацией, когда дальнейший ход нашей программы зависит от конкретного значения какой-то переменной либо выражения, причём когда выбор таких значений, мягко говоря, немаленький. Мы, конечно же в данном случае можем воспользоваться условными конструкциями if, else, else if, но в данном случае это будет не совсем - [STM Урок 195. LL. STM32F1. ADC. Injected Once. Запуск по таймеру](https://narodstream.ru/stm-urok-195-ll-stm32f1-adc-injected-once-zapusk-po-tajmeru/) - Продолжаем работать с АЦП (ADC) контроллера STM32F1 с использованием библиотеки LL. Также работать мы продолжим с инжектированным каналом. Запускать мы будем также наш АЦП на данном уроке автоматически, хотя вернёмся мы в режим однократного преобразования. Как же такое возможно и для чего это нужно? В режиме кольцевого запуска (continuous) АЦП не может запускаться реже чем - [STM Урок 196. LL. STM32F1. ADC. Injected Once Scan](https://narodstream.ru/stm-urok-196-ll-stm32f1-adc-injected-once-scan/) - Продолжаем работать с АЦП (ADC) контроллера STM32F1 с использованием библиотеки LL. Также работать мы продолжим с инжектированной группой. Только теперь мы можем уверенно сказать, что именно с группой, так как работать мы будем не с одним каналом, а с четырьмя, что является максимально возможным количеством каналов для инжектированной группы. Чтобы работать с количеством каналов более - [STM Урок 128. LAN8742A. LWIP. NETCONN. HTTP. AJAX. Часть 3](https://narodstream.ru/stm-urok-128-lan8742a-lwip-netconn-http-ajax-chast-3/) - В предыдущей части занятия мы продолжили писать функционал нашего клиент-сервера для отправки и приёма данных между собственно сервером и клиентом. В данной части занятия мы продолжим начатое дело и сначала попробуем наши текстовые данные, посылаемые клиенту, как-то отсортировать. Стандартная функция вывода процессов не умеет этого делать, поэтому добавим функцию для сортировки выше нашей функции DynWebPageStr //--------------------------------------------------------------- - [STM Урок 128. LAN8742A. LWIP. NETCONN. HTTP. AJAX. Часть 2](https://narodstream.ru/stm-urok-128-lan8742a-lwip-netconn-http-ajax-chast-2/) - В предыдущей части нашего занятия мы познакомились с технологией AJAX, настроили проект, а также создали красивый документ для отображения в браузере, но пока без функционала. Теперь добавим немного функционала в наш клиент-сервер. Давайте сначала научимся передавать данные из браузера на сервер. Для этого в блоке sidebar добавим несколько разноцветных кнопок - [STM Урок 128. LAN8742A. LWIP. NETCONN. HTTP. AJAX. Часть 1](https://narodstream.ru/stm-urok-128-lan8742a-lwip-netconn-http-ajax-chast-1/) - Продолжим работу с LWIP NETCONN, а также с протоколом HTTP. И сегодня мы попытаемся не просто отправить страничку браузеру с нашего контроллера, но отправить данные в определённое место страницы, причём без перезагрузки всей страницы. Раньше нам этого делать не удавалось, так как мы применяли технологии CGI и SSI, которые такого себе позволить не могли. И - [ESP32 Урок 30. Wi-Fi. STA. HTTP Server SPIFFS](https://narodstream.ru/esp32-urok-30-wi-fi-sta-http-server-spiffs/) - Продолжаем работу с нашим сервером HTTP и на данном уроке мы попробуем расположить контент для ответа клиенту в пространстве файловой системы SPIFFS, с которой мы познакомились, а вернее, продолжили знакомство на прошлом уроке. Причём мы уже практически весь нужный контент (страничку и иконку) уже разместили в данной файловой системе. Схема наша также осталась прежней - отладочная - [C. Урок 11. Тернарный оператор](https://narodstream.ru/c-urok-11-ternarnyj-operator/) - Кроме условных операторов if, else и else if также существует ещё и тернарный оператор. Данный оператор порой бывает удобен в случаях, если при выполнении какого-то условия или его невыполнении нам нужно присвоить строго определённое значение какой-либо переменной. Хотя такая ситуация и не столь частая, но в случае её возникновения тернарный оператор намного удобнее и читабельнее - [STM Урок 145. WS2812B. Новые эффекты и оптимизация кода. Часть 3](https://narodstream.ru/stm-urok-145-ws2812b-novye-effekty-i-optimizaciya-koda-chast-3/) - В предыдущей части урока мы написали несколько тестов и проверили их на практике. Следующий тест будет очень интересный. Там будет бежать по ленте маска насыщенности, то есть плавно бежим плавным белым пятном. Только вот с белым пятном будет уже наоборот, если мы применим закон прямой линии, то есть примем долю как есть, то будет мало - [STM Урок 145. WS2812B. Новые эффекты и оптимизация кода. Часть 2](https://narodstream.ru/stm-urok-145-ws2812b-novye-effekty-i-optimizaciya-koda-chast-2/) - В предыдущей части урока мы познакомились с цветовой моделью HSV, настроили проект, написали функцию конвертирования данных цветового пространства HSV в RGB, а также написали первый тест. Попробуем изменить количество радуг, поставим или 2 или 4 ws2812_test01(2,2); ws2812_test01(4,2); Продолжаем дальше. Идём в файл ws2812.c и добавим следующий тест, который будет также вращать - [STM Урок 145. WS2812B. Новые эффекты и оптимизация кода. Часть 1](https://narodstream.ru/stm-urok-145-ws2812b-novye-effekty-i-optimizaciya-koda-chast-1/) - Очень немалый интерес у посетителей ресурса вызвал урок 142 по подключению светодиодных лент количеством 150 и 300 светодиодов к контроллеру STM32. Поэтому хотелось бы немного продолжить и развить данную тему. Также на данный урок меня подтолкнула статья посетителя ресурса по применению цветовой модели HSV, за что ему огромное спасибо, думаю, не только от меня но - [STM Урок 150. LL. I2C. Подключаем внешний EEPROM. Часть 3](https://narodstream.ru/stm-urok-150-ll-i2c-podklyuchaem-vneshnij-eeprom-chast-3/) - В предыдущей части нашего урока мы настроили проект, а также изучили подробно, каким образом происходит инициализация модуля I2C. Вернёмся в нашу функцию AT24C_WriteBytes и после считывания регистра SR1 отправим адрес устройства в шину (void) I2C1->SR1; LL_I2C_TransmitData8(I2C1, SLAVE_OWN_ADDRESS | I2C_REQUEST_WRITE); Затем дождёмся установки бита ADDR в регистре SR1, что будет означать окончание передачи адреса - [STM Урок 150. LL. I2C. Подключаем внешний EEPROM. Часть 2](https://narodstream.ru/stm-urok-150-ll-i2c-podklyuchaem-vneshnij-eeprom-chast-2/) - В предыдущей части нашего урока мы познакомились с аппаратной организацией шины I2C в микроконтроллере STM32F1, в том числе подробно изучили регистры модуля I2C. Теперь, прежде чем приступить к созданию и настройке проекта нашего занятия, давайте познакомимся со схемой. Основная схема была взята из урока 148 по динамической индикации. Только ещё мы к данной схеме подключим - [STM Урок 150. LL. I2C. Подключаем внешний EEPROM. Часть 1](https://narodstream.ru/stm-urok-150-ll-i2c-podklyuchaem-vneshnij-eeprom-chast-1/) - Сегодня мы попробуем с помощью библиотеки LL поработать с шиной I2C. В качестве подопытного устройства мы возьмём микросхему EEPROM — AT24C32, которая установлена в модуле с часовой микросхемой DS3231 и также в часовом модуле с микросхемой DS1307. С данной микросхемой мы уже работали, когда изучали программирование шины I2C для контроллеров AVR. Там эта шина называлась - [STM Урок 41. Подключаем акселерометр LIS3DSH. Часть 4](https://narodstream.ru/stm-urok-41-podklyuchaem-akselerometr-lis3dsh-chast-4/) - Урок 41 Часть 4 Подключаем акселерометр LIS3DSH В предыдущей чатсти нашего занятия мы закончили писать инициализацию акселерометра, а также написали функцию считывания данных с датчика. Продолжим функцию Accel_ReadAcc. Занесем показания датчика в буфер: Accel_GetXYZ(buffer); xval = buffer[0]; yval = buffer[1]; zval = buffer[2]; HAL_Delay(20); - [STM Урок 41. Подключаем акселерометр LIS3DSH. Часть 3](https://narodstream.ru/stm-urok-41-podklyuchaem-akselerometr-lis3dsh-chast-3/) - Урок 41 Часть 3 Подключаем акселерометр LIS3DSH В предыдущей чатсти нашего занятия мы считали идентификатор данных, тем самым убедились в правильных настройках шины и то, что мы работаем именно с этим датчиком, а также написали функцию записи данных в регистры акселерометра. Теперь напишем напишем код в функцию инициализации настроек void AccInit(uint16_t - [STM Урок 41. Подключаем акселерометр LIS3DSH. Часть 2](https://narodstream.ru/stm-urok-41-podklyuchaem-akselerometr-lis3dsh-chast-2/) - Урок 41 Часть 2 Подключаем акселерометр LIS3DSH В предыдущей чатсти нашего занятия мы кратко изучили документацию на датчик, создали для него проект, добавили некоторые макросы и настроили библиотечные файлы. Давайте теперь напишем функцию для приема и передачи по SPI: //-------------------------------------- static uint8_t SPIx_WriteRead(uint8_t Byte) { uint8_t receivedbyte = 0; - [STM Урок 41. Подключаем акселерометр LIS3DSH. Часть 1](https://narodstream.ru/stm-urok-41-podklyuchaem-akselerometr-lis3dsh-chast-1/) - Урок 41 Часть 1 Подключаем акселерометр LIS3DSH Тема нашего сегодняшнего занятия – подключение более нового акселерометра по сравнению с тем, который мы использовали для изучения в уроке 39. Данный акселерометр – это также акселерометр, выполненный с использованием технологии MEMS – LIS3DSH. Во-первых, данный акселерометр наряду с интерфейсом I2C может подключиться и с - [Урок 31. Wi-Fi. STA. HTTP Server. Параметры](https://narodstream.ru/urok-31-wi-fi-sta-http-server-parametry/) - Продолжаем работу с нашим сервером HTTP и на данном уроке мы попробуем что-нибудь ему передать из браузера. Тем самым мы нашу плату как-то оживим, заставим, так сказать, откликаться на какие-то внешние команды. Мы подключим к плате светодиод RGB и будем со странички кнопками управлять его отдельными кристаллами - зажигать их и гасить. Пока для этого мы - [C Урок 12. Функции](https://narodstream.ru/c-urok-12-funkcii/) - Зачастую в процессе написания программы наступает такой момент, что в одном участке исходного кода набирается очень много строк. Пусть даже они будут снабжены подробными комментариями, но если их слишком много, то читабельность кода очень сильно страдает. Хочется куда-то спрятать часть кода из данного участка программы и эту часть как-то вызывать. Более того, некоторые участки кода - [ESP8266 Урок 10. I2C. Переходник для LCD 20×4](https://narodstream.ru/esp8266-urok-10-i2c-perexodnik-dlya-lcd-20x4/) - Продолжаем тему поддержки программного I2C в контроллере ESP8266 и сегодня мы немного закрепим знания по данной теме, написав небольшую программу по работе с символьным дисплеем разрешением в 4 строки по 20 символов, подключенному по шине I2C к нашему контроллеру. С данным переходником мы неоднократно уже работали, поэтому изучать нам тонкости его работы нет смысла, лишь - [STM Урок 52. Датчик давления LPS25HB. Часть 4](https://narodstream.ru/stm-urok-52-datchik-davlenija-lps25hb-chast-4/) - Урок 52 Часть 4 Датчик давления LPS25HB В предыдущей части занятия мы написали функцию считывания и предварительной обработки значения давления, также изменили код функции фильтра скользящего среднего. Также мы отобразили значение температуры и давления (причём сразу в трёх единицах измерения в терминальной программе). Давайте также добавим возможность отключать фильтр скользящего среднего кнопкой. Добавим - [STM Урок 52. Датчик давления LPS25HB. Часть 3](https://narodstream.ru/stm-urok-52-datchik-davlenija-lps25hb-chast-3/) - Урок 52 Часть 3 Датчик давления LPS25HB В предыдущей части занятия мы написали инициализацию датчика давления, а также написали функцию считывания и предварительной обработки значения температуры. Функцию Mag_Read также переименуем в Press_Read //-------------------------------------------- void Press_Read(void) { Исправим это и в вызовах в main.c: и в обработчике и в бесконечном цикле, - [STM Урок 52. Датчик давления LPS25HB. Часть 2](https://narodstream.ru/stm-urok-52-datchik-davlenija-lps25hb-chast-2/) - Урок 52 Часть 2 Датчик давления LPS25HB В предыдущей части занятия мы добавили все макросы, которые вносят удобства в чтение и написание кода, а также считали идентификатор датчика. Продолжим писать инициализацию. Переименуем функцию MagInit в PressInit //-------------------------------------------- void PressInit(uint16_t InitStruct) { Также исправим и раскомментируем вызов данной функции в главной - [STM Урок 52. Датчик давления LPS25HB. Часть 1](https://narodstream.ru/stm-urok-52-datchik-davlenija-lps25hb-chast-1/) - Урок 52 Часть 1 Датчик давления LPS25HB Сегодня мы познакомимся с датчиком, который измеряет давление. Мы рассмотрим и изучим датчик, установленный на плате расширения X-NUCLEO-IKS01A1, предназначенной для работы с отладочной платой Nucleo. Мы будем подключать данную оценочную плату к плате Nucleo STM32F401RE. Выполнен данный датчик также с использованием технологии MEMS. Этот датчик - [STM Урок 62. FMC SDRAM. Часть 4](https://narodstream.ru/stm-urok-62-fmc-sdram-chast-4/) - Урок 62 Часть 4 FMC SDRAM В прошлой части урока мы научились передавать команды микросхеме памяти SDRAM через контроллер FMC, используя только функции библиотеки HAL. Также мы уже передали две команды, и, мало того, проверили, что они успешно передались. Следующая команда HAL_Delay(1); command.CommandMode = FMC_SDRAM_CMD_AUTOREFRESH_MODE; command.CommandTarget = FMC_SDRAM_CMD_TARGET_BANK1; - [STM Урок 62. FMC SDRAM. Часть 3](https://narodstream.ru/stm-urok-62-fmc-sdram-chast-3/) - Урок 62 Часть 3 FMC SDRAM В прошлой части нашего занятия мы настроили наш контроллер FMC, сгенерировали и настроили проект, а также проверили заготовку проекта на мигание светодиода. Теперь начнём инициализацию нашего FMC, так как любая периферия в этом обязательно нуждается. Добавим функцию инициализации в файл MT48LC4M32B2.c void MT48LC4M32B2_Init(SDRAM_HandleTypeDef *hsdram) - [STM Урок 62. FMC SDRAM. Часть 2](https://narodstream.ru/stm-urok-62-fmc-sdram-chast-2/) - Урок 62 Часть 2 FMC SDRAM В прошлой части нашего занятия мы познакомились с микросхемой памяти SDRAM MT48LC4M32B2 от компании Micron. Также мы ознакомились с организацией данной памяти, как к ней обратиться, чтобы она начала запись и чтение. Сегодня мы продолжим начатое дело. Начнём мы данную часть с создания проекта. Мы создадим новый - [STM Урок 62. FMC SDRAM. Часть 1](https://narodstream.ru/stm-urok-62-fmc-sdram-chast-1/) - Урок 62 Часть 1 FMC SDRAM Сегодня мы попробуем поработать с микросхемой памяти SDRAM. SDRAM - это динамическое оперативное запоминающее устройство, активным элементов каждой ячейки которого является конденсатор. Также обращение к ячейкам памяти происходит не в плоском пространстве, а посредством матрицы, состоящей из строк и колонок. В каждой ячейке данной памяти - [STM Урок 197. LL. STM32F1. ADC. Injected Once Scan. Interrupt](https://narodstream.ru/stm-urok-197-ll-stm32f1-adc-injected-once-scan-interrupt/) - Продолжаем работать с АЦП (ADC) контроллера STM32F1 с использованием библиотеки LL. Также работать мы пока будем с однократным преобразованием и с инжектированным каналом, используя при этом режим последовательного сканирования нескольких каналов, только отслеживать окончание процесса преобразования мы будем при помощи механизма прерываний от АЦП. С данным механизмом мы уже неоднократно работали, поэтому, думаю, нам будет - [Урок 32. Wi-Fi. STA. HTTP Server. AJAX](https://narodstream.ru/urok-32-wi-fi-sta-http-server-ajax/) - Продолжаем работу с нашим сервером HTTP и на данном уроке мы попробуем не просто что-то передать от клиента на сервер, но и дождаться от сервера ответа, что позволит нам судить о том, что сервер наши данные успешно принял и команды наши выполнил, а также данным образом мы можем получить от сервера ещё какую-то нужную нам - [C Урок 13. Константы](https://narodstream.ru/c-urok-13-konstanty/) - Кроме переменных разного типа, а также массивов, для представления в программе существуют ещё и константы. Константа - это значение, которое впоследствии в процессе программы не может быть изменено. Константами мы уже, того не замечая, давно уже пользуемся в наших уроках. Мы использовали обычные целые и дробные числа, строки в кавычках, не используя при этом переменные. - [ESP8266 Урок 9. I2C. Подключаем внешний EEPROM](https://narodstream.ru/esp8266-urok-9-i2c-podklyuchaem-vneshnij-eeprom/) - На данном уроке мы попробуем поработать с шиной I2c. Как таковой аппаратной поддержки передачи по данной шине у контроллера ESP8266 нет, нет такого модуля, нет даже специальных регистров для этого. Но в то же время посредством функционала библиотеки SDK всё же такая поддержка имеется, хоть и программная. Видимо, это обусловлено тем, что шина I2C используется - [STM Урок 198. LL. STM32F1. ADC. Injected Continuous Scan. Interrupt](https://narodstream.ru/stm-urok-198-ll-stm32f1-adc-injected-continuous-scan-interrupt/) - Продолжаем работать с АЦП (ADC) контроллера STM32F1 с использованием библиотеки LL. Также работать мы продолжим с инжектированной группой каналов и отслеживать окончание процесса преобразования мы также будем при помощи механизма прерываний от АЦП, только в данном уроке мы попробуем уже поработать не с однократным преобразованием, которое нужно каждый раз в каждой итерации заново запускать, а - [STM Урок 199. LL. STM32F1. ADC. Injected Once Scan. Запуск по таймеру](https://narodstream.ru/stm-urok-199-ll-stm32f1-adc-injected-once-scan-zapusk-po-tajmeru/) - Продолжаем работать с АЦП (ADC) контроллера STM32F1 с использованием библиотеки LL. Также работать мы продолжим с инжектированной группой каналов и использовать будем режим сканирования последовательности каналов инжектированной группы. Запускать мы будем также наш АЦП на данном уроке автоматически, хотя вернёмся мы в режим однократного преобразования. Как же такое возможно и для чего это нужно? В - [STM Урок 65. Подключаем операционный усилитель TSZ124IPT. Часть 4](https://narodstream.ru/stm-urok-65-podklyuchaem-operacionnyj-usilitel-tsz124ipt-chast-4/) - Урок 65 Часть 4 Подключаем операционный усилитель TSZ124IPT В предыдущей части занятия мы продолжили писать исходный код по обработке и отображению данных от ОУ и посмотрели данные показания в терминальной программе. Закомментируем вывод показаний в текстовом виде, раскомментируем и подправим отправку показаний в программу визуализации // sprintf(str1,"Vinst:%06f; I cur:%06frn", ins, i1); // HAL_UART_Transmit(&huart2, (uint8_t*)str1,strlen(str1),0x1000); uint8_t - [STM Урок 65. Подключаем операционный усилитель TSZ124IPT. Часть 3](https://narodstream.ru/stm-urok-65-podklyuchaem-operacionnyj-usilitel-tsz124ipt-chast-3/) - Урок 65 Часть 3 Подключаем операционный усилитель TSZ124IPT В предыдущей части занятия мы настроили проект для работы с нашим ОУ, начали писать исходный код и изучили расчёты показаний тока и разности потенциалов. Так как мы пока не будем использовать перемычку, то есть будем работать без коэффициента усиления, то добавим следующий код в функцию обработки результатов - [STM Урок 65. Подключаем операционный усилитель TSZ124IPT. Часть 2](https://narodstream.ru/stm-urok-65-podklyuchaem-operacionnyj-usilitel-tsz124ipt-chast-2/) - Урок 65 Часть 2 Подключаем операционный усилитель TSZ124IPT В предыдущей части занятия мы познакомились с характеристиками нашего ОУ, также познакомились с оценочной платой и со схемами, собранными на ОУ TSZ124IPT, а также с некоторыми расчётами данных схем, позволяющими нам оценить измеренные показания. Проект мы сделаем из проекта Humidity_HTS221 из урока 55 по - [STM Урок 65. Подключаем операционный усилитель TSZ124IPT. Часть 1](https://narodstream.ru/stm-urok-65-podklyuchaem-operacionnyj-usilitel-tsz124ipt-chast-1/) - Урок 65 Часть 1 Подключаем операционный усилитель TSZ124IPT Сегодня мы попробуем поработать с операционным усилителем TSZ124IPT, который находится на оценочной плате X-NUCLEO-IKA01A1. Также на данной плате находятся ещё два операционных усилителя, но с ними мы пока работать не будем. Оставим их на будущее. Данную оценочную плату мы подсоединим к отладочной плате - [ESP32. Урок 33. Энергонезависимое хранилище данных NVS](https://narodstream.ru/esp32-urok-33-energonezavisimoe-xranilishhe-dannyx-nvs/) - Помимо файловой системы SPIFFS в контроллере ESP32 для энергонезависимого хранения данных используется также энергонезависимое хранилище данных NVS. Энергонезависимое хранилища данных (Non-volatile storage, NVS) работает на уровне комплекта IDF и разработано оно для хранения пар ключ-значение в памяти FLASH. Данный способ хранения порой упрощает работу с хранением структурированных данных, так как хранить их в файлах не совсем рентабельно. Так как - [C Урок 14. Преобразование типов](https://narodstream.ru/c-urok-14-preobrazovanie-tipov/) - На данном уроке мы поговорим о преобразовании типов данных в процессе работы программы из одного типа в другой. Конечно, в идеальном случае, желательно, чтобы программа была построена таким образом чтобы лишний раз избегать всякого рода преобразований и использовать везде данные нужного типа. Но не всегда так получается и преобразование типа в ряде случаев просто необходимо. - [ESP8266 Урок 11. UART. Приём данных](https://narodstream.ru/esp8266-urok-11-uart-priyom-dannyx/) - Продолжаем учиться писать код для микроконтроллера ESP8266. На данном занятии мы попробуем принять данные по шине UART. Мы уже по данной шине передавали данные в уроке 7, а теперь нам предстоит их принять. Казалось, бы какая разница и что тут сложного. Но не так-то всё просто. Чтобы нам не висеть постоянно где-то в бесконечном цикле - [STM Урок 71. LAN. ENC28J60. ARP. Часть 4](https://narodstream.ru/stm-urok-68-lan-enc28j60-arp-chast-4/) - Урок 71 Часть 4 LAN. ENC28J60. ARP В предыдущей части урока мы отправили запрос ARP, а также начали писать функцию заполнения таблицы ARP. Чтобы проверить, что наш таймер отсчитывает именно секунды, можно в данный обработчик добавить светодиодную мигалку, но я уже так проверял, поэтому мы этим заниматься не будем. Вернёмся в файл arp.c - [STM Урок 71. LAN. ENC28J60. ARP. Часть 3](https://narodstream.ru/stm-urok-68-lan-enc28j60-arp-chast-3/) - Урок 71 Часть 3 LAN. ENC28J60. ARP В предыдущей части нашего урока мы напиcали код по приёму желаемого адреса IP для запроса ARP из терминальной программы в строковом виде, затем преобразовали данный адрес в числовой массив и начали писать функцию отправки запроса ARP в сеть. Вернёмся в arp.c и подключим глобальную переменную нашего буфера, чтобы опять - [STM Урок 71. LAN. ENC28J60. ARP. Часть 2](https://narodstream.ru/stm-urok-68-lan-enc28j60-arp-chast-2/) - Урок 71 Часть 2 LAN. ENC28J60. ARP В предыдущей части урока мы настроили проект, поправили ошибки прошлого занятия, вынесли функции реализации протокола ARP в отдельный модуль и создали обработчик прерываний USART на приём. Теперь начнём обрабатывать результат, своевременно меняя все статусы, и в конце вызовем приём из USART b = str[0]; //если - [STM Урок 71. LAN. ENC28J60. ARP. Часть 1](https://narodstream.ru/stm-urok-68-lan-enc28j60-arp-chast-1/) - Урок 71 Часть 1 LAN. ENC28J60. ARP Сегодня мы продолжим начатую в уроке 68 тему по программированию модуля LAN на микросхеме ENC28J60, который позволяет нам изучить программирование сетевых протоколов вручную, преследуя при этом цель — "Понять работу локальной сети и всех её уровней и протоколов изнутри — на низком уровне". Если мы - [STM Урок 72. Touch panel FT5336. Часть 4](https://narodstream.ru/stm-urok-72-touch-panel-ft5336-chast-4/) - Урок 72 Часть 4 Touch panel FT5336 В предыдущей части занятия мы добавили две интересные функции сбора координат и другой информации действий с TS и воспользовались ими в функции определения статуса. Займёмся теперь жестами. Хотя мне и не удалось их идентифицировать, но тем не менее код мы напишем, так сказать, для использования в - [STM Урок 72. Touch panel FT5336. Часть 3](https://narodstream.ru/stm-urok-72-touch-panel-ft5336-chast-3/) - Урок 72 Часть 3 Touch panel FT5336 В предыдущей части занятия мы закончили писать функцию инициализации тачскрина, а также начали писать код процесса отслеживания различных действий TS. Теперь нам нужна будет функция определения координат действия. Добавим её после функции TS_DetectTouch и напишем в её теле сначала несколько локальных переменных //---------------------------------------- void TS_GetXY(uint16_t - [STM Урок 72. Touch panel FT5336. Часть 2](https://narodstream.ru/stm-urok-72-touch-panel-ft5336-chast-2/) - Урок 72 Часть 2 Touch panel FT5336 В предыдущей части занятия мы настроили проект, написали некоторые служебные функции, а также функцию инициализации нашего тачскрина. Отключим прерывания в микросхеме tsOrientation = TS_SWAP_XY; //Configure the FT5336 device to stop generating IT on the given INT pin regValue = (FT5336_G_MODE_INTERRUPT_POLLING & - [STM Урок 72. Touch panel FT5336. Часть 1](https://narodstream.ru/stm-urok-72-touch-panel-ft5336-chast-1/) - Урок 72 Часть 1 Touch panel FT5336 Продолжаем работу с отладочной платой STM32F746G-DISCO и изучать её интересные элементы. Мы уже изрядно изучили её дисплей LCD, теперь настало время изучить панель Toush Screen, установленную на данном дисплее. Тем более без этого экран теряет свою интерактивность, и становится, как говорится, доступным "только для чтения". Нам - [STM Урок 200. CMSIS. Bit banding](https://narodstream.ru/stm-urok-200-cmsis-bit-banding/) - Архитектура ядер семейства Cortex-M, на котором также основываются многие микроконтроллеры STM32, аппаратно поддерживает интересную технологию. Называется данная технология bit banding. Это такая возможность модели памяти, при которой биты определённых участков данной памяти отображаются на целые слова другого участка памяти. То есть если в первом участке какой-нибудь бит установлен, то в области, куда он отображается, также - [ESP32. Урок 34. UART. Приём данных](https://narodstream.ru/esp32-urok-34-uart-priyom-dannyx/) - Продолжаем учиться писать код для микроконтроллера ESP32 и на данном занятии мы попробуем принять данные по шине UART. До сих пор мы только передавали данные по этой шине, причём не вдаваясь в процесс происходящего ибо всё это реализовано в комплекте IDF. А вот с приёмом, который нам пригодится в недалёком будущем, дела обстоят несколько посложнее. - [C Урок 16. Операторы присваивания](https://narodstream.ru/c-urok-16-operatory-prisvaivaniya/) - Изучив в течение 15 предыдущих уроков очень многое из языка C, а также попрактиковавшись изрядно с данным языком в наших учебных проектах, мы поняли, что для того, чтобы переменная получила новое значение, его надо ей как-то присвоить. Для этого мы использовали оператор присваивания =. Оказывается, что есть ещё некоторые операторы, представляющие из себя вышеуказанный оператор - [ESP8266 Урок 12. SPI. Драйвер индикатора MAX7219](https://narodstream.ru/esp8266-urok-12-spi-drajver-indikatora-max7219/) - Продолжаем изучать возможности контроллера ESP8266 и учиться пользоваться данными возможностями в своём коде. На данном занятии мы познакомимся с интерфейсом SPI, который поддерживается аппаратно в микроконтроллере ESP8266 С данным интерфейсом мы очень неплохо знакомы, так как мы его постоянно используем при написании кода для других контроллеров, поэтому, дабы не тратить драгоценное время, мы - [STM Урок 201. Assembler. Первый проект. Команды MOV, LDR, STR, B. Часть 2](https://narodstream.ru/stm-urok-201-assembler-pervyj-proekt-komandy-mov-ldr-str-b-chast-2/) - В предыдущей части нашего урока мы познакомились с процессором Cortex-M3, регистрами ядра, создадим и настроим проект, также познакомимся с несколькими необходимыми директивами. Давайте теперь в нашу процедуру Start добавим хотя бы одну строку с кодом Start PROC MOV R0, #0 Мы используем здесь команду MOV, с помощью которой мы помещаем число 0 в регистр - [STM Урок 201. Assembler. Первый проект. Команды MOV, LDR, STR, B. Часть 1](https://narodstream.ru/stm-urok-201-assembler-pervyj-proekt-komandy-mov-ldr-str-b-chast-1/) - С данного урока начнём знакомиться с таким интересным языком, как ассемблер. Я всегда люблю говорить, что ассемблер - это очень лёгкий язык, но писать на нём очень трудно. И вскоре вы поймёте, почему. Язык C, который мы использовали, является языком высокого уровня, так же как и C++. Инструкции данных языков представляют собой практически английские слова, - [STM Урок 39. Подключаем акселерометр LSM303DLHC. Часть 5](https://narodstream.ru/stm-urok-39-podklyuchaem-akselerometr-lsm303dlhc-chast-5/) - Урок 39 Подключаем акселерометр LSM303DLHC Часть 5 В предыдущей части нашего урока мы написали код для считывания показаний с датчика и складывания в буфер для дальнейшего использования в работе. Продолжим писать функцию Accel_ReadAcc, которую мы начали писать в предыдущей части нашего занятия. Сначала мы попробуем отобразить изменения показаний датчика включением определенных светодиодов на плате, так как - [STM Урок 39. Подключаем акселерометр LSM303DLHC. Часть 4](https://narodstream.ru/stm-urok-39-podklyuchaem-akselerometr-lsm303dlhc-chast-4/) - Урок 39 Подключаем акселерометр LSM303DLHC Часть 4 В предыдущей части нашего урока мы закончили наконец-то полностью инициализацию акселерометра. Теперь наконец-то самое интересное – снятие показаний с датчика. Для этого мы сначала напишем следующую функцию: //-------------------------------------- void Accel_GetXYZ(int16_t* pData) { int16_t pnRawData[3]; uint8_t ctrlx[2]={0,0}; int8_t buffer[6]; uint8_t i = - [STM Урок 39. Подключаем акселерометр LSM303DLHC. Часть 3](https://narodstream.ru/stm-urok-39-podklyuchaem-akselerometr-lsm303dlhc-chast-3/) - Урок 39 Подключаем акселерометр LSM303DLHC Часть 3 В предыдущей части нашего урока мы продолжили писать инициализацию данного датчика. Написали удобные функции чтения и записи регистров акселерометра, используя шину I2C, а также считали из датчика его идентификатор. Далее настроим некоторые регистры в функции основной инициализации датчика: else Error(); ctrl |= (LSM303DLHC_NORMAL_MODE | LSM303DLHC_ODR_50_HZ | LSM303DLHC_AXES_ENABLE); ctrl |= - [STM Урок 39. Подключаем акселерометр LSM303DLHC. Часть 2](https://narodstream.ru/stm-urok-39-podklyuchaem-akselerometr-lsm303dlhc-chast-2/) - Урок 39 Подключаем акселерометр LSM303DLHC Часть 2 В предыдущей части нашего урока мы кратко изучили документацию на датчик, создали для него проект, добавили некоторые макросы и начали писать функцию инициализации датчика. Теперь нам понадобится следующая функция #include "lsm303dlhc.h" //-------------------------------------- uint8_t Accel_IO_Read(uint16_t DeviceAddr, uint8_t RegisterAddr) { } Жирным шрифтом я буду выделять новые фрагменты. А старые - [STM Урок 39. Подключаем акселерометр LSM303DLHC. Часть 1](https://narodstream.ru/stm-urok-39-podklyuchaem-akselerometr-lsm303dlhc-chast-1/) - Урок 39 Подключаем акселерометр LSM303DLHC Часть 1 С сегодняшнего урока мы начинаем изучать нелёгкую, но интересную тему – подключение датчиков, выполненных с использованием технологии MEMS. Так как у меня появилось несколько плат расширений X-NUCLEO, я решил сделать цикл уроков по снятию и обработке показаний с датчиков MEMS, установленных на них. Но так - [STM Урок 88. SD. SPI. FATFS. Часть 4](https://narodstream.ru/stm-urok-88-sd-spi-fatfs-chast-4/) - Урок 88 Часть 4 SD. SPI. FATFS В предыдущей части нашего урока мы добавили необходимый код в пользовательские функции библиотеки FATFS и прочитали текстовый файл с карты SD. Что-ж, будем считать, что со считыванием содержимого файлов мы справились. Теперь запись в файл. Для начала в фунцию main() добавим несколько локальных переменных uint16_t - [STM Урок 88. SD. SPI. FATFS. Часть 3](https://narodstream.ru/stm-urok-88-sd-spi-fatfs-chast-3/) - Урок 88 Часть 3 SD. SPI. FATFS В предыдущей части нашего урока мы написали полностью функцию инициализации карты SD, постоянно проверяя каждый наш шаг на практике. Теперь наша задача - считать какие-то данные с карты. Пока попробуем считать блок, так как читать файлы без умения считать элементарный блок мы попросту не - [STM Урок 88. SD. SPI. FATFS. Часть 2](https://narodstream.ru/stm-urok-88-sd-spi-fatfs-chast-2/) - Урок 88 Часть 2 SD. SPI. FATFS В предыдщей части нашего урока мы подключили SD-карту, создали ряд служебных функций для её работы и начали писать функцию инициализации. Вернём частоту на заявленную в Cube. Также опустим ножку CS и попробуем передать по шине SPI пару каких нибудь величин SPI_Release(); hspi2.Init.BaudRatePrescaler = - [STM Урок 88. SD. SPI. FATFS. Часть 1](https://narodstream.ru/stm-urok-88-sd-spi-fatfs-chast-1/) - Урок 88 Часть 1 SD. SPI. FATFS Продолжаем работать с народной отладочной платой STM32F103RCT6, с которой мы уже давно занимаемся и которая. судя по результатам наших занятий, показала себя с очень хорошей стороны. Данная плата и установленный на ней контроллер хоть и не все прелести достижений прогресса в себе несут, но - [ESP32. Урок 35. NVS. Запись и чтение через PC](https://narodstream.ru/esp32-urok-35-nvs-zapis-i-chtenie-cherez-pc/) - Продолжаем работу с энергонезависимым хранилищем данных (Non-volatile storage, NVS), с которым мы познакомились в уроке 33, и сегодня мы попробуем изменить в нём значение некоторых пар ключ-значение посредством интерфейса UART с компьютера. Так как на прошлом уроке мы уже поработали с UART на чтение, то сделать это нам сильного труда не составит. Схема наша также будет - [C Урок 17. Приоритет операций](https://narodstream.ru/c-urok-17-prioritet-operacij/) - В выражениях, где используется более одного оператора, порой мы начинаем путаться, операция с каким оператором выполнится первая, а какая вторая и т.д. И в этих случаях мы зачастую не думаем о приоритетах этих операций и начинаем использовать кучу скобок, чтобы предостеречь себя от нежелательного порядка выполнения операций. После этого код становится не очень читабельным, скобки - [ESP8266 Урок 13. Программный таймер](https://narodstream.ru/esp8266-urok-13-programmnyj-tajmer/) - Благодаря возможностям библиотеки SDK, поставляемой для ESP8266, мы можем использовать программные таймеры. Причём использовать их не сложно, и мы в этом на данном уроке убедимся. Схема у нас будет простейшая — отладочная плата, подключенная к USB компьютера А проект мы создадим из проекта урока 7 с именем UART_TX и назовём его OS_TIMER. Откроем - [PIC Урок 7. Семисегментный индикатор. Динамическая индикация](https://narodstream.ru/pic-urok-7-semisegmentnyj-indikator-dinamicheskaya-indikaciya/) - Продолжаем работать с программированием микроконтроллеров PIC. И сегодня мы попробуем подключить к микроконтроллеру не один одноразрядный индикатор, а сразу несколько. Так как на одном индикаторе мы не сможем увидеть достаточное количество нужной информации и очень редко используется в схемах всего один индикатор. Только если мы подключим остальные индикаторы таким же образом, как и первый, то на это дело нам не - [STM Урок 95. LAN. W5500. FTP Server. Часть 4](https://narodstream.ru/stm-urok-95-lan-w5500-ftp-server-chast-4/) - В предыдущей части занятия мы написали код для вывода клиенту информации о каталоге. Поищем причину создавшейся ситуации потери соединения с сервером после ответа на команду вывода информации о каталоге Сервер шлёт нам какие-то неизвестные команды. Команда PWD клиентом отправляется в том случае, если ему интересно знать рабочий (текущий) какталог. Обработаем команды PWD и XPWD в функции ftp_cmd_parse в соотвтствующем - [STM Урок 95. LAN. W5500. FTP Server. Часть 3](https://narodstream.ru/stm-urok-95-lan-w5500-ftp-server-chast-3/) - В предыдущей части занятия мы написали функцию разбора строки команды FTP, а такаже обработали несколько команд для адкеватного ответа на них клиенту. Давайте теперь ответим клиенту на команду PASV. Вернее пока начнём отвечать, потому что это не совсем просто и проделаем эту процедуру постепенно. Для этого сначала подключим глобальную переменную extern uint8_t ipaddr[4]; extern uint16_t local_port_ftp_data_passiv; Затем перейдём - [STM Урок 95. LAN. W5500. FTP Server. Часть 2](https://narodstream.ru/stm-urok-95-lan-w5500-ftp-server-chast-2/) - В предыдущей части занятия мы настроили проект, немного усовершенствовали код в плане работы с сервером HTTP, также создали самые первые функции для работы с протоколом FTP. Вернёмся в проект в нашу функцию ftp_receive в файле ftpd.c в то же условие, но только в его противное тело (else). Это тело будет выполняться при условии получения пакета в том случае, если - [STM Урок 95. LAN. W5500. FTP Server. Часть 1](https://narodstream.ru/stm-urok-95-lan-w5500-ftp-server-chast-1/) - После того, как мы научились организовывать при помощи нашей микросхемы W5500 несколько одновременно открытых соединений, можно подумать и о следующем протоколе, который предназначен для передачи файлов, а также управления файловой системой по сети - это протокол FTP ( File Transfer Protocol — протокол передачи файлов). Данный протокол, хотя он и имеет некоторые проблемы с безопасностью, так как логин - [STM Урок 103. Модули NRF24L01. Часть 4](https://narodstream.ru/stm-urok-103-moduli-nrf24l01-chast4/) - В предыдущей части урока мы начали писать функцию инициализации модуля, написали функции чтения и записи регистров, а также познакомились с некоторыми командами и регистрами. Следующий регистр - DYNPD, который управляет использованием режима динамического количества байт в пакете для каждого канала обмена Так как мы такой режим не используем, то тоже никие биты включать - [STM Урок 103. Модули NRF24L01. Часть 3](https://narodstream.ru/stm-urok-103-moduli-nrf24l01-chast3/) - В предыдущей части урока мы изучили ещё некоторые характеристики и особенности модуля, познакомились с практическими схемами подключения приёмника и передатчика, подготовили питание модуля, а также создали и настроили проект для работы с ним в среде программирования. Для начала добавим для глобальных массива в файле main.c /* Private variables ---------------------------------------------------------*/ char str1[20]={0}; uint8_t buf1[20]={0}; /* USER CODE - [STM Урок 103. Модули NRF24L01. Часть 2](https://narodstream.ru/stm-urok-103-moduli-nrf24l01-chast2/) - В предыдущей части урока мы познакомились с некоторыми характеристиками модуля NRF24L01. Процесс обмена данными модуля с контроллером происходит по шине SPI с использованием ещё некоторых ножек. Есть ножка CE, которая управляет включением модуля, а также включением модуля в определённый режим. Также имеется ножка IRQ, которая меняет свой уровень в момент определённых событий, например, когда пакет - [STM Урок 103. Модули NRF24L01. Часть 1](https://narodstream.ru/stm-urok-103-moduli-nrf24l01-chast1/) - Продолжаем тему беспроводной передачи данных. Мы познакомились и попробовали работу модулей HC-05, работающих по технологии Bluetooth, а теперь давайте проведём знакомство, а затем в следующих занятиях и поработаем с такими беспроводными модулями, как NRF24L01 от компании Nordic Semiconductor. Данные модули отличаются от устройств, работающих по технологии Bluetooth, а также Wi-Fi, хотя многие даже считают, что это одно - [STM Урок 10. HAL. Изучаем PWM (ШИМ). Мигаем светодиодами плавно](https://narodstream.ru/stm-urok-10-hal-izuchaem-pwm-shim-migaem-svetodiodami-plavno/) - Урок 10 HAL. Изучаем PWM (ШИМ). Мигаем светодиодами плавно Сегодня мы продолжим использование библиотеки HAL. Также сегодня мы коснёмся такой технологии, как PWM (ШИМ). Тонкости данной технологии мы подробно рассматривали в уроке по контроллерам AVR. Я думаю, нет смысла ещё раз повторять. Мы изучим, как именно широтно-импульсная модуляция реализована в контроллерах STM32, в частности - [ESP32 Урок 6. I2C. Подключаем внешний EEPROM](https://narodstream.ru/esp32-urok-6-i2c-podklyuchaem-vneshnij-eeprom/) - На данном уроке мы попробуем поработать с шиной I2c. С данной шиной мы раньше также работали с применением других микроконтроллеров. Настало время поработать с ней, подключив по ней что-нибудь к контроллеру ESP32. Данная шина у контроллера ESP32 реализована аппаратно в отличие от младшей модели ESP8266. Только аппаратная поддержка работает только в том случае, если назначить - [C Урок 6. Условные циклы while, do while, for](https://narodstream.ru/c-urok-6-uslovnye-cikly-while-do-while-for/) - На данном уроке мы познакомимся с циклами. Иногда их называют "петлями". Циклы в коде нам порой требуются для того, чтобы некоторый его участок выполнить какое-то количество раз. Причём это количество может быть заранее известно, либо неизвестно. Если неизвестно, то количество зависит от некоторых условий. Начнём с цикла типа while, так как, я считаю, что из - [ESP8266 Урок 8. GPIO interrupt](https://narodstream.ru/esp8266-urok-8-gpio-interrupt/) - С внешними прерываниями на других МК мы уже ранее работали, поэтому, в принципе, нет необходимости объяснять очень подробно, что это такое. У ESP8266 также имеется механизм обработки внешних прерываний. Тем не менее повторюсь. Внешние прерывания — это такие прерывания, которые обрабатываются вследствие возникновения некоторых событий на определённой ножке порта микроконтроллера. Таких событий может быть несколько, - [PIC Урок 6. Семисегментный индикатор. Статическая индикация](https://narodstream.ru/pic-urok-6-semisegmentnyj-indikator-staticheskaya-indikaciya/) - Продолжаем работу над программированием микроконтроллеров PIC. И прежде чем продолжить заниматься остальными таймерами, давайте немного отдохнём и сделаем какой-нибудь проект, который позволит нам управлять отображением информации на светодиодном семисегментном индикаторе. И, не отходя от наших традиций двигаться от простого к сложному, сначала рассмотрим статическую индикацию. Но так как в дальнейшем нам все равно придется заниматься - [STM Урок 9. HAL. Шина I2C. Продолжаем работу с DS3231](https://narodstream.ru/stm-urok-9-hal-shina-i2c-prodolzhaem-rabotu-s-ds3231/) - Урок 9 HAL. Шина I2C. Продолжаем работу с DS3231 На прошлом занятии мы как следует ознакомились с шиной I2C, а также с микросхемой часов реального времени DS3231, создали и настроили проект в Cube MX и Keil. На данном занятии мы продолжим работать с тем же проектом и уже займёмся непосредственно кодом. В файл main.h - [STM Урок 202. Assembler. Мигающий светодиод. Команды BX, BL, SUB. Флаги. Условия](https://narodstream.ru/stm-urok-202-assembler-migayushhij-svetodiod-komandy-bx-bl-sub-flagi-usloviya/) - Продолжаем курс по ассемблеру. И на данном уроке с помощью полученных знаний по языку мы попытаемся заставить наш светодиод периодично мигать. Для этого мы также сегодня изучим, что такое флаги и для чего они нужны, также познакомимся, как можно осуществить переход по условию и какие бывают условия и ещё изучим некоторые новые команды. Схема урока - [ESP32. Урок 36. RMT. Работа с ИК-пультом](https://narodstream.ru/esp32-urok-36-rmt-rabota-s-ik-pultom/) - Следующая периферия микроконтроллера ESP32, которой мы сегодня коснёмся в нашем занятии — это модуль RMT, чья аббревиатура расшифровывается как Remote Control (дистанционное управление). Модуль RMT (Remote Control) в первую очередь предназначен для отправки и приема инфракрасных сигналов дистанционного управления, реализующих двухпозиционную манипуляцию на несущей частоте, но благодаря своей конструкции он может использоваться для генерации различных типов - [C Урок 18. Инструкции break, continue, оператор goto и метки](https://narodstream.ru/c-urok-18-instrukcii-break-continue-operator-goto-i-metki/) - Составляя алгоритм нашего проекта, порой нам хочется, а иногда и это и необходимо, повлиять на ход программы во время её выполнения каким-то нестандартным образом: досрочно выйти из тела условия или цикла, пропустить итерацию в цикле, а также перейти вообще в любое место программы. Для этого существуют определённые инструменты - это инструкции break, continue, а также - [ESP8266 Урок 14. Wi-Fi. Режим STA (Станция)](https://narodstream.ru/esp8266-urok-14-wi-fi-rezhim-sta-stanciya/) - Ну вот, наконец-то, дошли мы до той темы, к которой стремились и ради чего начинался цикл уроков по контроллерам ESP8266 - это приём и передача данных при помощи возможностей ESP8266 по беспроводной сети Wi-Fi. Я думаю, что все знают, что это за тип сети и для чего она применяется. Напомню лишь, что Wi-Fi - это - [PIC Урок 8. TIMER1](https://narodstream.ru/pic-urok-8-timer1/) - В уроке 5 мы познакомились с одним из таймеров микроконтроллера PIC - TIMER0 и уже применяли его дважды. Последний раз мы его применяли для перебора разрядов четырёхразрядного светодиодного индикатора для обеспечения режима динамической индикации. Но так как мы со времён изучения таймера 0 перешли на более сложный и более функциональный контроллер PIC, то мы, читая - [STM Урок 203. Assembler. RCC. Стек. Новые команды. Часть 2](https://narodstream.ru/stm-urok-203-assembler-rcc-stek-novye-komandy-chast_2/) - В предыдущей части урока мы подключили новый модуль, познакомились со стеком, а также научились обеспечивать видимость продпрограмм других модулей. Аналогичным образом отключим PLL BNE wait_cfgrsws ;Clear bit RCC_CR_PLLON in register RCC_CR LDR R2, =(PERIPH_BB_BASE + (RCC_CR - PERIPH_BASE) * 32 + RCC_CR_PLLON_N * 4) STR R0, [R2] LDR R2, =RCC_CR wait_pllrdy_res LDR R3,[R2] ; читаем регистр - [STM Урок 203. Assembler. RCC. Стек. Новые команды. Часть 1](https://narodstream.ru/stm-urok-203-assembler-rcc-stek-novye-komandy-chast_1/) - Продолжим осваивать язык ассемблера для архитектуры ARM. Сегодня мы попытаемся включить наш контроллер на полную мощность, настроив в нём механизм тактирования - модуль RCC. Настройка данного модуля даст нам возможность знать точно, какие шины и какая периферия на какой частоте будет у нас работать. Благодаря данной настройке, мы также познакомимся со стеком, для чего он - [STM Урок 129. LAN8742A. LWIP. NETCONN. HTTP. WebSocket. Часть 4](https://narodstream.ru/stm-urok-129-lan8742a-lwip-netconn-http-websocket-chast-4/) - В предыдущей части нашего занятия мы научились закрывать WebSocket, а также отправили с клиента и начали обработку на сервере команды начала и окончания передачи данных. Вспомним нашу табличку с описанием байтов протокола. Если нам нужно передать данные до 125 байт, то младшие семь бит второго байта (а правильнее байта 1) будут содержать длину нашего фрейма, если - [STM Урок 129. LAN8742A. LWIP. NETCONN. HTTP. WebSocket. Часть 3](https://narodstream.ru/stm-urok-129-lan8742a-lwip-netconn-http-websocket-chast-3/) - В предыдущей части нашего занятия мы создали ряд задач и научились отвечать клиенту на запрос соединения WebSocket. Давайте теперь похвалимся о том, что у нас создано соединение, в браузере, для этого зайдём в наш index.html и добавим ещё немного кода в обработчик нажатия нашей кнопки WebSocket_connection = new WebSocket("ws://192.168.1.191:8080"); WebSocket_connection.binaryType = 'arraybuffer'; var output = ''; - [STM Урок 129. LAN8742A. LWIP. NETCONN. HTTP. WebSocket. Часть 2](https://narodstream.ru/stm-urok-129-lan8742a-lwip-netconn-http-websocket-chast-2/) - В предыдущей части урока мы познакомились с технологией WebSocket, настроили проект и подготовили страницу для клиента. Теперь нам надо добавить функционал в автоматически созданную задачу для вывода данных на дисплей TaskStringOut. Вот это, соответственно, мы вставим до бесконечного цикла /* USER CODE BEGIN TaskStringOut */ osEvent event; struct_out *qstruct; /* Infinite loop */ А вот - [STM Урок 129. LAN8742A. LWIP. NETCONN. HTTP. WebSocket. Часть 1](https://narodstream.ru/stm-urok-129-lan8742a-lwip-netconn-http-websocket-chast-1/) - Продолжим работу с нашим протоколом HTTP, а также с сетью LAN, библиотекой стека протоколов LWIP, её интерфейсом NETCON, а также с интересующею всех возможностью передачи данных в браузер клиенту, а также обратно от него на сервер без перезагрузки всей страницы. Мы уже на прошлом занятии занимались таким делом и нам, как вы, надеюсь, помните, это - [ESP32. Урок 38. RMT. 1-Wire. Поиск устройства](https://narodstream.ru/esp32-urok-38-rmt-1-wire-poisk-ustrojstva/) - Продолжаем работать с модулем RMT и в прошлом занятии мы начали при помощи данного модуля работу с устройством, подключенным по однопроводной шине и работающим по протоколу 1-Wire. Но пока мы только произвели инициализацию протокола. На данном уроке мы попробуем добиться полноправного поиска устройства, причём мы также узнаем, сколько у нас на шине присутствует устройств, работающих - [C Урок 9. Массивы. Часть 2](https://narodstream.ru/c-urok-9-massivy-chast-2/) - В предыдущей части нашего занятия мы провели краткое знакомство с массивами, изучили одномерные массивы и испытали их работу на практике. А теперь давайте познакомимся с таким понятием, как многомерный массив. Многомерный массив - это массив, элементы которого упорядочены в нескольких измерениях. Многомерные массивы могут быть двумерными, трёхмерными и так далее. Двумерный массив - это массив из - [C Урок 9. Массивы. Часть 1](https://narodstream.ru/c-urok-9-massivy-chast-1/) - Очень часто нам при написании программ требуется очень много данных одного типа, вследствие чего может потребоваться и огромное количество переменных, а требование уникальности имени последних приведёт к тому, что мы просто запутаемся в своей программе, не говоря уж о тех, кто будет наш исходный код читать. Такое требование может, например возникнуть, если мы хотим записывать - [ESP8266 Урок 15. Wi-Fi. STA. UDP Client](https://narodstream.ru/esp8266-urok-15-wi-fi-sta-udp-client/) - Продолжаем развивать тему по приёму и передаче данных по беспроводной сети Wi-Fi. И на данном уроке мы попытаемся написать простейший клиент UDP. Надеюсь, мы все помним, что это за протокол, если нет, то смотрим уроки по другим контроллерам, где всё это рассмотрено очень глубоко. Передавать и принимать данные посредством протокола транспортного уровня UDP мы будем - [PIC Урок 9. TIMER2](https://narodstream.ru/pic-urok-9-timer2/) - В уроке 5 и в уроке 8 мы познакомились с двумя таймерами микроконтроллера PIC — TIMER0 и TIMER1 .Последний TIMER1 нам интересен был тем, что он, считая также только вперёд и без посторонних модулей сбрасываясь тоже по переполнению, является уже 16-битным, поэтому считает он уже не до 255, а до 65535, что более удобно и позволяет без лишних плясок с переменными - [STM Урок 121. Датчик температуры, давления и влажности BME280. Часть 4](https://narodstream.ru/stm-urok-121-datchik-temperatury-davleniya-i-vlazhnosti-bme280-chast-4/) - В предыдущей части урока мы настроили фильтр и оверсемплинги, а также считали с датчика значение температуры воздуха. Теперь давление. Посмотрим регистр Так как давление хранится таким же образом, как и температура, то перейдём в соответствующую функцию BME280_ReadPressure и причитаем там подобным образом сырые показатели давления, только опять же неукоснительно следуя требованиям технической документации, мы - [STM Урок 121. Датчик температуры, давления и влажности BME280. Часть 3](https://narodstream.ru/stm-urok-121-datchik-temperatury-davleniya-i-vlazhnosti-bme280-chast-3/) - В предыдущей части урока мы начали писать инициализацию датчика, в которой считали идентификатор, калибровочные данные из датчика, также настроили тайминг режима Standby. Теперь оверсемплинг и фильтры. Я просмотрел несколько примеров, а также много чего позавидовал из библиотек Arduino, и решил использовать подобные настройки. Начнём с фильтра. Коэффициент фильтрации настраивается также с помощью соответствующих битов конфигурационного регистра - [STM Урок 121. Датчик температуры, давления и влажности BME280. Часть 2](https://narodstream.ru/stm-urok-121-datchik-temperatury-davleniya-i-vlazhnosti-bme280-chast-2/) - В предыдущей части урока мы познакомились с данным датчиком, изучили его характеристики, способы подключения, его свойства, а также создали и настроили проект для его программирования. В файле BME280.h добавим макросы для светодиода #include //------------------------------------------------ #define LED_GPIO_PORT GPIOA #define LED_PIN GPIO_PIN_5 #define LED_ON HAL_GPIO_WritePin(LED_GPIO_PORT, LED_PIN, GPIO_PIN_SET) #define LED_OFF HAL_GPIO_WritePin(LED_GPIO_PORT, LED_PIN, GPIO_PIN_RESET) #define LED_TGL HAL_GPIO_TogglePin(LED_GPIO_PORT, - [STM Урок 121. Датчик температуры, давления и влажности BME280. Часть 1](https://narodstream.ru/stm-urok-121-datchik-temperatury-davleniya-i-vlazhnosti-bme280-chast-1/) - На данном занятии мы по многочисленным просьбам рассмотрим датчик от компании Bosch Sensortec - BME280. Данный датчик измеряет несколько очень важных величин окружающей среды - это температура, влажность воздуха, а также атмосферное давление. Есть ещё подобный датчик - BMP280, который также измеряет данные величины, но только кроме влажности. Но зато стоит он гораздо дешевле. Но - [AVR Урок 19. Собираем часы на микросхеме DS1307 и LCD 1602](https://narodstream.ru/avr-urok-19-sobiraem-chasy-na-mikrosxeme-ds1307-i-lcd-1602/) - Урок 19 Собираем часы на микросхеме DS1307 и LCD 1602 Сегодня, набравшись уже опыта по программирования шины I2С, а также изучив микросхему реального времени DS1307, мы сможем приступить к программированию простейших часов и выводить их показания уже не в компьютер, а в жидкокристаллический дисплей. Я думаю, это будет намного наглядней и красивее, чем просматривать - [ESP32. Урок 39. RMT. 1-Wire. Поиск устройства по известному ROM-коду](https://narodstream.ru/esp32-urok-39-rmt-1-wire-poisk-ustrojstva-po-izvestnomu-rom-kodu/) - Продолжаем работать с модулем RMT и в прошлом занятии нам удалось добиться полноправного поиска устройства, причём мы также узнали, сколько у нас на шине присутствует устройств, работающих с протоколом 1-Wire, если таких устройств будет более одного. Задача данного урока - обращение к устройству с уже известным ROM-кодом, так как если коды известны, то нет смысла из - [C Урок 19. Модульное программирование. Раздельная компиляция](https://narodstream.ru/c-urok-19-modulnoe-programmirovanie-razdelnaya-kompilyaciya/) - Теперь мы с вами подошли к такой ситуации, что код наших проектов достиг такой величины, что уже сложно стало его читать, потому что все функции, причём разнообразного назначения, все константы, макросы, глобальные переменные у нас находятся в одном файле main.c. Дальше такое продолжаться не может, и нам нужно теперь будет как-то разбить наш проект на - [ESP8266 Урок 16. Wi-Fi. STA. UDP Server](https://narodstream.ru/esp8266-urok-16-wi-fi-sta-udp-server/) - Продолжаем работу по приёму и передаче данных по Wi-Fi. На данном также мы поработаем с протоколом транспортного уровня UDP, только напишем теперь мы уже сервер. Теперь мы не будем знать ни IP-адрес, не номер порта клиента, который нам будет присылать пакеты с датаграммами, поэтому нам придётся как-то их узнавать, чтобы в ответ посылать пакеты данным - [PIC Урок 10. LCD 20x4. 8-битный режим. Часть 2](https://narodstream.ru/pic-urok-10-lcd-20x4-8-bitnyj-rezhim-chast2/) - В предыдущей части занятия мы познакомились с дисплеем, со схемой и её компонентами, а также создали и настроили проект. Перейдём в файл lcd.c и начнём потихоньку писать библиотеку, используя накопленный опыт программирования других типов контроллеров. Добавим макросы для ножек управления дисплеем #include "lcd.h" //-------------------------------------------------------------- #define rs RC4 #define rw RC5 #define e RC6 //-------------------------------------------------------------- - [PIC Урок 10. LCD 20x4. 8-битный режим. Часть 1](https://narodstream.ru/pic-urok-10-lcd-20x4-8-bitnyj-rezhim-chast1/) - Продолжаем работу по программированию микроконтроллеров PIC. И сегодня мы попробуем к контроллеру PIC подключить символьный дисплей, который работает под управлением контроллера дисплея HD44780, в котором доступно для отображения 80 символов, организованных в 4 строки по 20 символов в каждой. Если вы смотрите мои уроки по другим контроллерам, то с такого рода дисплеями мы встречаемся постоянно - [STM Урок 204. Assembler. SysTick. Прерывания](https://narodstream.ru/stm-urok-204-assembler-systick-preryvaniya/) - Продолжим освоение ассемблера для архитектуры ARM. В предыдущих уроках мы использовали задержки исполнения кода с помощью пустых циклов, тем самым нам тяжело было даже примерно подсчитать заранее, сколько циклов потребуется для организации задержки на определённое время. Так как в прошлом занятии мы смогли добиться тактирования контроллера строго определённой частотой импульсов, то теперь нам эту задачу - [AVR Урок 24. Знакомство с шиной SPI](https://narodstream.ru/avr-urok-24-znakomstvo-s-shinoj-spi/) - Урок 24 Знакомство с шиной SPI Сегодня мы начинаем знакомство с шиной SPI (Serial Peripheral Interface). Данная шина очень широко используется в электронике. Она очень удобна, являясь синхронной и полнодуплексной, поэтому, применяется во многих схемах для общения между различными цифровыми устройствами - датчиками, контроллерами, драйверами и прочими устройствами. Ещё одним важнейшим фактором необходимости - [AVR Урок 25. SPI. Подключаем сдвиговый регистр 74HC595](https://narodstream.ru/avr-urok-25-spi-podklyuchaem-sdvigovyj-registr-74hc595/) - Урок 25 SPI. Подключаем сдвиговый регистр 74HC595 Сегодня мы продолжим работать с шиной SPI, которую мы изучили на предыдущем занятии. Вернее мы продолжим её - эту шину изучать, только занятие теперь будет практическое. Мы возьмём определённое устройство и попробуем данным устройством поуправлять. А в качестве устройства мы возьмём простейшую микросхему 74HC595, которая управляется - [ESP32. Урок 40. RMT. DS18B20. Инициализация](https://narodstream.ru/esp32-urok-40-rmt-ds18b20-inicializaciya/) - Продолжаем работать с модулем RMT и в прошлом занятии мы смогли обращаться к устройствам с уже известными ROM-кодами и сверять коды данных устройств с уже известными. Сегодня мы уже попробуем поработать с нашим устройством, уже заведомо зная о том, что перед нами именно датчик температуры DS18B20. Повторюсь, что с данными датчиками мы неоднократно работали с использованием других контролеров, работали - [C Урок 15. Побитовые операторы. Часть 2](https://narodstream.ru/c-urok-15-pobitovye-operatory-chast-2/) - В предыдущей части нашего урока мы узнали, какие бывают операторы такого типа, а также написали функцию, которая будет получать символьный вид двоичного представления числа. Переходим в функцию main() и объявим там сначала строковый массив, в котором будет храниться полученная строка в результате работы нашей функции, когда мы её будем вызывать int main() { char str1[35] - [C Урок 15. Побитовые операторы. Часть 1](https://narodstream.ru/c-urok-15-pobitovye-operatory-chast-1/) - Как мы все знаем, любое число можно привести к двоичному типу. В этом случае один разряд данного числа может принимать только одно из двух значений - 0 или 1, и этот разряд, соответственно, называется битом. До сих пор, изучая язык C, мы работали с числами целиком, но, оказывается, можно оперировать его битами. Не так, конечно, - [ESP8266 Урок 17. Wi-Fi. STA. TCP Client](https://narodstream.ru/esp8266-urok-17-wi-fi-sta-tcp-client/) - Продолжаем работать с приёмом и передачей данных по беспроводной сети Wi-Fi. И на данном уроке мы попытаемся написать уже простой клиент TCP. Надеюсь, мы все помним, что это за протокол, если нет, то смотрим уроки по другим контроллерам, где всё это рассмотрено очень глубоко. Самое главное, что мы должны помнить о том, что передача данных - [PIC Урок 11. Внутренняя энергонезависимая память EEPROM. Часть 2](https://narodstream.ru/pic-urok-11-vnutrennyaya-energonezavisimaya-pamyat-eeprom-chast-2/) - В предыдущей части урока мы познакомились с организацией, а также с чтением и записью памяти EEPROM, создали проект и написали библиотеку для работы с EEPROM. Теперь перейдём в файл main.c и попробуем что-нибудь записать и затем считать из памяти EEPROM. Первым делом удалим вывод тестовых строк LCD_String((char*)"String 1"); LCD_SetPos(2,1); LCD_String((char*)"String 2"); LCD_SetPos(4,2); LCD_String((char*)"String 3"); - [PIC Урок 11. Внутренняя энергонезависимая память EEPROM. Часть 1](https://narodstream.ru/pic-urok-11-vnutrennyaya-energonezavisimaya-pamyat-eeprom-chast-1/) - Очень многие знают, что в контроллерах PIC помимо основной оперативной памяти, а также памяти для хранения прошивки существует ещё и энергонезависимая память типа EEPROM. Данная память сделана по технологии электрического стирания информации, что в отличие от её предшественника EPROM, в котором стирание производилось только при помощи ультрафиолетовых лучей, позволило использовать данный тип памяти практически повсеместно. Как мы - [STM Урок 90. Датчик освещённости VL6180X. Часть 5](https://narodstream.ru/stm_urok_90_datchik_osveshhjonnosti_vl6180x_chast_5/) - Урок 90 Часть 5 Датчик освещённости VL6180X В предыдущей части нашего занятия мы написали ещё ряд фунций по работе с датчиком освещённости. Над функцией vl6180_AlsGetMeasurement добавим функцию снятия сырых показаний с датчика и преобразования их непосредственно в значение в люксах //------------------------------------------------- int vl6180_AlsGetLux(uint32_t *pLux) { int status; uint16_t RawAls; - [STM Урок 90. Датчик освещённости VL6180X. Часть 4](https://narodstream.ru/stm_urok_90_datchik_osveshhjonnosti_vl6180x_chast_4/) - Урок 90 Часть 4 Датчик освещённости VL6180X В предыдущей части нашего занятия мы написали ряд функций и начали уже непосредственно работать с датчиком освещённости. Добавим функцию подготовки регистров датчика выше функции чтения данных //------------------------------------------------- int vl6180_Prepare(void) { int status; return status; } //------------------------------------------------- Вызовем данную функцию в функции чтения - [STM Урок 90. Датчик освещённости VL6180X. Часть 3](https://narodstream.ru/stm_urok_90_datchik_osveshhjonnosti_vl6180x_chast_3/) - Урок 90 Часть 3 Датчик освещённости VL6180X В предыдущей части нашего занятия мы создали и настроили библиотеки для работы с микросхемой stmpe1600 и с четырёхразрядным светодиодным индикатором, который подключен от этой микросхемы. Добавим глобальную переменную, а также заодно массив для строк /* Private variables ---------------------------------------------------------*/ volatile uint32_t Tim2Cnt=0; char str1[60]={0}; /* - [STM Урок 90. Датчик освещённости VL6180X. Часть 2](https://narodstream.ru/stm_urok_90_datchik_osveshhjonnosti_vl6180x_chast_2/) - Урок 90 Часть 2 Датчик освещённости VL6180X В предыдущей части нашего занятия мы познакомились с датчиком освещённости, подключили плату с данным датчиком, создадим и настроили проект. Откроем файл main.c и в главной функции main() запустим таймер /* USER CODE BEGIN 2 */ HAL_TIM_Base_Start_IT(&htim2); /* USER CODE END 2 */ Также добавим обработчик - [STM Урок 90. Датчик освещённости VL6180X. Часть 1](https://narodstream.ru/stm_urok_90_datchik_osveshhjonnosti_vl6180x_chast_1/) - Урок 90 Часть 1 Датчик освещённости VL6180X Сегодня мы познакомимся с датчиком, который измеряет освещённость. Это датчик VL6180X производителя ST Microelectronics. Наряду с измерением освещённости датчик очень прекрасно измеряет и расстояния до объекта. Прекрасно, потому что используется для этого в нём современная технология измерения расстояния ST FlightSense, согласно которой измеряется время - [AVR Урок 26. SPI. Подключаем LED индикатор](https://narodstream.ru/avr-urok-26-spi-podklyuchaem-led-indikator/) - Урок 26 SPI. Подключаем LED индикатор Продолжаем работать с шиной SPI. На прошлом занятии мы научились работать со сдвиговым регистром 74HC595. Сегодня мы также продолжим работать с данным регистром, но сегодня мы попытаемся подключить к нему светодиодный семисегментный одноразрядный индикатор. Я думаю, это будет выглядеть интереснее, чем бегущие огни по светодиодной планке. Общий - [AVR Урок 27. SPI. LED - динамическая индикация](https://narodstream.ru/avr-urok-27-spi-led-dinamicheskaya-indikaciya/) - Урок 27 SPI. LED - динамическая индикация Продолжим работать с шиной SPI. Также работать мы будем с той же микросхемой сдвигового регистра 74HC595, работаем мы с данной микросхемой уже третье занятие. Данная микросхема нас привлекла тем, что она стоит сущие копейки, а также тем, что она не очень сложна в настройке и что она подключается - [ESP32. Урок 41. RMT. DS18B20. Измеряем температуру](https://narodstream.ru/esp32-urok-41-rmt-ds18b20-izmeryaem-temperaturu/) - Продолжаем работать с модулем RMT и в прошлом занятии мы произвели инициализацию шины 1-Wire для работы с датчиком измерения температуры DS18B20. На данном уроке мы попробуем использовать наш датчик по назначению, то есть для измерения температуры. Лишний раз повторю, что с использованием других контроллеров мы всё это неоднократно проделывали, причём с STM32 мы в уроке 92 мы - [C Урок 20. MAKE. Наш первый Makefile. Часть 2](https://narodstream.ru/c-urok-20-make-nash-pervyj-makefile-chast-2/) - В предыдущей части нашего занятия мы познакомились с утилитой make и уже написали небольшой сценарий, позволяющий нам прочувствовать принцип раздельной компиляции проекта. Так как здесь используется другой модуль, аналогично подключим и его сборку в Makefile, написав в самом низу правило utils.o: utils.c $(CC) -O0 -g3 -Wall -c utils.c $(CC) -masm=intel -g3 -Wall -c - [C Урок 20. MAKE. Наш первый Makefile. Часть 1](https://narodstream.ru/c-urok-20-make-nash-pervyj-makefile-chast-1/) - До сих пор мы для сборки нашей программы пользовались командным файлом, объединяющим в себе команды для препроцессинга, компиляции, ассемблирования, компоновки файлов в исполняемый файл. Так тоже делать можно и зачастую так и делается, если дело касается проектов, которые содержат в себе малое количество модулей, а также не требующих какой-то автоматизации процесса сборки. Но для более - [ESP8266 Урок 18. I2C. Переходник для LCD 20×4. Переопределяем контакты](https://narodstream.ru/esp8266-urok-18-i2c-perexodnik-dlya-lcd-20x4-pereopredelyaem-kontakty/) - Продолжаем тему поддержки программного I2C в контроллере ESP8266 и сегодня мы ещё закрепим знания по данной теме, продолжив работу с символьным дисплеем разрешением в 4 строки по 20 символов, подключенному по шине I2C к нашему контроллеру. И целью данного занятия будет переопределение шины I2C на другие ножки. А возможно это благодаря тому, что I2C в - [PIC Урок 12. Модуль CCP. Режим захвата. ИК-пульт. Часть 2](https://narodstream.ru/pic-urok-12-modul-ccp-rezhim-zaxvata-ik-pult-chast-2/) - В предыдущей части урока мы познакомились с модулем CCP, а более подробно с режимом захвата, познакомились с передачей и приёмом данных от ИК-пульта дистанционного управления, а также с одним из протоколов такой передачи данных - RC5. Займёмся протоколом NEC. Поэтому давайте теперь разбираться, что из себя представляет этот протокол. В протоколе NEC передаются в одной - [PIC Урок 12. Модуль CCP. Режим захвата. ИК-пульт. Часть 1](https://narodstream.ru/pic-urok-12-modul-ccp-rezhim-zaxvata-ik-pult-chast-1/) - Следующая периферия микроконтроллера PIC, которую мы начнём сегодня изучать - это модуль CCP, чья аббревиатура расшифровывается как CAPTURE/COMPARE/PWM (Захват / сравнение / ШИМ). Таких модулей в нашем контроллере два и у каждого модуля разное назначение. Compare (сравнение) не следует путать с аналоговым компаратором, для этого есть отдельный модуль. Каждый модуль CCP содержит 16-разрядный регистр CCPx, - [STM Урок 91. LAN. W5500. HTTP Server. Часть 5](https://narodstream.ru/stm-urok-91-lan-w5500-http-server-chast-5/) - Урок 91 Часть 5 LAN. W5500. HTTP Server В предыдущей части урока мы продолжили функцию ответа на запрос HTTP, а также написали функцию передачи клиенту документа, умещающегося вместе с заголовком в одно окно. Следом за этой функцией создадим функцию передачи первого буфера многооконного (многобуферного) документа //----------------------------------------------- void tcp_send_http_first(void) { uint8_t prt; - [STM Урок 91. LAN. W5500. HTTP Server. Часть 4](https://narodstream.ru/stm-urok-91-lan-w5500-http-server-chast-4/) - Урок 91 Часть 4 LAN. W5500. HTTP Server В предыдущей части урока мы исследовали пришедший от клиента запрос HTTP и начали формировать на него ответ. Добавим глобальную переменную для размера окна uint32_t bytesread; volatile uint16_t tcp_size_wnd = 2048; Размер окна для сокета - это размер его буфера. Но так как пока - [STM Урок 91. LAN. W5500. HTTP Server. Часть 3](https://narodstream.ru/stm-urok-91-lan-w5500-http-server-chast-3/) - Урок 91 Часть 3 LAN. W5500. HTTP Server В предыдущей части урока мы написали функцию инициализации микросхемы, а также начали писать функцию приёма и обработки сетевых пакетов. Так как мы сочиняем сервер HTTP, то давайте всю работу с данным протоколом вынесем в отдельный модуль для чего создадим файлы httpd.h и httpd.c следующего - [STM Урок 91. LAN. W5500. HTTP Server. Часть 2](https://narodstream.ru/stm-urok-91-lan-w5500-http-server-chast-2/) - Урок 91 Часть 2 LAN. W5500. HTTP Server В предыдущей части урока мы познакомились с модулем W5500, изучили организацию памяти и обмена данными микросхемы W5500, создали и настроили проект. Инициализация начинается с перезагрузки модуля. Я это взял из примера, написанного для оценочной платы и выложенного на официальном сайте, в технической документации я этого не нашел. Поэтому - [STM Урок 91. LAN. W5500. HTTP Server. Часть 1](https://narodstream.ru/stm-urok-91-lan-w5500-http-server-chast-1/) - Урок 91 Часть 1 LAN. W5500. HTTP Server Сегодня мы продолжим тему работы с LAN. Только для этих целей мы возьмём уже другую микросхему - W5500. Эта микросхема разработана компанией Wiznet и интересна она тем, что кроме физического и канального уровня она включает в себя целый аппаратный стек протоколов TCP/IP. Также - [AVR Урок 28. SPI. Драйвер LED MAX7219](https://narodstream.ru/avr-urok-28-spi-drajver-led-max7219/) - Урок 28 SPI. Драйвер LED MAX7219 Продолжаем работать с шиной SPI. Сегодня мне в руки попался драйвер 8-разрядных светодиодных индикаторов. Данный драйвер оснащен декодером символов, умеет управлять динамической индикацией и много чего ещё. Ну, и, самое главное, управляется данная микросхема по шине SPI, что не дало мне права обойти его - [AVR Урок 18. Подключаем шаговый двигатель. Часть 3](https://narodstream.ru/avr-urok-18-podklyuchaem-shagovyj-dvigatel-chast-3/) - Урок 18 Часть 3 Подключаем шаговый двигатель Продолжаем работать с шаговым двигателем. В прошлой части занятия мы его подключили и уже начали писать исходный код, написав инициализацию ножек порта, отвечающих за управление нашим шаговым двигателем. Продолжим писать остальные функции в файле stepmotor.c. Так как мы будем использовать полушаговый режим, в котором основных положений у - [AVR Урок 18. Подключаем шаговый двигатель. Часть 2](https://narodstream.ru/avr-urok-18-podklyuchaem-shagovyj-dvigatel-chast-2/) - Урок 18 Часть 2 Подключаем шаговый двигатель Продолжим подключение к микроконтроллеру Atmega8a подключить шагового двигателя. В прошлой части занятия мы изучили принцип работы шагового двигателя, а также драйвера шагового двигателя, а также изучили определёные режимы работы данного двигателя. В данной части занятия мы подключим его к живому контроллеру, а не к нашей отладочной - [AVR Урок 18. Подключаем шаговый двигатель. Часть 1](https://narodstream.ru/avr-urok-18-podklyuchaem-shagovyj-dvigatel-chast-1/) - Урок 18 Часть 1 Подключаем шаговый двигатель Сегодня мы попробуем к микроконтроллеру Atmega8a подключить шаговый двигатель. Шаговые двигатели - это такие двигатели, которые посредством подачи напряжения на определённую обмотку переводят свой ротор в определённое место, тем самым достигается более точное управление угловой скоростью. Можно также, в принципе, управлять и положением ротора, но - [ESP32 Урок 5. GPIO interrupt](https://narodstream.ru/esp32-urok-5-gpio-interrupt/) - В прошлом уроке нам удалось попробовать использование порта ввода-вывода на вход. Только работали мы с кнопкой, отслеживая её состояние в неком цикле, что накладывает ряд ограничений на работу всей программы. Для этого и придумано следить за состоянием портов именно посредством прерываний. Как это всё работает, мы уже неоднократно видели, например в аналогичном уроке для ESR8266 - [C Урок 5. Арифметические операторы, операторы инкремента и декремента](https://narodstream.ru/c-urok-5-arifmeticheskie-operatory-operatory-inkrementa-i-dekrementa/) - Движемся дальше по изучению языка C. И теперь у нас наконец-то наступил момент, когда мы "заставим" наш процессор как-то обрабатывать наши данные. Думаю, что это важная ступень в освоении программирования. Мы познакомимся с элементарными арифметическими операторами, с помощью которых мы сможем уже пользоваться нашими данными, которые мы инициализировали с помощью переменных, выполнять задачи по получению - [ESP8266 Урок 7. UART. Передача данных](https://narodstream.ru/esp8266-urok-7-uart-peredacha-dannyx/) - Продолжаем учиться писать код для микроконтроллера ESP8266. И сегодня мы попробуем передать какие-нибудь данные с нашего модуля по шине UART на ПК. С данным интерфейсом мы уже прекрасно знакомы из курсов занятий по программированию других МК, знаем протокол передачи, поэтому нам будет несложно, вооружившись знанием функционала SDK, настроить данный модуль UART и передать с него - [PIC Урок 5. Таймеры](https://narodstream.ru/pic-urok-5-tajmery/) - Давайте теперь познакомимся с такой периферией как таймеры. Таймеры обеспечивают отсчёт времени с момента запуска, а также ещё несколько полезных вещей, с которыми мы позже познакомимся. Но самое главное их свойство - это то, что данный отсчёт происходит независимо от работы основного кода программы. Тем самым обеспечивается стабильная работа программы и экономия ресурсов контроллера. То есть - [STM Урок 8. HAL I2C Подключаем часы реального времени DS3231](https://narodstream.ru/stm-urok-8-hal-i2c-podklyuchaem-chasy-realnogo-vremeni-ds3231/) - Урок 8 HAL I2C Подключаем часы реального времени DS3231 Сегодня мы попробуем с помощью библиотеки HAL поработать с шиной I2C. Заранее определимся, что по данной шине мы подключим микросхему часов реального времени DS3231. Сначала немного поговорим о самой шине I2C. По данной шине я очень много рассказывал в серии частей урока 16 по - [AVR Урок 17. Часы реального времени DS1307. Часть 2](https://narodstream.ru/avr-urok-17-chasy-realnogo-vremeni-ds1307-chast-2/) - Урок 17 Часть 2 Часы реального времени DS1307 В предыдущей части занятия мы познакомились с отличной микросхемой реального времени DS1307, подключили её, и начали писать исходный код для установки времени, даты и дня недели. Продолжим писать наш код, используя тот же самый проект Используя написанную функцию перевода из десятичного формата числа в - [AVR Урок 17. Часы реального времени DS1307. Часть 1](https://narodstream.ru/avr-urok-17-chasy-realnogo-vremeni-ds1307-chast-1/) - Урок 17 Часть 1 Часы реального времени DS1307 Продолжаем занятия по программированию МК AVR. И сегодня мы познакомимся с очень хорошей микросхемой DS1307. Данная микросхема представляет собой часы реального времени (real time clock или RTC). Также, благодаря тому, что общение микроконтроллера с данной микросхемой будет происходить с применением интерфейса I2C, мы ещё - [AVR Урок 29. SPI. Внешний АЦП MCP 3201](https://narodstream.ru/avr-urok-29-spi-vneshnij-acp-mcp-3201/) - Урок 29 SPI. Внешний АЦП MCP 3201 Продолжаем цикл уроков по шине SPI. И сегодня мы впервые поработаем с данной шиной на приём данных от устройства. Я думаю этого уже многие ждут с нетерпением. Для этого мы возьмём микросхему MCP3201. Эта микросхема является внешним аналого-цифровым преобразователем. Разработчиком данной микросхемы является компания - [ESP32 Урок 42. Wi-Fi. STA. MQTT Client](https://narodstream.ru/esp32-urok-42-wi-fi-sta-mqtt-client/) - Продолжаем работу с протоколами модели OSI и на данном уроке мы попытаемся создать клиент MQTT. С протоколом MQTT (Message Queuing Telemetry Transport) мы знакомы из уроков по передаче данных этому и этому. Мы знаем, что клиент может быть одновременно и издателем и подписчиком тем, поэтому мы и наш клиент научим и тому и другому. Также у - [C Урок 21. Область видимости переменных](https://narodstream.ru/c-urok-21-oblast-vidimosti-peremennyx/) - В предыдущих занятиях мы немного стали понимать смысл раздельной компиляции. Также для того, чтобы грамотнее конструировать наши программы, мы должны знать такое понятие, как область видимости переменных. Хотя данное понятие, думаю, мы можем применить не только к переменным, также мы можем всё это применить и к указателям, и к структурам, и к массивам и к - [ESP8266 Урок 19. FreeRTOS. UART. Передача данных](https://narodstream.ru/esp8266-urok-19-freertos-uart-peredacha-dannyx/) - Продолжаем учиться писать код для микроконтроллера ESP8266. На данном занятии мы также продолжим тему передачи данных по шине UART, но попытаемся мы передать данные на ПК уже с использованием ОС. В качестве ОС мы будем использовать операционную системы FreeRTOS. FreeRTOS — многозадачная операционная система реального времени (ОСРВ) для встраиваемых систем. Использование данной ОС позволит нам - [PIC. Урок 13. Модуль CCP. Режим сравнения](https://narodstream.ru/pic-urok-13-modul-ccp-rezhim-sravneniya/) - Продолжим изучения модулей CCP микроконтроллера PIC. Как мы узнали из прошлого занятия, модуль CCP служит для расширения функционала таймеров, а именно добавляет возможность использования режима захвата, сравнения и ШИМ. Первый режим мы уже хорошенечко изучили и закрепили на практике, поэтому теперь смело можем переходить к изучению следующего режима - режима сравнения (compare mode). Режимов сравнения - [STM Урок 205. Assembler. Таймеры. Табличные переходы](https://narodstream.ru/stm-urok-205-assembler-tajmery-tablichnye-perexody/) - Продолжаем освоение ассемблера для архитектуры ARM. На данном занятии мы попробуем задействовать такой механизм, как аппаратные таймеры. Что это такое, мы давно знаем и давно используем в своих проектах. Поэтому вдаваться в подробности устройства аппаратных таймеров в STM32 и их настроек мы не будем. Также в данном уроке мы познакомимся с таким понятием в ассемблере - [AVR Урок 30. Подключаем дисплей 16×2 к МК ATtiny2313](https://narodstream.ru/avr-urok-30-podklyuchaem-displej-16x2-k-mk-attiny2313/) - Урок 30 Подключаем дисплей 16×2 к МК ATtiny2313 Сегодня мы попробовать воспользоваться более простым микроконтроллером ATtiny2313 и подключить к нему символьный дисплей LCD, содержащий две строки по 16 символов. Дисплей мы будем подключать стандартным способом 4-битным способом. Сначала начнём, конечно, с микроконтроллера, так как с дисплеем мы уже очень хорошо знакомы из предыдущих - [AVR Урок 31. Связь ATtiny2313 и Atmega8 по SPI. Часть 2](https://narodstream.ru/avr-urok-31-svyaz-attiny2313-i-atmega8-po-spi-chast-2/) - Урок 31 Часть 2 Связь ATtiny2313 и Atmega8 по SPI В прошлой части занятия мы познакомились с реализацией SPI в контроллере ATtiny2313, тем самым подготовив данный МК к соединению посредством шины SPI и передачи данных контроллеру ATmega8. Теперь начнём работать с контроллером ATmega8, чтобы он сумел данные, посланные ему, принять. Данные мы - [AVR Урок 31. Связь ATtiny2313 и Atmega8 по SPI. Часть 1](https://narodstream.ru/avr-urok-31-svyaz-attiny2313-i-atmega8-po-spi-chast-1/) - Урок 31 Часть 1 Связь ATtiny2313 и Atmega8 по SPI Продолжаем разговор о шине SPI и, как я уже обещал, начнём дружить между собой два контроллера - ATtiny2313 и Atmega8. Во-первых, я ещё вот что хочу сказать. Я изучил даташит ATtiniy2313 и увидел то, что у данного МК как таковой шины SPI - [ESP32 Урок 43. MQTT. Передаём температуру с датчика DS18B20](https://narodstream.ru/esp32-urok-43-mqtt-peredayom-temperaturu-s-datchika-ds18b20/) - Продолжаем работу с протоколом MQTT. На данном уроке мы попробуем передать (опубликовать) с помощью данного протокола осознанные данные, а именно значение температуры, снятое с датчика DS18B20. С протоколом MQTT мы разобрались в прошлом уроке, а с датчиком DS18B20 мы также умеем работать. В качестве брокера MQTT у нас будет также Mosquitto, установленный на плате Raspberry PI, поэтому давайте - [C Урок 24. Перечисляемый тип. Директива typedef](https://narodstream.ru/c-urok-24-perechislyaemyj-tip-direktiva-typedef/) - В уроке 13 мы познакомились с константами, как они объявляются и используются в программе. Мы помним, что это такие данные, которые в ходе программы изменить невозможно и они сохраняют своё значения до окончания своего существования. Только может наступить такая ситуация, что констант программе потребуется слишком много и под них потребуется слишком много имён и, самое - [ESP8266 Урок 20. FreeRTOS. Переходник для LCD 20×4](https://narodstream.ru/esp8266-urok-20-freertos-perexodnik-dlya-lcd-20x4/) - Продолжаем учиться писать код для микроконтроллера ESP8266 и уже с использованием операционной системы реального времени FREEFTOS, с которой мы начали работу в прошлом занятии. А на данном уроке мы, используя данную операционную систему, попробуем подключить к нашему контроллеру символьный дисплей разрешением в 4 строки по 20 символов с использованием шины I2C через специальный переходник. С - [PIC. Урок 15. Модуль MSSP. Режим SPI. Часть 2](https://narodstream.ru/pic-urok-15-modul-mssp-rezhim-spi-chast-2/) - В предыдущей части урока мы познакомимся с шиной SPI и организацией работы с ней модуля MSSP, рассмотрев его основные два управляющих регистра. В режиме SPI для ножек, участвующем в нём, приняты следующие сокращения в отличие от общепринятых: SDI - Вход последовательных данных (для режима ведомого - MOSI, для режима ведущего - MISO). SDO - - [PIC. Урок 15. Модуль MSSP. Режим SPI. Часть 1](https://narodstream.ru/pic-urok-15-modul-mssp-rezhim-spi-chast-1/) - Переходим к следующему модулю - MSSP. Модуль MSSP (Master Synchronous Serial Port) - синхронная последовательная шина, которая обеспечивает аппаратную поддержку шин SPI и I2C, соответственно, именно в таких режимах она и может работать. Правда данные режимы могут ещё делиться на ведущий и ведомый, также SPI-режим может быть ещё четырёх видов, в зависимости от синхронизации по - [PIC. Урок 14. Модуль CCP. Режим PWM](https://narodstream.ru/pic-urok-14-modul-ccp-rezhim-pwm/) - Продолжаем изучение модуля CCP, который служит для расширения функционала таймеров. И в данном уроке мы познакомимся и ощутим на практике третий и последний режим модуля CCP - режим PWM (Pulse-Width Modulation) или ШИМ (широтно-импульсная модуляция). С данным типом модуляции или процессом управления мощностью путём изменения скважности мы уже знакомились подробно в уроках по другим микроконтроллерам, но - [STM Урок 206. LL. STM32F4. Светодиоды и кнопка](https://narodstream.ru/stm-urok-206-ll-stm32f4-svetodiody-i-knopka/) - Долгое время мы занимались изучением возможностей написания программного кода для контроллеров STM серии F1. И вот наконец-то, когда мы их неплохо изучили, применяя к ним различные приёмы разработки программного обеспечения, мы можем перейти к гораздо более мощной линейке контроллеров серии F4, в которых, по сравнению с предыдущей проработанной линейкой имеется ряд серьёзных улучшений. В линейке - [AVR Урок 32. Дисплей LCD 20×4. Расширяем функционал](https://narodstream.ru/avr-urok-32-displej-lcd-20x4-rasshiryaem-funkcional/) - Урок 32 Дисплей LCD 20×4. Расширяем функционал Сегодня мы продолжим работу с символьным дисплеем 20x4 и попробуем немного расширить его функционал. Зачем это потребуется, мы узнаем в более поздних уроках. Дисплей мы подключим обычным 4-битным образом, ну, вернее мы его вообще не будем подключать, он у нас с прошлого урока подключен. Сразу перейдём - [AVR Урок 20. Подключаем датчик температуры DS18B20. Часть 3](https://narodstream.ru/avr-urok-20-podklyuchaem-datchik-temperatury-ds18b20-chast-3/) - Урок 20 Часть 3 Подключаем датчик температуры DS18B20 В предыдущей части нашего занятия написали ряд функций для работы с датчиком DS18B20, являющимся цифровым датчиком измерения температуры. Также мы поняли, что кроме того, что мы будем из датчика читать какие-то данные, нам придётся ещё в него и посылать какие-то данные. Одним из примером может служить - [AVR Урок 20. Подключаем датчик температуры DS18B20. Часть 2](https://narodstream.ru/avr-urok-20-podklyuchaem-datchik-temperatury-ds18b20-chast-2/) - Урок 20 Часть 2 Подключаем датчик температуры DS18B20 В предыдущей части нашего занятия мы кратко изучили датчик DS18B20, который является датчиком температуры. Также мы уже создали проект и начали писать в него некоторый код и остановились на функции определения наличия датчика на шине. В данной функции мы запретили прерывания, сохранив до этого стек. - [AVR Урок 20. Подключаем датчик температуры DS18B20. Часть 1](https://narodstream.ru/avr-urok-20-podklyuchaem-datchik-temperatury-ds18b20-chast-1/) - Урок 20 Часть 1 Подключаем датчик температуры DS18B20 Продолжаем изучать датчики компании DALLAS. И сегодняшним представителем будет DS18B20, который является датчиком температуры. Измеряет температуру данный датчик в градусах по цельсию. Измерения могут быть как 9-битной дискретности, так и 12-битной. Распределяются данные биты следующим образом. Мы будем измерять температуру в 12-битном виде и - [ESP32 Урок 44. Сопроцессор ULP. Первое знакомство](https://narodstream.ru/esp32-urok-44-soprocessor-ulp-pervoe-znakomstvo/) - Сопроцессор ULP (ultra-low-power processor или процессор со сверхнизким потреблением) - это процессор, который остаётся в работе в режиме пониженного энергопотреблении Deep Sleep. В данном режиме основные два ядра контроллера не работают. Также данный процессор является программируемым автоматом конечного состояния (Finite State Machine или FSM). Данный сопроцессор работает с памятью RTC_SLOW_MEM, в нём есть только 4 - [C Урок 22. Устанавливаем Eclipse. Часть 2](https://narodstream.ru/c-urok-22-ustanavlivaem-eclipse-chast-2/) - В предыдущей части нашего урока мы установили и настроили IDE Eclipse, а также создали и собрали наш первый проект. Теперь мы попытаемся запустить наш собранный файл в среде Eclipse. Для этого идём снова в настройки нашего проекта и добавим новый пункт в раздел Run/Debug Settings с помощью кнопки New В открывшемся диалоге выберем C/C++ - [C Урок 22. Устанавливаем Eclipse. Часть 1](https://narodstream.ru/c-urok-22-ustanavlivaem-eclipse-chast-1/) - Ну вот, наконец, и пришла пора нам установить среду программирования (Integrated Development Environment или попросту IDE). Мы уже достаточно потренировались со сборкой проектов из командной строки и теперь мы понимаем, как именно происходят процессы сборки - прероцессинг, ассемблирование, компиляция, линковка и даже отладка. После этого нам не страшно встретиться с многими ошибками и их устранить, - [ESP8266 Урок 21. FreeRTOS. Wi-Fi. Режим STA](https://narodstream.ru/esp8266-urok-21-freertos-wi-fi-rezhim-sta/) - Продолжаем учиться писать код для микроконтроллера ESP8266 с использованием операционной системы реального времени FREEFTOS. На данном уроке мы попробуем создать соединение по Wi-Fi в режиме STA (станции), то есть соединиться с готовой точкой доступа для передачи данных по беспроводной сети. С таким режимом мы уже работали в уроке 14, но только без использования операционной системы, - [PIC. Урок 16. MSSP. SPI. Светодиодный индикатор MAX7219. Часть 2](https://narodstream.ru/pic-urok-16-mssp-spi-svetodiodnyj-indikator-max7219-chast-2/) - В предыдущей части занятия мы познакомились с микросхемой MAX7219, а также написали некоторые служебные функции для работы будущей библиотеки. Далее мы сначала посмотрим, как выглядит наш индикатор Мы видим, что вместо восьмиразрядного индикатора в модуле установлены два четырёхразрядных индикатора, что, собственно, не очень тяготит, так как разряды все находятся друг от друга на - [PIC. Урок 16. MSSP. SPI. Светодиодный индикатор MAX7219. Часть 1](https://narodstream.ru/pic-urok-16-mssp-spi-svetodiodnyj-indikator-max7219-chast-1/) - Вот и настало время нам испытать модуль MSSP в режиме SPI на практике. Так как мы привыкли делать всё последовательно, то сначала поставим себе задачу попроще: поработать с шиной SPI в режиме ведущего устройства только на передачу. Поэтому я и подобрал такое устройство для подключения к контроллеру, от которого нам данные не нужны и чтобы - [STM Урок 142. WS2812B. Подключаем ленты количеством 150-300 светодиодов. Часть 5](https://narodstream.ru/stm-urok-142-ws2812b-podklyuchaem-lenty-kolichestvom-150-300-svetodiodov-chast-5/) - В предыдущей части урока мы подготовили провод питания 220 вольт для нашей ленты и присоединили к нему колодку. Просверлим отверстие для ввода провода сетевого питания в дом И затем проводим в него провод Вилку прикрепим вот такую Закрепим вилку аналогичным закреплению колодки способом также с облуживанием концов провода (показывать - [STM Урок 142. WS2812B. Подключаем ленты количеством 150-300 светодиодов. Часть 4](https://narodstream.ru/stm-urok-142-ws2812b-podklyuchaem-lenty-kolichestvom-150-300-svetodiodov-chast-4/) - В предыдущей части урока мы изменили код проекта под использование ленты на 300 светодиодов и проверили его на практике. Теперь настало время наши ленты повесить на их место, где они будут радовать глаза окружающих. Для этого мы сначала подготовим питание 220 вольт на чердаке. Провод мы использовать будем многожильный двойной, сечение каждого из двух проводов - [STM Урок 142. WS2812B. Подключаем ленты количеством 150-300 светодиодов. Часть 3](https://narodstream.ru/stm-urok-142-ws2812b-podklyuchaem-lenty-kolichestvom-150-300-svetodiodov-chast-3/) - В предыдущей части урока мы изменили код проекта под использование ленты на 150 светодиодов и проверили его на практике. Давайте к нашей ленте подключим ещё одну ленту, не забыв подключить её выходные силовые контакты также и к блоку питания (картинку покажу, когда заработают тесты, так будет виднее). Закроем наш проект и сотворим теперь из него - [STM Урок 142. WS2812B. Подключаем ленты количеством 150-300 светодиодов. Часть 2](https://narodstream.ru/stm-urok-142-ws2812b-podklyuchaem-lenty-kolichestvom-150-300-svetodiodov-chast-2/) - В предыдущей части урока мы познакомились с лентами на 150 светодиодов, подготовили блок питания для них, соединили нашу схему и произвели её первоначальную проверку. Перейдём в файл ws2812.h и изменим в макросе количество светодиодов #define LED_COUNT 150 Только это ещё далеко не всё. Перейдём в файл ws2812.c и также добавим размер временного буфера - [STM Урок 142. WS2812B. Подключаем ленты количеством 150-300 светодиодов. Часть 1](https://narodstream.ru/stm-urok-142-ws2812b-podklyuchaem-lenty-kolichestvom-150-300-svetodiodov-chast-1/) - Уже более полугода назад мы изучили работу интересных умных светодиодов WS2812B, управляемых последовательно по одной шине, а также закрепили полученные знания на практике, подключив ленту на таких светодиодов размером 1 метр и количеством 144 светодиода. Данный урок снискал немалый интерес среди любителей программирования. Но после этого мне в личных сообщениях и не только посыпались вопросы, - [AVR Урок 22. Изучаем АЦП. часть 3](https://narodstream.ru/avr-urok-22-izuchaem-acp-chast-3/) - Урок 22 Часть 3 Изучаем АЦП Продолжаем изучать АЦП. В прошлой части нашего занятия написали код полностью всех функций и даже посмотрели и оценили работу АЦП на практике. Только происходило это ручным способом и мы раз в 500 милисекунд постоянно вручную вызывали процесс преобразования, ждали результат, что заметно тратит ресурсы нашего контроллера. Для - [AVR Урок 22. Изучаем АЦП. часть 2](https://narodstream.ru/avr-urok-22-izuchaem-acp-chast-2/) - Урок 22 Часть 2 Изучаем АЦП Сегодня мы продолжаем изучать очень интересную технологию, а для микроконтроллера - периферию - аналого-цифровой преобразователь или как его называют АЦП. В прошлой части нашего занятия мы познакомились, что такое вообще АЦП, также познакомились, как он организован в контроллере AVR, а также создали новый проект и настроили его. - [AVR Урок 22. Изучаем АЦП. часть 1](https://narodstream.ru/avr-urok-22-izuchaem-acp-chast-1/) - Урок 22 Часть 1 Изучаем АЦП Сегодня мы начнем изучать очень интересную технологию, а для микроконтроллера - периферию - это аналго-цифровой преобразователь или как его называют АЦП. В английской аббревиатуре, гораздо чаще встречающейся в технической документации - ADC (Analog-to-Digital Converter). Это такая штука, которая преобразует величину электрического сигнала в цифровой код. Затем - [ESP8266 Урок 6. Подключаем кнопку](https://narodstream.ru/esp8266-urok-6-podklyuchaem-knopku/) - Продолжаем учиться писать код для микроконтроллера ESP8266. На данном занятии мы попробуем поработать с GPIO на вход и отследить уровень сигнала на одной из ножек порта. Работать также мы будем с платой NodeMCU. Поэтому для начала давайте глянем распиновку ножек данного модуля Следить за уровнем мы будем на ножке порта GPIO4, которая подключена - [STM Урок 7. HAL. LCD 20×4. 4-битный режим. Выводим информацию](https://narodstream.ru/stm-urok-7-biblioteka-hal-lcd-20x4-4-bitnyj-rezhim-vivodim-informaciju/) - Урок 7 HAL. LCD 20x4. 4-битный режим. Выводим информацию Сегодня мы продолжим работать с дисплеем 20x4, с которым мы начали работать на прошлом занятии. Мы написали инициализацию и проверили работу кода на практике. Теперь пытаемся что-то вывести на дисплей. Для этого сначала пишем функцию для записи данных в дисплей, она немного будет отличаться - [AVR Урок 13. ШИМ. Мигаем светодиодом плавно. Часть 2](https://narodstream.ru/avr-urok-13-shim-migaem-svetodiodom-plavno-chast-2/) - Урок 13 Часть 2 ШИМ. Мигаем светодиодом плавно Продолжаем работать с функцией, отвечающей за работу с ШИМ. Дальше заносим 0 в регистр счёта TCNT2, то есть обнуляем счётчик TCCR2=0b01101110; //Fast PWM, Clear OC2 on Compare Match, clkT2S/256 (From prescaler) (реальная частота получится 8мгц/256 = 31250 гц) TCNT2=0x00; // Timer Value = 0 - [AVR Урок 13. ШИМ. Мигаем светодиодом плавно. Часть 1](https://narodstream.ru/avr-urok-13-shim-migaem-svetodiodom-plavno-chast-1/) - Урок 13 Часть 1 ШИМ. Мигаем светодиодом плавно Сегодня мы изучим возможность использования широтно-импульсной модуляции в микроконтроллере AVR, или, как говорят в народе, ШИМ. В технической документации мы будем видеть чаще аббревиатуру PWM или pulse-width modulation, что преводится имено также. Что же такое вообще широтно-импульсная модуляция. ШИМ - это управление свечением светодиодов, - [AVR Урок 15. Внутренняя энергонезависимая память EEPROM. Часть 4](https://narodstream.ru/avr-urok-15-vnutrennyaya-energonezavisimaya-pamyat-eeprom-chast-4/) - Урок 15 Часть 4 Внутренняя энергонезависимая память EEPROM Продолжаем работать с внутренней памятью микроконтроллера Atmega8a - EEPROM. В части 1, части 2 и части 3 урока мы познакомились с организацией данной энергонезависимой памяти, а также записали туда данные в различных видах, а также считали однобайтную величину. Теперь нам предстоит ещё и считать - [AVR Урок 15. Внутренняя энергонезависимая память EEPROM. Часть 3](https://narodstream.ru/avr-urok-15-vnutrennyaya-energonezavisimaya-pamyat-eeprom-chast-3/) - Урок 15 Часть 3 Внутренняя энергонезависимая память EEPROM Продолжаем работать с внутренней памятью микроконтроллера Atmega8a - EEPROM. В части 1 и части 2 урока мы познакомились с организацией данной энергонезависимой памяти, а также записали и считали туда данные в виде однобайтной величины, а также записали двухбайтную величину. Теперь перед нами стоит задача - [AVR Урок 15. Внутренняя энергонезависимая память EEPROM. Часть 2](https://narodstream.ru/avr-urok-15-vnutrennyaya-energonezavisimaya-pamyat-eeprom-chast-2/) - Урок 15 Часть 2 Внутренняя энергонезависимая память EEPROM В прошлой части занятия мы написали две функции для работы с памятью EEPROM, практически взяв их из технической документации на контроллер. Это функция для записи данных в EEPROM, а другая - для чтения их оттуда. Одной функцией - функцией записи мы уже воспользовались. В - [AVR Урок 15. Внутренняя энергонезависимая память EEPROM. Часть 1](https://narodstream.ru/avr-urok-15-vnutrennyaya-energonezavisimaya-pamyat-eeprom-chast-1/) - Урок 15 Часть 1 Внутренняя энергонезависимая память EEPROM Я думаю, может не все, но очень многие знают, что в контроллерах AVR помимо основной оперативной памяти, а также памяти для хранения прошивки существует ещё и энергонезависимая память типа EEPROM. Данная память сделана по технологии электрического стирания информации, что в отличие от её предшественника - [ESP32 Урок 45. ULP. GPIO. Мигаем светодиодом](https://narodstream.ru/esp32-urok-45-ulp-gpio-migaem-svetodiodom/) - Продолжаем работу с сопроцессором ULP (ultra-low-power processor или процессор со сверхнизким потреблением). На данном уроке мы попытаемся организовать управление ножкой GPIO. Пока мы поработаем с портом GPIO на выход, для чего подключим к нашей схеме светодиод через ограничивающий резистор к ножке GPIO4, но только подключим мы к ней катодом, а анод подключим к питанию 3,3 вольта - [C Урок 23. Время жизни в C. Часть 2](https://narodstream.ru/c-urok-23-vremya-zhizni-v-c-chast_2/) - В предыдущей части урока мы познакомились с классами памяти, а также узнали то, какие данные сколько живут. Откроем файл main.c и в функции main() добавим перед нашими локальными переменными спецификатор auto После этого, если мы соберём и выполним наш проект, то у нас ничего не изменится. Тем самым мы выяснили, что мы вполне - [C Урок 23. Время жизни в C. Часть 1](https://narodstream.ru/c-urok-23-vremya-zhizni-v-c-chast_1/) - В уроке 21 мы познакомились с областью видимости данных. Также у различных типов данных, а также не только у данных существует и время жизни. То есть наступает такой момент, когда какие-то данные (переменные, экземпляры структур, массивы) перестают существовать. Если мы после этого момента попытаемся их использовать, то ситуация будет такая же, как если бы их - [ESP8266 Урок 22. FreeRTOS. Wi-Fi. Режим AP (точка доступа)](https://narodstream.ru/esp8266-urok-22-freertos-wi-fi-rezhim-ap-tochka-dostupa/) - Продолжаем программирование микроконтроллера ESP8266 с использованием операционной системы реального времени FREEFTOS. На данном уроке мы также продолжим тему беспроводной передачи данных и попробуем настроить наш модуль в режиме программной точки доступа (SOFTAP). После этого мы можем создавать подключение с узлами, настроенными в режиме станции, пытающимися подключиться к нашему модулю. Также мы попытаемся с помощью настройки - [PIC. Урок 17. MSSP. SPI. Внешний АЦП MCP 3201. Часть 2](https://narodstream.ru/pic-urok-17-mssp-spi-vneshnij-acp-mcp-3201-chast-2/) - В предыдущей части занятия мы познакомились с микросхемой MCP3201, подключили нашу схему, а также настроили проект. Если мы сейчас соберём и запустим наш проект, то мы на индикаторе ничего не увидим, так как индикатор у нас другой и подключен он к другим ножкам. Да и точки здесь у каждого разряда по умолчанию включатся, с этим - [PIC. Урок 17. MSSP. SPI. Внешний АЦП MCP 3201. Часть 1](https://narodstream.ru/pic-urok-17-mssp-spi-vneshnij-acp-mcp-3201-chast-1/) - Продолжаем изучение модуля MSSP, в частности его работу с шиной SPI. И сегодня мы уже поработаем с данной шиной на приём данных от устройства. Для этого мы возьмём микросхему MCP3201. Эта микросхема является внешним аналого-цифровым преобразователем. Разработчиком данной микросхемы является компания Microchip Technology. Данная микросхема не такая крутая, как может показаться на первый взгляд, скорость у неё не - [STM Урок 46. I2S AUDIO. Часть 7](https://narodstream.ru/stm-urok-46-i2s-audio-chast-7/) - Урок 46 Часть 7 I2S AUDIO В предыдущей части урока мы написали функцию воспроизведения звука, а также написали функцию остановки воспроизведения. Напишем ещё две функции для обработки прерываний от I2S в этот же файл audioplay.c void AudioPlay_HalfTransfer_CallBack(void) { buffer_offset = BUFFER_OFFSET_HALF; } void AudioPlay_TransferComplete_CallBack(void) { buffer_offset = BUFFER_OFFSET_FULL; if(!Is_cs43l22_Stop) - [STM Урок 46. I2S AUDIO. Часть 6](https://narodstream.ru/stm-urok-46-i2s-audio-chast-6/) - Урок 46 Часть 6 I2S AUDIO В предыдущей части урока мы продолжили и практически закончили писать инициализацию Аудио ЦАП и написали ещё некоторые немаловажные функции для работы с данной микросхемой. Напишем следующую нужную функцию //------------------------------------------------------ uint32_t cs43l22_Play(uint16_t DeviceAddr) { uint32_t counter = 0; if(Is_cs43l22_Stop == 1) { - [STM Урок 46. I2S AUDIO. Часть 5](https://narodstream.ru/stm-urok-46-i2s-audio-chast-5/) - Урок 46 Часть 5 I2S AUDIO В предыдущей части урока мы продолжили писать инициализацию микросхемы Аудио ЦАП. Мы занесли некоторые настройки в определенные регистры, а также написали функцию установки громкости каналов. Продолжаем дальше функцию cs43l22_Init counter += CODEC_IO_Write(DeviceAddr, 0x06, CODEC_STANDARD); /* Set the Master volume */ counter += cs43l22_SetVolume(DeviceAddr, - [STM Урок 46. I2S AUDIO. Часть 4](https://narodstream.ru/stm-urok-46-i2s-audio-chast-4/) - Урок 46 Часть 4 I2S AUDIO В предыдущей части урока мы продолжили писать инициализацию микросхемы Аудио ЦАП и написали функцию считывания идентификатора данной микросхемы по шине I2C. Продолжим дальше инициализацию. Для этого в файл audioplay.c напишем ещё одну функцию //------------------------------------------------------ uint32_t cs43l22_Init(uint16_t DeviceAddr, uint16_t OutputDevice, uint8_t Volume, uint32_t AudioFreq) { uint32_t counter - [STM Урок 46. I2S AUDIO. Часть 3](https://narodstream.ru/stm-urok-46-i2s-audio-chast-3/) - Урок 46 Часть 3 I2S AUDIO В предыдущей части урока мы написали функцию извлечения информации из звукового файла о параметрах данного файла и вывода этих параметров на дисплей. Напишем ещё некоторый код в функцию AudioOut_Init файла audioplay.c uint8_t index = 0, freqindex = 0xFF; for(index = 0; index < 8; - [STM Урок 46. I2S AUDIO. Часть 2](https://narodstream.ru/stm-urok-46-i2s-audio-chast-2/) - Урок 46 Часть 2 I2S AUDIO В предыдущей части урока мы создали и настроили проект в Cube MX, создали каркас приложения, добавили все макросы и глобальные переменные, которые в процессе написания кода нам потребуются. Также мы начали писать некоторые функции аудио-библиотеки. Создадим ещё одну функцию инициализации и добавим также в неё несколько - [STM Урок 46. I2S AUDIO. Часть 1](https://narodstream.ru/stm-urok-46-i2s-audio-chast-1/) - Урок 46 Часть 1 I2S AUDIO Сегодня мы начинаем изучение нового для нас интерфейса – это шина I2S, чем то похожая на I2C, но заточенная непосредственно на передачу цифрового аудиопотока. Описание и диаграммы протокола данной шины можно найти на странице 894 STM32F4 Reference manual. Ну если кратко, данная шина является также синхронной, - [AVR Урок 14. USART. Связь МК с ПК. Часть 5](https://narodstream.ru/avr-urok-14-usart-svyaz-mk-s-pk-chast-5/) - Урок 14 Часть 5 USART. Связь МК с ПК Сегодня мы продолжим изучение программирования интерфейса USART. В предыдущей части занятия мы научились передавать данные в ПК по шине USART. Сегодня мы попробуем их оттуда принять. Что для этого нам потребуется? Для этого нам потребуется обработать прерывание, которое возникает при окончании заполнения буфера чтения, - [AVR Урок 14. USART. Связь МК с ПК. Часть 3](https://narodstream.ru/avr-urok-14-usart-svyaz-mk-s-pk-chast-3/) - Урок 14 Часть 3 USART. Связь МК с ПК Сегодня мы продолжим изучение программирования интерфейса USART. В предыдущей части занятия мы закончили обзор регистров данного интерфейса и создали проект в Atmel Studio. Тепtрь мы продолжим работать с данным проектом. Ну и как обычно водится, для любого интерфейса или датчика, мы сначала напишем функцию - [AVR Урок 14. USART. Связь МК с ПК. Часть 2](https://narodstream.ru/avr-urok-14-usart-svyaz-mk-s-pk-chast-2/) - Урок 14 Часть 2 USART. Связь МК с ПК Сегодня мы продолжим изучение программирования интерфейса USART. Продолжаем изучать регистры микроконтроллера Atmega8, отвечающие за работу данного интерфейса. У интерфейса USART в контроллере Atmega8 существует целых три регистра управления - UCSRA, UCSRB и UCSRC. Аббревиатуры данных регистров расшифровываются как USART Control and Status Register. Из данной - [AVR Урок 14. USART. Связь МК с ПК. Часть 1](https://narodstream.ru/avr-urok-14-usart-svyaz-mk-s-pk-chast-1/) - Урок 14 Часть 1 USART. Связь МК с ПК Сегодня мы начнём изучение программирования очень интересного интерфейса - это интерфейс USART. USART (Universal Synchronous-Asynchronous Receiver-Transmitter (универсальный синхронно-асинхронный приемопередатчик)) - это такая последовательная шина, понодуплексовый обменный интерфейс, который необходим для "общения" между собой двух устройств. Как правило используется для обмена данными между устройствами на контроллерах - [AVR УРОК 35. Модуль LCD 16x2 с кнопками](https://narodstream.ru/avr-urok-35-modul-lcd-16x2-s-knopkami/) - Урок 35 Модуль LCD 16x2 с кнопками и регулятором Сегодня мы после долгого перерыва наконец-то вернёмся к программированию микроконтроллеров AVR. У нас по-прежнему Atmega 8a, а программировать мы будем опять дисплей 16х2, но дисплей данный организован в другом модуле, в котором уже установлен регулятор контрастности, а также установлено 7 кнопок. Данные кнопки подключены не - [ESP32 Урок 46. ULP. GPIO. Подключаем кнопку](https://narodstream.ru/esp32-urok-46-ulp-gpio-podklyuchaem-knopku/) - Продолжаем работу с сопроцессором ULP (ultra-low-power processor или процессор со сверхнизким потреблением). И также мы продолжаем работать с портом GPIO. Только на данном уроке мы попытаемся получить значение уровня на ножке GPIO, настроенной на вход. Мы оставим и светодиод, который мы на прошлом уроке подключили к ножке GPIO4 катодом и а анодом к питанию 3,3 вольта, а - [C Урок 25. Структуры](https://narodstream.ru/c-urok-25-struktury/) - В данном уроке мы познакомимся со структурами, для чего они нужны и как мы их можем использовать в наших программах. Нередко в программе может потребоваться объединить несколько переменных различного типа в какой-то один набор для достижения той или иной общей цели. Например, нам нужно описать какой-нибудь товар и создать для него какую-то переменную, которая могла - [ESP8266 Урок 23. FreeRTOS. UART. Приём данных](https://narodstream.ru/esp8266-urok-23-freertos-uart-priyom-dannyx/) - Продолжаем учиться писать код для микроконтроллера ESP8266. На данном занятии мы продолжим работу с интерфейсом UART и попробуем принять данные по данной шине. Такую работу мы уже проделывали в уроке 11, только операционную систему FreeRTOS мы не использовали, а с её использованием на приём данных по шине UART налагаются некоторые свои требования. Нам нежелательно уже - [PIC Урок 20. LCD 20×4. 4-битный режим](https://narodstream.ru/pic-urok-20-lcd-20x4-4-bitnyj-rezhim/) - Давайте немного отдохнём от сложных модулей и поработаем с нашим старым добрым символьным дисплеем, собранном на контроллере HD44780, в котором доступно для отображения 80 символов, организованных в 4 строки по 20 символов в каждой. В 10 уроке мы подключали данный режим, используя все его контакты данных, в 8-битном режиме. Но последнее время всё больше актуальна - [PIC. Урок 18. MSSP. SPI. SLAVE. Соединяем два контроллера. Часть 2](https://narodstream.ru/pic-urok-18-mssp-spi-slave-soedinyaem-dva-kontrollera-chast-2/) - В предыдущей части урока мы познакомились с режимом SLAVE SPI, собрали схему для нашего урока и создали проект для ведущего устройства. Теперь перейдём к ведомому устройству. Проект за основу для него был взят из прошлого урока с именем MCP3201 и проекту было присвоено имя SPI_SLAVE. Откроем наш проект в MPLAB X, сделаем его главным, зайдём в - [PIC. Урок 18. MSSP. SPI. SLAVE. Соединяем два контроллера. Часть 1](https://narodstream.ru/pic-urok-18-mssp-spi-slave-soedinyaem-dva-kontrollera-chast-1/) - Попытаемся теперь настроить наш модуль MSSP в режиме SPI, но уже в качестве ведомого устройства. Возможно, что это вряд ли понадобится, но для общего развития считаю это необходимым, так как такая возможность у контроллера есть и надо её использовать. Благодаря этому мы организуем обмен данными между двумя контроллерами. Один из контроллеров будет работать в режиме - [STM Урок 207. LL. STM32F4. Таймеры](https://narodstream.ru/stm-urok-207-ll-stm32f4-tajmery/) - Продолжаем работу над программированием линейки контроллеров STM32F4 с использованием библиотеки LL. Теперь давайте поработаем с таймерами. С таймерами мы работаем уже давно и постоянно, также и с использованием библиотеки LL, но только общались мы с применением данной библиотеки с таймерами только применяя контроллеры серии F1. Теперь настала пора поработать и с серией F4. Разница в - [AVR УРОК 36. Модуль LCD 16x2. Продолжаем работать с кнопками. Часть 3](https://narodstream.ru/avr-urok-36-modul-lcd-16x2-prodolzhaem-rabotat-s-chast-3/) - AVR. Продолжаем работать с кнопками. Обработка момента отжатия кнопки. - [AVR УРОК 36. Модуль LCD 16x2. Продолжаем работать с кнопками. Часть 2](https://narodstream.ru/avr-urok-36-modul-lcd-16x2-prodolzhaem-rabotat-s-chast-2/) - AVR. Продолжаем работать с кнопками. Обработка момента отжатия кнопки. - [AVR УРОК 36. Модуль LCD 16x2. Продолжаем работать с кнопками. Часть 1](https://narodstream.ru/avr-urok-36-modul-lcd-16x2-prodolzhaem-rabotat-s-chast-1/) - AVR. Продолжаем работать с кнопками. Обработка момента отжатия кнопки. - [AVR УРОК 37. Модуль LCD 16x2. МЕНЮ. Часть 4](https://narodstream.ru/avr-urok-37-modul-lcd-16x2-menju-chast-4/) - AVR. Создаем Меню и навигацию и управляем этим меню с помощью дисплея с кнопками - [AVR УРОК 37. Модуль LCD 16x2. МЕНЮ. Часть 3](https://narodstream.ru/avr-urok-37-modul-lcd-16x2-menju-chast-3/) - AVR. Создаем Меню и навигацию и управляем этим меню с помощью дисплея с кнопками - [AVR УРОК 37. Модуль LCD 16x2. МЕНЮ. Часть 2](https://narodstream.ru/avr-urok-37-modul-lcd-16x2-menju-chast-2/) - AVR. Создаем Меню и навигацию и управляем этим меню с помощью дисплея с кнопками - [AVR УРОК 37. Модуль LCD 16x2. МЕНЮ. Часть 1](https://narodstream.ru/avr-urok-37-modul-lcd-16x2-menju-chast-1/) - AVR. Создаем Меню и навигацию и управляем этим меню с помощью дисплея с кнопками - [ESP32 Урок 47. ULP. 1-Wire. Инициализация](https://narodstream.ru/esp32-urok-47-ulp-1-wire-inicializaciya/) - Продолжаем работу с сопроцессором ULP и на данном уроке мы попробуем поработать с устройством, взаимодействующим с контроллером по шине 1-Wire. Тем самым мы научимся переключать режимы работы ножки порта GPIO прямо в глубоком спящем режиме при помощи кода, работающего под управлением сопроцессора ULP. В качестве подопытного устройства мы будем использовать датчик температуры DS18B20, с которым мы неоднократно работали, - [C Урок 26. Указатели и адреса. Часть 2](https://narodstream.ru/c-urok-26-ukazateli-i-adresa-chast-2/) - В предыдущей части нашего урока мы познакомились с указателями, адресами, изучили операцию разыменовывания, также узнали, как создать указатель на массив. Ну, теперь, наконец-то, наступила практическая часть, хотя думаю, что после того, что мы увидели в теоретической части, нам не нужна никакая практика, там уже всё было. Но тем не менее, чтобы лучше прочувствовать тему указателей и - [C Урок 26. Указатели и адреса. Часть 1](https://narodstream.ru/c-urok-26-ukazateli-i-adresa-chast-1/) - На данном уроке мы рассмотрим интересную тему. Это указатели и адреса. На данной теме очень много начинающих программистов впадают в ступор, особенно когда видят звёздочки и амерсанды, которые для этого используются в языке C. Вернее, мы, конечно же, данную тему не рассмотрим. Мы её только легонько коснёмся. Рассмотреть в рамках одного урока такую серьёзную тему - [ESP8266 Урок 24. FreeRTOS. Wi-Fi. STA. UDP Client. Передача данных](https://narodstream.ru/esp8266-urok-24-freertos-wi-fi-sta-udp-client-tx/) - Продолжаем программирование микроконтроллера ESP8266 с использованием операционной системы реального времени FREEFTOS и, также продолжая тему передачи данных по беспроводной сети, мы с использованием ОС попробуем теперь передать какие-то осознанные данные. Для этого мы воспользуемся транспортным протоколом UDP, так как для этого в SDK всё имеется в наличии и нам не потребуется самостоятельно формировать наши пакеты. - [PIC Урок 21. MSSP. I2C. Переходник для LCD 20×4](https://narodstream.ru/pic-urok-21-mssp-i2c-perexodnik-dlya-lcd-20x4/) - Продолжаем работу с модулем MSSP, а именно с его возможностью передачи данных по шине I2C. На прошлом занятии мы подключили дисплей 20x4 на контроллере HD44780 посредством 4-разрядной передачи данных. Сегодня же мы попробуем аналогичный режим передачи данных на такой дисплей организовать с использованием специального переходника, который преобразует последовательный код I2C в параллельный и который предназначен - [STM Урок 208. LL. STM32F4. SPI. Дисплей TFT 240×320](https://narodstream.ru/stm-urok-208-ll-stm32f4-spi-displej-tft-240x320/) - Продолжаем программирование линейки контроллеров STM32F4 с использованием библиотеки LL. Я решил немного перескочить некоторые части привычного алгоритма изучения библиотек и перейти сразу к шине SPI. Данное решение принято было потому, что в плате STM32F429I-DISCOVERY, с которой мы работаем, установлен дисплей TFT разрешением 240x320 пикселей на контроллере ILI9341, который подключен к контроллеру как по интерфейсу LTDC, - [STM Урок 38. Плата NUCLEO STM32F401RE и оценочные платы](https://narodstream.ru/stm-urok-38-plata-nucleo-stm32f401re-i-ocenochnye-platy/) - Урок 38 Плата NUCLEO STM32F401RE и оценочные платы Общий вид отладочной платы STM32 NUCLEO-64 следующий Оценочная плата X-NUCLEO-IKS01A1 выглядит следующим образом Распиновка лапок портов на отладочной плате, к сожалению, не указана, как это, к примеру, сделано в случае платы STM32 F4 Discovery. Но найти распиновку не трудно в документации, также - [AVR УРОК 38. Atmega 328p Pro Mini](https://narodstream.ru/avr-urok-38-atmega_328p-pro-mini-2/) - Урок 38 Atmega 328p Pro Mini Сегодня мы познакомимся поближе с интересной отладочной платой, выполненной на базе микроконтроллера Atmega 328p. А наибольший интерес у программистов микроконтроллеров AVR данная плата вызвала тем, что помимо того, что контроллер здесь не слабый, но, самое главное, стоит она сущие копейки. Я, например, приобретал её всего лишь - [AVR Урок 21. Управление DS1307 кнопками. Часть 5](https://narodstream.ru/avr-urok-21-upravlenie-ds1307-knopkami-chast-5/) - Урок 21 Часть 5 Управление DS1307 кнопками Продолжим работать с обеспечением возможности интерактивного редактирования показателей регистров микросхемы DS1307. В предыдущей части нашего занятия мы написали код для редактирования показателей всех регистров данной микросхемы. Теперь для полной профессиональности нам осталось провести борьбу с дребезгом контактов. Для этого мы создадим отдельную функцию отслеживания состояний определенной кнопки. - [AVR Урок 21. Управление DS1307 кнопками. Часть 4](https://narodstream.ru/avr-urok-21-upravlenie-ds1307-knopkami-chast-4/) - Урок 21 Часть 4 Управление DS1307 кнопками Продолжим работать с обеспечением возможности интерактивного редактирования показателей регистров микросхемы DS1307. В предыдущей части нашего занятия мы написали код для редактирования числа месяца. Сегодня мы продолжим это дело и займёмся редактированием значения месяца. Всё делается аналогично, даже проще. Месяцев в любом году 12, - [AVR Урок 21. Управление DS1307 кнопками. Часть 3](https://narodstream.ru/avr-urok-21-upravlenie-ds1307-knopkami-chast-3/) - Урок 21 Часть 3 Управление DS1307 кнопками Продолжаем нашу работу над кнопками. В предыдущей части нашего занятия мы обработали нажатие кнопки выбора режима и "научили" данную кнопку управлять режимами изменения показаний. Дальнейшая наша задача - научиться управлять уже не режимами, а самими показаниями, находящимися в регистрах микросхемы DS1307. Поэтому нам нужно опросить на нажатие - [AVR Урок 21. Управление DS1307 кнопками. Часть 2](https://narodstream.ru/avr-urok-21-upravlenie-ds1307-knopkami-chast-2/) - Урок 21 Часть 2 Управление DS1307 кнопками Продолжаем работать с кнопками. В прошлой части нашего занятия мы создали и настроили проект, решили вопрос со слишком большой задержкой, добавили макросы и необходимые переменные, так сказать, провели все подготовительные мероприятия. Давайте сначала посмотрим, как у нас всё подключено к настоящей отладочной плате - [AVR Урок 21. Управление DS1307 кнопками. Часть 1](https://narodstream.ru/avr-urok-21-upravlenie-ds1307-knopkami-chast-1/) - Урок 21 Часть 1 Управление DS1307 кнопками Сегодня мы продолжаем работать с любимой нами микросхемой DS1307, и теперь наша задача, научиться управлять данной микросхемой с помощью кнопок, то есть устанавливать начальные показания не прошивкой, а интерактивно. Это очень важная задача, и для того, чтобы её решить, придется поработать и одной или двумя - [ESP32. Урок 37. RMT. 1-Wire. Инициализация. Часть 2](https://narodstream.ru/esp32-urok-37-rmt-1-wire-iicializaciya-chast-2/) - В предыдущей части урока мы подготовили несколько служебных функций и начали писать функцию инициализации устройства, в которой написали инициализацию приёмника и передатчика RMT. Выйдем из условия установки флагов канала передатчика и в противном случае выведем соответствующее сообщение в терминал rmt_driver_uninstall(rmt_tx.channel); } } else { ESP_LOGE(TAG, "failed to install tx driver"); } Затем - [ESP32. Урок 37. RMT. 1-Wire. Инициализация. Часть 1](https://narodstream.ru/esp32-urok-37-rmt-1-wire-inicializaciya-chast-1/) - Продолжаем работать с модулем RMT (Remote Control) и с сегодняшнего урока мы попытаемся с использованием данного модуля поработать с однопроводной шиной, по которой будут передаваться данные по протоколу 1-Wire. С данным протоколом мы уже неоднократно встречались, подключая датчик температуры DS18B20 с использованием других контроллеров. Например, с таким датчиком мы работали, подключая его к контроллеру AVR в - [C Урок 27. Адресная арифметика. Часть 2](https://narodstream.ru/c-urok-27-adresnaya-arifmetika-chast-2/) - В предыдущей части урока мы узнали, какие существуют арифметические операции с указателями, а также поработали с ними на практике. Теперь давайте поиграем с некоторыми особенными операциями, которые хоть и официально не стали участниками нашей пятёрки адресной арифметики, но всё же довольно часто встречаются в жизни и не менее интересны. Начнём вот с такой интересной операции - [C Урок 27. Адресная арифметика. Часть 1](https://narodstream.ru/c-urok-27-adresnaya-arifmetika-chast-1/) - На прошлом уроке мы познакомились с адресами и указателями, узнали, для чего они нужны и как мы их можем объявлять, получать и использовать в наших программах. Также существует такое понятие, как адресная арифметика. Правда, скорее всего, это не понятие, а возможность пороизводить над адресами и указателями какие-либо определённые арифметические действия. Какие же действия мы можем - [ESP8266 Урок 25. FreeRTOS. Wi-Fi. STA. UDP Client. Приём данных](https://narodstream.ru/esp8266-urok-25-freertos-wi-fi-sta-udp-client-priyom-dannyx/) - Продолжая работу по программированию микроконтроллера ESP8266 с использованием операционной системы реального времени FREEFTOS и, также продолжая тему передачи данных по беспроводной сети посредством протокола UDP, мы теперь попробуем принять данные с сервера. До сих пор мы пока только передавали пакеты с нашего клиента. Поэтому я добавил в мои программки для Android и для Windows ответы - [PIC. Урок 19. MSSP. I2C. Подключаем внешний EEPROM. Часть 3](https://narodstream.ru/pic-urok-19-mssp-i2c-podklyuchaem-vneshnij-eeprom-chast-3/) - В предыдущей части урока мы познакомились с микросхемой памяти EEPROM AT24C32D, настроили наш проект и написали ряд служебных функций. Прежде чем теперь мы займёмся непосредственно записью и чтением памяти микросхемы, перейдём в файл led.c и немного его поправим, так как он у нас настроен для отображения показаний АЦП, включена точка, отключается 4 разряд в случае - [PIC. Урок 19. MSSP. I2C. Подключаем внешний EEPROM. Часть 2](https://narodstream.ru/pic-urok-19-mssp-i2c-podklyuchaem-vneshnij-eeprom-chast-2/) - В предыдущей части урока мы познакомились с шиной I2C и с её организацией в контроллере PIC16. Сегодня мы поработаем с шиной I2C в режиме ведущего устройства. И будем мы как принимать байты, та их и передавать. В качестве подопытного устройства мы возьмём микросхему EEPROM — AT24C32D, которая установлена в модуле с часовой микросхемой DS3231. С данной микросхемой мы - [PIC. Урок 19. MSSP. I2C. Подключаем внешний EEPROM. Часть 1](https://narodstream.ru/pic-urok-19-mssp-i2c-podklyuchaem-vneshnij-eeprom-chast-1/) - В прошлых занятиях мы проработали тему организации передачи данных по шине SPI в модуле MSSP. Но мы также знаем, что кроме режима SPI наш модуль MSSP может работать аппаратно также и с шиной I2C. Шина I2C (Inter-Integrated Circuit) — это шина, управляемая по двум проводам и по определённому протоколу. Данная шина является последовательной и асимметричной. Для - [STM Урок 37. Дисплей TFT 240x320 8bit. Часть 9](https://narodstream.ru/stm-urok-37-displej-tft-240x320-8bit-chast-9/) - Урок 37 Часть 9 Дисплей TFT 240x320 8bit В прошлой части данного урока мы закончили работать со шрифтами и строками и начали работать уже с изображениями, написав функцию считывания изображения с USB Flash и вывода её на экран. Сегодня мы продолжим данную работу. Напишем прототип этой функции. Добавим тест для вывода - [STM Урок 37. Дисплей TFT 240x320 8bit. Часть 8](https://narodstream.ru/stm-urok-37-displej-tft-240x320-8bit-chast-8/) - Урок 37 Часть 8 Дисплей TFT 240x320 8bit В прошлой части данного урока мы написали ряд функций по работе со шрифтами. Также мы не дописали функцию вывода строк на экран в видеоверсии, в текстовой она выложена полностью. Поэтому проверим мы данную функцию уже в этой части. Соберём код, прошьём контроллер и посмотрим результат - [STM Урок 37. Дисплей TFT 240x320 8bit. Часть 7](https://narodstream.ru/stm-urok-37-displej-tft-240x320-8bit-chast-7/) - Урок 37 Часть 7 Дисплей TFT 240x320 8bit В прошлой части данного урока мы написали очень сложную функцию по работе со шрифтами, так как шрифты у нас будут подгружаться не из массивов, а с внешнего USB Flesh, который мы подключили к плате посредством кабеля OTG. Ну, раз уж функция такая сложная, то не - [STM Урок 37. Дисплей TFT 240x320 8bit. Часть 6](https://narodstream.ru/stm-urok-37-displej-tft-240x320-8bit-chast-6/) - Урок 37 Часть 6 Дисплей TFT 240x320 8bit В прошлой части данного урока мы закончили писать тесты для вывода примитивов на экран дисплея, а также начали работать с различными шрифтами, написав несколько структур и переменных и добавив функцию инициализации шрифтов при старте программы Сегодня мы также продолжим работать со шрифтами. Напишем - [STM Урок 37. Дисплей TFT 240x320 8bit. Часть 5](https://narodstream.ru/stm-urok-37-displej-tft-240x320-8bit-chast-5/) - Урок 37 Часть 5 Дисплей TFT 240x320 8bit В прошлой части данного урока мы продолжили писать функции для интересных тестов, позволяющих оценить работоспособность нашего дисплея. Сегодня мы также продолжим данное интересное дело. Добавим функцию отрисовки прямоугольника, но уже не закрашенного void TFT9341_DrawRect(uint16_t color, uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2) { - [STM Урок 37. Дисплей TFT 240x320 8bit. Часть 4](https://narodstream.ru/stm-urok-37-displej-tft-240x320-8bit-chast-4/) - Урок 37 Часть 4 Дисплей TFT 240x320 8bit В прошлой части данного урока мы закончили инициализацию дисплея и уже написали парочку простейших теста для оценки его работы, что показало, что дисплей не смотря на его крошечную цену вполне достойный. Поэтому будем продолжать с ним работать и напишем в файле ili9341.c функцию для вывода - [STM Урок 37. Дисплей TFT 240x320 8bit. Часть 3](https://narodstream.ru/stm-urok-37-displej-tft-240x320-8bit-chast-3/) - Урок 37 Часть 3 Дисплей TFT 240x320 8bit В прошлой части данного урока мы начали писать инициализацию дисплея и уже проверили самое главное - мы считали идентификатор дисплея, увидели его на символьном дисплее, а это значит, что подключено всё правильно и с дисплеем мы уже общаемся. Продолжим писать инициализацию дисплея далее, также время от - [STM Урок 37. Дисплей TFT 240x320 8bit. Часть 2](https://narodstream.ru/stm-urok-37-displej-tft-240x320-8bit-chast-2/) - Урок 37 Часть 2 Дисплей TFT 240x320 8bit В прошлой части данного урока мы практически завершили первоначальные настройки для работы с дисплеем. Теперь начнём писать функции. Первым делом напишем функцию для передачи команды дисплею while (micros--); } //-------------------------------------------------------------- void TFT9341_SendCommand(unsigned char cmd) { ADDR_CMD = cmd; } //-------------------------------------------------------------- Данная функция получилась такой простой благодаря - [STM Урок 37. Дисплей TFT 240x320 8bit. Часть 1](https://narodstream.ru/stm-urok-37-displej-tft-240x320-8bit-chast-1/) - Урок 37 Часть 1 Дисплей TFT 240x320 8bit Сегодня мы к контроллеру STM32 попробуем подключить дисплей TFT разрешением 240x320. Модуль дисплея выполнен на контроллере ILI9341 и подключается посредством 8-разрядной шины и подключать мы его будем, используя технологию FSMC. Это технология, позволяющая работать с контроллером дисплея, как с обычной памятью, не заботясь также о том, - [AVR Урок 16. Интерфейс TWI (I2C). Часть 7](https://narodstream.ru/avr-urok-16-interfejs-twi-i2c-chast-7/) - Урок 16 Часть 7 Интерфейс TWI (I2C) В предыдущей части занятия уже продолжили свою работу с отправкой значений в память микросхемы EEPROM по интерфейсу TWI. Только проверить мы смогли это, исключительно веря статусам. А в данной части урока мы закрепим полученные знания и подключим по шине I2C переходник для модуля символьного дисплея, тем самым также получим - [AVR Урок 16. Интерфейс TWI (I2C). Часть 6](https://narodstream.ru/avr-urok-16-interfejs-twi-i2c-chast-6/) - Урок 16 Часть 6 Интерфейс TWI (I2C) В предыдущей части занятия уже продолжили свою работу с отправкой значений в память микросхемы EEPROM по интерфейсу TWI. Только проверить мы смогли это, исключительно веря статусам. А сегодня мы уже это проверим точно, считав данные из микросхемы. Соответственно здесь всё будет не совсем просто. Функция и вообще процедура - [AVR Урок 16. Интерфейс TWI (I2C). Часть 5](https://narodstream.ru/avr-urok-16-interfejs-twi-i2c-chast-5/) - Урок 16 Часть 5 Интерфейс TWI (I2C) В предыдущей части занятия уже начали работать с кодом всерьёз и передали адрес устройства и адрес первой ячейки памяти в шины TWI. Ну, давайте продолжим начатое дело. Дальше мы работаем в соответствии с той диаграммой из даташита микросхемы, которую мы посмотрели в предыдущей части урока. Теперь мы уже начинаем - [AVR Урок 16. Интерфейс TWI (I2C). Часть 4](https://narodstream.ru/avr-urok-16-interfejs-twi-i2c-chast-4/) - Урок 16 Часть 4 Интерфейс TWI (I2C) В предыдущей части занятия мы поближе познакомились со всеми практически регистрами шины TWI и уже написали код отправки в шину условия СТАРТ. Причем не только написали, а ещё и проверили отправку, считав данные из регистра статуса через порт USART. Также мы бегло ознакомились с протоколом передачи и - [AVR Урок 16. Интерфейс TWI (I2C). Часть 3](https://narodstream.ru/avr-urok-16-interfejs-twi-i2c-chast-3/) - Урок 16 Часть 3 Интерфейс TWI (I2C) В предыдущей части занятия мы продолжили знакомство с шиной I2C и уже создали проект для того, чтобы занятия проработать на практике. Также мы познакомились с интересной микросхемой EEPROM AT24C32, работающей на данной шине. Продолжаем изучение шины. Шину мы инициализировали в проекте, выставив ей скрость с - [AVR Урок 16. Интерфейс TWI (I2C). Часть 2](https://narodstream.ru/avr-urok-16-interfejs-twi-i2c-chast-2/) - Урок 16 Часть 2 Интерфейс TWI (I2C) В предыдущей части занятия мы кратко ознакомились с шина I2C или TWI (Two-wire Serial Interface), а также узнали, как именно она работает, как к ней можно что-то подключить, также познакомились с её регистрами, ну и кое-какие узнали нюансы, как, например настроить частоту или скорость данной шины. Продолжим наши - [AVR Урок 16. Интерфейс TWI (I2C). Часть 1](https://narodstream.ru/avr-urok-16-interfejs-twi-i2c-chast-1/) - Урок 16 Часть 1 Интерфейс TWI (I2C) Опыт нашей предыдущей работы с микроконтроллерами AVR показал то, что мы уже многому научились, в том числе общаться с внешними устройствами типа ПК. Теперь, я думаю, все понимают, что этого недостаточно. Есть масса устройств и датчиков, которые нам хочется подключить к микроконтроллера и, мало того, - [AVR Урок 12. LCD индикатор 16×2. Часть 5](https://narodstream.ru/avr-urok-12-lcd-indikator-16x2-chast-5/) - Урок 12 Часть 5 LCD индикатор 16×2 Сегодня мы продолжим изучение жидкокристаллического индикатора символьного, который способен выводить определённые символы в две строки по 16 символов в каждую. В прошлой части мы завершили и проверили написание кода функции, которая выводит любой символ на экран дисплея. Теперь пришло время написать функцию вывода на экран целой - [AVR Урок 12. LCD индикатор 16×2. Часть 4](https://narodstream.ru/avr-urok-12-lcd-indikator-16x2-chast-4/) - Урок 12 Часть 4 LCD индикатор 16×2 Сегодня мы продолжим изучение жидкокристаллического индикатора символьного, который способен выводить определённые символы в две строки по 16 символов в каждую. Вернёмся в проект Atmel Studio. В прошлой части мы завершили инициализацию дисплея. Теперь хотелось бы что-нибудь увидеть на дисплее. Для этого нам нужна будет ещё одна - [AVR Урок 12. LCD индикатор 16×2. Часть 3](https://narodstream.ru/avr-urok-12-lcd-indikator-16x2-chast-3/) - Урок 12 Часть 3 LCD индикатор 16×2 Сегодня мы продолжим изучение жидкокристаллического индикатора символьного, который способен выводить определённые символы в две строки по 16 символов в каждую. Вернёмся в проект Atmel Studio и, используя написанную в прошлой части функцию, передадим в контроллер дисплея двоичное число 11 три раза в функции LCD_ini, также применяя - [AVR Урок 12. LCD индикатор 16×2. Часть 2](https://narodstream.ru/avr-urok-12-lcd-indikator-16x2-chast-2/) - Урок 12 Часть 2 LCD индикатор 16×2 Сегодня мы продолжим изучение жидкокристаллического индикатора символьного, который способен выводить определённые символы в две строки по 16 символов в каждую. Вернёмся в проект Atmel Studio и начнём думать, как нам начать писать инициализацию дисплея. По приведённой выше диаграмме из даташита мы видим, что мы через определённое время - [AVR Урок 12. LCD индикатор 16×2. Часть 1](https://narodstream.ru/avr-urok-12-lcd-indikator-16x2-chast-1/) - Урок 12 Часть 1 LCD индикатор 16×2 Сегодня мы начнём изучение жидкокристаллического индикатора символьного, который способен выводить определённые символы в две строки по 16 символов в каждую. Изучать мы данный индикатор будем с целью его подключения к микроконтроллеру AVR и управления им. Выглядит индикатор, с которым мы будем работать вот таким вот - [ESP32 Урок 4. Подключаем кнопку](https://narodstream.ru/esp32-urok-4-podklyuchaem-knopku/) - На прошлом уроке нам удалось создать свой проект и попробовать использование порта ввода-вывода на выход. В результате получилось помигать светодиодом, подключенным к определённой ножке порта. А теперь мы попробуем испытать порт на вход. Для этого мы сначала подключим кнопку, например к ножке GPIO4 и написать код, который будет отслеживать её состояние. Подключим кнопку одним контактом - [C Урок 4. Переменные и типы данных. Часть 2](https://narodstream.ru/c-urok-4-peremennye-i-tipy-dannyx-chast-2/) - В предыдущей части занятия мы познакомились с типами данных и переменными. Сегодня в качестве практической части мы попробуем объявить несколько переменных разных типов, проинициализировать их и вывести их значения в консоль. Создадим новый каталог с именем MYPROG04, скопируем туда все файлы проекта прошлого урока с именем MYPROG03, также изменим в содержимом файла build.cmd имя исполняемого - [C Урок 4. Переменные и типы данных. Часть 1](https://narodstream.ru/c-urok-4-peremennye-i-tipy-dannyx-chast-1/) - Продолжаем освоение языка C. И теперь пришло время познакомиться с типами данных, а также способами их представления, одним из которых являются переменные. Также есть ещё константы, но с ними мы будем знакомиться немного позже. С типами данных мы уже частично познакомились, когда выводили данные различного типа напрямую в консоль посредством функции printf, не задавая их - [ESP8266 Урок 4. Прошиваем ESP-01](https://narodstream.ru/esp8266-urok-4-proshivaem-esp-01/) - Продолжаем работу с микроконтроллером ESP8266, а вернее с FLASH-памятью, подключенной к ней для хранения ПО и настроек. Сегодня мы попробуем в эту память что-нибудь записать, или, как говорят, прошить её, тем самым обновить программное обеспечение до другой более новой версии. Также, при необходимости, мы теперь можем вернуть прошивку прошлой версии, которая была в модуле, так - [PIC Урок 4. Кнопка](https://narodstream.ru/pic-urok-4-knopka/) - Сегодня мы расширим свой кругозор по изучению работы портов микроконтроллера и изучим второе назначение порта — работу на вход. И для изучения работы на вход мы применим обычную тактовую кнопку. Ну и давайте также как и в случаях с другими контроллерами в целях экономии времени на создание нового проекта в будущем, когда дело будет касаться - [STM Урок 6. Библиотека HAL. LCD 20x4. 4-битный режим](https://narodstream.ru/stm-urok-6-biblioteka-hal-lcd-20x4-4-bitnyj-rezhim/) - Урок 6 Библиотека HAL. LCD 20x4. 4-битный режим Сегодня мы начинаем работать с подключением дисплея. Так как светодиоды - это очень красиво, но нужно ещё как-то и информацию какую-то смотреть. Мы будем подключать дисплей на контроллере HD44780, хотя в даташите указан S6A0069, который является также аналогом первого. Дисплей отображает символьную информацию размерностью 4 строки - [AVR Урок 11. Динамическая индикация. Часть 2](https://narodstream.ru/avr-urok-11-dinamicheskaya-indikaciya-chast-2/) - Урок 11 Часть 2 Динамическая индикация В прошлой части нашего занятия мы познакомились с принципом динамической индикации, собрали схему в протеусе. Теперь закончим со сборкой и перейдём в проект, так как без соответствующего кода ничего работать на будет. Начнем с порта B. Он у нас был сконфигурирован весь полностью на вход, - [AVR Урок 11. Динамическая индикация. Часть 1](https://narodstream.ru/avr-urok-11-dinamicheskaya-indikaciya-chast-1/) - Сегодня мы попробуем подключить к микроконтроллеру не один одноразрядный индикатор, а два. То есть подключим ещё один такой индикатор. Только если мы подключим его точно так же, как и первый, то мы на это дело задействуем практически все ножки портов контроллера, что сделает наш проект нежизнеспособный. Поэтому на помощь нам придет в этом случае другой способ - [AVR УРОК 39. Акселерометр LSM6DS3. Часть 4](https://narodstream.ru/avr-urok-39-akselerometr-lsm6ds3-chast-4/) - Урок 39 Часть 4 Акселерометр LSM6DS3 Продолжаем работать с подключением акселерометра. В прошлой части занятия мы закончили писать исходный код инициализации датчика. Сегодня мы уже будем заниматься считыванием показаний нашего датчика по трем осям, которые время от времени нам нужно будет отправлять в шину USART. Для этого создадим функцию void Accel_ReadAcc(void) { - [AVR УРОК 39. Акселерометр LSM6DS3. Часть 3](https://narodstream.ru/avr-urok-39-akselerometr-lsm6ds3-chast-3/) - Урок 39 Часть 3 Акселерометр LSM6DS3 Продолжаем работать с подключением акселерометра. В прошлой части занятия мы уже написали некоторый код и считали идентификатор датчика, что даёт нам основание считать, что шину мы настроили правильно, и что мы общаемся именно с тем датчиком. Сегодня мы продолжим писать код инициализаци. Теперь начнем - [AVR УРОК 39. Акселерометр LSM6DS3. Часть 2](https://narodstream.ru/avr-urok-39-akselerometr-lsm6ds3-chast-2/) - Урок 39 Часть 2 Акселерометр LSM6DS3 Продолжаем работать с подключением датчика. В прошлой части занятия мы подключили плату с датчиком к отладочной плате с контроллером, а также подключили переходник USART для мониторинга показаний датчика, также создали проект, инициализировали USART и написали код для проверки данного интерфейса, но пока его не - [AVR УРОК 39. Акселерометр LSM6DS3. Часть 1](https://narodstream.ru/avr-urok-39-akselerometr-lsm6ds3-chast-1/) - Урок 39 Часть 1 Акселерометр LSM6DS3 Сегодня мы продолжим знакомство, которое мы начали в уроке 38, с интересной отладочной платой, выполненной на базе микроконтроллера Atmega 328p. На прошлом занятии мы смогли подключить данную плату к программатору и использовать её как полноправную отладочную плату для программирования в среде Atmel Studio. Сегодня мы - [ESP32 Урок 48. ULP. 1-Wire. Передача данных](https://narodstream.ru/esp32-urok-48-ulp-1-wire-peredacha-dannyx/) - Продолжаем работу с сопроцессором ULP и на данном уроке мы продолжим работу с устройством, взаимодействующим с контроллером по шине 1-Wire, а именно с датчиком температуры DS18B20. И на на данном уроке мы попытаемся передать данные из нашего контроллера в датчик. Это могут быть команды, а также любые данные. Схема наша осталась та же, что и в - [C Урок 28. Указатели на структуры](https://narodstream.ru/c-urok-28-ukazateli-na-struktury/) - В двух последних уроках мы плотно занимаемся с адресацией данных в языке C, изучили указатели, взятие адреса, разыменование, доступ к адресам массивов и после этого много чего знаем в этом плане. Хотелось бы отдельно поговорить об указателях, которые указывают на структурированные типы данных, то есть на переменные типов структур. Причём, отдельного внимания заслуживают не сколько - [ESP8266 Урок 26. FreeRTOS. Wi-Fi. STA. UDP Server](https://narodstream.ru/esp8266-urok-26-freertos-wi-fi-sta-udp-server/) - Продолжая работу по программированию микроконтроллера ESP8266 с использованием операционной системы реального времени FREEFTOS и, также продолжая тему передачи данных по беспроводной сети посредством протокола UDP, на данном уроке мы попробуем создать простой сервер, который будет слушать постоянно какой-нибудь порт, и если вдруг получит на него пакет с числом, то должен будет ответить отправителю подобным пакетом - [PIC Урок 22. MSSP. I2C. Slave. Соединяем два микроконтроллера. Часть 2](https://narodstream.ru/pic-urok-22-mssp-i2c-slave-soedinyaem-dva-mikrokontrollera-chast2/) - В предыдущей части занятия мы познакомились с ведомым режимом I2C в модуле MSSP, подключили нашу схему и создали проекты. Отключим от проекта файлы led.h и led.c, затем их удалим из него физически. Перейдём в файл main.c и уберём также подключение библиотеки индикатора #include "led.h" Также удалим вот эти макросы #define DEV_ADDR 0xAE #define address 0x0A Удалим - [PIC Урок 22. MSSP. I2C. Slave. Соединяем два микроконтроллера. Часть 1](https://narodstream.ru/pic-urok-22-mssp-i2c-slave-soedinyaem-dva-mikrokontrollera-chast1/) - Попытаемся теперь настроить наш модуль MSSP в режиме I2С, но уже в качестве ведомого устройства. Возможно, что когда-то мы встретимся с ситуацией, когда нужно будет к контроллеру PIC16 подключить какой-нибудь датчик, контроллер будет собирать и обрабатывать данные с этого датчика, а затем передавать на более мощный контроллер, который будет потом уже обрабатывать также эти данные, - [STM Урок 209. LL. STM32F4. SPI. Дисплей TFT 240×320. DMA](https://narodstream.ru/stm-urok-209-ll-stm32f4-spi-displej-tft-240x320-dma/) - Продолжим работу по программированию линейки контроллеров STM32F4 с использованием библиотеки LL. Также продолжим работу с дисплеем TFT разрешением 240x320 на контроллере ILI9341, подключенному к контроллеру STM32F4 по шине SPI. Только на данном уроке мы будем передавать данные в дисплей с использованием DMA и убедимся на практике, насколько это ускорит процесс работы дисплея. Мы уже с - [AVR Урок 33. SPI. Карта SD. FAT. Часть 6](https://narodstream.ru/avr-urok-33-spi-karta-sd-fat-chast-6/) - Урок 33 Часть 6 SPI. Карта SD. FAT В предыдущей части занятия мы считали данные с флеш-карты и записали на неё также данные, также мы проверили данные результаты. А в данной части мы устраним мелкие ошибки, а также вместо цифрового отображения результата действий с картой SD мы напишем код для отображения в - [AVR Урок 33. SPI. Карта SD. FAT. Часть 5](https://narodstream.ru/avr-urok-33-spi-karta-sd-fat-chast-5/) - Урок 33 Часть 5 SPI. Карта SD. FAT В прошлой части занятия мы подключили библиотеку для работы с файловой системой и уже смогли не только примонтировать флеш-карту, а уже и открыть файл. Сегодня мы будем продолжать начатое дело и попытаемся уже считать с карты какую-либо информацию. Чтобы считать какие-то данные из открытого - [AVR Урок 33. SPI. Карта SD. FAT. Часть 4](https://narodstream.ru/avr-urok-33-spi-karta-sd-fat-chast-4/) - Урок 33 Часть 4 SPI. Карта SD. FAT Продолжаем работать с флеш-картой SD. В прошлой части нашего урока мы работали с блоками. Нам удалось считать блок памяти величиной 512 байт с карты, а также удалось такой же блок на карту записать. Только обычно, как мы знаем, с данной картой не работfют блоками - [AVR Урок 33. SPI. Карта SD. FAT. Часть 3](https://narodstream.ru/avr-urok-33-spi-karta-sd-fat-chast-3/) - Урок 33 Часть 3 SPI. Карта SD. FAT Продолжим начатое дело по программированию и использованию флеш-карты SD. В предыдущей части нашего урока мы написали инициализацию нашей карты, теперь пришло время что-то с неё считать, а может даже и записать, пока не обращая внимание на структурирование данных в виде файловой системы. Поэтому создадим функцию - [AVR Урок 33. SPI. Карта SD. FAT. Часть 2](https://narodstream.ru/avr-urok-33-spi-karta-sd-fat-chast-2/) - Урок 33 Часть 2 SPI. Карта SD. FAT В прошлой части нашего занятия мы познакомились с флеш-картой SD, увидели, что она может работать как по интерфейсу SPI, так и по SDIO, но решили остановиться на SPI и уже начали писать исходный код. Остановились мы на том что написали реализацию передачи байта по - [AVR Урок 33. SPI. Карта SD. FAT. Часть 1](https://narodstream.ru/avr-urok-33-spi-karta-sd-fat-chast-1/) - Урок 33 Часть 1 SPI. Карта SD. FAT Сегодня мы продолжим нашу любимую тему по интерфейсу SPI. Закончили мы с данной шиной уроком по подключению друг к другу контроллеров Atmega8a и ATTtiny2313. А сегодня мы по данному интерфейсу попробуем подключить к микроконтроллеру по данной шине карту памяти SD (Secure Digital). Данная карта может подключаться - [ESP32 Урок 2. Настраиваем toolchain и пишем свою прошивку в Espressif IDE](https://narodstream.ru/esp32-urok-2-nastraivaem-toolchain-i-pishem-svoyu-proshivku-v-ide-es/) - В прошлом занятии мы немного познакомились с линейкой микроконтроллеров ESP32. Теперь пришло время попробовать себя в написании ПО для него. Писать прошивки так же, как и в случае с ESP8266, можно несколькими способами. Можно это делать в IDE Arduino, установив необходимый пакет библиотек. Также можно скачать тулчейн с официального сайта или ещё с какого-то ресурса и - [AVR Урок 34. Дисплей TFT 240×320 8bit. Часть 7](https://narodstream.ru/avr-urok-34-displej-tft-240x320-8bit-chast-7/) - Урок 34 Часть 7 Дисплей TFT 240×320 8bit В прошлой части нашего урока мы написали ещё несколько функций для работы с дисплеем и вывели на его экран другие примитивы (линии, прямоугольники, окружности). В данной заключительной части урока мы поработаем уже с текстом. Это будет нелёгкая работа, но зато успокаивет то, что эта часть будет - [AVR Урок 34. Дисплей TFT 240×320 8bit. Часть 6](https://narodstream.ru/avr-urok-34-displej-tft-240x320-8bit-chast-6/) - Урок 34 Часть 6 Дисплей TFT 240×320 8bit В предыдущей части нашего занятия мы написали ещё несколько функций для работы с дисплеем и вывели некоторые примитивы на его экран. Теперь давайте зайдём в файл ili9341.c и напишем вывод на экран дисплея линии с координатами начала и окончания. Так как эта функиция оказалась непростой, то - [AVR Урок 34. Дисплей TFT 240×320 8bit. Часть 5](https://narodstream.ru/avr-urok-34-displej-tft-240x320-8bit-chast-5/) - Урок 34 Часть 5 Дисплей TFT 240×320 8bit В прошлой части нашего урока мы написали ещё несколько функций для работы с дисплеем и залили экран определенным цветом. Давайте теперь окрасим дисплей во все те цвета, которые мы прописали в макросах. Зайдём в функцию main() и напишем там код после вызова функции инициализации дисплея - [AVR Урок 34. Дисплей TFT 240×320 8bit. Часть 4](https://narodstream.ru/avr-urok-34-displej-tft-240x320-8bit-chast-4/) - Урок 34 Часть 4 Дисплей TFT 240×320 8bit В предыдущей части нашего занятия по дисплею мы написали функцию ориентации дисплея, а также завершили писать функцию инициализации дисплея. Напишем теперь функцию заливки определённой области памяти данными пикселей одного цвета для последующего использования в функции заливки одним цветом прямоугольной области //-------------------------------------------------------------- void TFT9341_Flood(unsigned - [AVR Урок 34. Дисплей TFT 240×320 8bit. Часть 3](https://narodstream.ru/avr-urok-34-displej-tft-240x320-8bit-chast-3/) - Урок 34 Часть 3 Дисплей TFT 240×320 8bit В прошлой части нашего урока мы написали ряд очень важных функций для работы с дисплеем, а также считали его идентификатор, что позволило нам стать уверенными в том, что мы с дисплеем нормально общаемся по 8-разрядной шине и что мы общаемся именно с тем дисплеем, - [AVR Урок 34. Дисплей TFT 240×320 8bit. Часть 2](https://narodstream.ru/avr-urok-34-displej-tft-240x320-8bit-chast-2/) - Урок 34 Часть 2 Дисплей TFT 240×320 8bit В предыдущей части нашего урока мы познакомились с модулем графического дисплея на контроллере ILI9341, Также мы создали проект, добавили в него ряд макроподстановок и создали функцию инициализации. Правда, у данной функции пока ещё нет тела, но этот пробел мы сегодня устраним. Но чтобы продолжить - [AVR Урок 34. Дисплей TFT 240×320 8bit. Часть 1](https://narodstream.ru/avr-urok-34-displej-tft-240x320-8bit-chast-1/) - Урок 34 Часть 1 Дисплей TFT 240×320 8bit Сегодня мы вернёмся к Atmega8, так как что-то у меня случилось с моей Atmega328. Но для наших задач нам вполне подойдёт и восьмая серия. Сегодня мы попробуем подключить к нашему контроллеру дисплей уже графический цветной разрешением 320 на 240 точек, управляемый по восьмибитному параллельному - [ESP32 Урок 11. SPI. Дисплей TFT 240×320. Часть 3](https://narodstream.ru/esp32-urok-11-spi-displej-tft-240x320-chast3/) - В предыдущей части урока мы начали писать тесты для проверки работы дисплея, добавляя при этом дополнительные служебные функции. Вернёмся в файл spi_ili9341.c и и выше функции TFT9341_ini добавим функцию вывода прямой линии на экран //------------------------------------------------------------------ void TFT9341_DrawLine(spi_device_handle_t spi, uint16_t color, uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2) { int steep = abs(y2-y1)>abs(x2-x1); if(steep) - [ESP32 Урок 11. SPI. Дисплей TFT 240×320. Часть 2](https://narodstream.ru/esp32-urok-11-spi-displej-tft-240x320-chast2/) - В предыдущей части урока мы подготовили функции по работе с шиной SPI, а также написали функцию инициализации контроллера дисплея. Выше функции TFT9341_ini добавим функцию заполнения одним цветом всего экрана полностью //------------------------------------------------------------------- void TFT9341_FillScreen(spi_device_handle_t spi, uint16_t color) { } //------------------------------------------------------------------- Заполнять экран мы будем блоками максимального размера, который мы определили при инициализации модуля SPI. Поэтому - [ESP32 Урок 11. SPI. Дисплей TFT 240×320. Часть 1](https://narodstream.ru/esp32-urok-11-spi-displej-tft-240x320-chast1/) - На данном уроке мы попробуем к контроллеру ESP32 подключить дисплей TFT разрешением 240×320 по интерфейсу SPI. С подобным дисплеем мы уже работали неоднократно с применением других контроллеров. Мы подключали его и по 8-разрядной, и по 16-разрядной параллельным шинам. Работали мы с ним и с использованием интерфейса SPI, подключая его к контроллеру STM32 вот в этом - [C Урок 29. Указатели в аргументах функций. Часть 2](https://narodstream.ru/c-urok-29-ukazateli-v-argumentax-funkcij-chast-2/) - В предыдущей части урока мы узнали, как создать функцию с указателями в её аргументах, как такую функцию вызвать и также поработали с передачей указателей на некоторые типы данных в аргументах функций на практике. Теперь давайте поработаем с нашими студентами. Давайте попробуем создать такую функцию, которая будет выводить в консоль данные одного из студентов, тем более - [C Урок 29. Указатели в аргументах функций. Часть 1](https://narodstream.ru/c-urok-29-ukazateli-v-argumentax-funkcij-chast-1/) - В трёх последних уроках мы плотно занимаемся адресацией данных в языке C, изучили указатели, взятие адреса, разыменование, доступ к адресам массивов, поработали также с указателями на структуры и их поля. Теперь нам предстоит познакомиться с применением указателей на различные данные в памяти в аргументах функций. Мы узнаем, какую огромную пользу это может принести в проектировании - [ESP8266 Урок 5. Настраиваем toolchain и пишем свою прошивку в IDE Eclipse. Часть 2](https://narodstream.ru/esp8266-urok-5-nastraivaem-toolchain-i-pishem-svoyu-proshivku-v-ide-eclipse-chast-2/) - В предыдущей части урока мы подготовили все инструменты (тулчейн) для сборки прошивки из исходных файлов, создали проект и начали писать файл сценария Makefile, а также исходный код. Будет тут у нас ещё небольшой подводный камень, но о нём потом. А пока нам хочется создать прошивку и залить её в наш контроллер. Поэтому идём в - [ESP8266 Урок 5. Настраиваем toolchain и пишем свою прошивку в IDE Eclipse. Часть 1](https://narodstream.ru/esp8266-urok-5-nastraivaem-toolchain-i-pishem-svoyu-proshivku-v-ide-eclipse-chast-1/) - Ну вот, наконец-то пришла пора нам вернуться к контроллеру с WiFi-модулем ESP8266. До сих пор мы его изучали, пользуясь ПО, установленном в нём при покупке, а также прошивали готовое ПО. А теперь мы попробуем прошивку для него написать самостоятельно. Это можно сделать несколькими способами. Можно воспользоваться Arduino IDE, но только мне это что-то не понравилось - [PIC. Урок 23. Модуль USART. Передача данных. Часть 2](https://narodstream.ru/pic-urok-23-modul-usart-peredacha-dannyx-chast-2/) - В предыдущей части урока мы познакомились с шиной USART, в том числе с организацией шины в контроллере PIC16 и подключили нашу практическую схему. Проект мы сделаем из проекта прошлого урока для ведомого устройства I2C под названием I2C_SLAVE и назовём его USART_TX. Питать плату мы будем от программатора. Откроем наш проект в MPLAB X, сделаем его главным, - [PIC. Урок 23. Модуль USART. Передача данных. Часть 1](https://narodstream.ru/pic-urok-23-modul-usart-peredacha-dannyx-chast-1/) - Сегодня мы начнём изучение программирование очень интересного интерфейса — это интерфейс USART. USART (Universal Synchronous-Asynchronous Receiver-Transmitter (универсальный синхронно-асинхронный приемопередатчик)) — это такая последовательная шина, полнодуплексный обменный интерфейс, который необходим для «общения» между собой двух устройств. Как правило используется для обмена данными между устройствами на контроллерах и ПК. Но вполне подходит и для связи между двумя - [STM Урок 68. LAN. ENC28J60. Часть 10](https://narodstream.ru/stm-urok-68-lan-enc28j60-chast-10/) - Урок 68 Часть 10 LAN. ENC28J60 В предыдущей части нашего урока мы изучили протокол ICMP и написали код для приёма пакетов данного уровня. Вызовем данную функцию отправки IP-пакета в функции icmp_read icmp_pkt->cs=checksum((void*)icmp_pkt,len); ip_send(frame,len+sizeof(ip_pkt_ptr)); } Вернёмся теперь в функцию ip_send и установим указатель на пакет IP uint8_t res=0; ip_pkt_ptr - [STM Урок 68. LAN. ENC28J60. Часть 9](https://narodstream.ru/stm-urok-68-lan-enc28j60-chast-9/) - Урок 68 Часть 9 LAN. ENC28J60 В предыдущей части нашего урока мы изучили заголовок IP, написали для него структуру, а также научились рассчитывать контрольную сумму заголовка и написали для этого функцию. Добавим в функцию чтения IP-пакета фильтрацию по версии протокола, длине заголовка и соответствию адреса получателя нашему IP, и вернём результат ip_pkt_ptr - [STM Урок 68. LAN. ENC28J60. Часть 8](https://narodstream.ru/stm-urok-68-lan-enc28j60-chast-8/) - Урок 68 Часть 8 LAN. ENC28J60 В предыдущей части нашего урока мы написали несколько функций для отправки определённых пакетов и проверили ответ на запросы ARP в программе Wireshark. ARP-ответ мы отправили, хотелось бы ещё отвечать на пинги, но это не так просто. Нужно научиться работать с протоколом ICMP (Internet Control Message - [STM Урок 68. LAN. ENC28J60. Часть 7](https://narodstream.ru/stm-urok-68-lan-enc28j60-chast-7/) - Урок 68 Часть 7 LAN. ENC28J60 В предыдущей части нашего урока мы мы написали структуру для заголовка ARP, а также написав функцию исследования данного протокола, увидели некоторые части заголовка принятого ARP-запроса в терминальной программе. Очередная задача, стоящая перед нами - ответить на ARP-запрос. Но мы помним, что мы написали только - [STM Урок 68. LAN. ENC28J60. Часть 6](https://narodstream.ru/stm-urok-68-lan-enc28j60-chast-6/) - Урок 68 Часть 6 LAN. ENC28J60 В предыдущей части нашего урока мы разобрались со структурой кадров Ethernet, написали функцию их приёма и испытали этот процесс в терминальной программе, также познакомились с протоколом ARP. Так как мы теперь знаем формат протокола ARP, то теперь мы сможем с ним работать. Для этого сначала добавим - [STM Урок 68. LAN. ENC28J60. Часть 5](https://narodstream.ru/stm-urok-68-lan-enc28j60-chast-5/) - Урок 68 Часть 5 LAN. ENC28J60 В предыдущей части нашего урока мы закончили писать функцию инициализации микросхемы, а также написали функцию приёма сетевых пакетов. В файле net.c создадим функцию постоянного опроса сети //-------------------------------------------------- void net_pool(void) { } //-------------------------------------------------- Ну и, раз у нас опрос постоянный, то и вызовем данную - [STM Урок 68. LAN. ENC28J60. Часть 4](https://narodstream.ru/stm-urok-68-lan-enc28j60-chast-4/) - Урок 68 Часть 4 LAN. ENC28J60 В предыдущей части нашего урока мы начали писать код инициализации микросхемы, а также написали ещё ряд нужных функций для дальнейшей работы с модулем. Включим broadcast, вдруг пригодится //Enable Broadcast enc28j60_writeRegByte(ERXFCON,enc28j60_readRegByte(ERXFCON)|ERXFCON_BCEN); Также можно включить фильтрацию пакетов с проверкой контрольной суммы с помощью определённых - [STM Урок 68. LAN. ENC28J60. Часть 3](https://narodstream.ru/stm-urok-68-lan-enc28j60-chast-3/) - Урок 68 Часть 3 LAN. ENC28J60 В предыдущей части нашего урока мы добавили несколько макросов и функций по работе с микросхемой ENC28J60, а также немного поработали над изучением технической документации. Произведём "мягкий" сброс в функции инициализации и проверим, что всё перезагрузилось LD_OFF; enc28j60_writeOp(ENC28J60_SOFT_RESET,0,ENC28J60_SOFT_RESET); HAL_Delay(2); //проверим, что всё перезагрузилось while(!enc28j60_readOp(ENC28J60_READ_CTRL_REG,ESTAT)&ESTAT_CLKRDY) - [STM Урок 68. LAN. ENC28J60. Часть 2](https://narodstream.ru/stm-urok-68-lan-enc28j60-chast-2/) - Урок 68 Часть 2 LAN. ENC28J60 В предыдущей части нашего урока мы кратко познакомились с микросхемой ENC28J60, также создали проекты и произвели их настройки. Также создадим ещё четыре файла: net.c, net.h, enc28j60.c и enc28j60.h и разместим их по папкам Inc и Src. Сразу заполним данные фалы некоторыми стандартными макросами и - [STM Урок 68. LAN. ENC28J60. Часть 1](https://narodstream.ru/stm-urok-68-lan-enc28j60-chast-1/) - Урок 68 Часть 1 LAN. ENC28J60 Сегодня мы подключим контроллер к локальной сети с помощью модуля на микросхеме ENC28J60. Так как мы интерфейсом LAN пользовались только используя микроконтроллер AVR, я решил сделать подобный урок и на STM32., причём также с использованием того же модуля, так как именно этот модуль позволяет прочувствовать тот или иной интерфейс - [AVR Урок 23. Собираем часы на DS1307 и LED индикаторе. Часть 12](https://narodstream.ru/avr-urok-23-sobiraem-chasy-na-ds1307-i-led-indikatore-chast-12/) - Урок 23 Часть 12 Собираем часы на DS1307 и LED индикаторе В прошлой части нашего занятия мы написали код для работы будильника, только будильник у нас пока не звенит и не пищит, а только зажигает светодиод. Это тоже очень хорошо. Хорошо тем, что код у нас успешно работает, но под светодиод вряд ли - [AVR Урок 23. Собираем часы на DS1307 и LED индикаторе. Часть 11](https://narodstream.ru/avr-urok-23-sobiraem-chasy-na-ds1307-i-led-indikatore-chast-11/) - Урок 23 Часть 11 Собираем часы на DS1307 и LED индикаторе В прошлой части урока мы научили кнопку переводить все оставшиеся показатели регистров микросхемы DS1307 кроме показаний будильника. Ну. в принципе, показания и настройки будильника у нас и не хранятся в регистрах данной микросхемы, а хранить мы их будем во внутренней энергонезависимой памяти - [AVR Урок 23. Собираем часы на DS1307 и LED индикаторе. Часть 10](https://narodstream.ru/avr-urok-23-sobiraem-chasy-na-ds1307-i-led-indikatore-chast-10/) - Урок 23 Часть 10 Собираем часы на DS1307 и LED индикаторе В прошлой части нашего занятия мы научили кнопку реагировать на короткие нажатия и отличать их от длинных и уже также научили её переводить часы и минуты. Что ж, продожим дальше наполнять наши кейсы содержимым. Копируем код из старого проекта MyButtonClockLCD.c для редактирования - [AVR Урок 23. Собираем часы на DS1307 и LED индикаторе. Часть 9](https://narodstream.ru/avr-urok-23-sobiraem-chasy-na-ds1307-i-led-indikatore-chast-9/) - Урок 23 Часть 9 Собираем часы на DS1307 и LED индикаторе В прошлой части урока мы добавили все режимы и "научили" кнопку переходить по ним циклично, реагируя на длинные нажатия. Теперь нам нужно "научить" кнопку отличать короткие нажатия от длинных и также "научить" её переводить значения определённых регистров микросхемы DS1307. Но тут будут - [AVR Урок 23. Собираем часы на DS1307 и LED индикаторе. Часть 8](https://narodstream.ru/avr-urok-23-sobiraem-chasy-na-ds1307-i-led-indikatore-chast-8/) - Урок 23 Часть 8 Собираем часы на DS1307 и LED индикаторе В прошлой части нашего занятия мы "научили" наш контроллер "ждать" некоторое время, чтобы ему стало понятно, что у нас произошло долгое нажатие кнопки и он нам сменил режим. Сегодня мы продолжим совершенствовать механизм работы кнопки и также добавим ещё несколько режимов. Откроем - [AVR Урок 23. Собираем часы на DS1307 и LED индикаторе. Часть 7](https://narodstream.ru/avr-urok-23-sobiraem-chasy-na-ds1307-i-led-indikatore-chast-7/) - Урок 23 Часть 7 Собираем часы на DS1307 и LED индикаторе В прошлой части нашего занятия мы занимались в основном проблемой отображения поочерёдно всех показаний на индикаторе в нужное время и в нужном виде. Это нам, как мы помним, удалось. Теперь перед нами стоит ещё одна нелёгкая задача - возможность редактировать значения - [AVR Урок 23. Собираем часы на DS1307 и LED индикаторе. Часть 6](https://narodstream.ru/avr-urok-23-sobiraem-chasy-na-ds1307-i-led-indikatore-chast-6/) - Урок 23 Часть 6 Собираем часы на DS1307 и LED индикаторе В прошлой части нашего занятия мы подключли к нашей схеме также датчика температуры 18B20, а также научились отображать показания не только времени, но и даты, дня недели, а также температуры. Причем отображаем мы это в определённое время и в определенном порядке. Хотя выглядит - [AVR Урок 23. Собираем часы на DS1307 и LED индикаторе. Часть 5](https://narodstream.ru/avr-urok-23-sobiraem-chasy-na-ds1307-i-led-indikatore-chast-5/) - Урок 23 Часть 5 Собираем часы на DS1307 и LED индикаторе В прошлой части нашего занятия мы занимались автоматическим реагированием яркости свечения индикатора на условия окружающей освещённости. Нам это удалось. Сегодня мы попробуем подключить к нашей схеме также датчика температуры 18B20, а также попытаемся отобразить показания не только времени, но и даты, - [AVR Урок 23. Собираем часы на DS1307 и LED индикаторе. Часть 4](https://narodstream.ru/avr-urok-23-sobiraem-chasy-na-ds1307-i-led-indikatore-chast-4/) - Урок 23 Часть 4 Собираем часы на DS1307 и LED индикаторе В прошлой части нашего занятия мы уже отобразили на нашем индикаторе текущее время, а также. используя выход генератора прямоугольных импульсов в микросхеме DS1301, научили мигать двоеточие на индикаторе, что сделало данные показания более живыми и натуральными. Небольшое лирическое отступление. Почему я - [AVR Урок 23. Собираем часы на DS1307 и LED индикаторе. Часть 3](https://narodstream.ru/avr-urok-23-sobiraem-chasy-na-ds1307-i-led-indikatore-chast-3/) - Урок 23 Часть 3 Собираем часы на DS1307 и LED индикаторе В прошлой части нашего занятия мы продолжили написание кода под семисегментный четырехразрядный индикатор с общим анодом, в частности написали в коде реализацию возможности управление яркостью его свечения посредством ШИМ. Чтобы не нагромождать всё в главный модуль, я убрал все функции по - [AVR Урок 23. Собираем часы на DS1307 и LED индикаторе. Часть 2](https://narodstream.ru/avr-urok-23-sobiraem-chasy-na-ds1307-i-led-indikatore-chast-2/) - Урок 23 Часть 2 Собираем часы на DS1307 и LED индикаторе В прошлой части нашего занятия мы познакомились с четрырёхразрядным семисегментным светодиодным индикатором с общим анодом, а также написали код по его подключению и обеспечения его работоспособности, так как именно на данном индикаторе мы и реализовываем наши будущие часы. Мы пока не - [AVR Урок 23. Собираем часы на DS1307 и LED индикаторе. Часть 1](https://narodstream.ru/avr-urok-23-sobiraem-chasy-na-ds1307-i-led-indikatore-chast-1/) - Урок 23 Часть 1 Собираем часы на DS1307 и LED индикаторе Сегодня мы продолжим нашу работу с микросхемой, являющейся часами реального времени, начатую в уроке 17, уроке 19 и уроке 21, и попробуем теперь собрать на ней часы с применением не жидкокристаллического индикатора, а с применение индикатора светодиодного четырёхразрядного работающего по принципу - [AVR Урок 40. LAN. ENC28J60. Часть 10](https://narodstream.ru/avr_urok_40_lan_enc28j60-chast-10/) - Урок 40 Часть 10 LAN. ENC28J60 В предыдущей части нашего урока мы написали функцию расчета контрольной суммы, а также написали функцию чтения IP-пакетов. Теперь разберёмся с пакетами ICMP. В функции ip_read мы всё же добавим переменную для результата и вернём его, так сказать, на будущее uint8_t icmp_read(enc28j60_frame_ptr *frame, uint16_t len) { - [AVR Урок 40. LAN. ENC28J60. Часть 9](https://narodstream.ru/avr_urok_40_lan_enc28j60-chast-9/) - Урок 40 Часть 9 LAN. ENC28J60 В предыдущей части нашего урока мы наконец-то ответили на запрос ARP, а также изучили заголовок протокола IP. Давайте теперь разберёмся немного с расчётом контрольной суммы заголовков. Она расчитывается практически одинаково для всех типов заголовков и пакетов, поэтому функция будет универсальная. Общий принцип расчёта следующий. - [AVR Урок 40. LAN. ENC28J60. Часть 8](https://narodstream.ru/avr_urok_40_lan_enc28j60-chast-8/) - Урок 40 Часть 8 LAN. ENC28J60 В предыдущей части нашего урока мы написали ещё две нужные функции и код для отображения некоторых частей заголовка ARP-запроса. В функции arp_send занесём в ARP-заголовок код ответа ARP void arp_send(enc28j60_frame_ptr *frame) { arp_msg_ptr *msg = (void*)(frame->data); msg->op = ARP_REPLY; Занесём также в - [AVR Урок 40. LAN. ENC28J60. Часть 7](https://narodstream.ru/avr_urok_40_lan_enc28j60-chast-7/) - Урок 40 Часть 7 LAN. ENC28J60 В предыдущей части нашего урока мы познакомились с протоколом ARP начали писать функцию чтения пакетов ARP. Теперь в функции arp_read добавим в тело условия отображение типа запроса, адресов источника и адресов приёмника, и установим результат if( (msg->op == ARP_REQUEST) && (msg->ipaddr_dst == IP_ADDR) - [AVR Урок 40. LAN. ENC28J60. Часть 6](https://narodstream.ru/avr_urok_40_lan_enc28j60-chast-6/) - Урок 40 Часть 6 LAN. ENC28J60 В предыдущей части нашего урока мы написали функцию приёма кадров канального уровня и проверили её на практике в терминальной программе. Нас на данный момент интересуют два типа сетевых протокола - IP (0x0800) и ARP (0x0806), причём пока поконкретней мы разберёмся именно с ARP. Поэтому добавим - [AVR Урок 40. LAN. ENC28J60. Часть 5](https://narodstream.ru/avr_urok_40_lan_enc28j60-chast-5/) - Урок 40 Часть 5 LAN. ENC28J60 В предыдущей части нашего урока мы закончили инициализацию микросхемы, а также написали ещё некоторые нужные функции. Создадим также функцию чтения фрейма чуть выше функции net_poll //--------------------------------------------------------- void eth_read(enc28j60_frame_ptr *frame, uint16_t len) { } //--------------------------------------------------------- Тип протокола в кадре передаётся в перевёрнутом виде, не - [AVR Урок 40. LAN. ENC28J60. Часть 4](https://narodstream.ru/avr_urok_40_lan_enc28j60-chast-4/) - Урок 40 Часть 4 LAN. ENC28J60 В предыдущей части нашего урока мы написали ещё несколько служебных функций, настроили буферы микросхемы, а также её канальный уровень и написали функцию записи данных в регистры PHY. Теперь настроим физический уровень в инициализации enc28j60_writeRegByte(MAADR0, macaddr[5]); //настраиваем физический уровень enc28j60_writePhy(PHCON2, PHCON2_HDLDIS);//отключаем - [AVR Урок 40. LAN. ENC28J60. Часть 3](https://narodstream.ru/avr_urok_40_lan_enc28j60-chast-3/) - Урок 40 Часть 3 LAN. ENC28J60 В предыдущей части нашего урока мы написали ещё несколько макросов и функций для работы с микросхемой. При операции чтения мы читаем регистр ESTAT на предмет установки бита CLKRDY. Напишем функцию чтения буфера (см. таблицу 4.1 выше) //---------------------------------------- static void enc28j60_readBuf(uint16_t len, uint8_t* data) - [AVR Урок 40. LAN. ENC28J60. Часть 2](https://narodstream.ru/avr_urok_40_lan_enc28j60-chast-2/) - Урок 40 Часть 2 LAN. ENC28J60 В предыдущей части нашего урока мы познакомились с микросхемой ENC28J60, создали и настроили проект и добавили каркасы некоторых функций. Так как к интерфейсу SPI мы будем обращаться только в файле enc28j60.c, то в файле enc28j60.h добавим слеующие макросы #include "main.h" //-------------------------------------------------- #define MOSI - [AVR Урок 40. LAN. ENC28J60. Часть 1](https://narodstream.ru/avr_urok_40_lan_enc28j60-chast-1/) - Урок 40 Часть 1 LAN. ENC28J60 Сегодня мы попробуем подключить наш контроллер к локальной сети с помощью модуля на микросхеме ENC28J60. Так как мы интерфейсом LAN ещё ни разу не пользовались, программируя микроконтроллеры AVR, я решил всё-таки данный пробел восполнить. Ещё меня на это побудило то, что довольно-таки немного уроков по LAN - [AVR Урок 10. Таймеры-счетчики. Прерывания](https://narodstream.ru/avr-urok-10-tajmery-schetchiki-preryvaniya/) - Таймеры-счетчики. Для чего они нужны в МК, а также изучим применение прерываний в обработчиках их функций. - [AVR Урок 41. LAN. ENC28J60. ARP. Часть 5](https://narodstream.ru/avr-urok-41-lan-enc28j60-arp-chst-5/) - Урок 41 Часть 5 LAN. ENC28J60. ARP В предыдущей части нашего занятия мы написали функцию заполнения таблицы ARP, добавили таймер для счёта времени и проверили наш код на практике. Давайте теперь, как мы и хотели, вернёмся в функцию ARP-запроса arp_request и пока вставим туда цикл, который будет перебирать записи по отысканию существующего IP-адреса - [AVR Урок 41. LAN. ENC28J60. ARP. Часть 4](https://narodstream.ru/avr-urok-41-lan-enc28j60-arp-chst-4/) - Урок 41 Часть 4 LAN. ENC28J60. ARP В предыдущей части нашего занятия мы написали и проверили функцию для отправки запроса ARP, а также отделили в нашем коде запросы ARP от ответов. Теперь добавим функцию заполнения таблицы ARP //-------------------------------------------------- void arp_table_fill(enc28j60_frame_ptr *frame) { uint8_t i; } //-------------------------------------------------- Добавим на данную функцию прототип и - [AVR Урок 41. LAN. ENC28J60. ARP. Часть 3](https://narodstream.ru/avr-urok-41-lan-enc28j60-arp-chst-3/) - Урок 41 Часть 3 LAN. ENC28J60. ARP В предыдущей части нашего занятия мы обработали приём строки с IP-адресом из шины USART и произвели её преобразование в числовую величину. Теперь перейдём в файл arp.с и начнём писать там функцию отправки ARP-запроса, так как для этого у нас теперь всё готово //-------------------------------------------------- uint8_t arp_request(uint32_t - [AVR Урок 41. LAN. ENC28J60. ARP. Часть 2](https://narodstream.ru/avr-urok-41-lan-enc28j60-arp-chast-2/) - Урок 41 Часть 2 LAN. ENC28J60. ARP В предыдущей части нашего занятия мы подправили некоторые ошибки прошлого занятия и вынесли функции реализации протокола ARP в отдельный модуль. Теперь будем обдумывать то, как мы будем посылать ARP-запросы, то есть за счёт чего будет контроллер вообще получать такую команду. Но так как у нас уже - [AVR Урок 41. LAN. ENC28J60. ARP. Часть 1](https://narodstream.ru/avr-urok-41-lan-enc28j60-arp-chast-1/) - Урок 41 Часть 1 LAN. ENC28J60. ARP Сегодня мы продолжим начатую в предыдущем уроке тему по программированию модуля LAN на микросхеме ENC28J60, который позволяет нам изучить программирование сетевых протоколов вручную, преследуя при этом цель - "Понять работу локальной сети и всех её уровней и протоколов изнутри - на низком уровне". Если мы - [ESP32 Урок 49. ULP. 1-Wire. Прием данных](https://narodstream.ru/esp32-urok-49-ulp-1-wire-priem-dannyx/) - Продолжаем работу с сопроцессором ULP, также мы продолжаем работу с устройством, взаимодействующим с контроллером по шине 1-Wire, а именно с датчиком температуры DS18B20. Передавать данные в шину мы уже умеем, а на данном уроке мы попытаемся принять данные из устройства в контроллер и записать их в память контроллера. Схема наша осталась та же, что и - [C Урок 30. Указатели на функции. Часть 2](https://narodstream.ru/c-urok-30-ukazateli-na-funkcii-chast-2/) - В предыдущей части урока мы познакомились с тем, как можно объявить указатель на функцию и им воспользоваться, также поработали с этим на практике, а в том числе и с массивом таких указателей. Перейдём в файл student.c и добавим сразу три функции, которые будут прибавлять курс, возраст и изменять имя студента //-------------------------------------------------------------------------- void addCourse (student - [C Урок 30. Указатели на функции. Часть 1](https://narodstream.ru/c-urok-30-ukazateli-na-funkcii-chast-1/) - В четырёх последних уроках мы плотно занимаемся адресацией данных в языке C, изучили почти всё по указателям и адресам: разыменование, доступ к адресам массивов, поработали с указателями на структуры и их поля, с указателями в аргументах функций на различные данные, с указателями типа void. Но оказалось, что это ещё не всё. Существуют ещё указатели на - [ESP8266 Урок 27. FreeRTOS. Wi-Fi. STA. TCP Client. Соединение с сервером](https://narodstream.ru/esp8266-urok-27-freertos-wi-fi-sta-tcp-client-soedinenie-s-serverom/) - Продолжаем работу по программированию микроконтроллера ESP8266 с использованием операционной системы реального времени FREEFTOS. И на данном уроке мы уже начнём работать с протоколом TCP (Transmission Control Protocol). Конечно начнём мы работать с данным протоколом именно с использованием FREERTOS и контроллера ESP8266, а, вообще, мы уже давно с данным протоколом работаем, изучили, можно сказать, его вдоль - [PIC Урок 24. Модуль USART. Приём данных. Соединяем два микроконтроллера. Часть 2](https://narodstream.ru/pic-urok-24-modul-usart-priyom-dannyx-soedinyaem-dva-mikrokontrollera-chast-2/) - В предыдущей части занятия мы подключили схему первого устройства и проверили на ней приём и передачу, написав предварительно соответствующий код. Теперь остановим скрипт и терминальную программ и перейдём к проекту для второго контроллера. В качестве второго устройства мы будем использовать нашу плату от WaveShare с контроллером PIC16F877A на борту. Соединим наши платы, отключив переходник USB-TTL, - [PIC Урок 24. Модуль USART. Приём данных. Соединяем два микроконтроллера. Часть 1](https://narodstream.ru/pic-urok-24-modul-usart-priyom-dannyx-soedinyaem-dva-mikrokontrollera-chast-1/) - Попытаемся теперь настроить наш модуль USART в режиме приёма данных, и также в данном уроке мы попробуем соединить по шине USART два контроллера. В прошлом уроке мы изучили, как работает модуль в асинхронном режиме, в том числе в режимах и передачи и приёма данных. Только использовали мы модуль только в режиме передачи данных. А сегодня - [STM Урок 210. LL. STM32F4. DMA. MEM2MEM](https://narodstream.ru/stm-urok-210-ll-stm32f4-dma-mem2mem/) - Продолжаем программирование линейки контроллеров STM32F4 с использованием библиотеки LL. В данном уроке мы попытаемся поработать с периферией DMA контроллера STM32F4. Мы попробуем скопировать некоторое количество информации из одной области памяти в другую (MEM2MEM). Над данной темой мы уже работали в уроке 156, когда работали с линейкой STM32F1. Но, так как в DMA линейки контроллеров STM32F4 - [AVR Урок 42. EXINT или внешние прерывания](https://narodstream.ru/avr-urok-42-exint-ili-vneshnie-preryvaniya/) - Урок 42 EXINT или внешние прерывания Вот наконец-то и настало время нам попробовать поработать с внешними прерываниям. Данный урок, во-первых, был очень востребован, хотя он и кажется на первый взгляд несложным. Очень много было просьб и я не мог не откликнуться. Во-вторых, мы сейчас работаем с модулем LAN ENC28J60, у которого имеется выход, - [ESP32 Урок 50. ULP. Датчик DS18B20. Проверяем контрольную сумму](https://narodstream.ru/esp32-urok-50-ulp-datchik-ds18b20-proveryaem-kontrolnuyu-summu/) - Продолжаем работу с сопроцессором ULP и также мы продолжаем работу с датчиком температуры DS18B20, взаимодействующим с контроллером по шине 1-Wire. На данном уроке мы сравним контрольную сумму, принятую из шины с рассчитанной. Тем самым мы убедимся в целостности принятых данных из скратчпада датчика. Схема наша осталась та же, что и в прошлом уроке — отладочная плата с контроллером esp32, подключенный - [C Урок 31. Выравнивание полей в структурах. Объединения](https://narodstream.ru/c-urok-31-vyravnivanie-polej-v-strukturax-obedineniya/) - В уроке 25 мы познакомились со структурами, для чего они нужны, и поняли, что без них жизнь программы (до её компиляции) была бы очень разрозненной и хаотичной. Поэтому в последующих уроках мы постоянно используем структуры, также используем указатели на них в качестве параметров для функций, а также докатились и до того, что уже начали использовать - [ESP8266 Урок 28. FreeRTOS. Wi-Fi. STA. TCP Client. Приём и передача пакетов](https://narodstream.ru/esp8266-urok-28-freertos-wi-fi-sta-tcp-client-priyom-i-peredacha-paketov/) - Продолжаем работу по программированию микроконтроллера ESP8266 с использованием операционной системы реального времени FREEFTOS, а также продолжаем работу с протоколом TCP (Transmission Control Protocol). И на данном уроке мы уже попробуем не просто соединиться с сервером и передать тестовый пакет, но и также, передавая пакеты, мы попробуем такие пакеты ещё и принять. Мы также этим раньше - [PIC Урок 25. Модуль ADC (АЦП). Измеряем напряжение. Часть 2](https://narodstream.ru/pic-urok-25-modul-adc-acp-izmeryaem-napryazhenie-chast-2/) - В предыдущей части занятия мы познакомились с АЦП, с тем, как он реализован в контроллере PIC16 и подключили схему урока. Проект соберём из проекта урока 21 по работе с переходником I2c-LCD с именем I2C_LCD80 и назовём его ADC. Откроем проект в среде MPLAB X, сделаем его главным, убедимся в свойствах, что питание от программатора не используется. - [PIC Урок 25. Модуль ADC (АЦП). Измеряем напряжение. Часть 1](https://narodstream.ru/pic-urok-25-modul-adc-acp-izmeryaem-napryazhenie-chast-1/) - Переходим к изучению следующего модуля контроллера PIC - ADC, я считаю, одного из самых важных модулей. ADC (Analog-to-Digital Converter, в переводе на русский АЦП или аналого-цифровой преобразователь) - это периферия, которая преобразует электрический сигнал на её входе в цифровой код. Затем данный код мы уже используем для обработки или для отображения тем или иным образом - [STM Урок 211. LL. STM32F4. I2C. Подключаем внешний EEPROM](https://narodstream.ru/stm-urok-211-ll-stm32f4-i2c-podklyuchaem-vneshnij-eeprom/) - В данном уроке мы попробуем с помощью библиотеки LL поработать с шиной I2C контроллера STM32F4. В качестве подопытного устройства мы возьмём микросхему EEPROM — AT24C32, которая установлена в модуле с часовой микросхемой DS3231 и также в часовом модуле с микросхемой DS1307. С данной микросхемой мы уже неоднократно работали, в том числе и с контроллером STM32, - [AVR Урок 43. LAN. ENC28J60. Подключаем внешние прерывания (EXINT)](https://narodstream.ru/avr-urok-43-lan-enc28j60-podklyuchaem-vneshnie-preryvaniya-exint/) - Урок 43 LAN. ENC28J60. Подключаем внешние прерывания (EXINT) На прошлом уроке мы разобрались, как можно задействовать и обрабатывать внешние прерывания на микроконтроллерах AVR, причём сделали мы это в основном для того, чтобы данный накопленный опыт использовать для программирования нашего сетевого модуля, так как микросхема ENC28J60, являющаяся его сердцем, умеет выдавать определённый сигнал в - [AVR Урок 44. LAN. ENC28J60. UDP Server](https://narodstream.ru/avr-urok-44-lan-enc28j60-udp-server/) - Урок 44 LAN. ENC28J60. UDP Server Ну вот и настало время нам передать через локальную сеть с помощью нашего модуля ENC28J60 какие-нибудь осознанные данные. Для этого нам потребуется обернуть наши данные в какой-нибудь транспортный протокол. Транспортный уровень - это уровень модели OSI, отвечающий за передачу данных к конкретному приложению узла, а не - [AVR Урок 45. LAN. ENC28J60. UDP Client](https://narodstream.ru/avr-urok-45-lan-enc28j60-udp-client/) - Урок 45 LAN. ENC28J60. UDP Client В предыдущем уроке мы познакомились с новым для нас протоколом транспортного уровня UDP и написали примитивный эхо-сервер. Сегодня мы поставим обратную задачу - написать клиент. Как мы уже знаем из нашей практики, что клиент писать зачастую сложнее, чем сервер, так как мы обращаемся по сетевому адресу, - [ESP32 Урок 51. ULP. Датчик DS18B20. Измеряем температуру](https://narodstream.ru/esp32-urok-51-ulp-datchik-ds18b20-izmeryaem-temperaturu/) - Продолжаем работу с сопроцессором ULP и также мы продолжаем работу с датчиком температуры DS18B20, взаимодействующим с контроллером по шине 1-Wire. На данном уроке мы получим значение температуры из датчика и выведем её в терминал. Схема наша осталась та же, что и в прошлом уроке — отладочная плата с контроллером esp32, подключенный к ней датчик температуры DS18B20, а - [C Урок 32. Битовые поля](https://narodstream.ru/c-urok-32-bitovye-polya/) - Продолжаем работать со структурами. Оказывается, кроме полей размером, кратным байту, мы можем в структурах (а также, конечно, и в объединениях) работать с битами, то есть мы можем объявить поле в какое-то количество бит. Хотя язык C не предусматривает операции с отдельным битом, но с помощью битовых полей это ограничение можно обойти. Это, конечно же, не - [ESP8266 Урок 29. FreeRTOS. Wi-Fi. STA. TCP Server](https://narodstream.ru/esp8266-urok-29-freertos-wi-fi-sta-tcp-server/) - Продолжаем работу по программированию микроконтроллера ESP8266 с использованием операционной системы реального времени FREEFTOS, а также продолжаем работу с протоколом TCP (Transmission Control Protocol). И на данном уроке мы уже попытаемся создать простенький TCP сервер, который позволит нам обрабатывать пришедшие пакеты от клиентов, а также отвечать на них. Напомню также, что мы также этим раньше подобные - [PIC Урок 26. Модуль компараторов. Часть 2](https://narodstream.ru/pic-urok-26-modul-komparatorov-chast-2/) - В предыдущей части занятия мы познакомились с принципом работы компаратора, с модулем компараторов, а также с модулем источника опорного напряжения. Теперь на основе вышеизложенного попробуем что-нибудь сочинить. Мы будем с помощью делителя, собранного на обычном переменном резисторе, изменять напряжение на входе одного из компараторов модуля и следить за переходом через порог напряжения, установленного с помощью - [PIC Урок 26. Модуль компараторов. Часть 1](https://narodstream.ru/pic-urok-26-modul-komparatorov-chast-1/) - В данном занятии мы познакомимся с ещё одним очень интересным модулем - модулем компараторов. Модуль компараторов - это периферия контроллера PIC16, в которой находится два аналоговых компаратора, выводы которых мультиплицированы с выводами ввода-вывода. Данные компараторы в зависимости от ряда настроек могут быть подключены по-разному, с этим мы обязательно также познакомимся. Что такое аналоговый компаратор, я - [STM Урок 212. LL. STM32F4. USART](https://narodstream.ru/stm-urok-212-ll-stm32f4-usart/) - В данном уроке мы попробуем с помощью библиотеки LL поработать с интерфейсом USART (Universal synchronous asynchronous receiver transmitter) контроллера STM32F4. Модуль USART у контроллера линейки STM32F4 практически ничем не отличается от аналогичного в контроллере STM32F1, поэтому изучать нам аппаратную составляющую не придётся и инициализация происходит таким же образом. В регистрах также почти нет изменений, лишь - [AVR Урок 46. LAN. ENC28J60. Удалённый доступ](https://narodstream.ru/avr-urok-46-lan-enc28j60-udalyonnyj-dostup/) - Урок 46 LAN. ENC28J60. Удалённый доступ До сих пор мы при помощи нашего модуля ENC28J60 могли соединяться, принимать и передавать данные только с узлов, находящихся в локальной сети. Я думаю, что настал тот момент, когда мы должны попробовать с помощью него "пообщаться" с сетью внешней - с сетью "Интернет". Также внешняя сеть - [AVR Урок 9. Оформление кода. Функции](https://narodstream.ru/avr-urok-9-oformlenie-koda-funkcii/) - Семисегментный светодиодным индикатор. Статический режим. Оформляем код в функцию. Отследим нажатие кнопки и обнулим наш счетчик. Конструкция switch case - [MQTT. QoS. Уровни качества обслуживания. Практика](https://narodstream.ru/mqtt-qos-urovni-kachestva-obsluzhivaniya-praktika/) - На прошлом уроке мы познакомились с протоколом передачи данных MQTT (Message Queuing Telemetry Transport). Также мы узнали, что у данного протокола существует три уровня качества обслуживания QoS (Quality of Service), с которыми я и предлагаю с помощью практического исследования передачи сообщений познакомиться немного поподробнее. Также у нас уже есть брокер MQTT, который мы установили в этом - [ESP32 Урок 3. Мигающий светодиод](https://narodstream.ru/esp32-urok-3-migayushhij-svetodiod/) - На прошлом занятии мы установили всё необходимое для написания кода для контроллера ESP32, а также испытали проект по выводу в терминальную программу информации, а сегодня мы попробуем помигать светодиодом, испытав работу с портом ввода-вывода. Также мы настроим под себя среду программирования Espressif IDE. Что ж, начнём с настройки. Запустим Espressif IDE и пока не будем закрывать - [C Урок 3. Комментарии](https://narodstream.ru/c-urok-3-kommentarii/) - Продолжаем изучать язык программирования C. И сегодня мы научимся писать комментарии к коду. Порой не всегда инструкции, команды, а также директивы позволяют при чтении исходного кода быстро понять, что же вообще происходит в коде, за что отвечает тот или иной участок кода, что он вообще делает. И тут нам на помощь приходят комментарии. Они позволяют - [ESP8266 Урок 3. Читаем прошивку ESP-01. Часть 2](https://narodstream.ru/esp8266-urok-3-chitaem-proshivku-esp-01-chast-2/) - В предыдущей части нашего урока мы подготовили инструменты для работы с прошивками ESP8266, а также считали всю FLASH-память модуля ESP-01. Мы можем полностью прошивать весь дамп в контроллер, но это, поверьте, не всегда получается, возможно, есть какие-то защищённые области. Мои модули не "берут" всю прошивку, какими бы я утилитами не пытался это делать. Поэтому лучше - [ESP8266 Урок 3. Читаем прошивку ESP-01. Часть 1](https://narodstream.ru/esp8266-urok-3-chitaem-proshivku-esp-01-chast-1/) - В данном занятии мы попытаемся разобраться, какие файлы прошиваются в микроконтроллер ESP8266, в частности в ESP-01, а также попытаемся считать прошивку из контроллера, так как вот об этом информации очень мало, хотя она вполне может пригодиться, так как нередко многие хотят вернуть программное обеспечение в контроллер, которое было в нём при его приобретении. Сначала, ясное - [PIC Урок 3. Бегущие огни](https://narodstream.ru/pic-urok-3-begushhie-ogni/) - Теперь у нас есть среда программирования и компилятор. Также у нас есть готовый проект. Поэтому теперь самое время заняться написанием какого-нибудь кода. Ну и, по традиции, давайте напишем код, который будет управлять свечением светодиодов, подключенных к ножкам портов микроконтроллера. То есть за счёт поочерёдного поступления положительного потенциала от ножек портов на ножки светодиодов, а также - [STM Урок 4. Библиотека HAL. STM32 CUBE MX. Светодиоды и кнопка](https://narodstream.ru/stm-urok-4-biblioteka-hal-stm32-cube-mx-svetodiody-i-knopka/) - Урок 4 Библиотека HAL. STM32 CUBE MX. Светодиоды и кнопка Сегодня мы познакомимся с библиотекой HAL. Данная библиотека, в отличие от SPL, широко используется и поддерживается. Также для более комфортного использования данной библиотеки мы будем пользоваться программой для первоначальной настройки и генерации кода для среды программирования - STM32CubeMX. Скачиваем STM32CubeMX с st.com (для этого - [STM Урок 5. Библиотека HAL. STM32 CUBE MX. Таймеры](https://narodstream.ru/stm-urok-5-biblioteka-hal-stm32-cube-mx-tajmery/) - Урок 5 Библиотека HAL. STM32 CUBE MX. Таймеры Сегодня мы попробуем поработать с таймерами также с помощью библиотеки HAL. У нашего контроллера STM32F407 таймеров много. Открываем reference manual и перейдём в главу 17 - Advanced-control timers (TIM1&TIM8). Данные таймеры - это таймеры с расширенным управлением. Таких таймеров всего два Далее открываем следующий пункт 19 - General-purpose timers (TIM9 to TIM14). - [AVR Урок 8. Семисегментный индикатор. Статическая индикация](https://narodstream.ru/avr-urok-8-semisegmentnyj-indikator-staticheskaya-indikaciya/) - Изучаем работу с семисегментным светодиодным индикатором в статическом режиме. - [AVR Урок 47. LAN. ENC28J60. NTP. Узнаём точное время. Часть 2](https://narodstream.ru/avr-urok-47-lan-enc28j60-ntp-uznayom-tochnoe-vremya-chast-2/) - Урок 47 Часть 2 LAN. ENC28J60. NTP. Узнаём точное время В предыдующей части нашего урока мы узнали всё необходимое о протоколе NTP и написали код, который отправил запрос, дождался ответа от сервера и отобразил в терминальной программе мировое время в виде таймштампа в секундах. Теперь перед нами стоит задача - время в секундах преобразовать в - [AVR Урок 47. LAN. ENC28J60. NTP. Узнаём точное время. Часть 1](https://narodstream.ru/avr-urok-47-lan-enc28j60-ntp-uznayom-tochnoe-vremya-chast-1/) - Урок 47 Часть 1 LAN. ENC28J60. NTP. Узнаём точное время Так как на прошлом уроке мы сумели уже пообщаться с удалённым узлом, а также у нас освоен практически протокол транспортного уровня - UDP, то мы уже вполне можем получить какие-то данные из внешней сети, в частном случае из глобальной мировой сети - [Устанавливаем MajorDoMo](https://narodstream.ru/ustanavlivaem-majordomo/) - На данном уроке мы попробуем установить на ПК программное обеспечение для функционирования умного дома - MajorDomo, которое представляет собой сервер с визуализацией в веб-интерфейсе для выполнения задач по мониторингу и управления устройствами умного дома (различные датчики, устройства освещения, механизмы управления различными устройствами и тд). Нам же данное ПО потребуется для закрепления навыков работы с протоколом - [Raspberry PI. Урок 2. Устанавливаем MQTT брокер Mosquitto](https://narodstream.ru/raspberry-pi-urok-2-ustanavlivaem-mqtt-broker-mosquitto/) - На предыдущем уроке мы установили операционную систему на плату Raspberry PI, тем самым сделав нашу плату работоспособной. А в этом уроке по протоколам передачи данных мы познакомились с протоколом MQTT (Message Queuing Telemetry Transport). Здесь же мы узнали, что для работы с данным протоколом требуется брокер, который должен отвечать за рассылку сообщений от одного узла другому (подписчикам). Можно - [ESP32 Урок 52. RMT. WS2812B. Лента на умных светодиодах RGB. Инициализация](https://narodstream.ru/esp32-urok-52-rmt-ws2812b-lenta-na-umnyx-svetodiodax-rgb-inicializaciya/) - Продолжаем работать с модулем RMT (Remote Control) и с сегодняшнего урока мы попытаемся с использованием данного модуля поработать со светодиодной лентой, состоящей из цепочки адресных светодиодах WS2812B. Как именно управлять такими светодиодами, мы знакомы давно из курса уроков по контроллерам STM32, поэтому нам будет намного проще организовать алгоритм работы и с применением контроллера ESP32. Только управляющие - [C Урок 33. Аргументы командной строки](https://narodstream.ru/c-urok-33-argumenty-komandnoj-stroki/) - До сих пор мы запускали программу обычным образом, не используя при этом никаких параметров. Но зачастую мы видим, что многие программы и утилиты, наоборот, требуют при запуске указывать параметры запуска после имени запускаемой программы. Причём данные программы не только консольные, но и с графическим интерфейсом, на которые, например, ложится ярлык на рабочий стол и в - [ESP8266 Урок 30. FreeRTOS. Wi-Fi. STA. Простой HTTP Server](https://narodstream.ru/esp8266-urok-30-freertos-wi-fi-sta-prostoj-http-server/) - Продолжаем работать с программированием микроконтроллера ESP8266 с использованием операционной системы реального времени FREEFTOS, и на данном уроке мы уже попытаемся создать простенький HTTP сервер, который позволит нам принять запрос документа от клиента, обработать его и в ответ направить клиенту нужную информацию. Также позволю себе лишний раз напомнить, что мы раньше подобные задачи решали с использованием - [PIC Урок 27. Датчик температуры LMT01. Часть 2](https://narodstream.ru/pic-urok-27-datchik-temperatury-lmt01-chast-2/) - В предыдущей части урока мы познакомились с датчиком температуры LMT01 и подключили схему нашего занятия. Приступим к проекту. Проект за основу мы возьмём из урока 25 по АЦП с именем ADC, а новый проект назовём по имени датчика LMT01. Откроем проект в среде MPLAB X, сделаем его главным, убедимся в свойствах, что питание от программатора не - [PIC Урок 27. Датчик температуры LMT01. Часть 1](https://narodstream.ru/pic-urok-27-datchik-temperatury-lmt01-chast-1/) - На данном занятии мы попробуем подключить интересный датчик температуры - LMT01. Данный датчик интересен тем, что у него не только простейший протокол и температура определяется количеством переданных импульсов, а ещё и тем, что импульсы эти передаются не с помощью изменения напряжения на одном из выходов, а с помощью изменения тока, поэтому этот датчик ставится в - [STM Урок 213. LL. STM32F4. USART. DMA](https://narodstream.ru/stm-urok-213-ll-stm32f4-usart-dma/) - Продолжаем нашу работу с шиной USART контроллера STM32F4. В данном уроке мы поработаем с возможностью использования периферии DMA при передаче данных по интерфейсу USART. С передачей данных по USART контроллера STM32F4 с применением DMA в мы уже знакомы из урока 15, правда использовалась там библиотека HAL. А при работе с контроллером STM32F1 мы уже очень - [AVR Урок 48. LAN. ENC28J60. TCP Server. Устанавливаем и разрываем соединение. Часть 2](https://narodstream.ru/avr-urok-48-lan-enc28j60-tcp-server-ustanavlivaem-i-razryvaem-soedinenie-chast-2/) - Урок 48 Часть 2 LAN. ENC28J60. TCP Server. Устанавливаем и разрываем соединение В предыдущей части нашего урока мы познакомились с протоколом TCP и с его заголовком, также изучили специфику установки и разрыва соединения TCP, создали проект и приняли пакет TCP. Теперь будем думать, как бы нам ответить на данный пакет. Давайте создадим ещё одну функцию - [AVR Урок 48. LAN. ENC28J60. TCP Server. Устанавливаем и разрываем соединение. Часть 1](https://narodstream.ru/avr-urok-48-lan-enc28j60-tcp-server-ustanavlivaem-i-razryvaem-soedinenie-chast-1/) - Урок 48 Часть 1 LAN. ENC28J60. TCP Server. Устанавливаем и разрываем соединение Сегодня мы начинаем знакомство с другим, более сложным, но в то же время и более надёжным протоколом модели OSI транспортного уровня - TCP. По всей видимости, ввиду своей надёжности, TCP (Transmission Control Protocol, протокол управления передачей) является самым распространённым протоколом - [Bluetooth-модуль HC-05](https://narodstream.ru/bluetooth_modul_hc_05/) - Сегодня мы познакомимся с недорогим модулем для беспроводной передачи данных по Bluetooth. Bluetooth - производственная спецификация беспроводных персональных сетей, которая обеспечивает передачу данных без проводов между многими устройствами. Наш модуль именуется HC-05. Это один из представителей линейки подобных модулей HC-03 - HC-09. Данные модули позволяют передавать данные без проводов, не задумываясь о том, как вообще устроен протокол - [AVR Урок 49. LAN. ENC28J60. TCP Server. Передаём данные](https://narodstream.ru/avr-urok-49-lan-enc28j60-tcp-server-peredayom-dannye/) - Урок 49 LAN. ENC28J60. TCP Server. Передаём данные На прошлом занятии мы плотно познакомились с протоколом передачи данных TCP и научились устанавливать и разрывать соединение, так как это является неотъемлемым условием данного протокола. Теперь перед нами встала задача следующая - а как же нам что-то передать полезное с помощью данного протокола. Иначе зачем - [MajorDoMo. Работаем с MQTT](https://narodstream.ru/majordomo-rabotaem-s-mqtt/) - На данном уроке мы займёмся настройкой программного обеспечения для функционирования умного дома — MajorDoMo. И настроим мы данный продукт на контроль датчиков температуры, подключенных к контроллеру ESP32, который передаёт с них данные посредством протокола MQTT. Для этого нам потребуется собственно контроллер с датчиками, организованный по схеме из урока 43 по данному контроллеру Подключим сразу - [Raspberry PI. Урок 3. Устанавливаем MajorDoMo на Raspberry PI](https://narodstream.ru/raspberry-pi-urok-3-ustanavlivaem-majordomo-na-raspberry-pi/) - На данном уроке мы установим MajorDomo на Raspberry PI. Напомню, что MajorDoMo - это сервер с визуализацией в веб-интерфейсе для выполнения задач по мониторингу и управления устройствами умного дома (различные датчики, устройства освещения, механизмы управления различными устройствами и тд). В сети очень много мануалов по установке MajorDomo на Raspberry PI, в том числе установка из скрипта, заливка целого образа, а - [ESP32 Урок 53. RMT. WS2812B. Лента на умных светодиодах RGB. Зажигаем светодиоды](https://narodstream.ru/esp32-urok-53-rmt-ws2812b-lenta-na-umnyx-svetodiodax-rgb-zazhigaem-svetodiody/) - Продолжаем работать с модулем RMT (Remote Control) и управлением светодиодной лентой, состоящей из цепочки адресных светодиодах WS2812B. И на данном уроке мы научимся собственно управлять свечением данных светодиодов, а именно отправить по сигнальной шине в ленту код, который будет зажигать в ней светодиоды нужными нам цветами с нужной интенсивностью. Схема урока осталась без изменений: светодиодная лента, плата - [C Урок 34. MAKE. Функции и переменные](https://narodstream.ru/c-urok-34-make-funkcii-i-peremennye/) - Продолжим изучать утилиту Make, которая, благодаря использованию сценариев, помогает очень эффективно автоматизировать процесс сборки файлов из исходных текстов. Процесс автоматизируется и нам не нужно вводить кучу команд. Оказывается, Make может ещё много чего и на данном уроке мы в этом убедимся. Make наряду с использованием переменных, к которым мы также вернёмся, умеет использовать также и - [ESP8266 Урок 31. FreeRTOS. Файловая система SPIFFS](https://narodstream.ru/esp8266-urok-31-freertos-fajlovaya-sistema-spiffs/) - Продолжаем работу по программированию микроконтроллера ESP8266 с использованием операционной системы реального времени FREEFTOS. На прошлом уроке мы убедились, что мы вполне можем передавать по протоколу HTTP документы с нашего сервера клиенту. Только мы столкнулись с проблемой их неудобного хранения на нашем сервере, а именно при помощи массива. Хотелось бы как-то хранить их в явном виде - [PIC Урок 28. External Interrupt (внешние прерывания)](https://narodstream.ru/pic-urok-28-external-interrupt-vneshnie-preryvaniya/) - В данном занятии мы попробуем реализовать механизм реакции контроллера на внешние воздействия. Для этого существует такое понятие как внешние прерывания (External Interrupt). Внешние прерывания — это такие прерывания, которые обрабатываются вследствие возникновения некоторых событий на определённой ножке порта микроконтроллера. Данных событий контроллер PIC16 умеет обрабатывать два вида. Первый - это изменение состояния ножки с низкого - [STM Урок 214. HAL. STM32F4. FLASH память W25Q. Получение информации из микросхемы](https://narodstream.ru/stm-urok-214-hal-stm32f4-flash-pamyat-w25q-poluchenie-informacii-iz-mikrosxemy/) - Продолжаем тему программирования контроллера STM32F4. И сегодня мы попробуем к данному контроллеру подключить последовательную FLASH-память серии W25Q. Данная последовательная память может быть различной ёмкости - 8, 16, 32, 64, 128, 256 Мбит и т. д. Подключается такая память по интерфейсу SPI, а также по многопроводным интерфейсам Dual SPI, Quad SPI и QPI. Мы же пока - [AVR Урок 50. LAN. ENC28J60. TCP WEB Server. Передаём малую страницу. Часть 2](https://narodstream.ru/avr-urok-50-lan-enc28j60-tcp-web-server-peredayom-maluyu-stranicu-chast-2/) - Урок 50 Часть 2 LAN. ENC28J60. HTTP Server. Передаём малую WEB-страницу В предыдущей части нашего урока мы кратко познакомились с протоколом HTTP, проанализировали запрос HTTP от клиента, а также написали ряд функций для удобства работы с кодом. Теперь займёмся передачей данных с исиользованием транспортного протокола TCP. Для этого также над функцией tcp_send добавим функцию, - [AVR Урок 50. LAN. ENC28J60. TCP WEB Server. Передаём малую страницу. Часть 1](https://narodstream.ru/avr-urok-50-lan-enc28j60-tcp-web-server-peredayom-maluyu-stranicu-chast-1/) - Урок 50 Часть 1 LAN. ENC28J60. HTTP Server. Передаём малую WEB-страницу Сегодня мы продолжим нашу тему передачи данных с использованием протокола транспортного уровня TCP и попробуем передать по данному протоколу с нашего контроллера WEB-страницу. А чтобы передать или запросить такую страницу, но нам уже для этого потребуется протокол HTTP (HyperText Transfer - [Передача данных. MQTT. Знакомство с протоколом](https://narodstream.ru/mqtt-znakomstvo-s-protokolom/) - Сегодня мы познакомимся с протоколом передачи данных MQTT. MQTT — это протокол обмена сообщениями по шаблону издатель/подписчик (publisher/subscriber). Аббревиатура наименования данного протокола расшифровывается как Message Queuing Telemetry Transport (MQTT). Если перевести дословно, то получится Транспорт телеметрии очереди сообщений. MQTT - это облегчённый протокол с невысокой нагрузкой на каналы связи, работу в условиях постоянной потери связи и лёгкую - [Raspberry PI. Урок 1. Устанавливаем операционную систему](https://narodstream.ru/raspberry-pi-urok-1-ustanavlivaem-operacionnuyu-sistemu/) - С данного урока начнём знакомство с такой платой как Raspberry PI. Эта плата представляет собой полноправный компьютер, который из-за его маленького размера называют микрокомпьютер. Думаю, что для вас давно уже не секрет, что это за компьютер, на какой системе он базируется, так как данные платы очень широко распространены по всему миру. Расскажу лишь основные его - [C Урок 2. Вывод данных разного типа](https://narodstream.ru/c-urok-2-vyvod-dannyx-raznogo-tipa/) - На прошлом занятии мы начали знакомство с языком C, а также написали первую программу, которую затем успешно запустили на выполнение. В данной программе была использована функция printf, которая выводит строку в устройство стандартного вывода (в нашем случае монитор ПК). Функция printf "умеет" не только выводить строку, но также она "понимает" форматирование данных, причём там не - [ESP8266 Урок 2. AT команды](https://narodstream.ru/esp8266-urok-2-at-komandy/) - Продолжаем знакомство с микроконтроллером ESP8266. На данном занятии мы попробуем посредством AT-команд управлять данной микросхемой, а вернее модулем ESP-01, на которой она установлена. Вот так вот выглядит модуль ESP-01 А это его вид снизу (со стороны контактов) Управлять нашим модулем мы будем посредством интерфейса UART. Прежде чем управлять данным модулем, или - [PIC Урок 2. Первый проект в MPLAB X IDE](https://narodstream.ru/pic-urok-2-pervyj-proekt-v-mplab-x-ide/) - После краткого изучения архитектуры и возможностей контроллеров PIC пришло время нам попробовать себя в программировании данных контроллеров, так как без программы микроконтроллер - это бесполезная микросхема. Только чтобы попробовать себя в программировании, обычно требуется какая-то среда программирования (не в блокноте же мы будем писать код), а также компилятор. Для этого у компании Microchip есть бесплатный - [STM Урок 3. Библиотека SPL. Подключаем кнопку](https://narodstream.ru/stm-urok-3-biblioteka-spl-podklyuchaem-knopku/) - Урок 3 Библиотека SPL. Подключаем кнопку Сегодня мы с вами продолжим работу с библиотекой SPL, которую мы подключили на прошлом занятии. Хотя это прошло слегка нестандартным способом, но тем не менее нам это удалось. Вообщем, библиотеку мы подключили, но практически с её функциями мы пока не работали. Проект для сегодняшнего занятия был сделан из - [AVR Урок 7. Кнопка](https://narodstream.ru/avr-urok-7-knopka/) - Изучаем порт по работе на вход. Подключим кнопку, изучим УСЛОВИЯ. Также применим отслеживание дребезга контактов кнопки. - [STM Урок 215. HAL. STM32F4. FLASH память W25Q. Чтение данных](https://narodstream.ru/stm-urok-215-hal-stm32f4-flash-pamyat-w25q-chtenie-dannyx/) - Продолжаем тему программирования контроллера STM32F4 и также продолжаем работу с последовательной FLASH-памятью серии W25Q. И теперь мы попробуем прочитать из данной микросхемы не служебную информацию, так как это мы уже умеем, а полезные данные, которые записаны в её памяти. Для данной цели, конечно же надо, что-то туда для начала записать, а так как это мы - [AVR Урок 51. LAN. ENC28J60. TCP WEB Server. Передаём страницу побольше. Часть 2](https://narodstream.ru/avr-urok-51-lan-enc28j60-tcp-web-server-peredayom-stranicu-pobolshe-chast-2/) - Урок 51 Часть 2 LAN. ENC28J60. TCP WEB Server. Передаём страницу побольше В предыдущей части нашего занятия мы провели определённую оптимизацию проекта и написали код, который будет отличать запрос клиентом главной страницы от остальных запросов, а также передали ответ на запрос клиентом несуществующего документа. Также мы передали клиенту страницу, состоящую из двух пакетов TCP. Дальнейшая - [AVR Урок 51. LAN. ENC28J60. TCP WEB Server. Передаём страницу побольше. Часть 1](https://narodstream.ru/avr-urok-51-lan-enc28j60-tcp-web-server-peredayom-stranicu-pobolshe-chast-1/) - Урок 51 Часть 1 LAN. ENC28J60. TCP WEB Server. Передаём страницу побольше Сегодня мы продолжим тему протокола HTTP, который очень активно используется в наше время для передачи данных. На предыдущем занятии мы познакомились с данным протоколом, с его заголовком, с типами сообщений в заголовке, а также смогли сочинить небольшой сервер из нашего контроллера - [ESP32 Урок 1. Первое знакомство с контроллером ESP32](https://narodstream.ru/esp32-urok-1-pervoe-znakomstvo-s-kontrollerom-esp32/) - Ну вот, наконец-то, настало время нам перейти к знакомству с более взрослой линейкой контроллеров китайского производителя Espressif - ESP32. Зрители и читатели данного ресурса давно уже меня просят о том, чтобы я поскорей начал уроки по контроллеру ESP32, но так как до некоторых пор не было пакета (или тулчейна) для программирования данной линейки контроллеров, ориентированного - [C Урок 1. Наша первая программа. Часть 2](https://narodstream.ru/c-urok-1-nasha-pervaya-programma-chast-2/) - В предыдущей части нашего занятия мы познакомились вкратце с языком C, а также установили набор инструментов для сборки проектов MinGW. Теперь давайте попробуем создать какой-нибудь исходный код на C и получить из него функционирующую программу. Для этого создадим каталог (папку, директорий) где-нибудь, например, с именем MYPROG01 и создадим в данном каталоге файл с именем, например, - [C Урок 1. Наша первая программа. Часть 1](https://narodstream.ru/c-urok-1-nasha-pervaya-programma-chast-1/) - Начинаем курс знакомства, а в дальнейшем, возможно, и более углубленного изучения языка программирования C. О данном языке может быть не все, но очень многие слышали. Он существует очень давно. СИ является языком стандартизированным процедурным, разработан он был в начале 1970-х годов сотрудниками Bell Labs Кеном Томпсоном и Денисом Ритчи как развитие языка Би. В отличие - [ESP8266 Урок 1 Первое знакомство с контроллером ESP8266](https://narodstream.ru/esp8266-urok-1-pervoe-znakomstvo-s-kontrollerom-esp8266/) - Наконец-то, по многочисленным просьбам мы начинаем знакомство, а впоследствии, как я думаю, и полноценную работу по программированию микроконтроллера ESP8266. Данный контроллер является собственностью китайского производителя Espressif, и основную свою популярность среди программистов он снискал благодаря наличию беспроводного интерфейса Wi-Fi. Также немаловажным фактором является его очень низкая стоимость и также наличие на сегодняшний момент многочисленной документации, - [STM Урок 216. HAL. STM32F4. FLASH память W25Q. Используем программу для обмена данными](https://narodstream.ru/stm-urok-216-hal-stm32f4-flash-pamyat-w25q-ispolzuem-programmu-dlya-obmena-dannymi/) - Продолжаем тему программирования контроллера STM32F4 и также продолжаем работу с последовательной FLASH-памятью серии W25Q. И теперь мы попробуем считать из микросхемы для начала служебную информацию, но уже не с использованием стандартной терминальной программы, а с помощью программы, которую я начал писать сам. Дело в том, что с помощью терминальной программы тяжело общаться с контроллером в - [STM Урок 2. Бегущие огни](https://narodstream.ru/stm-urok-2-begushhie-ogni/) - Урок 2 Бегущие огни Сегодня попробуем помигать имеющимися четырьмя светодиодами. Но сначала я хочу вас научить такой хитрости. Мы не будем заново создавать и генерировать проект и заново писать код в Keil, если нам в новом проекте нужно просто доработать предыдущий, но не затронуть предыдущий проект, оставив его в целости и сохранности. Для - [AVR Урок 52. LAN. ENC28J60. TCP WEB Server. Подключаем карту SD. Часть 2](https://narodstream.ru/avr-urok-52-lan-enc28j60-tcp-web-server-podklyuchaem-kartu-sd-chast-2/) - В предыдущей части нашего занятия мы подключили карту SD к нашему контроллеру, создали проект и написали некоторый код для работы с файловой системой, позволяющий открыть нужный документ с карты SD, определить его размер, тип, а также написали код в функции передачи однопакетного документа для извлечения данных документа из файла. Аналогичные действия проделаем в следующей функции - tcp_send_http_first //Отправляем - [AVR Урок 52. LAN. ENC28J60. TCP WEB Server. Подключаем карту SD. Часть 1](https://narodstream.ru/avr-urok-52-lan-enc28j60-tcp-web-server-podklyuchaem-kartu-sd-chast-1/) - Урок 52 Часть 1 LAN. ENC28J60. TCP WEB Server. Подключаем карту SD Продолжаем подключать модуль LAN ENC28J60 к микроконтроллеру Atmega328. Мы смогли ответить клиенту на запрос веб-страницы, но только передавать мы большие документы и изображения все равно не сможем ввиду того, что подошли мы к такому моменту, что на это у нас - [AVR Урок 6. Бегущие огни](https://narodstream.ru/avr-urok-6-begushhie-ogni/) - Применение битовых сдвигов для организации поочередного мигания нескольких светодиодов, что придаст более живой вид. - [PIC Урок 1. Знакомство с семейством PIC](https://narodstream.ru/pic_urok_1_znakomstvo_s_semejstvom_pic/) - Урок 1 Знакомство с семейством PIC Наконец-то сегодня нашлось время познакомить вас с ещё одним семейством микроконтроллеров - это микроконтроллеры PIC. Данные микроконтроллеры также являются очень известными, устанавливаются во многие устройства и давно уже снискали у радиолюбителей очень сильный интерес. Разработчиком данного семейства является компания Microchip, которая также ялвяется очень известной и - [STM Урок 1. Установка Keil μVision](https://narodstream.ru/stm-urok-1-ustanovka-keil-μvision/) - Урок 1 Установка Keil μVision Программирование МК STM32 Следующий урок Вводим на поисковом сайте строку stm32f4 spl Попадаем сюда http://www.st.com/web/en/catalog/tools/PF257901 Скачиваем отсюда библиотеку Использовать мы будем отладочную плату STM32F4-DISCOVERY. Запускаем Keil5 Запускаем там pack installer Слева выбираем наш контроллер А справа затем Device Specific и жмем Install. - [STM Урок 217. HAL. STM32F4. FLASH память W25Q. Считываем данные в программу](https://narodstream.ru/stm-urok-217-hal-stm32f4-flash-pamyat-w25q-schityvaem-dannye-v-programmu/) - Продолжая тему программирования контроллера STM32F4 и также работу с последовательной FLASH-памятью серии W25Q, мы попытаемся с помощью программы для ПК прочитать данные из памяти микросхемы. Причём прочитаем мы все данные полностью, и, мало того, попробуем их сохранить в файл. Это позволит нам полностью сохранить нашу прошивку, как говорят, сделать дамп FLASH-памяти, для дальнейшего её использования. - [AVR Урок 53. Watchdog Timer (WDT). Часть 2](https://narodstream.ru/avr-urok-53-watchdog-timer-wdt-chast-2/) - В предыдущей части урока мы познакомились со сторожевым таймером (Watchdog Timer или WDT), узнали, как он устроен в микроконтроллере AVR, создали и настроили проект урока. Включим ножки PD3:PD7 на выход, а ножку PD2 на вход. Ножки PD0 и PD1 не трогаем. Ножка PD2 нужна для отслеживания внешних прерываний int main(void) { DDRD |= 0b11111000; - [AVR Урок 53. Watchdog Timer (WDT). Часть 1](https://narodstream.ru/avr-urok-53-watchdog-timer-wdt-chast-1/) - Уже более года мною не публиковалось уроков по контроллерам AVR. На это были различного рода причины. Во-первых, я считал, что основные виды периферии и прочих составляющих данного контроллера нами уже изучены. Во-вторых, у меня не было и нет нормального программатора, который бы виделся в среде разработки полноправно. Уроки без этого снимать можно, но готовить проекты - [STM Урок 218. HAL. STM32F4. FLASH память W25Q. Стираем информацию](https://narodstream.ru/stm-urok-218-hal-stm32f4-flash-pamyat-w25q-stiraem-informaciyu/) - Продолжаем работу по программированию контроллера STM32F4 и также работу с последовательной FLASH-памятью серии W25Q. На данном уроке мы попробуем стереть данные из памяти микросхемы. Дело в том, что, как мы знаем, FLASH-память устроена так, что пока данные не сотрёшь, новые в неё не запишешь, либо запишешь с искажениями. Для удобства работы мы также будем использовать - [AVR Урок 54. Режимы пониженного энергопотребления. Часть 3](https://narodstream.ru/avr-urok-54-rezhimy-ponizhennogo-energopotrebleniya-chast-3/) - В предыдущей части нашего урока мы познакомились с регистрами участвующими в процессе применения режимов пониженного энергопотребления, также познакомились со схемой урока и настроили проект. В функции main() отключим АЦП int main(void) { ACSR |= (1 - [AVR Урок 54. Режимы пониженного энергопотребления. Часть 2](https://narodstream.ru/avr-urok-54-rezhimy-ponizhennogo-energopotrebleniya-chast-2/) - В предыдущей части нашего урока мы познакомились с режимами пониженного энергопотребления, используемыми в контроллерах AVR, также познакомились с тем, сколько должен потреблять контроллер тока в том или ином режиме, а также узнали то, какие действия нам желательно проделать перед входом в данные режимы. Теперь надо разобраться, как вообще настроить какой-либо из режимов пониженного потребления, как затем - [AVR Урок 54. Режимы пониженного энергопотребления. Часть 1](https://narodstream.ru/avr-urok-54-rezhimy-ponizhennogo-energopotrebleniya-chast-1/) - В данном занятии мы попытаемся познакомиться с режимами пониженного энергопотребления микроконтроллера AVR. Зачем нужны такие режимы контроллеру? Любое устройство, работающее от автономного источника питания, если будет эксплуатироваться только в основном (динамическом) режиме, скорее всего, долго не проработает. Поэтому и существуют данные режимы - режимы пониженного энергопотребления. Режимы пониженного энергопотребления существуют разных видов в зависимости от - [STM Урок 219. HAL. STM32F4. FLASH память W25Q. Запись данных. Подключаем LCD](https://narodstream.ru/stm-urok-219-hal-stm32f4-flash-pamyat-w25q-zapis-dannyx-podklyuchaem-lcd/) - Продолжая тему программирования контроллера STM32F4 и также работу с последовательной FLASH-памятью серии W25Q, мы попытаемся с помощью программы для ПК записать данные в память микросхемы. Причём запишем мы данные из файла, подготовленного для прошивки. Хочу заверить, что данная работа несложная, так как у нас почти всё для этого в библиотеке уже готово, поэтому было принято - [AVR Урок 55. Инкрементальный энкодер](https://narodstream.ru/avr-urok-55-inkrementalnyj-enkoder/) - В данном уроке мы поговорим о таком устройстве, как инкрементальный энкодер. Чтобы понимать, что такое инкрементальный энкодер, нам нужно будет знать, что такое вообще энкодер в электронике (не путать с энкодерами в цифровой обработке, посредством которых кодируется информация). Энкодер - это цифровой датчик, который определяет угол поворота. Энкодеры бывают абсолютные и инкрементальные. Абсолютный энкодер - - [AVR Урок 5. Мигающий светодиод](https://narodstream.ru/avr-urok-5-migayushhij-svetodiod/) - Программирование в цикле, использование задержки исполнения кода, в результате чего наш светодиод станет более живым. Логические операции. Операции сдвига. - [AVR Урок 4. Смотрим результаты работы](https://narodstream.ru/avr-urok-4-smotrim-rezultaty-raboty/) - В данном уроке мы видим результат нашей предыдущей работы по написанию кода. Сначала смотрим результат в симуляторе, затем на реальном примере в железе. - [AVR Урок 3. Пишем код на СИ. Зажигаем светодиод](https://narodstream.ru/avr-urok-3-pishem-kod-na-si-zazhigaem-svetodi/) - В данном уроке мы начинаем писать код на языке СИ. Данным кодом мы заставим светиться светодиод, который будет подключен к определенной ножке МК. - [AVR Урок 2. Создание проекта в Atmel Studio](https://narodstream.ru/avr-urok-2-sozdanie-proekta-v-atmel-studio/) - Создание проекта в среде программирования Atmel Studio, его настройка. - [AVR Урок 1. Знакомство с семейством AVR](https://narodstream.ru/urok-1-znakomstvo-s-semejstvom-avr/) - Микроконтроллеры AVR и написание программ для них. Выбор среды программирования. - [AVR Урок 14. USART. Связь МК с ПК. Часть 4](https://narodstream.ru/avr-urok-14-usart-svyaz-mk-s-pk-chast-4/) - Урок 14 Часть 4 USART. Связь МК с ПК Сегодня мы продолжим изучение программирования интерфейса USART. В предыдущей части занятия мы закончили код функции инициализации USART. Продолжаем трудиться над кодом дальше. Но прежде чем над ним трудиться, давайте подключим переходник к отладочной плате Мы видим здесь, что общий провод подключен на - [WS2812B, STM32F103C8T6 и цветовая схема HSV.](https://narodstream.ru/ws2812b-stm32f103c8t6-i-cvetovaya-sxema-hsv/) - Расскажу о том, как дружил STM32F103C8T6 c WS2812B через RGB и HSV, и том зачем это было нужно. Исходники прилагаются, красивых картинок не будет. Ловко проведу по граблям, на которые в этом процессе наступил, любезно предложу опереться на созданные костыли и великодушно подсажу на собственноручно изобретённый велосипед. Собственно была поставлена цель: сделать гирлянду на ёлку, - [STM Урок 118. LAN8720. LWIP. RAW. UDP Client](https://narodstream.ru/stm-urok-118-lan8720-lwip-raw-udp-client-2/) - Возвращаемся к теме передачи данных по проводным каналам связи и также возвращаемся к модулю передачи данных по LAN - LAN8720. И, прежде чем перейти к интерфейсу NETCONN API, давайте ещё раз поработаем с интерфейсом RAW API и напишем простенький UDP Client. Во-первых, это вызвано огромным количеством просьб по данному протоколу, а во-вторых, мы, скорее всего, - [QR code сканер](https://narodstream.ru/qr-code-skaner/) - QR сканер. Сканер штрих-кодов.Распознавание и вывод содержимого штрих-кодов. Сканер штрих-кодов. Распознавание и вывод содержимого штрих-кодов (barcode) следующих форматов: AZTEC, CODABAR, CODE_39, CODE_93, CODE_128, DATA_MATRIX, EAN_8, EAN_13, ITF, MAXICODE, PDF_417, QR_CODE, RSS_14, RSS_EXPANDED, UPC_A, UPC_E. Изображения штрих-кодов сохраняются. Как пользоваться приложением, есть в коротком проморолике на странице приложения. Скачать можно по ссылке здесь Также можно набрать ## Страницы - [Ссылки](https://narodstream.ru/ssylki/) - Канал Narod Stream на Youtube Narod Stream ESP32-S3 N8R8 N16R8 ESP32-S3-DevKitC-1 Dual Type-C USB Wi-Fi (2.4 GHz band) Bluetooth Low Energy Dual high performance Xtensa® 32-bit LX7 CPU cores Ultra Low Power co-processor running either RISC-V or FSM core Multiple peripherals Built-in security hardware USB OTG interface USB Serial/JTAG Controller FLASH - - [Программирование МК ESP32](https://narodstream.ru/programmirovanie-mk-esp32/) - Урок 1. Первое знакомство с контроллером ESP32 Урок 2. Настраиваем toolchain и пишем свою прошивку в Espressif IDE Урок 3. Мигающий светодиод Урок 4. Подключаем кнопку Урок 5 GPIO interrupt Урок 6. I2C. Подключаем внешний EEPROM Урок 7. I2C. Переходник для LCD 20×4 Урок 8. SPI. Драйвер индикатора MAX7219 Урок 9. SPI. FLASH - [Помощь](https://narodstream.ru/help/) - Данный сайт создан в помощь каналу Narod Stream на Youtube и Дзен. - [Raspberry Pi](https://narodstream.ru/raspberry-pi1/) - Урок 1. Устанавливаем операционную систему Урок 2. Устанавливаем MQTT брокер Mosquitto Урок 3. Устанавливаем MajorDoMo на Raspberry PI Опубликовано Декабрь 5, 2016 © Narod Stream - [Передача данных](https://narodstream.ru/peredacha_dannych/) - MQTT. Знакомство с протоколом MQTT. QoS. Уровни качества обслуживания. Практика Устанавливаем MajorDoMo MajorDoMo. Работаем с MQTT Опубликовано Декабрь 5, 2016 © Narod Stream - [Программирование МК STM32](https://narodstream.ru/programmirovanie-mk-stm32/) - Урок 1. Установка Keil μVision Урок 2. Бегущие огни Урок 3. Библиотека SPL. Подключаем кнопку Урок 4. Библиотека HAL. STM32 CUBE MX. Светодиоды и кнопка Урок 5. Библиотека HAL. STM32 CUBE MX. Таймеры Урок 6. Библиотека HAL. LCD 20x4. 4-битный режим Урок 7. HAL. LCD 20x4. 4-битный режим. Выводим информацию Урок 8. HAL. - [Программирование МК ESP8266](https://narodstream.ru/programmirovanie-mk-esp8266/) - Урок 1. Первое знакомство с контроллером ESP8266 Урок 2. AT команды Урок 3. Читаем прошивку ESP-01 Часть 1 Часть 2 Урок 4. Прошиваем ESP 01 Урок 5. Настраиваем toolchain. Первая прошивка в IDE Eclipse Часть 1 Часть 2 Урок 6. Подключаем кнопку Урок 7. UART. Передача данных Урок 8. GPIO interrupt Урок 9. - [Программирование МК AVR](https://narodstream.ru/programmirovanie-mk-avr/) - Урок 1. Знакомство с семейством AVR Урок 2. Создание проекта в Atmel Studio Урок 3. Пишем код на СИ. Зажигаем светодиод Урок 4. Смотрим результаты работы Урок 5. Мигающий светодиод Урок 6. Бегущие огни Урок 7. Кнопка Урок 8. Семисегментный индикатор. Статическая индикация Урок 9. Оформление кода. Функции Урок 10. Таймеры-счетчики. Прерывания Урок - [Новости](https://narodstream.ru/novosti/) - Всем привет! Вышло обновление моего приложения - Умный Калькулятор. Основные отличия версии от предыдущей: 1. Пока количество открытых скобок не будет равно количеству закрытых, а также после символа операции, знак равно сделать недоступным. 2. Добавлено окно "о программе". 3. Реализована ещё одна цветовая схемая и обеспечен переход между ней и основной схемой. 4. Добавлен запрет - [Программирование на C](https://narodstream.ru/programmirovanie_n_c/) - Урок 1. Наша первая программа Часть 1 Часть 2 Урок 2. Вывод данных разного типа Урок 3. Комментарии Урок 4. Переменные и типы данных Часть 1 Часть 2 Урок 5. Арифметические операторы, операторы инкремента и декремента Урок 6. Условные циклы while, do while, for Урок 7. Операторы отношения и логические операторы Урок 8. - [Полезные статьи подписчиков](https://narodstream.ru/poleznie-statji-podpischikov/) - WS2812B, STM32F103C8T6 и цветовая схема HSV - [Программирование МК PIC](https://narodstream.ru/programmirovanie-mk-pic/) - Урок 1. Знакомство с семейством PIC Урок 2. Первый проект в MPLAB X IDE Урок 3. Бегущие огни Урок 4. Кнопка Урок 5. Таймеры Урок 6. Семисегментный индикатор. Статическая индикация Урок 7. Семисегментный индикатор. Динамическая индикация Урок 8. TIMER1 Урок 9. TIMER2 Урок 10. LCD 20x4. 8-битный режим Часть 1 Часть 2 Урок 11. - [Программирование устройств и интерфейсов](https://narodstream.ru/programmirovanie-ustrojstv-i-interfejsov/) - [Тесты устройств и аксессуаров](https://narodstream.ru/testy-ustrojstv-aksessuarov/) - Bluetooth-модуль HC-05 Опубликовано Ноябрь 10, 2016 © Narod Stream - [Форум](https://narodstream.ru/forum/) - Опубликовано Май 17, 2017 © Narod Stream - [Программирование микроконтроллеров](https://narodstream.ru/main_page/) - Вводный курс Уроки посложнее Предыдущий урок Следующий урок ## Форумы - [Программирование микроконтроллеров](https://narodstream.ru/forums/forum/programmirovanie-mikrokontrollerov/) - Программирование различных микроконтроллеров и всё, что с этим связано. ## Темы - [Программирование МК ESP32](https://narodstream.ru/forums/topic/programmirovanie-mk-esp32/) - [Программирование МК ESP8266](https://narodstream.ru/forums/topic/programmirovanie-mk-esp8266/) - [Программирование МК PIC](https://narodstream.ru/forums/topic/programmirovanie-mk-pic/) - Здесь можно обсудить проблемы, связанные с программированием микроконтроллеров STM32. - [Программирование МК STM32](https://narodstream.ru/forums/topic/programmirovanie-mk-stm32/) - Здесь можно обсудить проблемы, связанные с программированием микроконтроллеров STM32. - [Программирование МК AVR](https://narodstream.ru/forums/topic/programmirovanie-mk-avr/) - Здесь можно обсудить проблемы, связанные с программированием микроконтроллеров AVR. ## Ответы - [](https://narodstream.ru/forums/reply/29462/) - Здравствуйте! Пытаюсь научиться программированию esp32! Читаю ваши уроки делаю все как написано но даже со вторым уроком возникает проблема! Не могу даже импортировать проект! Прошу помощи совета какие нибудь курсы или репетитор) лучше репетитор! Посоветуйте что найти и где? - [](https://narodstream.ru/forums/reply/29347/) - День добрый уважаемые радиолюбители и радиопрофессионалы) Поделитесь пожалуйста опытом кто сталкивался с похожими проблемами: Допиливаю ЛЕГАСИ проект под атмегой128. В распоряжении ~62-64кб ПЗУ(такой же остаток зарезервирован для бута и загрузки обновлений) и 4кб ОЗУ (eeprom в учет не беру его супер за глаза в запасе). Память ПЗУ/ОЗУ забита практически под завязку, однако при решении описанной - [](https://narodstream.ru/forums/reply/28819/) - Добрый день! Просматривая Ваши уроки, где-то видел Ваше предложение присылать темы уроков. Возможно Вас заинтересует создание наручных часон на дисплее: FPC-TFT C96B136-A1 и элементах: Atmega8A U-K8, DS1307Z, и этот дисплей. К сожалению у меня совсем отсутствует какой-либо навык программирования, а изучать его уже слишком поздно... Возможно такой проект будет интересен другим. - [](https://narodstream.ru/forums/reply/26239/) - Здравствуйте!Собрал,опираясь на ваши уроки,работающую программу для трехразрядного семисегментного индикатора и решил прицепить к ней АЦП ,чтоб задействовать терморезистор,но столкнулся со своим невежеством . Я хотел ,не особо меняя всю программу сделать так : ledprint= ADCH; переменную i соответственно убрать,но получил кроме всего прочего Ошибка cannot convert 'volatile uint8_t {aka volatile unsigned char}' to 'void(unsigned int)' - [](https://narodstream.ru/forums/reply/26231/) - Добрый день. У меня проблема. STM32f103 не уходит в прерывание по таймеру. Флаг прерывания подымается а вектор не обрабатывается. код: #include "stm32f10x.h" #define SYSCLOCK 72000000U unsigned long long int _time=0; //описание вектора прерывания void TIM2_IRQHandler (void) { if(READ_BIT(TIM2->SR, TIM_SR_UIF))//проверка флага перевания { CLEAR_BIT(TIM2->SR, TIM_SR_UIF);//сброч флага } _time++; } void ClockInit(void) { SET_BIT(RCC->CR,RCC_CR_HSION); while(READ_BIT(RCC->CR, RCC_CR_HSIRDY) == - [](https://narodstream.ru/forums/reply/26213/) - Добрый день. Подскажите как можно реализовать mass strorage на контроллере stm32f103c8t6 к которому я подключил микро sd карту через SPI интерфейс на базе адаптера CATALEX microSD card adapter. Сама файловая система работает по примерам также создает папку и файл на sd карте. Но вот как диск не могу понять как сделать. Чтобы через компьютер закидывать - [](https://narodstream.ru/forums/reply/26211/) - Добрый день, не могу не где найти как решить такую задачу, мне надо по нажатию на кнопку подать импульс 200мс но если кнопка отается нажатой нечего не делать пока ее не отпустят и нажмут заного. У меня пока такой код так как я знаю время нажати до 7сек но хочется сделать что-бы было универсально для - [](https://narodstream.ru/forums/reply/26209/) - Здравствуйте. Ни у кого в закромах нет программы простого калькулятора на MK PIC? Вот конкретнее: При включении питания на индикаторе ноль. Калькулятор должен выполнять операции над целыми числами до 8 десятичных разрядов длиной. Операции: сложения, вычитания, умножения, деления, сброс, результат. При делении на 0 на индикаторе «ERROR». Но для начала можно любой калькулятор, постараюсь сделать - [](https://narodstream.ru/forums/reply/25376/) - Добрый день. Я использую ESP8266_RTOS_SDK-2.0.0, как в ваших уроках. Пересмотрев все уроки по ESP8266, решил написать свою программку. В начале программы (до запуска задач) у меня идет инициализация дисплея, внешнего АЦП, чтение параметров из flash. Это все занимает много времени, и поэтому происходит сброс по программному wdt (ets Jan 8 2013, rst cause:2). Подскажите, пожалуйста, - [](https://narodstream.ru/forums/reply/25099/) - Добрый день. В среде Espressif IDE не могу запустить окно терминала. Проект hello_world нормально прошивается и запускается. Внешней терминалкой подключаюсь - все работает, а в окне терминала самой среды вывода от printf нет. Как побороть эту проблему? - [](https://narodstream.ru/forums/reply/25051/) - Добрый день. Начал изучение esp32 очень помогают Ваши уроки. Но знаний пока маловато( Подскажите вы пишите скетчи по ТЗ? - [](https://narodstream.ru/forums/reply/24791/) - Добрый день Уроки на Ютубе недоступны - [](https://narodstream.ru/forums/reply/24727/) - Добрый день, Столкнулся с необходимостью поднять на STM32F7 сервер для обмена информацией используя REST API. С STM32 работал много, но до этого момента не затрагивал LAN соединения, их протоколы и интерфейсы и т.п. Начал изучать примеры на Вашем сайте, и не нашел REST API. Примеров много разных и с NETCONN и RAW ... но как - [](https://narodstream.ru/forums/reply/24673/) - А языкам программирования десятилетия... Принципиально нового в Вашем случае ничего не изобрели, Начинайте с любого, который больше понятен, а массивы, циклы, логика работы везде одинаковая, отличается только синтаксис, да и то не сильно. В тоже время, не надо начинать изучать велосипед, чтобы получить водительские права. Любой контроллер не смотря на годы публикации постов актуален для - [](https://narodstream.ru/forums/reply/24672/) - Добрый день. Вопрос похожий на предыдущий. Программирую ПЛК, но из микроконтроллеров чуть-чуть знаю только PIC. Возникла задача записать звук 60 сек с частотой дискретизации 44кГц (минимум 30), а затем по запросу отправить его по WiFi, либо Блютуз. ESP32 с этой задачей справиться? - [](https://narodstream.ru/forums/reply/24669/) - Всем добрый день! Я новичок в теме программирования и программирования МК тоже) Но с электроникой дружу хорошо. Так как уроки датируются прошлыми годами(по крайней мере первые из них про STM), то прошу посоветовать на данный момент актуальную плату для изучения/обучения. И такой вопрос: с чего лучше начать, с какого МК изучение программирования? Всем кто ответил - [](https://narodstream.ru/forums/reply/24254/) - Приветствую всех форумчан и автора сайта! Изучаю программирование Atmega8 на языке С. Пытаюсь передать температуру измеренную DS18B20 с помощью модуля NRF24L01, по мотивам урока 105 "NRF24L01. Передаём данные". Вот кусок программы на передающей части в основной программе: ... int main (void){ ... while(1) { if (TEMPER_Transmit(buf1)) { USART_Transmit(buf1[0]); USART_Transmit(buf1[1]); NRF24L01_Send(buf1); } _delay_ms(1000); } } Тут - [](https://narodstream.ru/forums/reply/24240/) - Добрый день! Не могу реализовать задержку 1мкС на котроллере STM32F407 на FreeRTOS. Может у кого есть готовое решение или совет. - [](https://narodstream.ru/forums/reply/23428/) - Добрый день! Не планируется ли тема по ПЛИС? Выпущено много дешевых отладочных плат. Александр. - [](https://narodstream.ru/forums/reply/22965/) - Может по очереди их использовать? или аппаратный SPI? - [](https://narodstream.ru/forums/reply/22904/) - Для разработки устройства на Atmega 8 необходимо задействовать ШИМ (PB1-PB3)и аппаратный SPI (PB1-PB4) но вся беда в том что они занимают одни и те же ноги можно как то реализовать их параллельную работу или нет ? И вообще это реализуемо ? - [](https://narodstream.ru/forums/reply/22693/) - Добрый день! Помогите советом. Хочу писать круговой буфер на sd карту с помощью библиотеки FATFS и шины SDIO, получается создавать текстовые файлы в корневой каталог. Но не могу найти как писать файлы в папки. То есть папку создать получается, но как создать текстовый документ именно в этой папке не пойму. Подскажите пожалуйста как это сделать - [](https://narodstream.ru/forums/reply/22692/) - megger, Спасибо за помощь.(Rifnur, урок 100 часть 1, описано как включить float в eclipse.) - [](https://narodstream.ru/forums/reply/22691/) - Andry_EXOSpace, просто возвращаем значение 10 бит регистра ADC целиком, даташит стр.208. - [](https://narodstream.ru/forums/reply/22690/) - Rifnur, урок 100 часть 1, описано как включить float в eclipse. - [](https://narodstream.ru/forums/reply/22689/) - Добрый день, планируется ли разбор работы с датчиком vl53l0x? - [](https://narodstream.ru/forums/reply/22612/) - Здравствуйте. Я благодарен за ваши труды. Я новичок в программировании, изучаю АЦП по Уроку 16 на базе платы NUCLEO-767ZI, дисплей LCD 1602, среда разработки STM32CubeIDE_1.7.0, генератор кода STM32CubeMX 6.3.0. Значение АЦП sprintf(str,"%.2d v",i); выводится на дисплей нормально, а с плавающей запятой sprintf(str,"%.2f v",u);- пустое поле. На этой строке программы сообщение: The float formatting support is - [](https://narodstream.ru/forums/reply/22577/) - Здравствуйте! Во-первых, большое спасибо вам за сайт!!! Но, Изучая урок 22 часть 2. ни как не могу понять: Ни как не могу понять как получили значение с АЦП! return (unsigned int) ADC; как это работает? где обработка регистров ADCH и ADCL. как в 3 части урока? Поясните пожалуйста этот момент. - [](https://narodstream.ru/forums/reply/22565/) - Здравствуйте. Помогите считать температуру с датчика LMT01. Датчик подключен к ножке внешнего прерывания. При попытках считать импульсы возникла проблема с таймингами между периодами импульсов и паузой. - [](https://narodstream.ru/forums/reply/22563/) - D:\ESP_01>esptool.py image_info flash_esp01_full esptool.py v3.1 Traceback (most recent call last): File "C:\Users\kolom\AppData\Local\Programs\Python\Python39\Scripts\esptool.py-script.py", line 33, in sys.exit(load_entry_point('esptool==3.1', 'console_scripts', 'esptool.py')()) File "C:\Users\kolom\AppData\Local\Programs\Python\Python39\lib\site-packages\esptool.py", line 4575, in _main main() File "C:\Users\kolom\AppData\Local\Programs\Python\Python39\lib\site-packages\esptool.py", line 4151, in main operation_func(args) File "C:\Users\kolom\AppData\Local\Programs\Python\Python39\lib\site-packages\esptool.py", line 3500, in image_info image = LoadFirmwareImage(args.chip, args.filename) File "C:\Users\kolom\AppData\Local\Programs\Python\Python39\lib\site-packages\esptool.py", line 2227, in LoadFirmwareImage with open(filename, 'rb') as f: FileNotFoundError: - [](https://narodstream.ru/forums/reply/22403/) - Добрый день! Нужна помощь. Уже недели 3 мучаюсь. Задача: Читать JPG из SD и выводить на ILI9341 с помощью DMA Circular. Проблемы в основном с картинками 320*240. Где используется в передаче 3 пакета. с 1 или 2 все норм. Моя функция такая: void ILI9341_Draw_SDImageJPG(uint16_t x,uint16_t y, const char * fileName) { if((x >=ILI9341_SCREEN_WIDTH) || (y - [](https://narodstream.ru/forums/reply/22402/) - я как-то переделывал ардуиновскую библиотеку под STM32. Невеликие там проблемы. если вы на своей discovery 407 смогли выполнить несколько уроков NarodStream, тогда пишите chechetkin.v.v@mail.ru - [](https://narodstream.ru/forums/reply/22401/) - Добрый день уважаемые форумчане. Автору уроков огромное спасибо за труды. Проблема в следующем, пытаюсь пересадить модуль rfm69HCW 868 (SX1231H) с адруины на stm(discovery 407), ничего не получается, даже инитить не хочет. Библиотеки инициализации писать самому мозгов не хватает, да и признаться честно, ничего не понимаю в радио. Пробовал библиотеки от lowpowerlab, radiohead. Пытался найти в - [](https://narodstream.ru/forums/reply/22392/) - Здравствуйте друзья нужна помощь подправить код ИК-приёмник на Attiny13. При долговременном нажатии на кнопку пульта светодиод на выходе работает в тригерном режиме , надо поправить код чтоб светодиод при долговременном(удержание кнопки пульта) нажатии на кнопку пульта горел постоянно . Ниже прилагаю код написанный на assembler ;-- http://radiohlam.ru - собери сам, помоги собрать другу ;------------------------------------------------------------------ .device - [](https://narodstream.ru/forums/reply/22380/) - Добрый день! Пытаюсь настроить на STM32F407 работу SNMP агента. Запустить его удалось, а вот привязать свою простенькую базу mib и отправить своё сообщение на snmp-сервер на банальное изменение состояния контакта никак не получается. Будут ли такие уроки или может я пропустил какой? Не могу найти нигде хороших примеров. - [](https://narodstream.ru/forums/reply/22344/) - Добрый день. Захотелось ребёнку моему красивую подсветку. Выбрал ленту ws2812. Поскольку на этом сайте давно нахожусь, попробовал скомпилить готовые проекты с этого сайта. Всё работает, с одним НО. Почему то у меня работает половина -1 светодиод. То есть если #define LED_COUNT 300, то у меня работают только 149 светодиодов. У автора всё работает нормально. Лента - [](https://narodstream.ru/forums/reply/22326/) - chechetkin.v.v@mail.ru шлите схему, посмотрим что можно сделать - [](https://narodstream.ru/forums/reply/22325/) - Есть силовая часть для BLDC в сборе на транзисторах gp10nc60kd и ir2106s Мотор на 100 вольт 2000 ватт BLDC на постоянных магнитах от стиральной машинки LG а так же, есть STM32F103. Помогите найти прошивку чтобы сделать контроллер. С моей стороны, посильная помощь. Очень прошу! Хочу запустить этот мотор для собственныз нужд. А знаний по программированию - [](https://narodstream.ru/forums/reply/22319/) - Здравствуйте! Хотелось бы увидеть от вас уроки по настройке GPS с STM32 - [](https://narodstream.ru/forums/reply/22291/) - Здравствуйте! Нужна помощь по индикации, но в 3 разряда. Комментарские варинты не работают, а код ниже хорошо показывает 2 разряда. ISR (TIMER1_COMPA_vect) //Верный для двух разрядов { if(n_count==0) {PORTD&=~(1 - [](https://narodstream.ru/forums/reply/22279/) - Добрый день. Сайт Keil не работает, подскажите, пожалуйста, где найти инсталяцию MDK ARM STM 32 version 5, хщчу начать заниматься STM32, так занимаюсь AVR - ами. - [](https://narodstream.ru/forums/reply/22278/) - Добрый день, Я программирую STM32 какое-то время. Пожалуйста, сделал ли кто-нибудь связь по протоколу MODBUS TCP / IP. Я хотел бы сделать преобразователь данных из STM32 (например, температуры и входов / выходов) в ПЛК Siemens. Это о том, как происходило общение в STM32. Я купил комплект DISCOVERY_F767ZI с портом Ethernet (LAN8742A-CZ-) Спасибо. - [](https://narodstream.ru/forums/reply/22271/) - Здравствуйте! Нужна помощь. Пробую задействовать два входа АЦП на тини13 и чтоб замеры на каждом в пине соответствовали действиям на двух соответствующих выходах. Столкнулся с проблемой - не могу сохранить значения . Значения АЦП вмешиваются во все функции дрыгая не своими ногами. Как сохранить значение предназначенное для отдельной функции и соответственно переписать именно когда дойдет - [](https://narodstream.ru/forums/reply/22252/) - Пробую написать программу на STM32 используя HAL библиотеки. В программе инициализируются три таймера номер 3 (TIM3), номер 5 (TIM5), номер 2 (TIM2). TIM3 тактируется от внутреннего источника (от шины), работает в режиме ШИМ и формирует на выходе меандр с частотой 1,2 МГц. TIM5 тактируется от TIM3, работает в режиме ШИМ. TIM2 тактируется от TIM3, работает - [](https://narodstream.ru/forums/reply/22247/) - Здравствуйте не могу пропинговать контроллер(Stm32f7Discovery) когда запущена инициализация GUI, не подскажете в чем может быть проблема(без GUI_Init() пингуется)? - [](https://narodstream.ru/forums/reply/22176/) - Доброго времени суток. мучаюсь с таймером никак не могу сделать таймер при подаче на ногу импульсов таймер должен прибавлять +20 на дисплей при нажатии кнопки старт должен идти отсчет времени в минус пли когда кнопка старт нажата и время уходит должен включатся фонарь как таймер доходит до нуля фонарь выключается дисплей используется семи сегментный 4 - [](https://narodstream.ru/forums/reply/22175/) - Помогите переписать программу с BASCOM-AVR на атмел студио ---------------------------------- $regfile = "m8adef.dat" 'ATmega8A $crystal = 8000000 '8МГц (деление на 8 отключить) $baud = 9600 '------------------------------------------------------------------------------ Ddrb = &B11111111 'PB7, PB6, PB5, PB4, PB3, PB2, PB1, PB0 Ddrc = &B11111111 'N/C, RESET, PC5, PC4, PC3, PC2, PC1, PC0 Ddrd = &B11001010 'PD7, PD6, PD5, PD4, PD3, - [](https://narodstream.ru/forums/reply/22174/) - Всем привет! Извените если не в тему вопрос! Не решал ли кто нибудь задачу вывода изображения на TFT дисплей? Какой из стандартных графических форматов (*.pic, *.pcx, *.jpg, *.bmp ...) наиболее просто преобразуется в линейную последовательность пикселей в условиях дефицита оперативной памяти. Может быть существуют какие либо библиотеки или кто нибудь может поделиться исходниками? Приветствуются любые - [](https://narodstream.ru/forums/reply/22173/) - Люди как создать новую тему? Интересует I2C Slave на библиотеке HAL, у меня ничего не получается. - [](https://narodstream.ru/forums/reply/22129/) - Здравствуйте. Хотелось бы увидеть урок о цифровых линейках. Точнее о внешнем табло на 7-ми сегментных индикаторах к цифровым линейкам. Желательно на PIC попроще. Может быть PIC16F84. Спасибо. Огромное спасибо за ваши уроки. - [](https://narodstream.ru/forums/reply/22050/) - Простите, сложно донести мысль без их использования... - [](https://narodstream.ru/forums/reply/22049/) - Товарищи! Старайтесь на данном ресурсе не использовать внешние ссылки. Либо объясняйте как-то без этого, либо кидайтесь ссылками в личной переписке. - [](https://narodstream.ru/forums/reply/22047/) - Здравствуйте, в комментарии к уроку 32 по AVR (LCD дисплей 20×4) по поводу русификации дисплея ссылку на таблицу знакогенератора заблокировали, поэтому для целостности изложения оставлю ссылку здесь: Русификация дисплея 20×4 в Proteus (пост #106) - [](https://narodstream.ru/forums/reply/22046/) - Зджравствуйте, имеется контроллер pic18f25k22 На нём запущенО 2а Uart-а RX1 RC7 TX1 RC6 RX2 RB7 TX2 RB6 Выставленны следующие натройки OSCCON=0b00110000; //System clock OSCCON2=0b00000000; //System clock INTSRC=1; //Internal Oscillator Low-Frequency Source Select bit1 = 31.25 kHz //UART1 ANSC7=0; ANSC6=0; TRISC6=1; TRISC7=1; PORTCbits.RC6=1; SPEN1=0; CREN1=0; TXSTA1bits.SYNC=0; TXSTA1bits.BRGH=0; RCSTA1bits.SPEN=1; BAUDCON1bits.BRG16=1; BAUDCON1bits.CKTXP=0; BAUDCON1bits.DTRXP=0; SPBRGH1=0x00; SPBRG1=0x3F; SPEN1=1; TXEN1=1; CREN1=1; - [](https://narodstream.ru/forums/reply/22003/) - Здравствуйте, NarodStream! Очень интересен такой момент - как программировать STM32 на с++? А именно связка CubeMX -> Keil -> c++ Как-то так чтобы потом можно было и в кубе редактировать. Надо не столько синтаксис c++, сколько сам рабочий проект (мигание светика) и как им пользоваться. - [](https://narodstream.ru/forums/reply/21887/) - Здравствуйте, уже второй месяц пошел а я так и не продвинулся в написании программы, ethernet to uart. По порядку Приобрел для проекта отладочную плату nucleo h743zi2 на плате присутствует физика lan 8742. И начал писать программу, до этого с ethernet на stm32 не сталкивался. Проблема заключается в следующем. В H7 микроконтроллерах, нужно включить кэш данных - [](https://narodstream.ru/forums/reply/21818/) - Здравствуйте. У вас есть презентация вашей STM32H745I https://www.youtube.com/watch?v=pNPlW9wyo98 Будут ли уроки связанные с ней ? - [](https://narodstream.ru/forums/reply/21812/) - Здравствуйте, Narod Stream! Ну что ж, ждём продолжения. Хочу ВСЁ писать на ассемблере, а не только вставки в С/С++ код. Но пока много чего не понимаю. Недавно я стал работать с M4 - вообще "в ёлочку" будет. С Уважением, A-Soft. - [](https://narodstream.ru/forums/reply/21808/) - A-Soft, Здравствуйте! 1. Удалил. 2. Думаю, что будут, по крайней мере, у меня нереализованных проектов по данной теме много, в том числе и работа на аппаратном уровне с плавающей точкой, понятное дело, что уже в линейке M4. - [](https://narodstream.ru/forums/reply/21807/) - Уважаемый Админ, у меня 2 вопроса: 1. Как удалить дубликат Вашей статьи, в котором я указан автором? https://narodstream.ru/stm-urok-206-ll-stm32f4-svetodiody-i-knopka-2/ 2. Будут ли еще уроки по STM32 Assembler или больше не ждать? - [](https://narodstream.ru/forums/reply/21728/) - Доброго время суток. Помогите найти ошибку. Пытаюсь настроить ultrasonic us100 на stm32f103c8t6 на TIM4 CH1 на OnePulse Mode с последующем переключением на Input Capture Mode. RCC APB1 APB2 настроины на 48 Mhz Сброс настроек таймера и установка его на One pulse Mode: 5 us пульс для запуска ultrasonic void TIM4_OnePulsModeInit() { RCC->APB2ENR |= RCC_APB2ENR_IOPBEN; RCC->APB1ENR - [](https://narodstream.ru/forums/reply/21727/) - Ребят привет, я новичек в AVR мне задали задание сделать лед матрицу 8x8 где в начале загарается только 1 диод. И каждые 0,5 сек рядом с ним загораются следующие светодиоды в направлении указателя по периметру матрицы. Предыдущие светодиоды горят. Когда все светодиоды по периметру включены, алгоритм повторяется. - [](https://narodstream.ru/forums/reply/21726/) - Могу сбросить готовый проэкт - [](https://narodstream.ru/forums/reply/21725/) - Всем доброго времени суток!!! Хочу обратиться за помощью по восстановлении управления камерой LAICE LSD-364, в неё ударило грозой, сгорел МК atmega 2561 16au, МК заменил но вот где взять прошивку или дамп на него не знаю, подскажите как быть перелопатил кучу прошивок но не одна не встала. Видео сигнал идёт, движки целые, зум работает, камера - [](https://narodstream.ru/forums/reply/21619/) - Здравствуйте, схема STM32H7-FMC-LCD. возможно-ли преобразовывать 1-бит(на пиксель) в 16-бит посредством dma2d? Шуршал даташит, там намек на альфабленд 1-бит режим. - [](https://narodstream.ru/forums/reply/21617/) - Странно, должно было откомпилировать, только что проверил, но у меня gcc. - [](https://narodstream.ru/forums/reply/21616/) - Ну уж не до такой степени ламер. Конечно же и в прототипе указывал и в самой функции. - [](https://narodstream.ru/forums/reply/21615/) - компилятор заворачивает варнингом потому что надо было делать так: volatile void mydelay(void) { for ( unsigned long i=0; i - [](https://narodstream.ru/forums/reply/21614/) - Спасибо, но volatile void mydelay(void); компилятор заворачивает варнингом function cannot return qualified void type 'volatile void' [-Wqualified-void-return-type] и так же игнорирует функцию. На другие типы данных так же ругается. А вот void mydelay(void) { for (volatile unsigned long i=0; i - [](https://narodstream.ru/forums/reply/21613/) - volatile void mydelay(void){ ... } Должно помочь. volatile - говорит компилятору не оптимизировать функцию. - [](https://narodstream.ru/forums/reply/21612/) - Добрый день. Решил начать осваивать SMT32, начав с Blue pill (F103c8t6). Светик, подключенный на плате к PortC13 смог зажечь, разобравшись в отличиях от F407. А вот с морганием выходит засада: функция задержки полностью игнорируется Кейлом. #include "stm32f10x.h" void mydelay(void); void mydelay(void) { for (unsigned long i=0; iAPB2ENR |= RCC_APB2ENR_IOPCEN; - [](https://narodstream.ru/forums/reply/21480/) - доброго времени суток, что то запутался с таиминогами и настроиками sdram K4D261638F подключил против всех законов физики))) на столе проводами к F767zi, при 8 битном в память пишется первые два символа из буфера(0x37BA0F68) > (0x37373737rn), в 16 битном первые четыре (0x37BA37BArn), подтолкните в нужном направление, инициализация из урока 62 по SDRAM - [](https://narodstream.ru/forums/reply/21403/) - Здравствуйте. В последней реинкарнации CUBEMX престал работать VCP он же CDC на плате blue pill. При дефолтных настройках всё компилируется, запускается, порт в виндовс поднимается, но любая попытка записи в порт приводит к ошибке обмена. Изменение размера Tx Rx буферов и применение других советов не приводит к восстановления работоспособности. На плате black pill (stm32 f401cc) - [](https://narodstream.ru/forums/reply/21348/) - Здравствуйте! Не получается использование схемы распределения памяти heap_5 в IAR_Embedded_Workbench_for_ARM_8.40. По тексту урока 131 можно представить следующее: #if defined ( __ICCARM__ ) __no_init static uint8_t heap_sram1[32*1024] @ ".user_heap_stack"; #else static __attribute__((used,section(".user_heap_stack"))) uint8_t heap_sram1[32*1024]; #endif uint8_t heap_sram2[32*1024]; _____________________________________ Не трудно поместить блок .user_heap_stack рядом с системным стеком и кучей после .bss: .bss zero 0x2000'f295 0x1 tcp.o - [](https://narodstream.ru/forums/reply/21346/) - Я не знаю какой у вас контроллер, но по идее можно переназначить ножку FSMC_NOE, у вас же платка LCD подключена ручками, следовательно ни что не мешает это сделать. Если чип аудио тоже не распаян на плате микроконтроллера, то можно переназначить RESET. - [](https://narodstream.ru/forums/reply/21341/) - Видимо вы правы, спасибо! Попробую теперь разобраться. Вообще хотел сделать вывод FFT на дисплейчик с аудио потока, но судя по всему не получится. fsmc использует ножку PD4 (FSMC_NOE) а ножка PD4 также используется для чипа аудио RESET. Правильно ли я понимаю что можно использовать или fsmc или CS43L22? Или есть какой-то выход из ситуации? - [](https://narodstream.ru/forums/reply/21338/) - Пытался нагуглить какой-то пример все примеры идут через SPI. Добрых суток. А это, скорее всего, и есть SPI: LCD_CS - spi_cs LCD_RS - spi_sck LCD_WR - spi_mosi LCD_RD - spi_miso - [](https://narodstream.ru/forums/reply/21337/) - Здравствуйте! В 10 уроке Таймеры-счетчики не могу понять код TCCR1B |= (); А именно что обозначают скобки ()?? То что TCCR1B присваивается результат логического сложения TCCR1B и ( ) это понятно. Непонятно что обозначают скобки ( )? Подскажите пожалуйста. - [](https://narodstream.ru/forums/reply/21294/) - Приветствую во первых спасибо большое за видео уроки! Не на одном языке нету настолько доступного объяснения в таких количествах. Подключил по вашим видео урокам tft дисплей с такими пинами https://static-eu.insales.ru/images/products/1/428/142721452/TFT-MSD-_02.jpg Дисплей пришел со стиком и насколько я понял из описания он touch. Не могу разобраться как работать с тачем. Правильно ли я понимаю что если - [](https://narodstream.ru/forums/reply/21258/) - Здравствуйте. здесь есть какой нибудь код связанный микропроцессор STM32F407 с резистор переменными и с дисплеем. мне надо так, когда крутишь, на дисплей отображает цифра, от 700 до 800. когда крутишь, цифры уменьшаются или увеличиваются. среда CooCox. помогите пожалуйста. - [](https://narodstream.ru/forums/reply/21229/) - NEOVIS Вообще тема интересная, возьму на заметку, правда массовых просьб пока не поступало. - [](https://narodstream.ru/forums/reply/20920/) - Добрый вечер. Вы можете написать урок: I2C. Slave mode. Соединяем два микроконтроллера. Только для stm32 в HAL и LL. - [](https://narodstream.ru/forums/reply/20871/) - Здравствуйте. Скажите, пожалуйста, насколько оправдано использование DMA для вывода данных через USART? Во-первых, USART используются в проекте как для отладки ПО, так и для взаимодействия с МК. Во-вторых, используется ОС реального времени. В-третьих, производится именно форматированный вывод, то есть с использованием самописной функции "printf()". Соответственно, сперва обязательно нужно процессорное время для форматирования, а DMA, что - [](https://narodstream.ru/forums/reply/20869/) - Добрый день, скажите пожалуйста кто мог бы за оплату, помочь сделать 2 контрольных работы (только код и алгоритм) микроконтроллера ATMega48. 1) Светодиоды включаются по очереди, создавая эффект бегущих огней следующим образом: слева направо, справа налево слева-направо и т.д. После нажатия кнопки SW4 процесс останавливается и начинается сначала через 5 с. и 2) После нажатия на - [](https://narodstream.ru/forums/reply/20855/) - Добрый день. AVR Урок 23. Собираем часы на DS1307 и LED индикаторе. Часть 6 Подскажите как через if(clockmode==DAY) ledprint(day*1000,DAY); вывести символы дня недели? - [](https://narodstream.ru/forums/reply/20456/) - Добрый день ! Hе подскажите в 68 уроке часть 4 проверяется флаг header.status&0x80==0 ,а что это за флаг и где он находится в документации? - [](https://narodstream.ru/forums/reply/20444/) - Добрий день! Кто может помочь.? Установил Keil с офф сайта и CubeMX, генерирую проект в кубе для Keil и вискакивает во такая ошибка как на фото. - [](https://narodstream.ru/forums/reply/20426/) - Добрый день! Ищем удобную библиотеку для STM32 под HAL Modbus RTU SlaveMaster. Кто сможет помочь? Готовы заплатить. - [](https://narodstream.ru/forums/reply/20092/) - Хочу создать виртуальный порт для того, чтобы выводы из разных реальных портов можно было бы объединить в один виртуальный. Решил для начала попробовать с помощью указателей создать переменную, и, чтобы с помощью этой переменной менять значение вывода одного из портов (PORTA0) Вот как я это пытался делать: #define F_CPU 8000000UL #include int *a; int - [](https://narodstream.ru/forums/reply/20044/) - Добрый день Попытался сделать 4 канальный термометр, взял прошивку из урока "DS18B20 несколько датчиков", немного изменил код для вывода на LCD, вроде все хорошо, но решил посмотреть как отрицательные температуры показываются. Сунул 1 датчик в морозильную камеру, и падение температуры выглядело вот так: +3, +2, +1, -127, -126, -125, -124, -123, -122 и т.д. В - [](https://narodstream.ru/forums/reply/19889/) - Здравствуйте, извиняюсь за данный пост, я немного не уверен на сколько стм32 это просто... но поддавшись Вашему приглашению в др уроках, меня заинтересовал контроллер. все начинается с урока "Программирование МК STM32. УРОК 1. Установка Keil μVision" вы используете STM32F407VG, в то время как у меня есть в наличие STM32F103RCT6...посему вопрос, если позволите. в уроке дистрибутив - [](https://narodstream.ru/forums/reply/19322/) - Всем привет, начал недавно STM32 осваивать (до этого были pic12-18/arduino/raspberry) и столкнулся с интересной проблемой: Настроил GPIO как Input Pull-Up но при считывании получаю 0. Условия: Несколько других также настроенных портов (Input Pull-Up) при этом посажены на землю (на один порт Output Open-Drain), а непосредственно перед считыванием переключаю другой порт Output Open-Drain Pull-Up с 1 - [](https://narodstream.ru/forums/reply/19321/) - Приветствую уважаемый Narod Stream. В одном коментарии к вашему видео задали вопрос, который меня тоже волнует. "Что-то с ходу не нашел: Есть три канала АЦП, регуляр мод, опрашивание идет по очереди и такой вопрос, когда забираем значение где узнать с какого канала оно поступило?" Вы ответили так. Триггеры используйте. Поставьте триггеры на каждый канал и - [](https://narodstream.ru/forums/reply/19236/) - Здравствуйте, подскажите новичку. Есть пик 628а. Помогите написать кусок программы для компаратора, чтобы он сравнивал два напряжения. И как только оно стало равно или больше 11.5 В то мк подал сигнал Заранее спасибо - [](https://narodstream.ru/forums/reply/19166/) - Доброго времени суток. Очень хотелось чтобы на сайте была затронута тема ассемблерных вставок в особенности для STM32. Или вот еще вопросик. Как подключить встроенные функции C++ команд ассемблера. Например __ror. - [](https://narodstream.ru/forums/reply/18651/) - Здравствуйте. Помогите, пожалуйста, если знаете ответ на мой вопрос. Необходимо генерировать сигнал с помощью таймера. Линия подтянута к питанию, сигнал инверсный. Нужно притягивать линию к земле на заданное количество тиков таймера, а потом отпускать на какое-то время, после чего сигнал повторяется. Это как инверсный ШИМ. Я думал, что это так же легко, как настроить прямой - [](https://narodstream.ru/forums/reply/18544/) - Нужна консультация (Возмездно) по 7-ому уроку на STM32. Вкратце: дисплей выводит символы, если вывожу их поштучно. Если пытаюсь вывести строку, то дисплей выводит случайную букву/цифру из строки, вместо самой строки. Код - в соответствии с Вашим, за тем исключением, что у меня другой контроллер с тактовой частотой 80 МГц и он хоть что-то стал выводить - [](https://narodstream.ru/forums/reply/18383/) - Доброго времени суток! Кто-то работал с GSM модулями SIM800 и ему подобными? Конкретней SIM7600. Какая последовательность команд для установки связи с мобильным интернетом? И как осуществить передачу данных между МК и с данным модулем и сервером? (Конечный результат, прошивка МК STM32 удаленно, через интернет) - [](https://narodstream.ru/forums/reply/18149/) - Здравствуйте, нужна помощь в написании дипломной работы на тему: "Разработка индикатора непрерывности цепи заземления специальной аппаратуры". А именно: есть готовый код прошивки микроконтроллера Attiny 13 ( без комментариев) и алгоритм его работы(составлял программист, который уволился и в общем-то связь с ним потеряна). Нужно подробно закомментировать каждую строку кода, чтобы было понятно даже новичку в программировании. - [](https://narodstream.ru/forums/reply/17829/) - Здравствуйте, кто нибудь пробовал повторить урок №96, подключение LAN8720 к STM32F4Disc. Я повторил урок, но нет результата. Уже несколько дней пытаюсь разобраться в чём дело, но пока что безрезультатно. Использую в проекте ту же плату с LAN8720 что и в уроке. Готовый проект с урока так же не работает. PHY адрес пробовал и 0 и - [](https://narodstream.ru/forums/reply/17796/) - Обязательно - [](https://narodstream.ru/forums/reply/17747/) - Если у вас получится побороть, дайте знать. - [](https://narodstream.ru/forums/reply/17746/) - Спасибо! Извините за беспокойство - [](https://narodstream.ru/forums/reply/17745/) - К сожалению нет. Есть драйверы под линукс, там есть инициализация, но я не знаю как ее использовать. - [](https://narodstream.ru/forums/reply/17744/) - Здравствуйте! Уважаемый imperror, удалось ли Вам подключить 7" дисплей rpi к 769discovery? - [](https://narodstream.ru/forums/reply/17693/) - Здравствуйте! Контроллер stm32f407. Так как в сети примеров мало программного I2C на STM32,что удалось нагуглить либо работало криво, либо приходилось допиливать и допиливать.Возможно урок по программному I2c,например с микросхемой si570.Или у кого есть наработки в этой ветке поделитесь. Заранее большое спасибо. - [](https://narodstream.ru/forums/reply/17669/) - Проблема может быть в обновлениях win, если под ней работаете. Люди в сети тоже мучаются. У меня 10ка лицензия, студия 7 - стимулятор работает. - [](https://narodstream.ru/forums/reply/17668/) - Здравствуйте! Смотрю ваш урок https://www.youtube.com/watch?v=g7d0IUXscOQ&feature=youtu.be Программирование МК AVR. Урок 2. Создание проекта в Atmel Studio. После создания проекта и выбора контроллера Atmega8 на вкладке Project -> Properties -> Tool нет возможности выбрать Simulator, Select debagger/programmer список пустой, и надпись "unsupported tools*device combination". Это для любого контроллера. Подскажите пожалуйста как это исправить? Спасибо! - [](https://narodstream.ru/forums/reply/17656/) - Добрый день. Сегодня на дворе 2019 год, но по прежнему AVR актуальна, так как эти контроллеры более доступны да и программ под них написано не мало. Я понимаю, что уроки по AVR уже давно прошли, но у меня возник вопрос. В уроке 21"Управление DS1307 кнопками" при компиляции программного кода выводит ошибку на этот код инициализации - [](https://narodstream.ru/forums/reply/17652/) - Здравствуйте. У меня возникла непонятка с NRF24l01+. Разбираюсь с модулями по Вашим статьям, за что огромнейшее Вам спасибо. Все понятно. Единственное это модуль не работает на прием на PIPE5. RX_ADDR_P1-RX_ADDR_P5 заполняю адресами, отличается только младший байт разрешаю EN_AA и EN_RXADDR на все каналы. Передатчик по очереди меняет свой адрес на адреса из списка приемника и - [](https://narodstream.ru/forums/reply/17651/) - Здравствуйте Владимир. Был бы очень вам благодарен , если бы вы записали виде о работе с бутлоадером черз DFU. Причем задача стоит такая - программа начинает бежать и в самом начале (ещё до бессконечного цикла) проверяет нажатие пользовотельской кнопки например. Если кнопка нажата , программа перебрасывает стак поинтер на адрес системной памяти (бутлоадер) и заходит - [](https://narodstream.ru/forums/reply/17641/) - Здравствуйте! Благодарю Вас за Ваш труд в этой сфере. Это неоценимый труд для начинающих и опытных программистов. Возник вопрос. Изучаю USB CDC Сlass. Контроллер stm32f103. Необходимо за раз принять а потом и передать пакет 510б. Но в HAL ограничение на пакет 64 байта а остальные теряются. Конечно можно задефайнить больший размер буфера. Но когда надо - [](https://narodstream.ru/forums/reply/17275/) - Здравствуйте! Хочу поинтересоваться, есть ли какая-либо информация, связанная (напрямую или косвенно) с автоматизацией процесса для БПА (билетопечатающий автомат). Заранее, спасибо - [](https://narodstream.ru/forums/reply/17141/) - Megamamant. Спасибо за оценку моих трудов! Монетизация включена, но из-за того, что данная ниша очень узкоспециализированная, заработок очень низкий. Насчет совмещения 1с платформы особо не подскажу, хотя 1С-предприятие администрирую уже на протяжении 13 лет. Только моя работа не связана с подключением внешних устройств. Надо знать протокол обмена и тогда, думаю, всё возможно. - [](https://narodstream.ru/forums/reply/17140/) - Всем здравствуйте! хочу выразить огромную благодарность Владимиру за его труды, а так же пожелать развитие канала на youtube , не особо разбираюсь о заработке в youtube ))) если это возможно монетизируйте видео будем смотреть рекламу полностью и тем самым хоть немного, но помогать развитию канала! заказал себе NUCLEO-F767ZI ARM STM32 Nucleo-144 , думаю этого хватит - [](https://narodstream.ru/forums/reply/17133/) - Там вообще странная ситуация, переходник есть, а информации по нему вообще ни какой. Даже у производителя этих дисплеев-тачскринов нет даташита. Есть исходники для линукс, но с разбегу завелась только подсветка. Почему-то набор регистров и их значений для TC358762XBG, который есть в исходниках под линукс, не работает в СТМ, ну или я не знаю как их - [](https://narodstream.ru/forums/reply/17132/) - imperror. Вряд ли у них самих есть такая информация. Так как дисплей - это не их продукция. Я когда-то тоже через переходник DSI-HDMI запускал 7-дюймовый дисплей именно тоже с платы F769-Discovery. Вроде нормально всё работало. - [](https://narodstream.ru/forums/reply/17131/) - Уважаемый автор, не могли бы вы поинтересоваться у СТМ, как запустить связку stm32f769, переходник b-lcdad-rpi1 и 7' дисплей от RPI. В интернете информации ровно 0. У самой STM примеров нет. Те примеры, что есть не подходят. Вообще, дисплей от малины, это мост TC358762XBG DSI-DPI, ATTINY88-MUR - которая управляет питанием и возможно регистрами TC358762XBG и обычный - [](https://narodstream.ru/forums/reply/17060/) - ALEX_FOM. Надо будет проверить, скоро будут как раз морозы Может что в коде не то. - [](https://narodstream.ru/forums/reply/17031/) - Доброго времени суток, спасибо за Вашу работу! Решил тоже подружиться с stm32, но так как новичок, и железок разных нет в наличии, то есть вопрос и предложение. Думаю купить для начала STM32F429I-DISCO, у Вас первые уроки для STM32F4DISCOVERY, далее - другие, отсюда вопрос, смогу ли я по Вашим урокам работать с STM32F429I-DISCO, и до каких - [](https://narodstream.ru/forums/reply/16945/) - Здравствуйте! Кто-нибудь повторил подключение датчика BME280. Нет отрицательных показаний температуры. При переходе через 0 в минус показание температуры 409 градусов. Соответственно и все другие показания сбиваются. Думал датчик плохой. Получил еще один, работает так же. Пробовал на f103 плате и f407 плате. Подключал к ардуине. Там работают нормально. В чем может быть причина? Реально кто-нибудь - [](https://narodstream.ru/forums/reply/16944/) - Здравствуйте. Спасибо за возможность получить детальную информацию по очень многим темам. А о протоколе SNMP будет возможность здесь узнать поподробнее? Есть читатели, которых эта тема интересует? - [](https://narodstream.ru/forums/reply/16873/) - Добрый день. А уроки по подключению мультиплексора (74HC4051) к STM32f4 будут? - [](https://narodstream.ru/forums/reply/16617/) - Там как то странно получается. Для того чтобы все было хорошо нужно в буфер передачи передать сперва IP адрес, порт получателя и размер данных и только потом сами данные. И так получается что заголовку тоже нужно стать данными. В результате чего в данных у меня появляется 8 лишних байт данных. - [](https://narodstream.ru/forums/reply/16616/) - Sergey1985 К сожалению, лично я не работал с данным протоколом на этой микросхеме. Думаю, если кто-то работал, то откликнутся. - [](https://narodstream.ru/forums/reply/16615/) - streloc Уроки по данному контроллеру непременно будут, но тогда, когда закончим с LWIP, тем самым завершив работу над проводными технологиями. Так как переход на беспроводные нецелесообразен тогда, когда до конца не знаешь проводные. - [](https://narodstream.ru/forums/reply/16614/) - здравствуйте пытаюсь работать с W5500 У меня не получается сделать передачу UDP пакетов. Точнее они передаются но Wireshark пишет что пакет не полный. (Malformed Packet: TAPA) Буду признателен если Вы поясните алгоритм передачи. Что за чем нужно делать. - [](https://narodstream.ru/forums/reply/16576/) - Привет всем форумчанам! Подскажите, кто-нибудь пробовал подключить USB на плате NUCLEO-F767ZI в режиме Virtual COM Port? Вторую неделю бьюсь, при подключении к компьютеру вылезает ошибка 43 (Сбой запроса дескриптора USB-устройства). Перепробовал всё что только можно! - [](https://narodstream.ru/forums/reply/16562/) - Здравствуйте. а будет урок по работе с esp8266 или другим модулем WIFI ? SPWF01SA11 очень дорогой. - [](https://narodstream.ru/forums/reply/16561/) - Добрый день! Очень нужен пример для STM32f746 работы с инфракрасным датчиком температуры LMX90614. Готов обсуждать материальную компенсацию. - [](https://narodstream.ru/forums/reply/16415/) - Здравствуйте! Скажите пожалуйста, каким версией используетесь Proteus, где описывается на видеоуроках? Какой лучше выбрать версию Porteus для создания симуляции работы контроллера? В инете есть доступные версии 8.6 и 8.7. - [](https://narodstream.ru/forums/reply/16384/) - выходит такая ошибка при компиляции.Не могу понять,что не так. - [](https://narodstream.ru/forums/reply/16251/) - Sergey 702 Дело в том, что аппаратный шим нельзя подать на вывод RC5, т.к. модуль ШИМ CCP подключен 1 каналом к RC2 а вторым каналом к RC1 - это хорошо видно в дотащите. Если очень необходимо на RC5 ШИМ можно получить программно, но в фоне он работать не будет. - [](https://narodstream.ru/forums/reply/16250/) - Подскажите новичку, есть PIC16F73, нужно подать ШИМ на порт RC5, пишу код в MPLAB X IDE, не даёт задействовать этот порт, ошибка, разрешает только порты RB. https://studbooks.net/imag_/15/219692/image018.jpg https://www.alldatasheet.com/datasheet-pdf/pdf/74970/MICROCHIP/PIC16F73.html - [](https://narodstream.ru/forums/reply/16183/) - Добрый день. Прошу помочь с файлами конфигурации EmWin для LCD ILI 9341 (точно такой же как у Вас). Спасибо за ваши уроки. На ADC (инж. 2 кан.) оживил touch. - [](https://narodstream.ru/forums/reply/16099/) - Добрый день! Пардон за оф-топик, но контактов на сайте не нашёл. Большая просьба к администратору сайта связаться со мной голосом или по почте, есть интересный разговор: Спасибо! Решетников Игорь MES-центр (Россия), Российская рабочая группа MESA International e-mail: I.Reshetnikov@mescenter.ru тел.: +7 (916) 671-19-74 Интернет: www.mescenter.ru - [](https://narodstream.ru/forums/reply/16078/) - Всем привет. Недавно нашел канал. Давно хотел изучить АВРСТУДИЮ. Спасибо за понятное и полное обьяснение что куда и откуда. Хотелось бы уточнить будет ли продолжение про AVR??? - [](https://narodstream.ru/forums/reply/16049/) - Добрый день. Начал изучать работу с SD картой. При инициализации у меня возникла проблема. На консоль выводится: OCR: 0x00 0x00 0x01 0xAA Type SD: 0x00 Т.е. получается, что команда ACMD41 не отрабатывается нормально. Подскажите, пожалуйста, в чем может быть проблема, или что можно еще попробовать? - [](https://narodstream.ru/forums/reply/15989/) - Sov Здравствуйте! С такой ситуацией не встречался. - [](https://narodstream.ru/forums/reply/15988/) - lion_vit Здравствуйте! Я не пишу на заказ. Если бы это было актуально, я бы заявил об этом. - [](https://narodstream.ru/forums/reply/15828/) - [b]tobaco[/b]Спасибо! - [](https://narodstream.ru/forums/reply/15819/) - [b]SergeyVT[/b] Потому что в данном случае: PORTD |= (1 - [](https://narodstream.ru/forums/reply/15798/) - Добрый день! Возможно ли к вам обратиться за воздмезной помощью в программировании МК на базе STM32. Напишите мне а электронку пожалуйста. lion_vit@ mail точка ru - [](https://narodstream.ru/forums/reply/15797/) - Здравствуйте! За неимением платы STM32F767-NUCLEO работаю с простенькой на базе STM32F103C8. Я сделал настройки для STM32F103C8 в CubeMX аналогичные тем, что Вы сделали для STM32F767-NUCLEO в уроке, где мигали несколькими светодиодами. Я не стал рисковать и подключил в CubeMX только один светодиод - тот, который был на плате (РС13). Далее я сгенрировал проект для воркбэнча. - [](https://narodstream.ru/forums/reply/15759/) - Спасибо всем,ну особенно автору сайта. Конечно начинать заниматься программированием тяжело много все равно не понятно. В Кейле много ошибок было и 11 предупреждений, ошибки убрал кое как, ну и начал показывать. Правда при тесте картинка была по центру, а тут сместилась по оси Х на 24 пикселя, ну и показывает как то странно, не которые - [](https://narodstream.ru/forums/reply/15758/) - Доброго времени суток, Narod Stream!Прошу разъяснить для меня простую вещь. В уроке про мигающий светодиод мы изучали побитовые операции И, ИЛИ, НЕ.Все вроде бы понятно.Но тут напрашивается вопрос, зачем Вы так усложнили код, тем более с обычным мигающим светодиодом? Ваш код #define F_CPU 8000000 #include #include int main(void) { DDRD = 0xFF; PORTD - [](https://narodstream.ru/forums/reply/15757/) - Tvics Да, я вывожу с Micro SD. В проекте использую плату:https://ru.aliexpress.com/store/product/STM32F407ZGT6-Development-Board-ARM-M4-STM32F4-cortex-M4-core-Board-Compatibility-Multiple-Extension/829772_32795142050.html дисплей:https://ru.aliexpress.com/item/Smart-Electronics-3-5-inch-TFT-Touch-Screen-LCD-Module-Display-320-480-ILI9486-with-PCB/32586941686.html В 37 уроке подробно рассказано, как вывести картинку (у меня в проекте вывод картинки взят из этого урока). Надо только подключить SDIO и FatFs. Настройки SDIO и FatFs тоже взяты с уроков. Большая благодарность за уроки автору сайта. - [](https://narodstream.ru/forums/reply/15749/) - В уроке 20, часть 2 есть небольшая ошибка: в нескольких функциях мы запрещаем прерывания, но нигде их не разрешаем... - [](https://narodstream.ru/forums/reply/15748/) - Evgeny Понял Вас. Спасибо, буду пробовать.Хотя сначала нужно разобраться с моими длинными проводами. Есть мысль попробовать использовать SPI вместо FSMC. Если не смотреть видео, думаю пойдет. Но самая главная проблема - не могу придумать куда использовать этот дисплей. Изначально брал для духовки, но удалось понять как работает штатный индикатор и использовал его. - [](https://narodstream.ru/forums/reply/15738/) - erlbriton Провода до 20 см. влияют на "снег" на экране. Большое значение имеют настройки FSMC, а точнее тайминги. При настройках по умолчанию в на экране сплошной хаос. Для hx8357b мои тайминги: /* Timing */ Timing.AddressSetupTime = 2; Timing.DataSetupTime = 6; Timing.BusTurnAroundDuration = 3; Timing.AccessMode = FSMC_ACCESS_MODE_A; /* ExtTiming */ ExtTiming.AddressSetupTime = 2; ExtTiming.DataSetupTime = - [](https://narodstream.ru/forums/reply/15708/) - Evgeny Попробовал Ваш драйвер. Экран стал изменять цвет, но не в соответствии с прошивкой, а хаотично. Могут ли на это влиять длинные провода, которыми подключен дисплей к процессору? Да еще сам процессор стоит на макетке. - [](https://narodstream.ru/forums/reply/15707/) - Спасибо Narod Stream и Evgeny Micro SD начал видеть STM32F407VET6. Вот только еще бы понять как вывести картинку на 8bit дисплей с Micro SD. Я как понимаю Evgeny, вы выводили картинку с Micro SD? - [](https://narodstream.ru/forums/reply/15706/) - Здравствуйте. Пытаюсь повторить урок 34 (HID USB MOUSE) на плате STM32f429DISCOVERY. Проект компилируется без ошибок, но при подключении платы как HID устройства - курсор мышки не перемещается. В main.c было добавлено следующее: /* USER CODE BEGIN Includes */ #include "usbd_hid.h" /* USER CODE END Includes */ /* Private variables ---------------------------------------------------------*/ extern USBD_HandleTypeDef hUsbDeviceFS; /* USER - [](https://narodstream.ru/forums/reply/15670/) - Evgeny Спасибо, в ближайшее время проверю Ваш драйвер. Отпишусь обязательно. - [](https://narodstream.ru/forums/reply/15669/) - Erlbriton По изображению на Али этот дисплей похож на мой hx8357b и немного на ili9481. Мои драйвера на эти дисплеи смотри тут: https://yadi.sk/d/iYlbxl_D3YH7cA Там и фотки дисплеев. Попробуй, может заработают. - [](https://narodstream.ru/forums/reply/15644/) - Добрый день нашел STM32CubeMX 4.21, собрал проект выдает упорно ошибку: fatal error: "ff.h" file not found. Странно ничего не менял, не подскажете что сделал не так? - [](https://narodstream.ru/forums/reply/15635/) - Здравствуйте, просмотрел видео по подключению TFT дисплея 240х320 к мк STM32F407. Дело в том, что мне попался TFT дисплей 480х320 с неизвестным контроллером. По всей видимости там стоит HX8357. Определить что там на самом деле не представляется возможным так как отсутствует вывод RD. Я пытался инициализировать дисплей с помощью библиотеки TFT_HX8357_Due https://github.com/Bodmer/TFT_HX8357_Due/blob/master/TFT_HX8357_Due.cpp, лежащей в свободном - [](https://narodstream.ru/forums/reply/15575/) - metallhummer В обработчиках прерываний применять задержки нежелательно, это подвесит контроллер. Обработчик прерываний должен среагировать на команду и установить какие-то флаги, на которые будет уже реагировать основная программа. Обработчик прерываний - это такая часть программы, которая должна выполняться максимально быстро, иначе мы не дадим работать во время долгой обработки основному коду, а ещё того хуже, не - [](https://narodstream.ru/forums/reply/15574/) - progammer Думаю, для бесплатного курса это будет чересчур круто. На сайт тогда ходить совсем перестанут. Это мне невыгодно. - [](https://narodstream.ru/forums/reply/15536/) - Здравствуйте. У меня такая проблема. Я использую RTC с помощью библиотеки HAL и каждый раз при включении микроконтроллера время сдвигается примерно на 1 секунду.В чем может быть дело? Сдвиг не всегда одинаковый. Сталкивались ли с подобной проблемой? - [](https://narodstream.ru/forums/reply/15534/) - Думаю многим будет интересно. К уроку 10 "STM Урок 10. HAL. Изучаем PWM (ШИМ). Мигаем светодиодами плавно" Как виден ШИМ на осциллографе. Полная развертка всего шим сигнала. - [](https://narodstream.ru/forums/reply/15531/) - Доброго времени суток. Очень интересно было смотреть Ваши уроки на ютюбе. Я давно хотел сделать приставку к своему аппарату точечной сварки для точного регулирования времени процесса. Есть задумка: контроллер pic16f630 (так как такой есть у меня), кнопки -3 штуки (больше, меньше, пуск), пара семисегментников для отображения секунд и десятых долей секунд (максимально до 3.0 секунд - [](https://narodstream.ru/forums/reply/15522/) - Сразу говорю что я "зелёный" в этом деле. Имею STM32F429I-Disco1. Пытаюсь освоить Virtual Com Port. И этот злой MX-Cube usb вешает на PA11 и PA12 (на них висит TFT). А на плате USB_OTG_FS_DP и USB_OTG_FS_DM висят на PB15 и PB14. Куб никак не желает USB_OTG_FS переключить на них. Делаю через код. Верно я понял - - [](https://narodstream.ru/forums/reply/15466/) - Добрый день. Знаете, у вас шикарные уроки. И было бы здорово, если бы Вы смогли собрать все свои уроки в документ единый. Я думаю, средствами вордпресс это как то можно сделать. - [](https://narodstream.ru/forums/reply/15307/) - Добрый день!!! Спасибо вам за ваши старания , не могли бы мне подсказать в каком направлении и где искать информацию по теме считывания списка аудио-файлов с SD-карты с использованием микроконтроллеров STM32? - [](https://narodstream.ru/forums/reply/15306/) - Здравствуйте подскажите можно ли получить на STM STM32F103 импульсы или синусоиду частотой 200 кГц, ШИМ или еще как небудь? - [](https://narodstream.ru/forums/reply/15270/) - День добрый. Нужна помощь c SPI, а именно конкретный вопрос: мне нужно проверять флаги TXE и BSY в функции передачи данных и команд на TFT экран ILI 9341. Я все никак не пойму как правильно написать проверку флагов используя библиотеку HAL. - [](https://narodstream.ru/forums/reply/15100/) - Проверьте отклик логическим анализатором - [](https://narodstream.ru/forums/reply/15099/) - Этого я не проверял. Я написал функцию пересылки данных по SPI, и начал писать в регистры W5500 необходимые данные: ip, mac, порт и всё остальное. У меня, к сожалению, самый простой программатор, без отладчика, поэтому отладить код не могу. Наверное, мне стоит попробовать прочитать эти данные, чтобы удостовериться, что они действительно доходят до места назначения, - [](https://narodstream.ru/forums/reply/15097/) - Evgen, в планах уроков пока нет, так как эту шину я ещё не изучил, но вообще я её уже начал изучать. Оказалась, что она не так то и проста. Там куча разных параметров, идентификаторов, фильтров, уровней и т.д. Если разберусь, то обязательно поделюсь наработками. А вообще конечно, у меня нет ни одного нормального устройства с - [](https://narodstream.ru/forums/reply/15096/) - Здравствуйте! А чип отзывается по SPI? - [](https://narodstream.ru/forums/reply/15095/) - Владимир, добрый день! Свой вопрос я хотел бы начать с благодарности: большое спасибо за канал! Ещё недавно будучи студентом универа, я смотрел Ваши и ролики и, скажем так, набирался ума. Само собой, это пошло на пользу, и дисциплину, связанную с программированием МК, я закрыл на хорошую оценку. Теперь непосредственно вопрос: у Вас есть очень интересный - [](https://narodstream.ru/forums/reply/14974/) - Вопрос а Вы не планируете делать урок по CAN шине у stm32f4 их целых два. Очень интересная тема для работы с большим количеством блоков. - [](https://narodstream.ru/forums/reply/14970/) - DimaDavydenko, Пока, к сожалению, вряд ли найду время для просмотра проекта, уж очень много нерешенных задач висит, просто уйма. Но тем не менее, информация очень интересная, я обязательно её проверю, правда я не понял, что такое "один и тот же пакет". Для меня один и тот же пакет - это содержимое буфера FIFO и как - [](https://narodstream.ru/forums/reply/14856/) - Добрый день! Вопрос касательно модулей NRF24L01+. Посмотрел ваши уроки, также глянул видео Руслана Надыршина (Вы его упоминали), почитал документацию. Потом собрался с мыслями и приступил) Решил сделать следующую схему: настроить пин ПА4 на внешнее прерывание, при появлении низкого уровня на нем заходить в функцию чтения данных с NRF, читать статусный регистр, если данные готовы забирать - [](https://narodstream.ru/forums/reply/14853/) - temniy170683 Здравствуйте! На заметку возьму, но в планах пока такого нет, так как нет массовых просьб. - [](https://narodstream.ru/forums/reply/14850/) - Здравствуйте! Вы не могли бы сделать урок по таймерам по фазоимпульсной модуляции (AC dimmer), очень не понятны настройки в кубе - [](https://narodstream.ru/forums/reply/14780/) - Спасибо автору за его бескорыстную просвятительскую (надо сказать отлично выполненную) работу! Теперь, не совсем в тему, посмотрел на ваш урок в ютьюбе и честное слово, позавидовал работе вашего компьютера. Быстро, четко без задержек на внутренние задержки, даже при работе с "железом"! ВОПРОС, если не составит труда дайте конфигурацию вашего компа и операционной системы... Уж ОЧЕНЬ - [](https://narodstream.ru/forums/reply/14727/) - В уроке №3 по МК STM32.Все бомба ,все супер !!! НО в этом уроке на против GPIO_InitTypeDef InitD;стоит красный крест и пишет (Use of undeclared identifier)хотя ошибок и предупреждений ноль.Будьте добры подскажите как справится с этой бедой ?Еще одна интересная вещь-запускаю проект урок №3 если при запуске открывается main.h то ошибок и крестов нет,а перехожу - [](https://narodstream.ru/forums/reply/14714/) - Вопрос по freertos. Если мне надо использовать i2c , то как нужно поступать: отключать диспетчер ,передача,включить диспетчер? Не кооперативная многозадачность. Спасибо - [](https://narodstream.ru/forums/reply/14623/) - Доброе время суток. Подскажите пожалуйста как подключить точку через 74hc595 для часов. Спасибо. - [](https://narodstream.ru/forums/reply/14621/) - Доброго времени суток , подскажите пожалуйста как можно безболезненно в AVR всунуть SNMP ? Может подскажите ссылки , ну или хотя бы направьте в нужное русло ! - [](https://narodstream.ru/forums/reply/14564/) - вы могли бы сделать видео о CMSIS DSP и объяснить, как использовать преобразования фильтра и FFT. - [](https://narodstream.ru/forums/reply/14374/) - Zandy Это да, более старые проекты могут неправильно собраться. Ну ничего страшного. Создавайте проект самостоятельно, а из моих проектов берите USER код из файлов, и будет всё нормально. - [](https://narodstream.ru/forums/reply/14373/) - Только недавно начал знакомиться с Вашими уроками. Уроки хорошие, слов нет. Но есть небольшие нюансики, о которых и хотел рассказать. Если брать ваши проекты (по ссылке "Исходный код"), то все компилируется, проблем нет. Но мне было интереснее делать все самому в соответствии с Вашими уроками. Тут и появились проблемы, проекты не компилируются. Ошибки, типа "декларация - [](https://narodstream.ru/forums/reply/14004/) - fireweb. Лично я не работал. Если кто-то работал, думаю ответит. - [](https://narodstream.ru/forums/reply/14006/) - Roman. Скорей всего дело в неправильном написании кода. - [](https://narodstream.ru/forums/reply/13996/) - Здраствуйте! Сейчас у меня есть задача сдружить 2 контроллера stm8 при поможи rfm69cw. Работали ли вы с таким и можете дать какую то подсказку? Работаю в IAR. Спасибо) - [](https://narodstream.ru/forums/reply/13933/) - Здравствуйте. В ATmega328P есть регистры OCR0B, OCR0A у меня вопрос, если будет установлен режим сброс при совпадении, а значения в регистрах будут разные, получается что счётчик не дойдёт до второго числа в регистре которого число больше и будет всё время сбрасываться, так как регистр TCNT0 один,а регистра сравнения (OCR0B,OCR0A) два! Так ли это? Как они - [](https://narodstream.ru/forums/reply/13888/) - Всех с новым годом . Товарищи помогите , подскажите как реализовать SNMP в AVR ? Или может статьи есть у кого то интересные где почитать можно ? - [](https://narodstream.ru/forums/reply/13881/) - здравствуйте всем как можно реализовать опрос по rs485 протоколу использовав usart - [](https://narodstream.ru/forums/reply/13791/) - Подскажите пожалуйста, настраиваю dhcp на плате wiznet5500 с stm32VLdiscovery. После получения адреса, программа падает в hard fault interrupt. В отладчике вижу, что переменным и массивам присваивается одно и тоже значение 0x3D. В чём собака зарыта? - [](https://narodstream.ru/forums/reply/13661/) - из урока 8 Затеял сделать мигающую точку: #define F_CPU 8000000 #include #include int main(void) { //unsigned char i; //unsigned char button=0; DDRD = 0xFF; DDRB = 0x00; PORTD = 0b00000000; PORTB = 0b00000001; while(1) { PORTD = ~0b10000110; _delay_ms(500); PORTD = ~0b01011011; _delay_ms(500); PORTD = ~0b11001111; _delay_ms(500); PORTD = ~0b01100110; _delay_ms(500); PORTD = - [](https://narodstream.ru/forums/reply/13657/) - По-моему надо начать с даташита, найти соответствующие выводы на МК и под них переделать программу. - [](https://narodstream.ru/forums/reply/13654/) - Так получилось, что у меня появилась макетная плата под микроконтроллер ATmega16. На что надо обращать внимание при написание (переписывания программ из уроков под ATmega8) под микроконтроллер ATmega16. - [](https://narodstream.ru/forums/reply/13653/) - Добрый день! Narod Stream, хотелось бы увидеть уроки про ПИД регулятор на AVR в вашем исполнении. - [](https://narodstream.ru/forums/reply/13628/) - Братцы!Проблема! ATTiny13 не выходит из спящего режима по прерыванию о переполнении таймера. Help me! Контроллеры из Китая. #define F_CPU 16000UL #define fwd PORTB |=(1 - [](https://narodstream.ru/forums/reply/13596/) - [URL=http://vfl.ru/fotos/ebfdeeb119773657.html][IMG]http://images.vfl.ru/ii/1513024229/ebfdeeb1/19773657_m.jpg[/IMG][/URL] Фото с датчиков 6 шт подключены паралельно - [](https://narodstream.ru/forums/reply/13567/) - Подскажите: можно ли в Atmel Studio сделать переменную из _delay_ms (50); 50=переменная типа так unsigned int e; e=50 Я пробовал - компилятор выдает __builtin_avr_delay_cycles expects a compile time integer constant и ссылается на delay.h строку __builtin_avr_delay_cycles(__ticks_dc); - [](https://narodstream.ru/forums/reply/13524/) - ReloadFlag меняется досле движения на 1 пиксель только в этом примере, а вообще, он меняется когда ReloadEventCallback, название функции говорит само за себя. Но я вас понял, то что вы хотите вот здесь: static void PicturesPosition(uint32_t* x1, uint32_t* y1, uint32_t* x2, uint32_t* y2, uint32_t index) { /* picture1 position */ *x1 = 0; - [](https://narodstream.ru/forums/reply/13479/) - Да,но HAL_Delay(500) это задержка между движением вверх и вниз, т.е. одна картинка плавно двигается в верх вторая вниз(в первом цикле for()), потом задержка HAL_Delay(500), потом меняются первая двигается в низ, а вторая вверх(во второмм цикле for()), потом опять задержка HAL_Delay(500) и потом в цикл while все повторяется. А флаг ReloadFlag меняется после того, картинка сдвигается - [](https://narodstream.ru/forums/reply/13478/) - Pavel и Narod Stream, заказал себе датчики DHT22, как придут, оттестирую и отпишусь. По поводу датчиков DHT11, у них большая очень погрешность. На макетной плате собрал 4 датчика. все 4 показывали разную температуру. погрешность +-2 градуса по цельсию - [](https://narodstream.ru/forums/reply/13463/) - Такое чувство, что задержка там: HAL_Delay(500), а флаг ReloadFlag в прерывании отвечает только за то, что картинка отрисовалась и можно начать новый шаг. - [](https://narodstream.ru/forums/reply/13457/) - Создал проект LTDC, за основу взял проект из куба с двумя слоями «STM32Cube\Repository\STM32Cube_FW_F4_V1.версия.0\Projects\STM32F429I-Discovery\Examples\LTDC». В проекте картинка двигается вверх и вниз, скорость зависит времени прерывания, в прерывании от LTDC меняется флаг(под рукой нет проекта, не помню название флага). Весь код перерыл, даташит перечитал, но не могу найти по какому событию происходит прерывание и как изменить время - [](https://narodstream.ru/forums/reply/13381/) - Уважаемый автор, а вы не хотите попробовать связку: Cube MX - makefile, VSCode, arm-none-eabi-gcc/gdb. Удобно тем, что работает под всеми операционками. Очень толковый редактор с отладкой. выглядит вот так: - [](https://narodstream.ru/forums/reply/13302/) - Да. Я уже решил проблему. Оказалось что половина файлов не подцепилась в проект. И пришлось подключить их вручную через FIle Extensions Спасибо Вам большое за труды. - [](https://narodstream.ru/forums/reply/13300/) - А Вы в Cube MX собирали код сначала? - [](https://narodstream.ru/forums/reply/13206/) - Здравствуйте. пытался перекомпилировать проект для тача под кеил И выдает такие сообщения. linking... TOUCH_FT5336\TOUCH_FT5336.axf: Error: L6218E: Undefined symbol DMA2D_LayersAlphaReconfig (referred from main.o). TOUCH_FT5336\TOUCH_FT5336.axf: Error: L6218E: Undefined symbol Font12 (referred from main.o). TOUCH_FT5336\TOUCH_FT5336.axf: Error: L6218E: Undefined symbol Font16 (referred from main.o). TOUCH_FT5336\TOUCH_FT5336.axf: Error: L6218E: Undefined symbol Font20 (referred from main.o). TOUCH_FT5336\TOUCH_FT5336.axf: Error: L6218E: Undefined symbol Font24 - [](https://narodstream.ru/forums/reply/12598/) - Доброго времени суток! Решил попробовать сделать ШИМ с помощью DMA и таймера TIM1, тоесть 1) запрос к DMA от таймера в режиме ШИМ 2)DMA пересылает(в circular режиме) в регистр сравнения данные из памяти. Процессор - stm32f030f4 (на 20 контактов). НО CubeMX DMA не инициализирует а только пишет такой код: static void MX_DMA_Init(void) { /* DMA - [](https://narodstream.ru/forums/reply/12590/) - Narod Stream Спасибо, буду пробовать. - [](https://narodstream.ru/forums/reply/12505/) - Pavel, Я давно хотел освоить подобные датчики. Посмотрел документацию на первый - точность слабовата, а вот второй меня заинтересовал. - [](https://narodstream.ru/forums/reply/12504/) - DimanLM. К сожалению, я не располагаю временем тестить проекты, своих чересчур много. Возможно, кто занимается плотно с такими МК, посмотрят. - [](https://narodstream.ru/forums/reply/12503/) - damait05, где-то я уже на такой вопрос отвечал. - [](https://narodstream.ru/forums/reply/12501/) - glebana, С такими светодиодами не работал. Возможно, кто работал, ответят. - [](https://narodstream.ru/forums/reply/12499/) - Mihail. Урока такого у меня нет. Но, помнится, что в репозитории Cube MX был пример. Пользуйтесь на здоровье. Вот в этой папке "STM32Cube\Repository\STM32Cube_FW_F4_V1.версия.0\Projects\STM32F429I-Discovery\Applications\Display" лежат целых 2 примера. Там же есть пример с использованием STemWin, а здесь пример с использованием двух слоёв: "STM32Cube\Repository\STM32Cube_FW_F4_V1.версия.0\Projects\STM32F429I-Discovery\Examples\LTDC" - [](https://narodstream.ru/forums/reply/12498/) - DHK, я, к сожалению, не пользовался пока скоростным каналом. Сначала хотел. Даже пробовал его на Discovery 4, купив к ней отдельный модуль для преобразования ULPI - PHY, но что-то не пошло. Странно, что шина засыпает. Я даже затрудняюсь, что ответить по данному вопросу. - [](https://narodstream.ru/forums/reply/12497/) - Доброго времени суток! Хотелось бы увидеть урок по теме DHT11 и DHT22 (что наиболее актуально). Спасибо! - [](https://narodstream.ru/forums/reply/12488/) - Доброго времени суток, Прежде всего хочу сказать спасибо вам, что вы есть и ведете такой замечательный канал на Ютубе, как "narod stream". В интернете существует очень мало качественных обучающих ресурсов подобным вашему, и в частности касательно микроконтроллера STM32. После просмотра нескольких уроков у меня сложилось о вас мнение как о эксперте в данной области и - [](https://narodstream.ru/forums/reply/12487/) - Здравствуйте не могу разобраться с ws2812 на stm32f407vgt6(stm32f4DISCOVERY) пытаюсь работать с диодами с помощью таймера и DMA. На младшей модели (stm32f030f4p6) всё работает нормально . На stm32f4 ничего не работает. Могу скинуть исходники с файлом cube-а. - [](https://narodstream.ru/forums/reply/12433/) - Narod Stream Спасибо. Я не нашел урока по F429(дисплей). Пытаюсь запустить дисплей, но у меня не получается. Если я не нашел, то скажите номер урока, если нет такого урока, то помогите запустить его. - [](https://narodstream.ru/forums/reply/12349/) - Доброго дня. Спасибо за уроки. По работе столкнулся с контроллером stm32f746. уроки очень помогли в освоении. Столкнулся с такой проблемой. Необходим обмен с флешкой, использую OTG порт usb-hs. подключил, обмен запись/чтение работает, но не долго. По прошествии какого-то времени происходит "засыпание" флешки. По началу настроен был обмен с SD картой. Все работает без замечаний. Заменяю - [](https://narodstream.ru/forums/reply/12331/) - Mihail, Здравствуйте! Спасибо за интерес к ресурсу! Возможности сбросить уроки в форматах у меня возможности нет. Они все на сервере, я даже сам теперь целиком скачать его не могу, так как вынужден принять меры безопасности в связи с участившимися атаками на мой домен. Поэтому пока только в онлайн. То есть за скачивание теперь бан. Видеоуроки - [](https://narodstream.ru/forums/reply/12319/) - Здравствуйте! Мне очень нравятся ваши уроки, спасибо вам большое. Но у меня нет возможности учиться дома, а на работе нет интернета(есть но доступ к нему ограничен и трафик тоже), Флешки и телефоны заносить нельзя(завод все таки). После разговора с начальником и службой безопасности(СБ), они разрешили скачать уроки в pdf или подобный формат(не видео) если эти - [](https://narodstream.ru/forums/reply/11250/) - Добрый день! Подскажите, правильно ли я использую команды по ассемблерным вставкам в коде, написанном в Atmel Studio 7: __asm__("cli"); __asm__("sei"); __asm__("nop"); В CodeVisionAVR 4, в котором я начал изучать Си и программирование микроконтроллеров, синтаксис несколько другой. Судя по отсутствию ошибок в Atmel Studio 7 при компиляции кода, вроде всё работает. Но хотелось бы уверенности. Также - [](https://narodstream.ru/forums/reply/11157/) - Да, я хочу это сделать. Сделав USB-накопитель с SD-картой, я хочу сделать загрузчик в будущем. Я с нетерпением жду видео по этому вопросу от вас. Установив базовый загрузчик и сделав SD Mass Storage с SDCar, я хотел бы в принципе сделать какое-то светодиодное освещение на моей карте. - [](https://narodstream.ru/forums/reply/11154/) - HSK, Вы хотите одновременно подключить USB-накопитель и карту SD? - [](https://narodstream.ru/forums/reply/11040/) - Всем привет. Повторил урок №20 там где вывод температуры на LCD 1602 температура отображается все отлично. После этого решил собрать градусник, но для индикации взял 7-ми сегментный индикатор, из урока №20 взял файлы: DS18B20.c, DS18B20.h, main.h имена могут отличаться от оригиналов, но содержимое тоже. Индикаторы запустил по уроку №11 - динамическая индикация. Микроконтроллер взял ATTiny2313A. - [](https://narodstream.ru/forums/reply/11038/) - Привет всем, Я смотрел тренировку SD SPI FATFS на 88-м занятии, и это было здорово. Я хочу сделать новое исследование с этим обучением, которое я узнал. Я буду использовать запоминающее USB-накопитель с SD (SPI FATFS). Вы занимаетесь подготовкой видео по этой теме. С уважением .. - [](https://narodstream.ru/forums/reply/10991/) - Oleg, Простите за столь долгую реакцию на сообщение. Никак не привыкну к тому, что данная реализация форума не оповещает меня о свежих сообщениях, но теперь постараюсь следить за этим. Должна вскоре приехать такая 746-я плата с максимальным набором. Только там по-моему все проекты связанные с FMC и LTDC, которые мы писали и так работают, но - [](https://narodstream.ru/forums/reply/10862/) - Добрый вечер Планируете ли вы сделать курс уроков по плате Open429I-C Package С, отладочный набор на базе микроконтроллера STM32F429IGT6 дисплей 7 дюймов, или Waveshare Core746I STM32F746IGT6 (http://www.waveshare.com/wiki/Open429I-C) - [](https://narodstream.ru/forums/reply/10695/) - Спасибо за ответ, Evgeny. Да, главная проблема была в инклюде «stm32f7xx_hal.h» Хотя я так и не понял по какой причине Кейл так себя ведет. Есть еще один момент. Собираю проект также под STM32F746-DISCO С последних версий CubeMX, при настройке DMA2D, в функцию «static void MX_DMA2D_Init(void)» прописываются две строки на которые ругаются компилятор, так как они - [](https://narodstream.ru/forums/reply/10692/) - >>Здравствуйте. >>Никак не получается запустить проекты для STM32f7 в воркбенче. >>Подскажите пожалуйста как переделать проект для Воркбенча в проект для Кейла. >>Просто выбрав в кубе кейл вместо воркбенча не дает результатов. >>Спасибо Именно так. Нужно в Cube переключить в настройках и перегенерировать. Правда, с начала желательно поудалить из папки всё лишнее, оставить папки Inc и - [](https://narodstream.ru/forums/reply/10690/) - Тоже столкнулся с токой проблемой, решил так: 1. В файле "main.h" заремить строку #include "stm32f7xx_hal.h". 2. В файле "LCDConf.c" добавить строку #include "stm32f7xx_hal.h". 3. В файле "stm32f7xx_it.c" строку "volatile GUI_TIMER_TIME OS_TimeMS;" исправил на "extern volatile GUI_TIMER_TIME OS_TimeMS;" 4. В файле "main.c" строку "LTDC_HandleTypeDef hltdc;" исправил на "extern LTDC_HandleTypeDef hltdc;" Ещё ошибка была в файле "ltdc.c" - [](https://narodstream.ru/forums/reply/10686/) - Здравствуйте. Проходя урок 73 (подключение emWin), собирал его в Кейле и столкнулся с такой проблемой. При попытке скомпилировать проект в консоли выходят ошибки: compiling system_stm32f7xx.c... ../Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal.h(180): error: #20: identifier "HAL_StatusTypeDef" is undefined HAL_StatusTypeDef HAL_Init(void); Может кто то сталкивался и знает решение. - [](https://narodstream.ru/forums/reply/10683/) - Владимир, здравствуйте! Прошу Вас сделать "поскриптум" к уроку №9! Считать температуру и подключить кнопки настройки. - [](https://narodstream.ru/forums/reply/10659/) - Здравствуйте. Никак не получается запустить проекты для STM32f7 в воркбенче. Подскажите пожалуйста как переделать проект для Воркбенча в проект для Кейла. Просто выбрав в кубе кейл вместо воркбенча не дает результатов. Спасибо - [](https://narodstream.ru/forums/reply/10607/) - Всем привет .А вопрос вот в чем . У меня есть много микросхем STC89C5xx . Скачал с keila прогу c51v956 . Установил . Если вкл keil5 то в нем нет этих микросхем. А в старых файлах у меня есть keil4 . Но когда я запускаю keil4 то открывается пустой keil. А что я хочу из - [](https://narodstream.ru/forums/reply/10492/) - Здравствйте. У меня возникла проблема с шиной i2c на контроллере stm32f103c8t6. В CubeMX настроил i2c1 сгенерировал проект, подключил датчик si7021 и все заработало. Но когда решил перенаправить шину на другие ножки с PB7,PB6 на PB8,PB9 через CubeMX и после генерации и заливки проекта не работает, выдает ерунду.. В чем может быть проблема? - [](https://narodstream.ru/forums/reply/10167/) - Будем ждать :) Ну меду делом самому пытаться разобраться. В любом случае спасибо - [](https://narodstream.ru/forums/reply/10166/) - По 769 я тоже планировал подобный урок, причём библиотеку я прикрутил, но ещё не пришло время этой платы. Не со всеми компиляторами там всё хорошо. - [](https://narodstream.ru/forums/reply/10165/) - Спасибо за ответ, к сожалению привязать emWin к плате 769 у меня не получилось. В уроках рассказывается о 746. По теме: Пытаюсь сделать что то наподобие осцилографа. DMA складывает в массив данные из ADC. Для запуска используется внешний триггер, поэтому получаю свои 800 точек, и после фильтрации они готовы к отображению. И вот когда я - [](https://narodstream.ru/forums/reply/10160/) - перемещено (сообщение от tarasik) В 58 уроке предоставлен пример (За что огромное спасибище) считывания в память sdram картинки в формате bmp перед выводом на дисплей. Хотелось бы сделать тоже самое, только с каким нибудь примитивом. Например получили мы массив данных из ADC, как этот массив точек нарисовать в памяти функцией BSP_LCD_DrawPixel перед копированием в активную - [](https://narodstream.ru/forums/reply/10162/) - С этим немного не так и лучше использовать DMA. Я в реальном времени рисовал на экране график маленькими массивами из DMA, используя её на всю мощность. Причём массив не содержал ненужных точек. Я заново рисовал прямоугольную область с частью сетки, а из массива отображал лишь точки кривой. Но если Вам тяжело, то не парьтесь и ## Рубрики - [Программирование STM32](https://narodstream.ru/rub_stm32/) - Программирование микроконтроллеров STM32 и все, что с ним связано - [Программирование AVR](https://narodstream.ru/rub_avr/) - Программирование микроконтроллеров AVR и все, что с ним связано - [Программирование PIC](https://narodstream.ru/programmirovanie-pic/) - [Тесты устройств и аксессуаров](https://narodstream.ru/testy-ustrojstv-i-aksessuarov/) - [I2C](https://narodstream.ru/i2c/) - [SPI](https://narodstream.ru/spi/) - [USART](https://narodstream.ru/usart/) - [GPIO](https://narodstream.ru/gpio/) - [1-WIRE](https://narodstream.ru/1-wire/) - [ADC](https://narodstream.ru/adc/) - [DAC](https://narodstream.ru/dac/) - [FreeRTOS](https://narodstream.ru/freertos/) - [LAN](https://narodstream.ru/lan/) - [Программирование ESP8266](https://narodstream.ru/programmirovanie-esp8266/) - [Программирование на C](https://narodstream.ru/programmirovanie-na-c/) - [Assembler](https://narodstream.ru/assembler/) - [Android приложения](https://narodstream.ru/android-prilozheniya/) - [Программирование ESP32](https://narodstream.ru/programmirovanie-esp32/) - [Raspberry PI](https://narodstream.ru/raspberry-pi/) - [Передача данных](https://narodstream.ru/peredacha-dannyx/) ## Метки - [WS2812B](https://narodstream.ru/tag/ws2812b/) - [HSV](https://narodstream.ru/tag/hsv/) - [STM32F103C8T6](https://narodstream.ru/tag/stm32f103c8t6/) - [DMA](https://narodstream.ru/tag/dma/) - [PWM](https://narodstream.ru/tag/pwm/) ## Метки тем - [STM32](https://narodstream.ru/forums/topic-tag/stm32/) - [AVR](https://narodstream.ru/forums/topic-tag/avr/) - [Espressif IDE](https://narodstream.ru/forums/topic-tag/espressif-ide/) - [Простой калькулятор MK PIC](https://narodstream.ru/forums/topic-tag/prostoj-kalkulyator-mk-pic/)