STM Studio

Недавно открыл для себя новый программный инструмент от компании ST под названием STM STUDIO. Программа предназначена для визуализации значения какой либо переменной без остановки выполнения программы. К примеру в вашей программе есть какая-то переменная изменяющая своё значение с течением времени, и выхотите графически это отобразить. Конечно можно сделать так, чтоб контроллер выдавал вам эту переменную через UART, а со стороны компьютера принимать эти данные и строить график самописным софтом. Но на разработку всего этого  требуется время, проще использовать готовое решение от ST. Всё что нам нужно знать - это адрес переменной значение которой мы хотим наблюдать. Соглашусь, что возня с адресами это не очень то удобно, и у  нас есть отличный способ обойтись без этого. Каждый раз при компиляции создается elf файл откуда можно узнать адреса всех переменных используемых в программе. STM Studio умеет читать такие файлы. На рисунке ниже изображен график который был построен на основе переменной хранящей значение прочитанное из АЦП. Я быстро крутил резистор в результате чего получилась кривая синусоида:
 
stm studio
 
Предлагаю вам получить такую же :) Дла начала скачаем STM Studio у меня или на официальном сайте. Заранее извиняюсь за обменники, но не могу я держать всё это на своем хостинге, очень уж там места мало. После скачивания устанавливаем, для установки потребуется Java. Но оно я думаю у всех есть, если нет то качаем. После установки нужно произвести некоторые минимальные настройки. В меню выбираем Options -> Acquisition settings. Здесь нам требуется обязательно поменять word-variables format на тот что принят в STM32. Так же можно сделать так чтоб график почаще обновлялся (самое верхнее поле): 
 
acquisition settings
 
 
После этого возвращаемся в главное окно. Теперь нам нужно добавить переменную которую хотим мониторить. Я предлагаю заюзать тот же самый код из статьи про АЦП. Только нужно закомментировать строчки 
 
delay(adc_res);
Теперь нам нужно выяснить адрес переменной adc_res куда у нас записывается результат преобразрвания АЦП. Для этого запустить программу в режиме отладки, и в окне Expressions написать &adc_res. То что там будет напечатано это и есть адрес нашей переменной.
 
address of adc res
 
Как видно из картинки в моем случае адрес это 0x200003e0, сейчас он нам понадобится. Возвращаемся в окно программы STM Studio и добавляем нашу переменную не забывая при этом указывать правильный тип данных (unsigned 32 bit). По желанию и вкусу можно выбрать другой цвет. Таких переменных можно добавить множество. После добавления переменной надо перетащить её на график. Теперь зададим максимум оси Y. Я поставил 4000 но немного не рассчитал, лучше 4100:
 
stm studio add var
 
Перед нажатием кнопки запуска не забываем выбрать отладчик который мы используем и способ его подключения к контроллеру. В STM32VL Discovery у нас используется ST-LINK подключенный к контроллеру через SWD. Не забываем прошить сам контроллер, после чего запускаем и крутим резистор. Должно получиться что-то типа того что тут у меня. Если лениво подцеплять резистор то я написал код увеличивающий значение переменной на единицу в бесконечном цикле. В результате на графике мы увидим пилу. 

 
#include "stm32f10x.h"
void delay(void) {
  volatile uint32_t j;
  for (j=0; j!=4500; j++)
    ;
}
int main(void)
{
  uint8_t i=0;
  while(1) {
    i++;
    delay();
  }
}

Обратите внимание на то, что я поменял тип переменной на uint8_t. Следовательно в STM Studio следует так же выбрать правильный тип. Ну и адрес само собой тоже изменится. В завершении хочу сказать, что программа STM Studio это отличное дополнением к уже имеющимся средствам отладки и будет наиболее полезна там, где значение переменной быстро меняется, а останавливать программу нельзя.