Как стать автором
Обновить

Знакомимся с Artery. AT-START-F423 – пробуем и подключаем дальномер AJ-SR04M

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров3.1K

Микросхемы микроконтроллеров от Artery выглядят достаточно интересным вариантом замещения STM. Больше всего подкупают своей доступностью для заказа. Отладок много, собраны качественно, шелкография качественная(по крайней мере на тех, которые я видел и держал в руках). Посмотрим, что производитель предлагает по поддержке со стороны программного обеспечения, драйверов и IDE.

Итак, хорошие новости:

  • Документы есть на английском;

  • С сайта достаточно быстро скачивается без всякой регистрации;

  • Все инструменты бесплатные и даже есть полноценная инструкция как собрать свой программатор;

  • Есть паки для Keil и IAR, своя IDE на эклипсе и кодогенератор;

  • Обновления очень регулярные;

  • Для некоторых чипов есть документы с префиксом MG****, которые описывают процесс миграции с STM чипа на их.

Интро

Очевидно, что замена микроконтроллера в рабочем проекте для компании/самозанятого/хобби-разработчика должна быть максимально гладкой, чего можно достичь, если не нужно переразводить, отлаживать и заказывать новую партию плат в давно устоявшийся проект. Для этого используются pin-to-pin(пин-ту-пин) совместимые микросхемы. Речь не только о микроконтроллерах – большое количество китайских микросхем, от менее известных производителей, делается похожими не только по характеристикам и выводам, но и наследует некоторые особенности в названии. Так же и у Artery. AT32F407 задумывался(как мне видится) как замена для популярного STM32F407. Однако, у семейства AT32F407 (в отличие от STM32F407) есть микросхемы в 64 выводном корпусе, но нет в 144 выводном (по крайней мере, во время написания данной заметки).

Все же не стоит ориентироваться только на названия семейства микроконтроллера при выборе – чем заменить. Взаимозаменяемые MCU можно найти из разных семейств – вот, как пример, показана замена STM32F405 на AT32F423

AT32 Work Bench

Первое, что наводит на мысли об STM – это их кодогенератор/проектогенератор CubeMX. Artery не стали отставить в этом плане и сделали свой кодогенератор AT32 Work Bench. Пару месяцев назад для кодогенерации были доступны только два семейства микроконтроллеров – F423 и F421. Буквально на днях (2024/02/01) вышло обновление, которое расширило список семейств до 11 штукAT32F402, AT32A403A, AT32F403A, AT32F405, AT32F407, AT32F413, AT32WB415, AT32WB415, AT32F421, AT32F423, AT32F425.

Интерфейс программы очень сильно напоминает CubeMX, но есть отличия

Из минусов:

  1. К кодогенератору нужно в отдельном окне нужно подключать .zip-архив с сырцами для данного контроллера

  2. Нет окна с даташитами и RM, которые можно скачать кликом

  3. Отсутствует легкое подключение third-party библиотек

Из плюсов:

  1. Не требует установки и доступа в интернет

  2. Настройка clock-tree такая же как и в CubeMX – удобно

3. Очень удобное нововведение от Artery – "тайминги" для таймеров пересчитываются прям при настройке таймера!

Похожее есть и для CAN. (В прошлом обновлении было и для i2c, но разработчики выпилили)

4. Генерация проекта, как и в CubeMX, поддерживается для большинства популярных IDE (AT32_IDE, Eclipse, IAR, Keil)

А также, можно генерировать отчет. Достаточно лаконичный, очень симпатичный отчет по всему проекту. С ножками, таймингами и прочим. Вот для примера приложу:

AT32F407VGT7_Скачать

С кодогенератором закончили, перейдем к IDE от Artery

AT32 IDE

Допустим, на предыдущем шаге мы сгенерировали проект и хотим его открыть.

Чтобы открыть проект в AT32 IDE нужно выбрать Open Projects…

Перейти внутри папки проекта в папку AT32_IDE

Отобразиться наш проект. Осталось нажать Finish

В итоге в списке проектов отобразиться наш импортированный проект

Если же мы не хотим пользоваться кодогенератором, то можно создать проект из AT32 IDE. Жмем New->C/C++ Project

Выбираем C Managed Build, жмем Next

Откроется окно с выбором платформы, выбираем желаемое семейство, вводим имя проекта и жмем Next

Тут выбираем сам контроллер и выбираем тип отладки. Я выставил SWO. Жмем Next

В следующем окне, я полагаю, удобная фича – можно настроить названия папок в проекте, если к каким-то определенным уже привыкли и придерживаетесь определенной структуры проекта. Жмем Next

В следующем окне можно сразу настроить конфигурации сборки. Жмем Next

В последнем окне выбираем компилятор (идет с AT32 IDE) и жмем Finish

Далее AT32 IDE создаст проект и наполнит его базовыми файлами

В итоговом проекте есть некоторые отличия, но они незначительны. На мой вкус у кодогенератора получилась более удобная структура для стартового проекта. Далее по тексту, будем работать с проектом из кодогенератора

Попробуем собрать!

Нужно создать конфигурацию запуска. Нажимаем на стрелку и выпадает окно. Жмем New Launch Configuration…

Выбираем тип конфигурации и GDB AT-Link Debugging. Жмем Next

Далее откроется знакомое многим окно конфигурации запуска. Жмем Finish

Осталось выбрать созданную конфигурацию в выпадающем списке и нажать кнопку молотка. Запустится сборка проекта. В консоль будет выводиться информация и сборке

Если все собралось – отлично, у нас все готово, чтобы продолжить разработку проекта

Пару слов об отладке

Отладка в AT32 IDE работает точно также как и в любой eclipse-based IDE. Есть ограничение на количество точек останова. Описание периферии во вкладке Peripherals чуть более скудное, чем у CubeIDE (SFRs), но вполне удобное.

Управление ходом программы классическое, расположено вверху

Дальномер AJ-SR04M

AJ-SR04M представляет собой сборку с ультразвуковым датчиком дальности. Модуль дальномера может работать в 5 режимах

По-умолчанию включен первый режим – посмотрим на него

Работает достаточно просто – посылаем сигнал триггера длиной более 10 мкс и ждем сигнал на ножке ECHO, куда будет выдаваться расстояние в виде длительности импульса

Что нужно от микроконтроллера? Один таймер будет в режиме медленного ШИМ генерировать сигнал на вход триггера. Второй будет считать продолжительность сигнала ECHO в микросекундах. Не буду сильно мудрить и сделаю вход от ECHO внешним прерыванием, где буду проверять полярность сигнала и получать время от второго таймера. Полученное время умножаем на скорость звука в воздухе (в см/мксек, что примерно равно 0.034) и делим на два (туда-обратно) – получаем расстояние в сантиметрах. Данные будут отправляться в UART2 на скорости 115200

Для описания ножек и периферии, приложу сгенерированный отчет с AT32 Work Bench (да, понравилось)

AT32F423VCT7_Sonar_Скачать

Подключение у меня получилось следующее:

Подключение модуля УЗ-дальномера
Подключение модуля УЗ-дальномера

UART-USB переходник подключен ко второму UART. Тут используется ножка TX (PA2), которая подключена к TX на переходнике

UART-USB переходник
UART-USB переходник

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

/**
  * @brief  this function handles EXINT Line [15:10] handler.
  * @param  none
  * @retval none
  */
void EXINT15_10_IRQHandler(void)
{
  /* add user code begin EXINT15_10_IRQ 0 */
    static uint32_t val = 0;
    static float distance = 0;
    static char tmp[150] = {0};
    if (gpio_input_data_bit_read(GPIOA, GPIO_PINS_10) == SET){
        tmr_counter_value_set(TMR2, 0);
    }
    else{

        //compute width
        val = tmr_counter_value_get(TMR2);
        distance = val * 0.034 / 2;
        sprintf(tmp, "%d\n\r", (int)distance);
        int i = 0;
        while (tmp[i] != 0){
            if (usart_flag_get(USART2, USART_TDBE_FLAG) == SET){
                usart_data_transmit(USART2, (uint16_t)tmp[i]);
                i++;
            }
        }

    }
    exint_flag_clear(EXINT_LINE_10);
  /* add user code end EXINT15_10_IRQ 0 */
  /* add user code begin EXINT15_10_IRQ 1 */

  /* add user code end EXINT15_10_IRQ 1 */
}

/* add user code begin 1 */

/* add user code end 1 */

Собираем, прошиваем, подключаем и видим следующее

Вполне похоже на высоту до потолка с сидячего положения. Точность у сенсора неплохая, но есть ограничения на дальность – как в минимум, так и в максимум.

На этом всё, немного познакомились с Artery и AT32, сделали тестовый проект чтобы пощупать их драйвера и IDE. Удачных проектов и экспериментов!

Ссылка на проект

Теги:
Хабы:
Всего голосов 13: ↑13 и ↓0+13
Комментарии5

Публикации

Истории

Ближайшие события

Конференция «IT IS CONF 2024»
Дата20 июня
Время09:00 – 19:00
Место
Екатеринбург
AdIndex City Conference 2024
Дата26 июня
Время09:30
Место
Москва
Summer Merge
Дата28 – 30 июня
Время11:00
Место
Ульяновская область