8L-Курс, Часть 1 - Hello светодиод!

← Часть 0 — Начало Содержание Часть 2 — GPIO →

Внимание!
Если вы читали статью про STM8L-модуль, а конкретно часть про быстрый старт, то вы увидите здесь кучу знакомого текста и читать вам будет немного скучно. И не говорите потом, что вас не предупреждали.

В прошлой части у нас был обзор и немного теории (надеюсь достаточно для того, чтобы понять что вообще происходит), а в этой будет практика. Мы разберемся с подключением и прошивкой МК, поставим и настроим IAR, напишем в нем простенькую мигалку светодиодом и запустим ее.

Кроме того, в этой части я хочу учинить жестокую расправу над неопределенностями: у нас есть три варианта железа: одинокая STM8L-Discovery с отладчиком, PINBOARD2+STM8L модуль (без отладчика, но с бутлоадером) или discovery + PINBOARD2. Я все устройства и примеры буду собирать на пинборде, но для тех, кто пользуется другой железкой, оставлю для каждого примера схему, чтобы можно было собрать на чем угодно.

Начнем с пары STM8-Discovery + PINBOARD2

На платах discovery есть отладчик ST-Link (немного ущербный, правда, т.к. нормальный ST-Link еще и STM32 отлаживать умеет). Линии SWIM и RST от него выведены на штыри на краю платы:

Но отладчик подключен к МК, который стоит на discovery, а поэтому для того чтобы он мог прошивать внешние МК, надо
— Для STM8L-Discovery: снять джамперы на противоположной от разъема SWIM стороне (они подписаны DISCOVERY и ST-LINK)
— Для STM8S-Discovery (и SVL туда-же): отпаять перемычки SB1 и SB2 около разъема SWIM. Или просто разломать плату надвое! THIS IS SPAAARTAA! (Я не шучу, там прорези поперек платы как-раз для того, чтобы отломать отладчик от макетки с МК).

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

Для тех, у кого только дискавери, никаких особых приготовлений не требуется. Полнейший Plug&Play.

А тем, у кого есть PINBOARD2 с STM8L модулем, но нет discovery, придется использовать бутлоадер для прошивки МК. Не бойтесь, это не страшно :) Для начала надо подключить UART от FT2232 к МК. Какой канал использовать (A или B) — не важно, лишь бы вы знали какой COM порт какому каналу соответствует. Я использовал канал B, джамперы установлены так:

Теперь бут может общаться с компом. На этом можно было-бы остановиться, но есть одна проблема — бутлоадер после запуска ждет команды всего секунду, а потом запускает прошивку, которая лежит во флеш памяти. Иначе говоря, надо нажать кнопку сброса и в течении секунды после этого успеть тыкнуть кнопку в программе-прошивалке. Привыкшие к таким вещам геймеры с отточеной реакцией даже носа не поморщат, а кому-то может и неудобно будет.
Вот примерно с такими мыслями (и планом решения) я постучался к Vga . Через три дня и три ночи (не правда) Vga явил работающий хак. Суть в том, что перед тем, как послать стартовый байт бутлоадеру, программка дергает пин DBUS4 (DTR) из высокого уровня в низкий — затем снова высокий — ждет 200мс — и только потом посылает старт-сигнал. DBUS4 подключается проводком к пину RST на МК.

Таким образом, программа сама сбрасывает МК перед тем, как обращаться к бутлоадеру. А значит, при прошивке нам вообще не понадобится трогать плату — только щелкать мышкой по окошкам. Удобно! (для самых ленивых, далее будет показано как вообще не щелкать мышкой :)

А сейчас разберемся с софтом

Для работы с STM8 я использовал IAR. Есть еще COSMIC, который многие хвалят, но я особой разницы не вижу. Да и перескочить на другую IDE в случае необходимости не сильно сложно.

Живет он (она?) вот тут. Пробная версия имеет ограничение 8 килобайт на выходной код (то есть 24к памяти у нас будут валяться без дела в любом случае), но для наших целей хватит и этого.

Выбираем версию kickstart и попадаем на долгую и скучную регистрацию. Вообще-то оно где-то на рутрекере лежало, поэтому если лень регистрироваться — поищите там. После регистрации (всякие адреса/явки/пароли можно заполнять произвольной фигней) на почту падает письмо со ссылкой. На странице по ссылке нас будет ожидать ссылка на скачивание и лицензионный ключ (который желательно не потерять до установки). Весит софтина 113мб, и качаться будет неспешно. Можно попить кофе.

Сразу после начала установки у нас попросят номер лицензии. Копируем его со страницы скачивания и продолжаем. На следующем этапе просят лицензионный ключ. На этом вся морока с лицензиями официально закончена. Можно снимать повязку на глаз и спускать «веселого роджера» :)

Тип установки можно оставить полным, потому что в «выборочной» выбирать-то особо нечего.

Ставится быстро, даже кофе попить не успеете (при скачивании надо было!). После установки самого IAR, вам предложат поставить драйвера для ST-Link и STIce — соглашайтесь. Они ставятся тоже очень шустро и даже если дискавери у вас нету, на будущее пригодится.

Запускаем. Нас приветствует главное окно IAR.

Попробуем создать проект?

Лезем в менюшку Project -> Create New Project. Нам на выбор дают несколько шаблонов для проекта:

Выбираем C. IAR поинтересуется куда сохранить и как обозвать проект. Называйте как угодно, у меня оно зовется «example1_blink».

Теперь перед нами проект. Точнее его заготовка:

Слева панель workplace со структурой проекта. Собственно, пока там только main.c и выходной файл. Правый клик на названии проекта (в workplace), выбор Options, и мы попадаем в настройки проекта. Там в первую очередь выбираем наш МК: STM8L152C6 для тех кто играется с discovery, и для STM8L152K6 для владельцев пинборды.

В разделе C/C++ Compiler на вкладке Optimization можно настроить оптимизацию кода. Это так, на будущее, чтобы не искали где оно там запрятано. А пока можно оставить Low.

В разделе Output Converter можно (а для тех, кто будет прошивать через бутлоадер — нужно) настроить генерацию выходного кода в формате Intel Extended. Файлик .hex, который надо будет отдать программе-прошивалке, находится в папке с проектом в подпапке /Debug/Exe. И называется так-же как проект.

А для тех, кто работает через ST-Link на discovery, есть раздел debugger. Там вместо Simulator надо выбрать ST-Link, чтобы IAR работал с аппаратным отладчиком, а не с симулятором.

С настройками проекта закончили, теперь надо подключить заголовочный файл с описанием периферии, регистров и т.д.

В самое начало main.c втыкаем строку
#include "iostm8l151k6.h"

(кто работает на дискавери — пишет iostm8l151с6). Или не пишет — работать все равно будет, т.к. МК почти одинаковые :)

Ради праздного любопытства, можно нажать правой мышкой на название файла в коде и выбрать Open «iostm8l151k6.h», чтобы посмотреть что там вообще внутри. А внутри дефайны регистров, структуры для доступа к отдельным битам, маски для установки битов… в общем 300кб такой фигни:
/* Port A data output latch register */
#ifdef __IAR_SYSTEMS_ICC__
typedef struct
{
  unsigned char ODR0        : 1;
  unsigned char ODR1        : 1;
  unsigned char ODR2        : 1;
  unsigned char ODR3        : 1;
  unsigned char ODR4        : 1;
  unsigned char ODR5        : 1;
  unsigned char ODR6        : 1;
  unsigned char ODR7        : 1;
} __BITS_PA_ODR;
#endif
__IO_REG8_BIT(PA_ODR,      0x5000, __READ_WRITE, __BITS_PA_ODR);


Это описание структуры для доступа к регистру ODR порта A (для знакомых с AVR — то-же самое что регистр PORT у них).
Можно обращаться так
PA_ODR = 0x42;

Или, к отдельным битам, так:
PA_ODR_bit.ODR2 = 1;

А так-же сравнивать (хотя регистр ODR тут плохой пример — в него обычно пишут, а не читают):
if (PA_ODR_bit.ODR2 == 1)


— Теперь, наверное можно приступать к кодингу? — Спросит нетерпеливый читатель
— Да, можно — Отвечу я — Но перед этим можно сделать один хитрый финт ушами.

Посудите сами — проектов для этого МК по ходу курса (да и потом) придется насоздавать целую кучу. И настройки, которые мы сейчас меняли, придется так-же выставлять для каждого из них. Неудобно же. Может это можно как-то упростить? Можно: создать свой собственный шаблон проекта с заголовочным файлом и настройками.

Идем в папку «C:\Program Files\IAR Systems\Embedded Workbench 6.0 Kickstart\stm8\config\template\project» — там IAR хранит шаблоны проектов. В ней создаем подпапку и обзываем её, например 8L_examples (это название не будет отображаться в списке шаблонов, поэтому не суть важно). Теперь идем в папку с нашим проектом, берем оттуда файлы main.c и .ewp (называется так-же как проект), и кидаем их в папку с шаблоном. Файл .ewp переименовываем в templproj.ewp.

Теперь возвращаемся в папку, где лежат папки с шаблонами. Там есть файл C.projtempl. Делаем его копию и обзываем так-же как папку с нашим новым шаблоном (8L_examples). Открываем копию каким-нибудь блокнотом. Внутри надо поменять только название шаблона и его описание. Например, так:
<?xml version="1.0" encoding="iso-8859-1"?>

<template>
  <displayname>8L-examples</displayname>
    <description>STM8L example template (152K6)
    </description>
  <files>
    <file>$PROJ_DIR$\main.c</file>
  </files>
</template>

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

Вот сейчас можно уже приступить непосредственно к написанию кода. Ну точнее, раз мы еще ничего не знаем, а проверить работу очень хочется, к копированию кода:

#include "iostm8l151k6.h"

//Задержка на цикле. Выбрана на глаз и равна примерно половине секунды.
void SomeDelay()
{
  for (unsigned long delay_count=0; delay_count<300000; delay_count++);
};  

int main( void )
{
  PC_DDR_bit.DDR7 = 1; //Настраиваем 7й пин порта C на выход
  PC_CR1_bit.C17 = 1; //Переключаем его в режим push-pull (это когда он может выдавать 
  //и низкий и высокий уровень), а то по-умолчанию он прикидывается пинов с открытым стоком
  //(это когда может выдавать только низкий уровень, а вместо высокого переключается на вход)
  
  while (1) //В цикле будем мигать светодиодом
  {
   PC_ODR_bit.ODR7 = 1; //Переключаем пин в высокий уровень - светодиод горит
   SomeDelay();  //Задержка в 0.5 сек
   PC_ODR_bit.ODR7 = 0; //Пин в низкий уровень - светик тухнет
   SomeDelay();
  };
  
  return 0;
}


Кстати, внимательный читатель уже сейчас заметил (а остальные заметят после прошивки), что на STM8L модуле для PINBOARD2 пина C7 нету. Поэтому, мигать там ничего не будет. Это не я пожадничал при разводке, а STM при проектировании МК в корпусе LQFP32. Так-что придется поправить программу для мигания другой ножкой. Например, D7 (которая джампером подключается к набортному светодиоду). Тогда надо поменять все обращения к регистрам порта C на регистры порта D. Короче, первая строка main() теперь будет выглядеть так:
PD_DDR_bit.DDR7 = 1;

Ну и далее в том-же ключе.

Пробуем прошить?

Если вы работаете через ST-Link, то достаточно просто нажать Ctrl+D (или выбрать в менюшке Project -> Download and Debug). До этого, естественно, надо правильно подключить ST-Link (если работаете с МК на Pinboard). Программа загрузится в память МК, запустится отладчик, и остановится на первой строке из функции main(). Теперь можно пошагать по коду кнопкой F7, наблюдая за тем, как светодиод на плате то загорается — то тухнет. Или можно запустить код на выполнение клавишей F5.

После того, как наиграетесь с отладкой, ее можно завершить, нажав на кнопку с крестиком.

После завершения отладки, МК перезагрузится и продолжит работать. Это вам на заметку, на случай если когда-нибудь будете делать устройство с какой-то хитрой инициализацией при старте (установка сервомоторов в начальное положение или что-то в этом духе) — сразу после закрытия отладчика инициализация пройдет заного. Иногда это напрягает. Поэтому надо либо прижимать RESET к земле, чтобы МК лишний раз не запускался, либо делать в самом начале программы цикл с ожиданием какого-то события (нажатия кнопки, например), а уже после него — инициализация и прочий код.

Для тех же, кто юзает бутлоадер для прошивки, все будет тоже очень просто: запускаем FlashLoader Demonstrator (вот тут можно взять «хакнутый»). Она приветствует нас окошком настроек:

Тут выбираем COM порт, а остальное оставляем как есть. Бутлоадер, кстати, сам определяет нужную скорость — круто, правда?

Жмем next и, если всё ок, то программулина пожалуется на то, что не может найти файлик с разметкой памяти для нашего МК.

Выбираем его сами из списка вверху — STM8L_32K. Жмем next. Далее прошивалка предлагает нам выбрать нужное действие:

Ставим галочку на Download to device и выбираем для заливки hex файл, который выдала IAR (напоминаю, лежит в папке с проектом в /Debug/Exe). Жмякаем next и наблюдаем за ходом прошивки.

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

Но кроме милого и дружелюбного графического интерфейса, у нас есть суровая консольная прошивалка. А ее можно прикрутить к IAR, чтобы прошивка происходила по одному нажатию кнопки.

Консольная утилита лежит в той-же папке, что и все остальное. Называется "STMFlashLoader.exe" (а графическая — STMicroelectronics flash loader.exe). Рядом, в папке Doc есть файлик UM0462.pdf в котором можно найти описание всех команд, которые понимает прошивалка. Поэтому распинаться я тут не буду.

Для того, чтобы прикрутить ее к IAR, идем в меню Tools -> Configure Tools. Там жмем "New" и заполняем поля:

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

В поле Command прописываем полный путь до нашего консольного прошивальщика. У меня он лежит в «C:\Program Files\FlashLoader\STMFlashLoader.exe»

В поле Argument пишем
-c --pn 13 -i _STM8L_32K -d --fn "$EXE_DIR$\$PROJ_FNAME$.hex" -r --a 8000 -v

Цифры после --pn это номер COM порта, через который идет общение с бутлоадером, он у вас скорее всего будет другим.
То, что после --fn это путь к hex файлу. Вместо $EXE_DIR$ IAR подставит папку с исполняемыми файлами проекта, а вместо $PROJ_FNAME$ — имя проекта. Да, если вы зачем-то при настройке генерации hex файла дали ему другое имя, то тут надо будет поправить. А иначе — оставить как есть.

-r --a 8000 означает запуск прошивки с адреса 0x8000 (это начало памяти программ). Если убрать этот ключ, то прошивка запустится только после сброса МК. В некоторых случаях это может быть удобно.

С консольной прошивалкой есть одна беда — после выполнения прошивки и запуска ее, программа не завершается, а висит и настойчиво просит «press any key». А нам будет удобнее, если она сама закроется. Как быть? Можно поправить исходники (лежат там в папке Src), но у меня visual studio не было, поэтому пришлось искать особо хитрый метод. И он нашелся. В программе предусмотрена обработка параметра -v, но обработчик пустой, и если параметр в самом конце, то программа завершается безо всяких вопросов. Вот такая вот история последнего ключа в строке :)

Теперь тыкаем OK и лезем в менюшку tools: там появился пункт bootload. Если его нажать, то запустится консольная прошивалка и зальет прошивку в МК.

Чтобы было совсем удобно, можно закрепить за командой прошивки какое-либо сочетание клавиш. Для этого идем в tools -> options -> Key bindings. Там из списка menu выбираем Tools и прописываем хоткей для нашей команды:

С такой консольной примочкой и хаком от Vga прошивка камня просходит вообще без лишних телодвижений, одним нажатием кнопки. И это круто!

Ну вот, на сегодня пожалуй все. В следующий раз разберемся что-же мы сейчас натворили, и как это все работает — будет разбор GPIO. Оставайтесь на линии!

Проект для IAR с нашей мигалкой

← Часть 0 — Начало Содержание Часть 2 — GPIO →
  • +7
  • 11 декабря 2012, 16:56
  • dcoder
  • 1
Файлы в топике: 1_FirstSteps.zip

Комментарии (37)

RSS свернуть / развернуть
Вот ..., появится ли когда курс типа Hello TFT панель…
-1
  • avatar
  • valio
  • 11 декабря 2012, 20:26
да да и без своего контролера — чтоб через дма формировать изображение. а с контролером неинтересно — ногодрыг везде одинаков
0
То есть желаете курс «контроллер ЖК матрицы для чайников»
Вы когда-нибудь отдирали плату контроллера от TFT матрицы? У нее десятки выводов по нескольким сторонам, а на больших и сотни. Да еще и нанесены прямо на стекло. Как предложите к ним подключаться?:)

«А следующим шагом будет подсоединить 90*120 контактов к нашим проводкам»
0
Надо полагать, FogBRD имеет в виду не голую TFT матрицу (таких и не бывает), а с драйверами с интерфейсом MIPI DPI (такие обычно стоят во всякой мобильной технике вроде планшетов). В отличие от контроллера драйверы имеют только преобразователь интерфейса и драйвер стекляхи, поэтому их нужно кормить данными с частотой Width*Height*Framerate (и даже чуть больше). Обычно этим занимается отдельный контроллер (TCON, в случае мобильных устройств он обычно встроен в SoC в качестве одного из выходных интерфейсов встроенного видеоадаптера).
0
Совершенно верно.
Цикл статей расчитан на умение пользовать ресурсами я так понял. ну вот и показали б как пользовать дма.
0
Насколько я знаю, ресурсов там просто нет. Единственное, что в приемлемой скоростью справляется с TFT панелью — STM32 с FSMC. Дешевый STM32F100C4 тоже заставляли работать на панельку, но там были большие ограничения, да и выдавало оно с десяток кадров в секунду на 320х240, а большинство панелек хотят 60Гц и при недостаточном рефрешрейте просто не работают.
0
есть полно экранов от мобил имеющих неплохую диагональ. стоят дешево а вот применить бы хотелось.
ну развернули же атмега на панель 320х240. почему этот стм8 не развернет. тем более старшие модели с тактовой 24мгц
0
Экраны от мобил обычно с мозгами. И дай линк на проект, где атмега крутит безмозглую TFT панельку.
0
панелька 320х240 5" стоит 12уе. альтернативы я так понимаю нет при такой диагонали иметь мозги.
www.sat.cc.ua/myavr.html
0
А, там внешняя память и проц с ее поддержкой. Среди STM'ок это STM32 с FSMC. На них дисплей завести можно. На остальных мешает то, что шины памяти только внутри, соответсвенно и DMA работает только внутри кристалла. Да и банально недостаточно ОЗУ для хранения фреймбуфера.
0
Спасибо за статью.

А чем «хакнутый» FlashLoader Demonstrator отличается он обычного? Он же вроде и так бесплатный?
И еще, почему оптимизатор IAR не выбросил пустой цикл

for(unsigned long delay_count=0; delay_count<300000; delay_count++);


Особенности оптимизатора или у Вас в проекте просто отлучена оптимизация?
0
  • avatar
  • e_mc2
  • 11 декабря 2012, 22:08
Прочтите статью. Ответы на оба ваших вопроса в ней есть.
0
Упс, понял.
Vga явил работающий хак.
Я думал речь идет о хаке как о нахождении оригинального решения проблемы, а FlashLoader так ведет себя всегда. Не понял, что Vga действительно модифицировал программу.
А касательно опций оптимизации – действительно провтыкал.
0
А чем «хакнутый» FlashLoader Demonstrator отличается он обычного? Он же вроде и так бесплатный?
Ресет дергает прежде чем шить. «Хакнутый» потому, что этот функционал пришлось через жопу добавлять (ST зажопила сорцы и гуя, и собственно библиотечки общения с бутом, есть только сорцы для консольной утилитки и враппера к библиотеке).
Алсо dcoder уже писал про этот «хакнутый FlashLoader».
+1
Алсо dcoder уже писал про этот «хакнутый FlashLoader».

Что-то у меня не получается найти (локальный поиск ничего не находит, а у dcoder’а очень много стаей). Еcли не тяжело, дайте, плиз, ссылку.

Вам, однозначно, респект.

А как Вы внесли изменения? Дизассемблирование кода и бинарный патч?
0
Что-то у меня не получается найти (локальный поиск ничего не находит, а у dcoder’а очень много стаей).
Вот. Впрочем, мне тоже листанием его статей искать пришлось) Хотя Lifelover рекомендует использовать google("%searchword% site:we.easyelectronics.ru").
А как Вы внесли изменения? Дизассемблирование кода и бинарный патч?
Нет, все куда проще. Вокруг скомпиленной библиотечки бутклиента зачем-то есть еще библиотека-обертка, она состоит из функций вида wrapfoo(args){return foo(args);}. Вот там я выбрал пару подходящих функций и добавил в них код дергания пином. Кстати, в dll-ке где-то есть структурка из четырех булевых значений, предваренная строкой-маркером. Там можно гексредактором выбрать, как функция перехватывается, какую ножку и в какую сторону дергать)
#ifdef RESET_MCU_HACK
const struct
{
	char MARKER[21];
	char UseRTS;
	char Invert;
	char HackComOpen;
	char HackInitBL;
} resetMCUHackOptions = {{'R', 'E', 'S', 'E', 'T', '_', 'M', 'C', 'U', '_', 'H', 'A', 'C', 'K', '_', 'M', 'A', 'R', 'K', 'E', 'R'}, 0, 0, 1, 0};
#endif
+1
Кстати, о консольном прошивальщике. Его можно использовать с немодифицированной dll-кой (ну или отключить хак в модифицированной, обнулив гексэдитором 4 байта после RESET_MCU_HACK_MARKER). Там есть команды управления RTS/DTS и команда pause (в модифицированном мной, в оригинале паузы нет). Так что можно добавить в начало командной строки -Dts --Hi -Pause 200 -Dts --Lo -Pause 100 (или то же самое, но Hi и Lo поменять местами, не помню, еще можно вместо -Dts использовать -Rts).
+2
  • avatar
  • Vga
  • 12 декабря 2012, 03:44
0
ex.ua вроде работает только с Украинскими IP, проверить нужно.
0
А что толку в IAR'е для ARM?
0
По поводу ST-Link, не нашел упоминания о STM32VL-Discovery. Эти платы рассылались массово, многие их имеют. Возможна связка STM32VL-Discovery + PINBOARD2?
0
ST-LINK'и на Discovery урезаны и поддерживают только то семейство, которое установлено на плате. Так что STM32VL DISCOVERY с PB2 использовать можно, но только с процессорным комплектом STM32, вместо родного для PB2 отладчика CoLink. А для процессорного комплекта STM8 подходят только DISCOVERY семейства STM8 — на сегодня это STM8S, STM8SVL, STM8L. Первые два варианта удобней, зато у третьего есть стеклышко в комплекте.
0
Покопал в инете, нашел на тут же на форуме: Your text to link...
Если коротко — "для STM8 нужен SWIM, а тут SWD".
0
Суть та же. На STM8*-DISCOVERY залочен JTAG (он же SWD), на STM32*-DESCOVERY залочен SWIM и только в самостоятельном ST-LINK разлочены оба интерфейса.
0
Позволю себе поправить: на STM8 — SWIM а на STM32 — SWD. К тому же JTAG и SWIM/SWD совсем разные интерфейсы.
0
SWD, применительно к АРМам — двухпроводная версия JTAG, а сам ST-LINK в варианте STM32 называется ST-LINK JTAG, даже если выведен только SWD.
Позволю себе поправить: на STM8 — SWIM а на STM32 — SWD.
Перечитай внимательней. Я сказал, что на STM8-DISCOVERY JTAG залочен. Т.е. работает только SWIM.
0
Дико извиняюсь, что-то тупанул )
0
Кстати, если почитать топик повнимательней, то там есть забавный момент — по мнению STM, STM8S-DISCOVERY умеет программировать только STM8S, а STM8L — нет. Однако ж, прошивок ST-LINK'а существует всего три — ST-LINK JTAG, ST-LINK SWIM (именно эта прошивка на всех STM8 дискавери) и ST-LINK JTAG/SWIM. По видимому, STM подразумевает, что из ST-LINK'ов на дискавери выкинут транслятор уровней и потому он не работает с рассчитанными на другие напряжения сериями МК.
0
Не знаю как у 8-к, из них имею только STM8L-DISCOVERY и другие МК из этой серии шить не пробовал, а вот на STM32F4-DISCOVERY цеплял F103 чип, его и видит и шьёт его нормально.
0
А в JTAG'е и в ST-LINK согласователей нету. Они видимо все поголовно от 3.3В работают. А вот STM8 разных серий — от 1.65 до 5.5В, поэтому в полноценном стоит буфер 74LVC2T45 (или как-то так).
0
А где в IAR в режиме симулятора (без железа) посмотреть число тактов, время выполненея и прочие вренные характеристики проекта?
0
В окошке регистров (View/Registers, в нём из списка выбрать «CPU Registers») есть переменные:
— CYCLECOUNTER — количество тактов с момента сброса;
— CCSTEP — количество тактов на последнее действие (зависит от режима и самого действия);
— CCTIMER1 и 2 — просто счётчики тактов, которые пользователь может обнулять сам (можно использовать для счёта интервалов и т.п.).
0
Последние таймеры можно не только обнулять, но устанавливать свои значения.
0
Че то я не понял: для новых мк VL таких как STM8S003 например, вообще нет файла iostm8s003x.h с прямыми забитыми дефайнами типа PB_ODR?

Предлагают в файле stm8s.h заинклудить нужный контроллер для подключения соответсвующих дефайнов, но в них уже используется SPL, а там уже все через структуры: вместо PB_ODR придется делать через GPIOB->ODR.

Может все таки есть этот файл iostm8s003x.h? Качал примеры для stm3sVldiscovery и смотрел в папках Cosmic и STVD — для других семейств есть а для s00x нет.
0
Там вроде бы все адреса со 103-ми совпадают. По крайней мере GPIO, UART, таймеры, система тактирования — это то, что проверил на практике.
0
(upd) Там вообще всё совпадает. Вот, к примеру, содержимое хедера для STM8S003F3 из STVD последней версии:
/* STM8S003F3.h */
#ifdef MCU_NAME
#define STM8S003F3 1
#endif
#include "STM8S103F.h"
0
Да. Правда лежит такое в \STMicroelectronics\st_toolset\include\
Непонятно как проглядел. Может после того как новую версию STVD поставил и хедеры новые там появились.
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.