На данный момент наиболее оптимальный язык для STM32 это Си, потому что баскома к сожалению нет, а mikroBasic оставляет желать лучшего.
Значит нужно писать на Си. На самом деле язык не такой сложный как может показаться на первый взгляд. Трудности могут вызвать разве что указатели.
Рассказывать все о языке слишком долго. Кому интересно можете прочитать какую-то книжку для "чайников" начинающих, например эту (читать до 139 страницы) http://rgho.st/private/6r8Bb9mdP/c94003 … 045ca42438
Здесь же напишу только кратко и проведу небольшое сравнение к кодом баскома.
Начну с типов переменных.
Тип | Количество байт | Аналог в баскоме |
uint8_t, int8_t | 1 | Byte |
uint16_t, int16_t | 2 | Word, Integer |
uint32_t, int32_t | 4 | Dword, Long |
uint64_t, int64_t | 8 | |
float (плавающая точка) | 4 | Single |
double (плавающая точка) | 8 | Double |
Все довольно просто. В целочисленных типах, число указывает сколько бит будет занимать переменная с этим типом, т. е. uint8_t - 8 бит или 1 байт. uint32_t - 32 бита или 4 байта. Если имя типа начинается с u это означает что тип беззнаковый (число не может быть отрицательным).
Оператор if (и другие условные операторы) похож на аналогичный в баском, но имеет особенности. Условие должно быть в скобках, т. е.
if (x>0)
Проверка на "не 0"
if (x != 0)
Проверка на равенство нулю
if (x == 0)
Внимание грабли! Если попытаетесь выполнить сравнение таким образом
if (x = 2)
то результат будет совсем не тот что ожидается. Вместо того чтобы сравнить число в переменой на равенство 2, в переменную будет записано это число.
Когда в результате проверки условия нужно выполнить одно действие, то можно код написать таким образом
if (x>0) x=0;
Или
if (x>0)
x=0;Или
if (x>0)
{
x=0;
}Если нужно выполнить несколько действий то следует использовать только вариант с фигурными скобками
if (x>0)
{
x=0;
y = y + 10;
}Эти фигурные скобки многим не нравятся и возможно даже вызывают недопонимание устройства кода. Если в двух словах, то они нужны для выделения кода в блок. В данном случае, они выделяют несколько действий в один блок который принадлежит оператору if.
Точка с запятой разделяет отдельные действия. Т. е. в баксоме они разделяются новой строкой, а в Си точкой с запятой.
Цикл for
for (x=0; x<10; x=x+1)
Опять же нужно все что касается цикла писать в круглых скобках. Сперва задается начальное значение счетчика цикла. Затем после точки с запятой условие окончания цикла, а после располагается код увеличения значения счетчика цикла. Как и в случае с оператором if, при одном действии его можно написать без фигурных скобок.
for (x=0; x<10; x=x+1) z = x * 10;
Или
for (x=0; x<10; x=x+1)
z = x * 10;Если действий больше одного, то необходимы фигурные скобки.
for (x=0; x<10; x=x+1)
{
z = x * 10;
m = x * z + 100;
}В отличие от баскома, при объявлении переменной не используется оператор Dim. Сделано проще. Сначала располагается тип переменной, а после сама переменная.
uint8_t x = 0;
Пример функции
uint8_t Test(uint8_t x)
{
return x + 10;
}И аналогичная на баскоме.
function Test(byval x As Byte) as byte Test = x + 10 end function
