STM32 и порт FreeModbus (RTU Slave + Master) на HAL

Поделюсь своим простым портом мастера и слейва FreeModbus на STM32 с использованием HAL без костылей. Вроде бы и простая тема, но какие гайды бы я ни видел, они или устаревшие уже, или с какими-либо костылями (хотя заявляется, что, мол, всё просто и на HAL), более того, гайдов с мастером я не видел вообще.

Сразу признаюсь, я воспользовался открытой реализацией мастера на FreeModbus от китайского программиста Armink, написан мастер был для китайской RTOS RT-Thread, но возможна работа и без RTOS, я просто подшаманил файлы мастера, а также немного подшаманил оригинальную реализацию FreeModus.

B93-0

Разбор порта, примеры работы RTU версии и ссылки на исходники как моего порта, так и оригинальные источники, всё под катом:

Читать далее

CV-Meter — Простой проект (начало)

Решил поделиться неторопливым ходом разработки своего небольшого проекта, который будет полезен для любой категории разработчиков. Это комплексный проект, который состоит из 3-х более мелких проектов, а именно: софт для ПК (скриншот которого ниже), различное железо измерителей CV и, собственно, прошивки для этих CV-измерителей. Обо всём постараюсь по порядку рассказать и показать, в каком состоянии оно сейчас находится, а также уже можно посмотреть мой говно-код, собрать простую версию измерителя на коленке и опробовать всё самому.

B90-1

Читать далее

Intel Quartus Prime + Visual Studio Code

Нано-заметка о том, как использовать Visual Studio Code со всеми его достоинствами (и недостатками) в качестве продвинутого редактора кода, который будет вызываться по умолчанию из Intel Quartus Prime (любой версии).

B88-0

Заходим в Tools->Options, переходим в раздел General->Preferred Text Editor:

B88-1

Ставим Custom в качестве параметра Text Editor. Прописываем здесь путь к Visual Studio Code (заместо %PATH_TO_VSCODE%) со следующими параметрами:

"%PATH_TO_VSCODE%\Code.exe" -r -g %f:%l

Примечание: параметр -r задаёт открытие файлов в активном (единственном) окне Visual Studio Code, и его можно убрать, тогда, если уже была открыта Visual Studio Code с каким-либо проектом, файлы из Quartus Prime будут открываться в новом окне Visual Studio Code.

Вот и всё, теперь все операции с файлами будут передаваться Visual Studio Code, что, как по мне, намного удобнее.

Читать далее

Visual Studio Code и ModelSim

В заметке ниже описание того, как сделать быстро вызываемую симуляцию в ModelSim из Visual Studio Code для тестбенча самописного IP.

b85-0

Подготовка Visual Studio Code

Всё в целом аналогично Visual Studio Code и Icarus Verilog, только без установки Icarus Verilog, поэтому повторяться не вижу смысла.

Тестовый проект

В качестве тестового проекта будет выступать моё недоделанное IP для HyperRAM — HyperRAM_Controller. Симуляцию будем проводить на тестбенче оттуда же.

Читать далее

Visual Studio Code — написание и отладка прошивок для ARM Cortex-M

Давно хотел это опробовать, да руки не доходили. Наконец-то освободился и решил это освоить — превращение Visual Studio Code в IDE для написания и отладки прошивок под микроконтроллеры, и как первые ласточки опробованы Wi-Fi SoC RTL8195AM и Cortex-M4 STM32F407VGT6. Пример-описание в статье будет для STM32F407VGT6.

B83-0

Подготовка Visual Studio Code

Для примера используется Visual Studio Code v1.33.1, на старых версиях могут быть небольшие отличия в плане конфигурационных json файлов.

Читать далее

Visual Studio Code — создание портативной версии

Visual Studio Code — мощный и легковесный редактор кода с возможностью установки расширений и превращения его в реальную IDE для всех популярных языков программирования с отладкой приложений или прошивок.

B82-0

В этой заметке же вкратце будет описано создание портативной версии редактора для windows, которая будет содержать все настройки, расширения.

Для создания портативной версии необходимо скачать .zip версию, распаковать в любое место, зайти в корень распакованной папки и создать папку data (здесь будет храниться пользовательский профиль настроек и расширения):

Читать далее

Visual Studio Code и Icarus Verilog

В этой статье попробую вкратце показать, как можно настроить Visual Studio Code для написания HDL кода на языках Verilog, SystemVerilog, настроить задачи для компиляции и симуляции работы, а также отображения результатов симуляции в GTKWave.

Написание HDL кода в Visual Studio Code по сравнению с Intel Quartus Prime порядком удобней и можно просто использовать Visual Studio Code как продвинутый редактор кода (если вам не нужна компиляция и симуляция из Icarus Verilog).

B67-0

Установка Visual Studio Code

Скачиваем Visual Studio Code для вашей ОС, в моём случае я скачал версию для Windows x64, ZIP архив (версия 1.27.1). Распаковываем\устанавливаем и запускаем, нас встречает главное окно редактора (да, да, это не полноценная IDE, как Visual Studio, а именно легкий редактор кода с возможностью кастомизации расширениями практически до уровня IDE) со стартовой страницей:

B67-1

Произведём минимальные настройки для удобства. Открываем настройки Visual Studio Code:

B67-2

В строке поиска вводим «theme» и переключаем на более приятную тему для вас (в моём случае это «Default Light+«):

B67-3

Далее в строке поиска вводим «titleBarStyle» и переключаем параметр Title Bar Style на «custom«:

B67-4

Этот параметр изменит вид меню и интегрирует само меню в заголовок окна, что экономит место и визуально редактор становится приятнее, пример этого решения в конце абзаца.

И последнее, в строке поиска вводим «minimap» и, собственно, отключаем её отображение:

B67-5

Миникарта — это вот что:

B67-6

Справа сверху отображается представление файла в мини-превью, иногда это удобно, иногда это место лучше освободить от этого превью (к примеру, открываете вертикально 2-3 файла, и это превью уже ощутимо кушает место) — тут кому как удобнее. :)

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

B67-7

Установка расширений для Visual Studio Code

Далее, чтобы удобно (подсветка, автодополнение) работать с Verilog, SystemVerilog, TCL файлами, нам необходимо установить расширения, поддерживающие эти типы файлов.

Открываем панель расширений (Ctrl+Shift+X):

B67-8

И в строке поиска вводим «ext:v«, ставим расширение Verilog HDL:

B67-9

Далее в строке поиска вводим «ext:sv«, ставим расширение SystemVerilog:

B67-10

Последнее, в строке поиска вводим «ext:tsl«, ставим расширение TSL:

B67-11

Вот и всё. После перезапуска Visual Studio Code установленные расширения будут активны. Да, ставить именно указанные расширения не обязательно, возможно, расширения от других авторов будут более удобны или с более богатым функционалом — не бойтесь пробовать (и пишите в комментариях, какие расширения Вам больше понравились и чем).

Пример работы расширения:

B67-12

Установка Icarus Verilog

Теперь нужно установить компилятор\симулятор HDL кода — Icarus Verilog. Скачиваем установщик под Windows (для остальных платформ смотрим Installation Guide), я скачал последнюю версию iverilog-10.1.1-x64.

При установке в целом сложностей не возникает, главное — ставьте полную версию с библиотеками:

B67-13

И не убирайте галочки добавления путей к GTKWave и в PATH:

B67-14

Ярлычки в меню Пуск и на рабочий стол я не ставил. Перезагружаем ПК или просто разлогиниваемся и снова заходим под рабочим пользователем — этого должно хватить, чтобы подхватились изменения в системной переменной PATH.

Примечание: у меня установщик никаких правок в PATH не внёс и я не сразу понял, почему не работает. Пришлось вручную внести в пользовательский PATH следующие две строки (Icarus Verilog установлен в C:\Data\iverilog\):

B67-19

Настройка проекта под Visual Studio Code

В качестве проекта возьмём counter.v и counter_tb.v из прошлой статьи «Запускаем ModelSim с Quartus Prime и без«, чего будет более чем достаточно.

Приведу их ещё раз. counter.v :

`timescale 1ns/1ns

module counter (
input wire reset,
input wire clk,
input wire [7:0]wdata,
input wire wr,
output reg [7:0]data
);
always @ (posedge clk or posedge reset)
if (reset)
data <= 8'h00;
else
if(wr)
data <= wdata;
else
data <= data + 8'h01;

endmodule

counter_tb.v :

`timescale 1ns/1ns
`include "counter.v"
module counter_tb();

reg reset, clk, wr;
reg [7:0]wdata;
wire [7:0] data_cnt;

counter DUT(reset, clk, wdata, wr, data_cnt);

always
#10 clk = ~clk;

initial begin
clk = 0;
reset = 0;
wdata = 8'h00;
wr = 1'b0;

#10 reset = 1;
#5 reset = 0;
#50;

end

initial begin
#400 $stop;
end

initial
begin
$dumpfile("out.vcd");
$dumpvars(0,DUT);
end

initial
$monitor($stime,, reset,, clk,,, wdata,, wr,, data_cnt);

endmodule

Итак, открываем корневую папку проекта, в которой и находятся файлы counter.v и counter_tb.v:

B67-15

Редактор теперь показывает открытую папку TEST и файлы в ней:

B67-16

Далее необходимо создать задачи компиляции и симуляции проекта (точнее Test Bench). Переходим в меню по пункту Terminal -> Configure Tasks, откроется следующий диалог:

B67-17

Потом:

B67-18

Создаём файл .vscode\Tasks.json из шаблона Others (нижний пункт). Собственно, после создания файла он должен открыться в редакторе — копируем туда следующий текст:

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Compile Verilog File",
            "type": "shell",
            "command": "cd ${fileDirname} ; iverilog -o ${fileBasename}.vvp ${fileBasename} ; vvp -N ${fileBasename}.vvp"
        },
        {
            "label": "Run GTKWave",
            "type": "shell",
            "command": "cd ${fileDirname} ; gtkwave out.vcd"
        }
    ]
}

Сохраняем. Это создание двух команд, первая — для компиляции, вторая — для отображения результатов симуляции.

Закрываем редактор, чтобы он подхватил изменения файла .vscode\Tasks.json при следующем запуске.

Примечание: Можно еще хоткеи настроить для задач, но это уже оставлю на вашу любознательность. ;)

Тест

Ну а теперь самое простое… Запускаем Visual Studio Code, папка с проектом будет открыта уже в воркспейсе (если не перемещали). Открываем файл counter_tb.v
т. к. это основной файл, с которого будет произведена компиляция и симуляция. Переходим в меню по пункту Terminal -> Run Task…, откроется следующий диалог с ранее объявленными задачами:

B67-20

Вначале выбираем Compile Verilog File и потом выбираем запуск задачи без сканирования лога выполнения:

B67-21

Успешно откомпилировано и создан файл для отображения симуляции работы (на идеальных компонентах):

B67-22

После успешной компиляции аналогичным образом вызываем Run GTKWave для просмотра результатов. Откроется основное окно GTKWave:

B67-23

Раскрываем слева экземпляр тестбенча и выделяем экземпляр DUT тестируемого модуля counter, внизу появятся его сигналы, просто перетаскиваем их в колонку Signals:

B67-24

Вот и всё! Надеюсь это будет полезно начинающим. ;)

Ссылки

  • Visual Studio Code — официальная страничка редактора кода;
  • Tasks in Visual Studio Code — полезное описание, как создавать свои команды;
  • Icarus Verilog — официальный сайт компилятора и симулятора Verilog;
  • Icarus Verilog Installation Guide — как скомпилировать и установить Icarus Verilog на любой платформе;
  • Icarus Verilog for Windows — откомпилированные бинарники Icarus Verilog (вариант для ленивых как я :D) в виде установщика под Windows.