Часы на stm32f103c8t6: STM32 Программирование. Часы реального времени — Avislab

Содержание

Микроконтроллеры STM32: использование встроенных RTC

Ранее в посте Микроконтроллеры AVR: пример работы с часами реального времени DS1302 отмечалось, что DS1302 было бы довольно глупо использовать с микроконтроллерами STM32, так как у них есть встроенные часы реального времени. Давайте же попробуем разобраться, как происходит работа с этими встроенными RTC, и что они умеют.

Как обычно, для экспериментов я использовал плату Nucleo-F411RE, но описанные далее шаги можно повторить и для любой другой отладочной платы. Обратите внимание, что в мире STM32 встречаются микроконтроллеры с RTC, но без функции календаря. Их RTC умеет работать со временем, но не с датами. В качестве примера можно привести используемый в Blue Pill микроконтроллер STM32F103C8T6. Чтобы определить, есть ли в микроконтроллере хардварный календарь, внимательно читайте даташит.

Итак, для включения RTC следует открыть STM32CubeMX и произвести следующие изменения в проекте:

  • Во вкладке Pinout перейдите в Configuration → Peripherals → RCC. В выпадающем списке Low Speed Clock (LSE) выберите «Crystal/Ceramic Resonator». Этим мы говорим микроконтроллеру использовать внешний часовой кварц на 32768 Гц. Разумеется, предполагается, что он есть на вашей плате. Можно обойтись и внутренним генератором (LSI). Однако точность часов в этом случае будет оставлять желать лучшего.
  • В той же вкладке Pinout перейдите в Configuration → Peripherals → RTC, поставьте галочки «Activate Clock Source» и «Activate Calendar». Этим мы, собственно, включаем RTC.
  • Во вкладке Configuration появится кнопка RTC. Нажмите на нее и проверьте, что используется 24-х часовое время (Hour Format) и бинарный формат (Data Format).

Важно! При проектировании собственной платы нужно серьезно отнестись к выбору конденсаторов рядом с часовым кварцем. Если переборщить с емкостью этих конденсаторов, часы будут идти слишком медленно. На практике неплохо работают конденсаторы на 10 пФ.

Наконец, во вкладке Clock Configuration будет не лишним перепроверить, что LSE действительно используется:

В Makefile понадобится добавить пару файлов к списку C_SOURCES:

$(FIRMWARE)/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rtc.c \
$(FIRMWARE)/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rtc_ex.c \

Теперь можно спокойно использовать RTC в коде. Например, получение даты и времени осуществляется так:

RTC_TimeTypeDef time;
RTC_DateTypeDef date;
HAL_StatusTypeDef res;

res = HAL_RTC_GetTime(&hrtc, &time, RTC_FORMAT_BIN);
if(res != HAL_OK) {
    UART_Printf("HAL_RTC_GetTime failed: %d\r\n", res);
    return;
}  

res = HAL_RTC_GetDate(&hrtc, &date, RTC_FORMAT_BIN);
if(res != HAL_OK) {
    UART_Printf("HAL_RTC_GetDate failed: %d\r\n", res);
    return;
}

А так происходит их изменение:

int RTC_Set(
        uint8_t year, uint8_t month, uint8_t day,
        uint8_t hour, uint8_t min, uint8_t sec,
        uint8_t dow) {
    HAL_StatusTypeDef res;
    RTC_TimeTypeDef time;
    RTC_DateTypeDef date;

    memset(&time, 0, sizeof(time));
    memset(&date, 0, sizeof(date));

    date.WeekDay = dow;
    date.Year = year;
    date.Month = month;
    date.Date = day;

    res = HAL_RTC_SetDate(&hrtc, &date, RTC_FORMAT_BIN);
    if(res != HAL_OK) {
        UART_Printf("HAL_RTC_SetDate failed: %d\r\n", res);
        return -1;
    }

    time.Hours = hour;
    time.Minutes = min;
    time.Seconds = sec;

    res = HAL_RTC_SetTime(&hrtc, &time, RTC_FORMAT_BIN);
    if(res != HAL_OK) {
        UART_Printf("HAL_RTC_SetTime failed: %d\r\n", res);
        return -2;
    }

    return 0;
}

Заметьте, что структура RTC_TimeTypeDef помимо самого времени хранит ряд дополнительных полей. Они могут не очень аккуратно заполняться процедурой HAL_RTC_GetTime. Поэтому при изменении времени структуру лучше заполнить самостоятельно. Иначе можно увидеть, как часы показывают 27 часов, и налететь на прочие потрясающие баги.

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

Для питания RTC нужно подать от 1.6 В до 3.6 В на пины микроконтроллера VBAT и GND. Я использовал батарейку CR2032:

Для вывода времени, даты, дня недели и выбранных цветов интерфейса я использовал TFT-экранчик на базе ST7735. Для изменения даты, времени, и всего остального используются четыре кнопки. Действия кнопок сверху вниз: переход назад, перех вперед, уменьшить значение, увеличить значение.

Интересно, что при отсутствии основного питания батарейка питает не только часы, но и небольшое количество SRAM, так называемую backup memory (она же backup registers). Для доступа к ней при инициализации устройства нужно сказать:

void init() {
    /* ... (пропущено) ... */

    HAL_PWR_EnableBkUpAccess();
}

После чего можно осуществлять чтение и запись памяти. Я решил хранить в ней выбранный пользователем цвет интерфейса:

uint8_t chosen_color = (uint8_t)HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR1);

// ... (пропущено) ...

if( /* ... */ ) { // color changed
    HAL_RTCEx_BKUPWrite(&hrtc, RTC_BKP_DR1, (uint32_t)chosen_color);
}

Как видите, backup memory поделена на 32-х битные регистры. Количество регистров зависит от микроконтроллера, их точное число можно узнать из даташита. Например, использованный мной STM32F411RE имеет 20 регистров. То есть, суммарно в backup memory он может хранить до 80 байт данных. Учитывая, что большинство микроконтроллеров STM32 не имеют встроенного EEPROM, наличие у них backup memory оказывается весьма кстати.

В целом, я не нашел серьезных дефектов во встроенных RTC. Время они показывают весьма точно, дату и день недели обновляют правильно, отключение основного питания переживают. RTC имеют и другие возможности, которые не были рассмотрены выше. Например, есть настройки для дополнительной калибровки часов. А еще RTC могут генерировать прерывания, выводящие микроконтроллер из энергосберегающего режима по расписанию. Однако эти моменты уже выходят за рамки данного поста. В качестве источника дополнительной информации можно порекомендовать книгу Mastering STM32.

Полную версию исходников к этому посту вы найдете на GitHub. Любые вопросы и дополнения, как обычно, всячески приветствуются!

Метки: STM32, Электроника.

РадиоКот :: Простые часы на STM32

РадиоКот >Схемы >Цифровые устройства >Бытовая техника >

Простые часы на STM32

Давно я что-то часов не делал… Более того, я еще не сделал ни одних часов на STM32 с начала их изучения… Ну вот сейчас сразу два упущения и устраним)
Мне понадобились некие несложные (в смысле – без особых наворотов) часы с достаточно крупными цифрами. В наличии были 70мм светодиодные семисегментные индикаторы SA23-11HWA, уже достаточно давно по случаю приобретенные у одного из наших форумчан, на них и остановился. Схема получилась такая: Сразу скажу, что микросхема RTC DS1307, термометр TMP101, ИК-приемник, ЕЕПРОМ и датчик освещенности ISL29010 не устанавливались, хотя такая возможность и сохранена на печатной плате.
Всем огородом управляет микроконтроллер STM32F100C4 (базовая конфигурация, об этом ниже) или С6 (расширенная версия). В качестве часов реального времени задействован встроенный модуль микроконтроллера, тактирование от часового кварца на 32768Гц ZQ1. Микроконтроллер посредством одного из своих аппаратных SPI загружает данные для отображения на дисплее (читай – время) в 4 сдвиговых регистра 74HC4094, нагрузкой которых являются сборки ULN2003 и транзисторные ключи, управляющие непосредственно индикаторами. Индикация получается статическая – ну вот не люблю я динамику, если нет особых ограничений. Питание индикаторов – 12В, от меньшего напряжения их не зажечь – диодов много (9В, думаю, тоже хватит, если что). Входные 12В преобразуются в 5В для питания логики и в 3,3В для микроконтроллера. Управление – пятипозиционная кнопка-джойстик. Короткое нажатие – переход к показу секунд (всегда делаю такой режим, чтобы можно было сразу понять, что часы живы и куда-то идут – полезно на этапе отладки. Долгое нажатие до одного звукового сигнала – настройка: влево/вправо изменение значения, короткое нажатие – подтверждение, сначала ставим часы, потом минуты. Влево/вправо в основном режиме – изменение яркости индикации (сделано ШИМом, причем посредством загрузки в регистры нулевых данных; можно было бы сделать проще, но не предусмотрел и не развел на плате цепь Enable регистров…) Все нажатия подтверждаются звуковым сигналом.
В расширенной версии установлен BlueTooth модуль для удаленной установки/синхронизации времени. Подробнее об этом можно узнать в этой статье. Пришлось несколько доработать софт для синхронизации, новая версия обратносовместима с софтом из упомянутой статьи. Алгоритм и последовательность синхронизации такая же, как в часах «Orbit LED»
Программа для контроллера подготовлена в Keil. Версия прошивки задается на этапе компиляции путем включения или отключения
#define BLUETOOTH 1
Неприятность в том, что при подключении функций работы с BT-модулем код чуть-чуть не влезает в микроконтроллер C4 и требуется уже С6 или С8. Включение оптимизации приводит к получению неработоспособной прошивки. Честно сказать, с причинами такого явления не разбирался: код несложный, критичных мест я там не вижу, возможно, это следствие использования StdPeriphDriverLibrary...
По конструкции – одна печатная плата:

  Для удобства подключения – два по-разному ориентированных входных разъема питания. Корпус тоже сделал из текстолита:   На задней крышке сразу подготовлены мета для крепления кронштейна: Боковой разъем:
Внутри в нужных местах предусмотрены технологические медные площадки, вскрытые от маски, так что все изделие собирается воедино при помощи паяльника – детали корпуса и основная плата просто аккуратно спаиваются между собой.

Проблем при сборке и отладке не припомню, единственно что пришлось поменять один часовой кварц: плохо заводился генератор STM-ки почему-то. Часики, изготовленные в двух экземплярах, уже пару месяцев исправно тикают, без синхронизации уползают за месяц примерно на минуту – не так уж и плохо, как мне кажется.

Файлы:
Схема и печатная плата P-CAD 2006
Проект HiAsm и ПО для синхронизации
Исходники и прошивка Keil

Все вопросы в Форум.


Как вам эта статья?

Заработало ли это устройство у вас?

Модуль часов реального времени STM32F2xx

Модуль часов реального времени STM32F2xx

Одной из самых полезных функций, включенных в состав микроконтроллеров STM32 стали часы реального времени (RTC). Данный модуль обладает всеми классическими возможностями подобных часов и может иметь отдельное автономное питание от батареи. Такой подход позволяет использовать область памяти часов для резервного хранения данных, а также реализовывать различные схемы энергосбережения.

 

 

В процессорах серии STM32F2xx часы реального времени существенно отличаются от предыдущих моделей. Появились дополнительные функции и настройки работы. Отсутствуют регистры долей секунд и режим формирования сигнала 1Гц. Следует отметить, что последние функции реализованы в процессорах STM32F4xx, модуль RTC в которых схож с вариантом F2xx.

Основу модуля часов реального времени составляет двоично-десятичный таймер/счетчик. Результат счета отображается в двух 32-разрядных регистрах. Первый из них RTC_TR содержит информацию о времени, второй – RTC_DR представляет собой календарь, включающий год, месяц, неделю и день. Все данные представлены в BCD формате, что позволяет их сразу же использовать для отображения на различных индикаторах. Модуль календаря поддерживает автоматическое определение високосных лет, а также количества дней в текущем месяце. Кроме этого доступны функции перевода на зимнее и летнее время, вызываемые программно.

В процессорах STM32 предусмотрено три источника тактового сигнала для  часов. LSI представляет собой внутренний RC-генератор на 32 кГц, HSE_RTC позволяет использовать тактовую частоту от основного внешнего кварцевого резонатора. Но самым эффективным можно считать вариант LSE, который есть, не что иное, как внешний генератор часовой частоты 32768Гц. Выбор нужного источника частоты производится в регистре RCC_BDCR. Входная частота RTCCLK поступает на два последовательных предделителя, задачей которых становится формирование сигнала ck_spre частотой 1Гц. Для точной настройки хода часов, в модуле RTC предусмотрена возможность калибровки частоты счетчика.

Среди функций модуля RTC следует отметить два отдельных регистра событий (ALARM_x), с помощью которых можно реализовать будильники, таймеры и т.п. Формат регистров событий аналогичен счетным регистрам, что несколько упрощает их программирование. Еще одним событием, формируемым RTC, может стать сигнал выхода из спящего режима (WakeUP). Данный сигнал формируется периодически, что позволяет легко реализовывать различные системы, критичные к энергопотреблению. Счетчик выхода из спящего режима работает независимо от часов/календаря. Максимальное значение периода сна составляет примерно 48 суток. Все описанные внутренние события можно подать на вывод RTC_AF1 микроконтроллера, для использования совместно с периферийными элементами.

Модуль часов расположен в отдельной области памяти, имеющей возможность  внешнего питания от батареи. Регистры RTC оснащены дополнительной защитой от записи, что обеспечивает невозможность случайного повреждения информации в них. Кроме часовых регистров в модуле выполнены 12 регистров резервирования пользовательских данных с разрядностью 32. Эти регистры не обнуляются по сигналу «Сброс» при наличии внешнего источника напряжения, что позволяет хранить в них важную информацию. С резервными регистрами связана функция обнаружения несанкционированного доступа к устройству(Tamper). Она подразумевает наличие внешнего контакта, подключенного к линии RTC_AF1 или RTC_AF2.  Срабатывание этого контакта должно сигнализировать о вскрытии корпуса устройства, и одновременно  к сбросу информации в регистрах резервного хранения.

Еще одной полезной функцией может оказаться функция Time Stamp, предназначенная для определения точного времени наступления внешнего события. Для ее активации также требуется наличие внешнего сигнала, по фронту которого, значения счетных регистров сохраняются в регистрах RTC_TSTR и RTC_TSDR.

Как и другие модули STM32, часы реального времени могут формировать сигналы прерывания, но для их использования дополнительно потребуется настройка модуля EXTI.

Подробную информацию о работе с модулем RTC можно найти в фирменной документации RM0033 Reference manual. STM32F205xx, STM32F207xx, STM32F215xx and STM32F217xx advanced ARM-based 32-bit MCUs, а также в  AN3371 Application note. Using the hardware real-time clock (RTC) in STM32 F0, F2, F3, F4 and L1 series of MCUs. Некоторые моменты, касающиеся работы с часами будут освящены в следующих статьях.

Еще по теме:

Регистры часов реального времени в микроконтроллерах STM32F2xx

 

You have no rights to post comments

Плата STM32 ARM на базе STM32F103C8T6

Многофункциональная отладочная плата STM32F103C8T6 на базе мощного 32-битного микроконтроллера STM32 ARM Cortex-M3.

Серия микроконтроллеров STM32 ARM Cortex-M3 характеризуется высокой эффективностью с первоклассной периферией и низким энергопотреблением по доступной цене.

  • Отладочная плата STM32F103C8T6 с поддержкой программирования в Arduino IDE.
  • Отладочная плата построена на основе одноимённого контроллера, работающего на ядре Cortex-M3. Эту плату так же часто называют Maple mini.
  • Микроконтроллер ARM Cortex-M3 имеет богатый набор внешних интерфейсов – SPI (до 18 Мбит/с), USART, I2C, причём все они высокоскоростные и способны передавать данные без участия ЦП – с помощью ПДП (DMA), что значительно повышает скорость передачи.
  • Контроллер также имеет аппаратный интерфейс USB 2.0 Full Speed, то есть на его основе удобно создавать проекты, подключающиеся к ПК – и больше никаких последовательных портов!
  • Имеется также CAN-bus (Control Area Network) интерфейс. CAN интерфейс это обще индустриальная шина передачи данных на большие расстояния со средней скоростью и высокой надежностью.
  • Разнообразие периферии подкрепляется мощностью ядра – оно способно работать на частоте до 72 МГц с производительностью до 1.25 DMips (ядро AVR отрабатывает тест Dhrystone с производительностью не более 1 DMips), то есть этот МК мощнее рядовой Arduino более чем в 5.5 раз!
  • Размер программной памяти микроконтроллера STM32 ARM Cortex-M3 составляет 64 Кб, размер ОЗУ данных 20 Кб.
  • Удобное размещение выводов позволяет использовать STM32F103C8T6 с беспаечными макетными платами и программировать не вынимая из макетки. Всего же плата имеет 37 портов ввода-вывода.
  • Отладочная плата STM32F103C8T6 оснащена внутренними часами реального времени (на плате есть специальный контакт — Vbat, для подключения батарейки).
  • Обратите внимание, что большинство контактов имеют логический уровень 3.3 Вольт. Однако некоторые выводы совместимы с уровнем 5 Вольт, что значительно облегчает использование различной периферии. На вкладке "Распиновка" приведена распиновка и назначение выводов отладочной платы STM32F103C8T6.

Характеристики STM32F103C8T6
Микроконтроллер: ARM 32 Cortex-M3
Напряжение питания: 2.0 - 3.6 В
Потребляемый ток: до 16 мА
Ширина шины данных: 32-бит
Тактовая частота: 72 МГц
Разрядность АЦП: 12 бит
Кол-во каналов АЦП: 2
Скорость АЦП: 1 МГц (частота захвата сигнала)
Кристалл: 8 мГц (поддерживает резонаторы от 4 МГц до 16 МГц)
Количество контактов ввода-вывода: 37
Флэш-память ППЗУ: 64 Кб
ОЗУ (SRAM): 20 Кб
Интерфейсы: CANbus, I²C, IrDA, LINbus, SPI, UART/USART, USB 2.0 Full Speed
Размеры: 53.34 x 22.86 x 12 мм
Вес: 9 гр.

Особенности

  • удобные джамперы для выбора режима загрузки – из Flash, из ОЗУ или режим загрузчика
  • встроенный регулятор напряжения – плату можно питать от USB
  • программирование и отладка всего по двум проводам, причём заливка прошивки доступна с помощью загрузчика – не требует программатора.

Применение

  • ресурсоёмкие проекты на Ардуино (Arduino)
  • обработка изображений или звука
  • работа с большими дисплеями

Комплектация: одна отладочная плата STM32F103C8T6, две гребенки на 20 контактов.

Посмотреть/скачать DataSheet микросхемы STM32F103C8T6 (формат PDF размер 1.1 МБ) =>

Для работы с Arduino IDE рекомендуется скачать дополнение Arduino STM-32 =>

Здесь Вы найдете различные статьи по освоению Arduino (подробное описание всех портов, набор программ скетчей, начало работы с Ардуино и многое другое) =>

STM32F103C8T6 Cortex-M3

 Отладочная плата STM32-Smart на базе 32-битного микроконтроллера STM32F103C8T6 с ядром ARM Cortex-M3

 На плате имеются все необходимые элементы для начала работы с данным микроконтроллером:

  • 34 порта GPIO, разведенных на контактные площадки
  • микросхема EEPROM памяти на 4 кбит AT24C04
  • два кварца - 8МГц для тактирования ядра и 32768 Гц для тактирования RTC
  • стабилизатор напряжения 3.3В для обеспечения возможности питания платы от 5В
  • разъем для подключения SWD программатора или JTAG-отладчика
  • порт MiniUSB (соединен с аппаратным USB интерфейсом)
  • кнопка перезагрузки Reset S1
  • пользовательская кнопка S2 (пин PA0)
  • два светодиода (один из них - индикатор подачи питания, второй - подключен к порту PC13)
  • разъем SPI для подключения OLED дисплея

 Для разработки кода и прошивки STM32F103C8T6 можно использовать как специализированные IDE - Keil, IAR, Eclipse и т.д., так и Arduino IDE. Отличную пошаговую инструкцию по настройке поддержки чипа STM32F103C8T6 средой Arduino IDE можно найти здесь.

 Характеристики:

Используемый микроконтроллер  STM32F103C8T6
Ядро   ARM 32-bit Cortex-M3
Напряжение питания платы  2,7…5В
Максимальная тактовая частота чипа  72МГц
Объем флеш памяти   64Кб
Объем оперативной памяти SRAM  20Кб
Количество выводов GPIO  34
Количество АЦП  2х 12bit (16 каналов)
Разрядность ШИМ  16bit
Диапазон рабочих температур      -40°C..+85°C
Размеры платы  56х43 мм

  Микроконтроллер STM32F103C8T6 имеет три аппаратных UART интерфейса, 2x SPI, 2x I2C, 1x USB 2.0, 1x CAN, 7-канальный DMA контроллер, интерфейсы SWD и JTAG, часы реального времени и три 16-битных таймера.

Комплектация:

  • 1х отладочная плата STM32-Smart на чипе STM32F103C8T6 Cortex-M3
  • 1х miniUSB кабель
  • 1х шлейф проводов мама-мама

Загрузки:

CountZero: выборка по тегу: STM32duino

Arduino: библиотеки для работы с RTC DS1307,DS3231

разделы: Arduino, STM32duino, RTC, дата: 18 сентября 2017г.


Всё, что ты хотел знать о DS1307,
но боялся спросить

В завершении прошлой статьи я приводил ссылку для проверки I2C модуля RTC DS3231. Для этого не надо устанавливать никакие библиотеки, достаточно скопировать текст программы в Arduino IDE и кликнуть на загрузку скетча в микроконтроллер. Это одинаково работает как в Arduino IDE, так и в MSP430 Energia и STM32duino.

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

Сам я уже прошел по этому пути, но т.к. написанный код уже не умещался под спойлерами, поэтому пришлось написать полноценную Arduino - библиотеку. В заключение будет несколько примеров с использованием этой библиотеки, с тем, как на мой взгляд нужно правильно работать с DS1307/DS3231.

Но прежде чем "городить огород", предлагаю взглянуть на готовые решения, одобренные "патриархами" arduino.cc, а именно: библиотеки Time, DS1307RTC, а также DS3232RTC которая работает совместно с библиотекой Time.

    Для начала решим, что нам нужно от RTC типа DS1307/DS3231:
  • Автономный отчет времени, т.е. когда микроконтроллер при старте получает текущее время, а затем он уже считает время самостоятельно и не забивает I2C шину трафиком с RTC.
  • Отчет времени по SQW-выводу, когда RTC тактирует счетчик часов микроконтроллера через внешнее прерывание, и микроконтроллер самостоятельно рассчитывает календарные данные и текущее время.
  • Поддержка будильников.
  • Поддержка внесения поправок к ходу часов.
  • Периодическая синхронизация.

Вроде бы немного, и вроде бы несложно.

Весь код я буду тестировать на Arduino Nano, MSP430 Launchpad - Energia и на STM32duino - Blue Pill.

Общая концепция библиотек для работы со временем такая. Имеется базовая библиотека TIME которая ведет через функцию millis() расчет времени при запросе такого через функции библиотеки hour(), minute(), second() и т.д. Библиотека абстрагируется от аппаратной части того или иного хронометра. Она рассчитана на ведение календаря и отчет времени средствами самого микроконтроллера, без подключения RTC. Соответственно библиотеки DS3232RTC и DS1307RTC добавляют функции синхронизации микроконтроллера с RTC.

Читать дальше

STM32F103C8T6 aka Blue Pill + STM32duino + IAR ARM: быстрый старт

разделы: STM32, STM32duino, дата: 08 сентября 2017г.

"Blue Pill"

Отладочная плата на микроконтроллере stm32f103c8t6, является одной из самых популярных в любительской среде "электронщиков". Это одна из самых удачных плат в соотношении "цена/функционал", а сам stm32f103xxxx, который выпускается уже 10 лет, является ветераном и первопроходцем микроконтроллеров на ядрах ARM Cortex M3.

    Для быстрого знакомства с платой я предлагаю пройтись по следующим пунктам:
  • Краткий обзор платы;
  • Исправление аппаратного бага с помощью термофена и паяльника;
  • Прошивка загрузчика STM32duino;
  • "Подъем" виртуального COM порта на USB-модуле микроконтроллера stm32f103c8t6 с помощью STM32Cube MX и IAR ARM. Подключение микроконтроллера к планшету на Android.
  • Подключение и написание программы опроса I2C модуля RTC DS3231 с помощью STM32duino.

Вроде не много.

    Краткое описание

  • В отличии от Maple Mini, данная плата имеет штыревой разъем для подключения китайского клона ST-Link. Что на мой взгляд является большим плюсом, т.к. на проверку, загрузчик Leafmaple/STM32duino из-за постоянного переключения между DFU-загрузчиком и виртуальным COM-портом, оказался довольно проблемным.
  • Плата имеет на борту два кварца: на 8 MHz для тактирования HSE и на 32768 Hz для LSE. Для сравнения, на Maple Mini установлен только кварц на 8 MHz.
  • Сам микроконтроллер stm32f103c8t6, несмотря на то что по документации поставляется с флешпамятью на 64KБайта, фактически поставляется с флеш-памятью на 128КБайт(!) Хотя, гарантии на это никто не дает конечно.
  • Также имеется два джампика для прошивки микроконтроллера через USB-TTL конвертер, кнопка сброса Reset, два светодиода: красный для индикации питания и зеленый подключенный к выводу PC13. Причем загорается он при логическом нуле.
  • Цифровые выводы имеют маркировку в соответствии с даташитом, за тем исключением, что из их обозначения отброшена литера "P".
  • Довершает "обвес" микро-USB разъем, который мы сегодня попытаемся задействовать.
  • Сфера применения микроконтроллера, на мой взгляд- это коммутация по USB-интерфейсу с традиционными компьютерами, одноплатными компьютерами, устройствам на Android которые возможно использовать как дисплеи(вторая жизнь для устаревших телефонов и планшетов) и т.д. Также думаю, что будет неплохая связка микроконтроллеров STM32 с SPI-дисплеями.

Полезная информация о плате собрана на страничке проекта STM32duino.

Для начала взглянем на раcпиновку платы:

Читать дальше

STM32duino - наследник проекта LeafMaple

разделы: STM32, Arduino, STM32duino, дата: 6 февраля 2017г.


Как я уже упоминал, проект LeafMaple после нескольких лет простоя свернулся, а его поддержку и развитие передали на сайт http://stm32duino.com/ который выполнен в виде форума. Впрочем, имеется там и Вики http://wiki.stm32duino.com.

Первым преимуществом STM32duino является то, что он поддерживает не только платы LeafMaple и их клоны, STM32duino можно установить на целый набор плат на stm32f103 а так же на stm32f4. Списки поддерживаемых плат, а также уровень их поддержки можно посмотреть в Вики.

Второй "плюс" проекта, то что там сделали таки драйвера для систем Windows 7 и выше. Т.е. то, что не могли сделать на leafmaple.com несколько лет.

Как следует из названия, в качестве IDE проект использует Arduino IDE, что упрощает жизнь, т.к. он поддерживает внешние IDE.

1) Установка загрузчика

Первым делом нужно будет прошить загрузчик. Напомню, что я работаю c клоном Maple Mini и в качестве программатора использую опять же клон ST-Link v2. Для тех кто использует Blue Pill и прошивает микроконтроллер через встроенный загрузчик, возможно будет полезна следующая статья: Дешевая STM32 плата + Arduino IDE UPD 15.07.2016.

Загрузчик для своей платы можно скачать здесь: https://github.com/rogerclarkmelbourne/STM32duino-bootloader/tree/master/STM32F1/binaries. В случае с Maple Mini это - maple_mini_boot20.bin

Читать дальше

STM32F103 + SPL: Программирование, прошивка, отладка микроконтроллеров STM32 в средах Windows/IAR и Linux/Eclipse используя программатор ST-Link v2

разделы: STM32, STM32duino, среда разработки, дата: 14 октября 2016г.


рекомендуется к прочтению

Архитектуру STM32 можно мысленно разделить на две части. Первая часть, это ядро Cortex-M3, которое спроектировали в ARM и которое примерно одинаковое для всех. "Примерно", потому что, содержит опциональные модули которые могут быть у одного производителя и отсутствовать у другого. Вторая часть, это периферия знакомая по STM8, с тем отличием, что был добавлен USB2.0 интерфейс, хотя точнее было бы сказать, что этот интерфейс был "откручен" от STM8(такая у STM политика: хочешь аппаратный USB, используй STM32).

    Справочники и руководства которые нужны для работы c STM32F103x8/STM32F103xB:
  1. Справочное руководство по 32-битным микроконтроллерам серий STM32F10x Reference Manual. STM32F101xx, STM32F102xx, STM32F103xx, STM32F105xx and STM32F107xx advanced ARM®-based 32-bit MCUs или RM 0008
  2. Руководство на чипы STM32F103x8/STM32F103xB STM32F103x8 STM32F103xB Medium-density performance line ARM®-based 32-bit MCU with 64 or 128 KB Flash, USB, CAN, 7 timers, 2 ADCs, 9 com. interfaces
  3. Ядро Cortex - МЗ компании ARM. Полное руководство. Книга не обязательная, но на мой взгляд очень полезная.

Читать дальше

Leaf Maple: введение в STM32

разделы: STM32, STM32duino, дата: 17 сентября 2015г.

Проект Leaf Maple призван стать аналогом Arduino для микроконтроллеров STM32. Пока нельзя сказать, что проект "выстрелил", но на мой взгляд достоин внимания. Заказать китайский клон Maple Mini можно всего за 4USD.

&nbsp

    На борту чип STM32F103CBT6, содержащий множество интересных штук:
  1. ядро ARM CortexM3;
  2. 32-разрядность;
  3. частота 72 МГц;
  4. 128 кБайт встроенной флеш памяти;
  5. 20 кБайт оперативки;
  6. 12-битный АЦП;
  7. семь DMA каналов;
  8. аппаратные USB2.0, CAN, USART, I2C, SPI интерфейсы.

Полную спецификацию можно посмотреть на официальном сайте фирмы STMicroelectronics: STM32F103x8 STM32F103xB datasheet

Читать дальше

STM32F103 RTC регистры настройки часов

Часы (RTC) представляют собой независимый таймер, который с помощью соответствующего программного обеспечения может выполнять функции часов и календаря. Питание может осуществлятся от отдельного источника Vbat от которого кроме регистров часов питается и так называемый Backup Domain (или батарейный домен). В него входят, кроме регистров RTC, LSE генератор и выводы с PC13 до PC15, обеспечивающие функционирование часов реального времени даже при отключенном питании на Vdd.  Для установки текущего значения счетчика (времени и даты) необходимо: 

  • включить тактирование интерфейса доступа к регистрам часов и Backup domain PWREN BKPEN выполнив команду 
          RCC->APB1ENR |= RCC_APB1ENR_PWREN | RCC_APB1ENR_BKPEN;
  • установить бит  DBP регистра PWR_CR, разрешающий доступ к  Backup domain
         PWR->CR |= PWR_CR_DBP;



RTC control register high (RTC_CRH)
Address offset: 0x00
Reset value: 0x0000

Bits 15:3 Reserved, forced by hardware to 0.

Bit 2 OWIE: Overflow interrupt enable

0: Overflow interrupt is masked.

1: Overflow interrupt is enabled.

Bit 1 ALRIE: Alarm interrupt enable

0: Alarm interrupt is masked.

1: Alarm interrupt is enabled.

Bit 0 SECIE: Second interrupt enable

0: Second interrupt is masked.

1: Second interrupt is enabled.

These bits are used to mask interrupt requests. Note that at reset all interrupts are disabled, so it is possible to write to the RTC registers to ensure that no interrupt requests are pending after initialization. It is not possible to write to the RTC_CRH register when the peripheral is completing a previous write operation (flagged by RTOFF=0, see Section 18.3.4 on page 466).

The RTC functions are controlled by this control register. Some bits must be written using a specific configuration procedure (see Configuration procedure:).


RTC control register low (RTC_CRL)
Address offset: 0x04
Reset value: 0x0020
Bits 15:6 Reserved, forced by hardware to 0.
Bit 5 RTOFF: RTC operation OFF
With this bit the RTC reports the status of the last write operation performed on its registers, indicating if it has been completed or not. If its value is ‘0’ then it is not possible to write to any of the RTC registers. This bit is read only.
0: Last write operation on RTC registers is still ongoing.
1: Last write operation on RTC registers terminated.
Bit 4 CNF: Configuration flag
This bit must be set by software to enter in configuration mode so as to allow new values to be written in the RTC_CNT, RTC_ALR or RTC_PRL registers. The write operation is only executed when the CNF bit is reset by software after has been set.
0: Exit configuration mode (start update of RTC registers).
1: Enter configuration mode.
Bit 3 RSF: Registers synchronized flag
This bit is set by hardware at each time the RTC_CNT and RTC_DIV registers are updated and cleared by software. Before any read operation after an APB1 reset or an APB1 clock stop, this bit must be cleared by software, and the user application must wait until it is set to be sure that the RTC_CNT, RTC_ALR or RTC_PRL registers are synchronized.
0: Registers not yet synchronized.
1: Registers synchronized.
Bit 2 OWF: Overflow flag
This bit is set by hardware when the 32-bit programmable counter overflows. An interrupt is generated if OWIE=1 in the RTC_CRH register. It can be cleared only by software. Writing ‘1’ has no effect.
0: Overflow not detected
1: 32-bit programmable counter overflow occurred.
Bit 1 ALRF: Alarm flag
This bit is set by hardware when the 32-bit programmable counter reaches the threshold set in the RTC_ALR register. An interrupt is generated if ALRIE=1 in the RTC_CRH register. It can be cleared only by software. Writing ‘1’ has no effect.
0: Alarm not detected
1: Alarm detected
Bit 0 SECF: Second flag
This bit is set by hardware when the 32-bit programmable prescaler overflows, thus incrementing the RTC counter. Hence this flag provides a periodic signal with a period corresponding to the resolution programmed for the RTC counter (usually one second). An interrupt is generated if SECIE=1 in the RTC_CRH register. It can be cleared only by software. Writing ‘1’ has no effect.
0: Second flag condition not met.
1: Second flag condition met.

The functions of the RTC are controlled by this control register. It is not possible to write to the RTC_CR register while the peripheral is completing a previous write operation (flagged by RTOFF=0, see Section 18.3.4 on page 466).
Note:
1 Any flag remains pending until the appropriate RTC_CR request bit is reset by software, indicating that the interrupt request has been granted.
2 At reset the interrupts are disabled, no interrupt requests are pending and it is possible to write to the RTC registers.
3 The OWF, ALRF, SECF and RSF bits are not updated when the APB1 clock is not running.
4 The OWF, ALRF, SECF and RSF bits can only be set by hardware and only cleared by software.
5 If ALRF = 1 and ALRIE = 1, the RTC global interrupt is enabled. If EXTI Line 17 is also enabled through the EXTI Controller, both the RTC global interrupt and the RTC Alarm interrupt are enabled.
6 If ALRF = 1, the RTC Alarm interrupt is enabled if EXTI Line 17 is enabled through the EXTI Controller in interrupt mode. When the EXTI Line 17 is enabled in event mode, a pulse is generated on this line (no RTC Alarm interrupt generation).

RTC prescaler load register (RTC_PRLH / RTC_PRLL)
The Prescaler Load registers keep the period counting value of the RTC prescaler. They are write-protected by the RTOFF bit in the RTC_CR register, and a write operation is allowed if the RTOFF value is ‘1’.

RTC prescaler load register high (RTC_PRLH)
Address offset: 0x08
Write only (see Section 18.3.4 on page 466)

Reset value: 0x0000


Bits 15:4 Reserved, forced by hardware to 0.
Bits 3:0 PRL[19:16]: RTC prescaler reload value high
These bits are used to define the counter clock frequency according to the following formula:
f_TR_CLK = f_RTCCLK/(PRL[19:0]+1)

RTC prescaler load register low (RTC_PRLL)
Address offset: 0x0C
Write only (see Section 18.3.4 on page 466)

Reset value: 0x8000


Bits 15:0 PRL[15:0]: RTC prescaler reload value low
These bits are used to define the counter clock frequency according to the following formula:
fTR_CLK = fRTCCLK/(PRL[19:0]+1)
Caution: The zero value is not recommended. RTC interrupts and flags cannot be
asserted correctly.

Note: If the input clock frequency (fRTCCLK) is 32.768 kHz, write 7FFFh in this register to get a
signal period of 1 second.

RTC prescaler divider register (RTC_DIVH / RTC_DIVL)
During each period of TR_CLK, the counter inside the RTC prescaler is reloaded with the
value stored in the RTC_PRL register. To get an accurate time measurement it is possible to
read the current value of the prescaler counter, stored in the RTC_DIV register, without
stopping it. This register is read-only and it is reloaded by hardware after any change in the

RTC_PRL or RTC_CNT registers.

RTC prescaler divider register high (RTC_DIVH)
Address offset: 0x10

Reset value: 0x0000


Bits 15:4 Reserved
Bits 3:0 RTC_DIV[19:16]: RTC clock divider high

RTC prescaler divider register low (RTC_DIVL)
Address offset: 0x14
Reset value: 0x8000


Bits 15:0 RTC_DIV[15:0]: RTC clock divider low

RTC counter register (RTC_CNTH / RTC_CNTL)

The RTC core has one 32-bit programmable counter, accessed through two 16-bit registers;
the count rate is based on the TR_CLK time reference, generated by the prescaler.
RTC_CNT registers keep the counting value of this counter. They are write-protected by bit
RTOFF in the RTC_CR register, and a write operation is allowed if the RTOFF value is ‘1’. A
write operation on the upper (RTC_CNTH) or lower (RTC_CNTL) registers directly loads the
corresponding programmable counter and reloads the RTC Prescaler. When reading, the
current value in the counter (system date) is returned.

RTC counter register high (RTC_CNTH)
Address offset: 0x18
Reset value: 0x0000


Bits 15:0 RTC_CNT[31:16]: RTC counter high
Reading the RTC_CNTH register, the current value of the high part of the RTC Counter
register is returned. To write to this register it is necessary to enter configuration mode (see
Section 18.3.4: Configuring RTC registers on page 466).

RTC counter register low (RTC_CNTL)
Address offset: 0x1C

Reset value: 0x0000


Bits 15:0 RTC_CNT[15:0]: RTC counter low
Reading the RTC_CNTL register, the current value of the lower part of the RTC Counter
register is returned. To write to this register it is necessary to enter configuration mode (see
Section 18.3.4: Configuring RTC registers on page 466).

RTC alarm register high (RTC_ALRH / RTC_ALRL)
When the programmable counter reaches the 32-bit value stored in the RTC_ALR register,
an alarm is triggered and the RTC_alarmIT interrupt request is generated. This register is
write-protected by the RTOFF bit in the RTC_CR register, and a write operation is allowed if

the RTOFF value is ‘1’.

RTC alarm register high (RTC_ALRH)
Address offset: 0x20
Write only (see Section 18.3.4 on page 466)
Reset value: 0xFFFF


Bits 15:0 RTC_ALR[31:16]: RTC alarm high
The high part of the alarm time is written by software in this register. To write to this register
it is necessary to enter configuration mode (see Section 18.3.4: Configuring RTC registers
on page 466).

RTC alarm register low (RTC_ALRL)
Address offset: 0x24
Write only (see Section 18.3.4 on page 466)

Reset value: 0xFFFF



Bits 15:0 RTC_ALR[15:0]: RTC alarm low
The low part of the alarm time is written by software in this register. To write to this register it
is necessary to enter configuration mode (see Section 18.3.4: Configuring RTC registers on
page 466).

RTC register map



Backup domain control register (RCC_BDCR)
Address offset: 0x20
Reset value: 0x0000 0000, reset by Backup domain Reset.
Access: 0 ≤ wait state ≤ 3, word, half-word and byte access
Wait states are inserted in case of successive accesses to this register.
Сброс (установка в 0) происходит с помощью процедуры Backup domain Reset.

   Note: The LSEON, LSEBYP, RTCSEL and RTCEN bits of the Backup domain control register (RCC_BDCR) are in the Backup domain. As a result, after Reset, these bits are writeprotected and the DBP bit in the Power control register (PWR_CR) has to be set before these can be modified.  These bits are only reset after a Backup domain Reset. Any internal or external Reset will not have any effect on these bits.
   Биты LSEON, LSEBYP, RTCSEL и RTCEN регистра RCC_BDCR входят в Backup domain - регистры, питающиеся от независимого источника питания (батарейки). После процедуры сброса (Reset) эти биты защищены от записи и для их модификации необходимо установить бит DBP в Power control register (PWR_CR). Любая внешняя или внутренняя процедура сброса не влияет на данные биты.
Bits 31:17 Reserved, must be kept at reset value.

Bit 16 BDRST: Backup domain software reset
Set and cleared by software.
0: Reset not activated
1: Resets the entire Backup domain

Bit 15 RTCEN: RTC clock enable
Set and cleared by software.
0: RTC clock disabled
1: RTC clock enabled

Bits 14:10 Reserved, must be kept at reset value.

Bits 9:8 RTCSEL[1:0]: RTC clock source selection
Set by software to select the clock source for the RTC. Once the RTC clock source has been
selected, it cannot be changed anymore unless the Backup domain is reset. The BDRST bit
can be used to reset them.
00: No clock
01: LSE oscillator clock used as RTC clock10: LSI oscillator clock used as RTC clock
11: HSE oscillator clock divided by 128 used as RTC clock

Bits 7:3 Reserved, must be kept at reset value.

Bit 2 LSEBYP: External low-speed oscillator bypass
Set and cleared by software to bypass oscillator in debug mode. This bit can be written only
when the external 32 kHz oscillator is disabled.
0: LSE oscillator not bypassed
1: LSE oscillator bypassed

Bit 1 LSERDY: External low-speed oscillator ready

Set and cleared by hardware to indicate when the external 32 kHz oscillator is stable. After
the LSEON bit is cleared, LSERDY goes low after 6 external low-speed oscillator clock
cycles.
0: External 32 kHz oscillator not ready
1: External 32 kHz oscillator ready

Bit 0 LSEON: External low-speed oscillator enable
Set and cleared by software.
0: External 32 kHz oscillator OFF
1: External 32 kHz oscillator ON

STM32F103C8 - Линия основных характеристик, MCU Arm Cortex-M3 с 64 Кбайт флэш-памяти, ЦП 72 МГц, управление двигателем, USB и CAN

Страна происхождения:

МАЛАЙЗИЯ

Таймеры (тип.) (16 бит):

4

Таймеры (тип.) (32-битные):

-

Количество каналов (тип.):

10

Количество каналов (тип.):

-

Количество каналов (тип.):

-

Цифро-аналоговые преобразователи (тип.) (12-битные):

-

Компаратор:

-

Входы / выходы (высокий ток):

37

ЖЕСТЯНАЯ БАНКА:

1

CAN FD (тип.):

-

SPI (тип.):

2

I2S (тип.):

-

USART (тип.):

3

UART (тип.):

-

Интегрированные операционные усилители:

-

SMPS:

-

STM32F103C8T6 Совет по развитию STM32 Основная плата: Электроника


Тип разъема USB
Тип кабеля USB
Совместимые устройства Персональный компьютер
Марка Jolooyo

  • Убедитесь, что это подходит введя номер вашей модели.
  • Бортовой STM32F103C8T6 chi
  • Встроенный интерфейс JTAG и кнопка сброса
  • Встроенные кварцевые генераторы 32,768 кГц и 8 МГц
  • С микросхемой AMS1117-3.3 от 5 В до 3,3 В
  • С набором последовательного интерфейса UART
]]>
Характеристики
Фирменное наименование Jolooyo
Тип кабеля USB
Совместимые устройства Персональный компьютер
Тип разъема USB
Ean 9166544550300
Номер детали STM32F103C8T6
Код КПСС ООН 26121600

Использование STM32 как учебное пособие по Arduino | STM32F103C8

Привет, как дела, ребята! Акарш здесь из CETech.

В следующем руководстве мы рассмотрим различные микроконтроллеры, предлагаемые STM, такие как STM32F103C8, STM32F030F4 и STM8S103F3. Мы будем сравнивать эти микросхемы друг с другом, а также сравнивать их с Arduino.

Как только это будет решено, мы конвертируем STM32F103C8 в Arduino, чтобы вы могли загружать любой код Arduino IDE в STM32, используя только USB-кабель, как если бы вы делали это с Arduino.

Давайте начнем с веселья сейчас.

Получите печатные платы для вашего проекта Произведено

Вы должны проверить PCBGOGO, чтобы заказать дешевые печатные платы онлайн!

Вы получаете 10 печатных плат хорошего качества, изготовленные и отправленные к вашему порогу за 5 долларов и небольшую доставку.Вы также получите скидку на доставку первого заказа.

PCBGOGO имеет возможность сборки печатных плат и изготовления трафаретов, а также соблюдает высокие стандарты качества.

Проверьте их, если вам нужно произвести или собрать печатные платы.

STM32F103C8 vs STM32F030F4 vs STM8S103F3 vs Arduino

Итак, в соответствии с приведенным выше сравнением, давайте подведем итоги наших выводов:

1) Arduino и STM8 - это 8-битные процессоры, а два других - 32-битные. MCU.

2) STM32F103 имеет самую большую флеш-память, которая вдвое больше, чем у Arduino, тогда как RAM в 10 раз больше, чем у Arduino.

3) Цена мощного STM32F103 ниже, чем у клона Arduino Nano, но в сопоставимом диапазоне. STM8S103, напротив, представляет собой дешевый микроконтроллер, но определенно обеспечивает меньшую мощность.

4) Программировать Arduino так же просто, как подключить USB-кабель и нажать кнопку загрузки в среде IDE.Серия STM32 не имеет этой функции из коробки, но может быть добавлена ​​к STM32F103, загрузив в нее загрузчик Arduino. Это то, что мы собираемся сделать в следующих шагах 🙂

Загрузка загрузчика Arduino в STM32

1) Подключите STM32F103 к плате FTDI, как показано на рисунке.

2) Переключите заголовок BOOT 0 из положения «0» в положение «1» перед подключением платы FTDI к компьютеру для прошивки загрузчика

3) Загрузите соответствующий загрузчик (в моем случае PC13) из следующих ссылка: https: // github.com / rogerclarkmelbourne / STM32duino-bootloader / tree / master / binaries

4) Загрузите и установите инструмент Flasher, с помощью которого вы можете прошивать двоичный файл: https://www.st.com/en/development-tools/flasher-stm32 .html

5) Подключите оборудование к ПК и откройте инструмент для прошивки, установленный в следующем месте для моего случая:

6) После открытия инструмента выберите правильный COM-порт и продолжайте, на следующем шаге, когда вы увидеть целевое читаемое сообщение, перейти к следующей кнопке дважды.

7) Выберите опцию «Загрузить на устройство», затем выберите бинарный файл, расположенный на вашем ПК, щелкнув 3 точки, а затем нажмите кнопку «Далее», которая загрузит загрузчик на устройство и покажет сообщение об успешном завершении, как на картинке.

8) После закрытия программы прошивки верните перемычку BOOT 0 обратно в положение «0» ПЕРЕД отключением питания от платы STM32.

Настройка IDE Arduino для STM32

1) Добавьте следующий URL-адрес в URL-адрес менеджера дополнительных плат: http: // dan.drown.org/stm32duino/package_STM32duino_index.json

2) Зайдите в Boards Manager и найдите STM32, как только появится список, установите версию из stm32duino.

3) Подключите плату STM32 к компьютеру с помощью USB-кабеля и выберите правильную плату в меню инструментов, как на картинке выше.

4) Теперь откройте любой пример скетча, который вы хотите, я открыл пример Blink и просто нажал кнопку загрузки, и вы сможете загрузить код без каких-либо других шагов.

Вот и все!

Поэкспериментируйте с различными примерами скетчей, которые должны загружаться на доску так же легко, как и скетч Blink.

Сообщите мне в комментариях ниже, как вы смогли использовать всю мощь этой платы при использовании с Arduino IDE, а также для получения дополнительных разъяснений по теме, пожалуйста, посмотрите мое видео по той же теме:

Учебное пособие по

STM32 - education8s.tv - Смотрите Learn Build

В этом руководстве по Arduino STM32 мы впервые рассмотрим плату, совместимую с STM32 Arduino. Эта плата мощная и недорогая. Посмотрим, что он может предложить!

По соображениям конфиденциальности YouTube требуется ваше разрешение для загрузки.Для получения дополнительной информации, пожалуйста, ознакомьтесь с нашей Политикой конфиденциальности. Я принимаю

Введение к руководству Arduino STM32

Привет, ребята, меня зовут Ник, и добро пожаловать на education8s.tv, канал, посвященный проектам DIY-электроники с Arduino, Raspberry Pi, ESP8266 и другими популярными платами. Сегодня я очень взволнован, потому что мы собираемся протестировать эту новую плату, которая использует чип STM32, и мы собираемся научиться программировать ее с помощью Arduino IDE. Как видите, я подключил один из моих любимых дисплеев; 1.8-дюймовый цветной TFT-дисплей, и я загрузил программу для тестирования графики. По этому тесту вы можете сказать, что доска быстрая! А теперь посмотрим на доску поближе!

Я обнаружил эту маленькую доску некоторое время назад, когда cmb80amiga, давний зритель канала, посоветовал мне попробовать. После просмотра некоторых из его впечатляющих проектов с этой доской на его канале YouTube, я решил купить одну, чтобы попробовать. Вы можете посетить его канал, нажав на эту карточку. Плата стоит около 3 долларов.

——————–


ГДЕ КУПИТЬ
——————– Плата

STM32: https://educ8s.tv/part/STM32

Программист

FTDI: https://educ8s.tv/part/FTDI

Цветной TFT: https://educ8s.tv/part/7735

Малая макетная плата: https://educ8s.tv/part/SmallBreadboard

Провода: https://educ8s.tv/part/Wires

Power Bank: https://educ8s.tv/part/Powerbank

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

[AdSense]

Купленная мной плата, которую также называют синей таблеткой из-за синего цвета печатной платы, оснащена микросхемой STM32F103C8T6, которая является мощным процессором ARM! Плата крошечная. Она немного больше платы Arduino Nano. Помимо самого чипа, на плате мы можем найти кристалл 8 МГц и кристалл 32 кГц для управления внутренними часами реального времени. Плата использует логические уровни 3,3 В, но большинство ее контактов допускают 5 В. Теперь давайте внимательнее посмотрим на сердце платы - микросхему STM32.

Чип представляет собой 32-битный процессор ARM с тактовой частотой 72 МГц! Чип не поддерживает Wi-Fi или Bluetooth, но предлагает 20 КБ ОЗУ и 64 КБ флэш-памяти, которых достаточно для создания крупных проектов. Он также предоставляет контакты 37GPIO, 10 контактов ADC, SPI, I2C, CAN, шины UART и контроллер DMA. Это впечатляющие характеристики для чипа стоимостью 3 доллара. Если мы сравним спецификации STM32 со спецификациями Arduino Uno, мы увидим, что эта небольшая плата превосходит Arduino Uno во всех областях.Частота, на которой работает чип STM32, в 4,5 раза выше, чем частота, на которой работает Arduino Uno. Итак, мы ожидаем, что STM32 будет как минимум в 4,5 раза быстрее, чем Arduino Uno.

Чтобы выяснить, так ли это, я создал простой тест. Обе платы должны вычислять Pi с помощью одного и того же алгоритма для одинакового количества итераций алгоритма. Я подключил цветной TFT-дисплей с диагональю 1,8 дюйма, чтобы показать результаты. Как видите, плате STM32 потребовалось 3,8 секунды для выполнения этой задачи.А вот Arduino Uno потребовалось 29,1 секунды. Это означает, что в этом примере STM32 в 7,6 раз быстрее, чем Arduino Uno. Разница в производительности огромна! Вы можете скачать код этого простого теста по ссылке в описании видео. Давайте теперь посмотрим, как загружать программы на плату с помощью Arduino IDE.

——————–


Arduino ДОБАВИТЬ НА ССЫЛКЕ
——————–

http://dan.drown.org/stm32duino/package_STM32duino_index.json

Как программировать плату STM32

Чтобы использовать плату с IDE Arduino, нам необходимо установить несколько пакетов.Перейдите в File -> Preferences, введите этот URL-адрес и нажмите OK. Теперь перейдите в Инструменты -> Доска и откройте Диспетчер досок. Найдите STM32F1 и установите появившийся пакет! Процедура установки займет несколько секунд. После этого все, что вам нужно сделать, это выбрать свою доску. В меню «Инструменты» снова выбираем плату Generic STM32F103C, в качестве метода загрузки выбираем последовательный порт и, наконец, выбираем порт, к которому подключена плата STM32. Теперь мы готовы загрузить в него нашу первую программу! Открываем стандартный блинк-скетч.Все, что нам нужно сделать, это изменить этот скетч вот так.

Светодиод на плате STM32 подключен к контакту PC13, поэтому после этого небольшого изменения мы нажимаем кнопку загрузки! Через несколько секунд светодиод начинает мигать! Мы можем перепрограммировать плату, если захотим, нажав еще раз кнопку RESET. Когда мы закончили, мы устанавливаем перемычку обратно в положение 0. Теперь мы можем удалить модуль FTDI и запитать плату от входа USB. Плата начнет выполнять код, который мы только что загрузили. Если вы включили плату, а программа не запущена, убедитесь, что вы не забыли вернуть перемычку в исходное положение.Ток, который потребляет плата при запуске скетча мигания, составляет около 40 мА, но его можно уменьшить, если перевести процессор в спящий режим, чего я еще не пробовал. Если у кого-то из вас есть дополнительная информация об этом, поделитесь ею в комментариях ниже.

Последние мысли

Теперь, когда мы знаем, как использовать эту доску, у нас есть еще один отличный инструмент в нашем наборе инструментов. Плата STM32 - чрезвычайно мощная и полезная плата, хотя она не поддерживает Wi-Fi или Bluetooth. Он может заменить Arduino Nano во многих проектах, где нам нужно больше памяти для программ или лучшая частота обновления на больших дисплеях.Поскольку вокруг этой платы очень активное сообщество, мы можем найти библиотеки для большинства дисплеев и датчиков, которые мы используем. Так что, если вам нужна небольшая, но мощная плата с множеством возможностей ввода-вывода, плата STM32, вероятно, подойдет вам. Я хотел бы услышать ваше мнение об этой доске и ваш опыт работы с ней. Собираетесь ли вы строить какие-нибудь проекты вокруг этой доски? Пожалуйста, оставляйте свои комментарии в разделе комментариев ниже!

——————–


КОД
——————–