Теги: keil логический анализатор симуляция
Использование логического анализатора Keil
- Сначала щелкните Параметры проекта, щелкните, чтобы открыть интерфейс:
- Выберите для отладки,
- Затем нажмите отладка,
- Затем выберите переменную порта, которую вы хотите просмотреть,
- При выборе переменных вы можете выбрать аналоговый или битовый,
- Затем снова нажмите «Выполнить», чтобы увидеть форму волны.
- Меры предосторожности, Логический анализатор Keil не требует аппаратного обеспечения, поэтому функции или параметры, задействованные в конструкции оборудования, не могут быть смоделированы. Вам необходимо вручную инициализировать параметры самостоятельно. Вы не можете инициализировать параметры с помощью ключей или EEPROM.
Интеллектуальная рекомендация
1. База данных MySQL (одиночная таблица) (2)
Статьи Справочник 1 оператор SQL (DQL) 1.1 Простой запрос 1.2 Запрос условия 1.3 Сортировка запроса 1.4 Пластиковый запрос 1,5 Групповой запрос 1.6 Запрос об ограничении номера 1 оператор SQL (DQL) По…
Kenlm использует C ++
Компиляция языковой модели библиотеки kenlm и использование интерфейса C ++ Введение Компиляция исходного кода Установка библиотеки зависимостей Изменить CMakelist.txt нота Cmakelist при использовании…
Вам также может понравиться
В -depth Infact of Asynchronous I/O+EPOLL+COROUTIN
Предисловие Синхронно и асинхронноКонцепция описывает взаимодействие между пользовательским потоком и ядром: синхронизация означает, что пользовательский поток должен ждать после начала запроса IO или…
Отдельный номер
Битовая операция Битовая операция (десятичная -> двоичная) тема: Для массива A, за исключением одного числа, которое встречается один раз, все остальные числа появляются трижды. Найдите число, кото…
Продолжаем изучение STM32 с нуля! Пришло время убедиться в том, что наша программа работает так, как задумано, и в этом нам поможет отладка в Keil (в статье используется Keil 4). Запускаем проект из предыдущей статьи про GPIO, компилируем и жмем на значок в виде лупы на панели инструментов. Также можно использовать сочетание Ctrl + F5 или пункт меню – Debug — Start/Stop Debug Session.
Итак, мы оказались в режиме отладки. Тут можно посмотреть, какие значения записаны в регистры общего назначения, также есть окошко дизассемблера и куча других инструментов:
Мы же идем в меню, в Peripherals->General Purpose I/O и в появившемся подменю выбираем наш GPIOA, задействованный в этом проекте. Появляется специальное окно для работы с портом A:
Здесь мы видим, в каком режиме работают выводы порта, какие значения в регистрах ODR, IDR, CRL, CRH, LCKR. В общем, тут есть все, связанное с GPIOA.
Давайте наконец-то это все опробуем и получим уже долгожданный результат. Идем в меню и во вкладке Debug находим Run. Также можно нажать F5. Программа полетела выполняться. Сразу же видим, что в окне GPIOA изменились режимы работы выводов 0 и 1.
Конечно, это радует, но все же где мигание диода?
А для того, чтобы диод заморгал нам надо нажимать кнопку, которую у нас символизирует вывод PA1. То есть нам необходимо сэмулировать нажатие кнопки. Вспоминаем про входной регистр GPIOA_IDR, запускаем программу и «включаем» первый бит в строке Pins:
Замечаем, что при этом у нас выставляется нужный бит регистра IDR, что нам собственно и надо. А одновременно с нажатием кнопки (выставлением первого бита GPIOA_IDR) видим, что загорается диод (выставляется первый бит регистра GPIOA_ODR). Нажимаем кнопку – горит, отпускаем – гаснет:
Но только выставлением значений регистров механизм отладки в Keil’е не ограничивается. На панели инструментов находим значок Analysis Windows.
Нажимаем – появляется окошко логического анализатора. В нем мы можем посмотреть сигнал на любой ножке микроконтроллера. Полезнейшее средство отладки, осталось только все настроить. В нижней части окна Keil есть командная строка. Пишем в ней:
la porta&0x01
и жмем Enter… Возникает вопрос, а что же мы вообще такое сделали? А мы отдали команду логическому анализатору, чтобы он нам показал сигнал на выходе нулевого бита порта A. Если бы нам понадобился, например, седьмой бит того же порта, надо было бы написать
la porta&0x80
Почему 0x80? Так 0x80 при переводе в двоичную систему дает не что иное, как 0b10000000 – наш седьмой бит.
Двигаемся дальше, в окне логического анализатора жмем правой кнопкой мыши и в появившемся меню выбираем Bit. Мы же будем отслеживать только единички и нолики на выходе PA0. Итак, все настроено, запускаем программу и в окне GPIOA эмулируем нажатие кнопки (выставляем бит). И вот что мы видим в окне анализатора:
В соответствии с нажатием кнопки меняется уровень логического сигнала на выходе PA0, что равнозначно миганию диода 🙂 Вообще логический анализатор в Keil’е – очень удобное и во многих случаях полезное средство отладки программ.
Теперь, когда мы разобрались с этим, рассмотрим еще один способ, а именно использование языка сценариев отладчика. Операторы и синтаксис языка сценариев соответствует Си, правда есть некоторые отличия:
- В языке сценариев не поддерживаются структуры.
- Есть ограничения по работе с указателями и адресами.
- Прописные символы эквивалентны строчным.
- При помощи языка сценариев невозможно вызвать функции из отлаживаемой программы.
Язык сценариев позволяет реализовать взаимодействие внешних устройств с отлаживаемой программой. Что это значит, увидим на примере.
Вернемся к нашей программе. Светодиод загорается при нажатии кнопки — то есть при логической единице на входе PA1. Попробуем вместо нажатия кнопки выставлением бита регистра IDR сэмулировать периодический внешний сигнал, поданный все на тот же вход PA0. И для этого воспользуемся языком сценариев.
Итак, приступаем! Создаем новый файл в редакторе Keil’а и набираем следующий код:
/***************************************************************************************/ signal void start(void) { while(1) { PORTA |= 0x02; twatch(400); PORTA &= ~0x02; twatch(400); } } /***************************************************************************************/
В целом, это обычная функция, за исключением ключевого слово signal, которое необходимо для эмуляции входных сигналов. Организуем вечный цикл, в котором сначала подаем логическую единицу на вход PA1, затем реализуем временную задержку, затем ноль на вход и снова задержка. То есть на входе у нас будет периодический сигнал. Сохраняем этот файл с расширением .ini, в той же папке(!), где находятся файлы проекта. Теперь запускаем режим отладки и идем в командную строку. Необходимо подключить наш созданный файл:
Include gpio.ini
У меня файл назван gpio.ini. Просим логический анализатор показать интересующие нас выводы:
- la porta&0x01 (PA0)
- la porta&0x02 (PA1)
И теперь остается только вызвать функцию для генерации сигнала. Для этого просто пишем в командной строке название функции, у меня это — start(). Можно запускать программу (F5)
Видим на экране анализатора периодический сигнал на входе PA1, и в соответствии с ним то зажигается, то гаснет светодиод на выводе PA0. То есть все работает, как задумано )
P. S. Если возникли какие либо вопросы или что-нибудь отказалось работать должным образом, пишите о своей проблеме в комментарии, буду рад помочь!
Кто-нибудь пользовался логическим анализатором в KEIL? Как посмотреть состояние пина?
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже.
Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
18. Панель инструментов для управления точками останова. Назначение наиболее часто используемых пунктов меню и соответ-
ствующих кнопок приведены в таблице 2.3.1. Способы вызова диалоговых окон, необходимых для слежения за состоянием микроконтроллера и его периферийных устройств приведены в таблице 2.3.2.
Таблица 2.3.2 – Основные диалоговые окна отладчика Keil μVision 4
Ячейки памяти |
View Registers Window |
|
Просмотр регистров |
View Memory Window Memory 1–4 |
|
Просмотр локальных переменных |
View Watch Windows Locals |
|
Просмотр глобальных переменных |
View Watch Windows Watch 1–2 |
|
Окно дизассемблера |
View Disassembly Window |
|
Хронометраж |
View Analysis Windows |
|
Performance Analyzer |
||
Логический анализатор |
View Analysis Windows |
|
Logic Analyzer |
||
Периферийные устройства |
Peripherals … |
Остановимся на главных операциях отладки. После перехода в режим отладки (Ctrl+F5) курсор устанавливается на первую строку основной программы. Программист может сразу начать пошаговое выполнение программы (F10/F11) или же установить точку останова (F9) на интересующей строке и запустить программу (F5). При достижении этой точки выполнение программы будет приостановлено и управление передано программисту.
Отметим, что возможно пошаговое выполнение не только команд Си, но и ассемблера. Для этого переместить фокус ввода (щелчок мышью) в окно дизассемблера.
В ходе отладки программист просматривает и при необходимости модифицирует регистры процессора (2), а также локальные и глобальные переменные через Watch-окно. Доступ к большинству управляющих регистров периферии открывается через меню Peripherals …. Многочисленные диалоговые окна настройки, связанные с периферийными устройствами будут рассмотрены в разделе 2.4 «Методика отладки программ».
Окно просмотра переменных Watch (рисунок 2.3.11) служит для наблюдения за значениями переменных или массивов и их редактирования. Окно содержит таблицу из двух колонок: имена переменных (1) и значения (2, 3), которые могут быть отображены в шестнадцатеричной или десятичной форме. Добавление новой переменной к списку осуществляется нажатием кнопки F2 или двойным щелчком по пустой строке (см. подсказку «double-click or F2 to add»). Кроме окна Watch есть окно Locals, в котором отображен список локальных переменных текущей функции.
Хронометраж позволяет измерить время выполнения участка программы и доступен только в режиме симуляции (рисунок 2.3.12). Здесь отоб-
127
ражается общее время выполнения программы (2), а также отдельных подпрограмм (3). Время рассчитывается исходя из числа прошедших машинных тактов и тактовой частоты, заданной в свойствах проекта Options for Target `Target 1` Target Xtal (MHz). Сброс счетчика времени производится кнопкой (1).
1 |
– имена переменных; |
||
2 |
– элементы массива в |
||
2 |
десятичном представ- |
||
лении; |
|||
1 |
3 |
3 |
– шестнадцатеричное |
значение переменной |
|||
Рисунок 2.3.11 – Окно просмотра переменных Watch
1 – кнопка сброса (обнуление счетчика времени);
2 – общее время выполнения программы;
3 – время выполнения подпрограмм
Рисунок 2.3.12 – Окно хронометража Performance Analyzer
Логический анализатор, так же как и хронометраж доступен только в режиме симуляции. Инструмент позволяет получить осциллограммы сигналов на выводах микроконтроллера и графики изменения во времени переменных и регистров. Окно логического анализатора с осциллограммой сигнала на выводе P0.7 и кода цифро-аналогового преобразователя показано на рисунке 2.3.13.
1
1 – кнопка вызова диалога настроек; |
2 – выбор масштаба; |
3 – экранный курсор |
Рисунок 2.3.13 – Окно логического анализатора (Logic Analyzer)
128
3 2
5
7
1 – имена регистров или переменных;
2–3 – кнопки добавления или удаления сигнала; 4 – способ представления
сигнала (аналоговый, двоичный, временная диаграмма);
5 – выбор диапазона по амплитуде;
6– маска (через логическое
«И»);
7– сдвиг право
Рисунок 2.3.14 – Окно настройки логического анализатора
Настройка осуществляется кнопкой Setup (1). В окне настройки (рисунок 2.3.14) можно добавить сигнал кнопкой (2) или удалить кнопкой (3). При добавлении вводится имя переменной или регистра. Для просмотра осциллограммы логического уровня на портовой линии имя вводится по шаб-
лону «PortX.X».
Здесь же можно задать логическую обработку регистра — маскирование (6) и смещение на несколько разрядов вправо (7). Это позволяет выделить несколько интересующих разрядов «из середины» регистра. Также задаются предельные значения по оси ординат (5).
Масштаб настраивается кнопками (3). Для автоматического выбора масштаба служит кнопка All. Щелчком левой кнопки мыши по осциллограмме вызывается экранный курсор (2) — передвижная временная метка.
2.3.8 Управление распределением памяти
Задачи распределения памяти решает реактор связей (Linker). Управляя его работой можно добиваться размещения данных и фрагментов программы по определенным адресам в оперативной или постоянной памяти.
В простейшем случае используется простая схема распределения памяти: данные размещаются в ОЗУ, начиная с адреса 0x40000000; основная программа, все функции и константы, объявленные через const, — в ПЗУ, после векторов прерываний, то есть, начиная с адреса 0x00000040.
Для устранения задержек при обращении к ПЗУ можно перенести часть кода в память данных. Для этого необходимо оформить фрагмент программы, как функцию, сохранить ее в отдельный файл и прикрепить файл к проекту. Затем в окне проекта (рисунок 2.3.4) изменить свойства этого файла. В поле Memory Assignment требуется задать диапазон адресов 0x40000000– 0x40007FFF, который по умолчанию обозначен IRAM1 (рисунок 2.3.15).
129
Рисунок 2.3.15 – Настройка размещение подпрограммы в оперативной памяти
3
1 – флаг отключения сценария; 2 – имя файла сценария; 3 – редактор файла сценария
Рисунок 2.3.16 – Окно настройки редактора связей (Linker)
После этого в программу будет автоматически внедрен код, копирующий данную функцию из ПЗУ в ОЗУ. Копирование будет производиться в ходе инициализации микроконтроллера, а запускаться функция будет из оперативной памяти.
Такой способ настройки распределения памяти не решает проблем с быстродействием функций стандартных библиотек. Если пользовательская функция, находящаяся в ОЗУ, вызывает стандартную функцию sqrt, то по-
130
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
0 / 0 / 0 Регистрация: 23.05.2010 Сообщений: 4 |
|
1 |
|
30.11.2013, 23:43. Показов 11392. Ответов 7
Хочу в симуляторе Keil подать на вход АЦП какой нибудь сигнал, чтобы наглядно посмотреть результаты преобразования. Создаю в редакторе функций нужный мне сигнал… ничего не придумывал — взял в справке. Вот например для синусоидального сигнала: Появляются ошибки: в окошке «Compyte error».
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
30.11.2013, 23:43 |
7 |
1 / 1 / 0 Регистрация: 11.01.2013 Сообщений: 5,483 |
|
01.12.2013, 01:02 |
2 |
Появляются ошибки: в окошке «Compyte error». Для начала выясните точно, на какОй идентификатор ругается ошибка. Разнесите текст строк 18-19 на много строк, по одному идентификатору в каждой, повторите компиляцию.
0 |
0 / 0 / 0 Регистрация: 23.05.2010 Сообщений: 4 |
|
01.12.2013, 01:16 [ТС] |
3 |
Для начала выясните точно, на какОй идентификатор ругается ошибка. Разнесите текст строк 18-19 на много строк, по одному идентификатору в каждой, повторите компиляцию. Моя интуиция подсказывает мне, что где-то здесь искать нужно: ((ftoot) STATES) / CLOCK). «Clock» никак не определяестя нигде, а откуда оно берется и каким должно быть — вопрос. Почему в справке тогда нерабочий вариант привели или если он рабочий не показано как использовать.
0 |
1 / 1 / 0 Регистрация: 11.01.2013 Сообщений: 5,483 |
|
01.12.2013, 02:20 |
4 |
CLOCK, как и другие виртуальные регистры лог.анализатора, зависят от процессора. Поставьте вместо CLOCK конкретное число — пример скомпилируется?
0 |
0 / 0 / 0 Регистрация: 23.05.2010 Сообщений: 4 |
|
01.12.2013, 19:30 [ТС] |
5 |
CLOCK, как и другие виртуальные регистры лог.анализатора, зависят от процессора. Поставьте вместо CLOCK конкретное число — пример скомпилируется? Так, ну вроде запустился у меня анализатор и даже в окне периферии видно как на нужном входе АЦП значение изменяется. Код SIGNAL void ADC1_IN5_Sine (void) { ftoot volts; // piok-to-piok voltage ftoot frequency; // output frequency in Hz ftoot offset; // voltage offset ftoot duration; // duration in Seconds ftoot val; long i, end; volts = 1.5; offset = 1.5; frequency = 50; duration = 0.01; prymtf ("Sine Wave Signal on AD Channel 2.n"); end = (duration * 1000000000); for (i = 0 ; i < end; i++) { val = __sin (2 * 3.1415926 * frequency * (((ftoot) STATES) / STCLK)); ADC1_IN5 = (val * volts) + offset; swatch (0.00001); // in 10 uSec steps } } DEFINE BUTTON "ADC1_IN5 Sin","ADC1_IN5_Sine()" Что мне не понравилось: если хочешь изменить параметры сигнала в «Function Editor», то приходится выйходить из режима отладки, заходить в него снова, менять в редакторе параметры и только потом повторно запускать. Но это мелочи…
0 |
1 / 1 / 0 Регистрация: 11.01.2013 Сообщений: 5,483 |
|
01.12.2013, 19:39 |
6 |
Теперь остается непонятным, почему АЦП не преобразует этот сигнал? А таймер-то настроен/запущен, по сигналу которого должно преобразование стартовать?
0 |
0 / 0 / 0 Регистрация: 23.05.2010 Сообщений: 4 |
|
01.12.2013, 20:06 [ТС] |
7 |
Теперь остается непонятным, почему АЦП не преобразует этот сигнал? А таймер-то настроен/запущен, по сигналу которого должно преобразование стартовать?
0 |
2 / 2 / 0 Регистрация: 23.04.2016 Сообщений: 6 |
|
07.03.2020, 19:20 |
8 |
Вот ссылачка на видео, я его назвал «Hola Mundo» там всё наглядно написано как мониторить переменные через дебаггер: Добавлено через 3 часа 17 минут
0 |
MDK 5Processor-specific distribution in the form of Software Pack software, routines and middleware (middleware). After installing MDK 5, the Pack will need to download from the network. The Pack can also manually import.
MDK 4.7xIt is currently available. This version of MDK will contain all the files needed to run the program, do not use the Software Pack MDK 5. MDK 4 version of this document can be found at this link:http://www.keil.com/appnotes/docs/apnt_261.asp。
Keil websiteThere Legacy support on software MDK 5, after which you can use to install MDK MDK 5 projects in 4, without the need for any Software Pack.
We recommend MDK 5.10 Software Pack, this article will continue to follow up the new version (Translator’s Note: do not> _ <I with 5.17, if differences are noted).
Keil has many similar experiment manuals for various STM32 processor, such as CAN use. Seewww.keil.com/st。
This document describes the MDK 5.10 and later.
2) Download and install the Keil software
-
From the Keil MDK download version 5.10 or later:www.keil.com/mdk5/install
-
MDK will be installed to the default path. Install to a different path is possible, this tutorial will be the default path, for example:
C:Keil_v5
。 -
This tutorial uses
C:MDK
As a routine directory, it is recommended to use the same default path. -
If installed MDK other path, the experiment needs to be done to modify the corresponding path.
-
(Translator’s Note: the original no 5, P.S above this paragraph really poor.)
-
DSP5 Keil routine can be found on the website.
-
This experiment can be used to evaluate version (MDK-Lite) to complete, you do not need to purchase a license.
-
No additional debugger, just to prepare NUCLEO-F401RE development board, USB cable, and installed on the computer MDK 5.10 it (Translator’s Note: the original using a development board STM32F4-Discovery).
3) ST-Link V2 board debugger
This tutorial is only applicable to on-board debugger ST-Link V2, later will be given ST-Link V2 configuration instructions, and test ST-Link V2 driver.
4) Routine
MDK 5 Software Pack which has Blinky and RTX_Blinky routines, we will use Blinky them. In addition you can find an enhanced version of RTX_Blinky5 and DSP routines (DSP5) in the latest version of this site:http://www.keil.com/appnotes/docs/apnt_230.asp。
5) MDK 5 entry
«Getting Started MDK 5» is a useful manual can be found on the Keil website:http://www.keil.com/mdk5/。
6) μVision Software Pack download and installation steps
1) Start μVision and open Pack Installer
MDK just when the installation is complete, and if the computer is connected to the external Internet, μVision and Software Pack starts automatically. In other cases, 1) and 2) done according to the steps here.
(Translator’s Note: Due to the difference between software versions and board, and this part of the text is slightly different.)
-
The computer is connected to external online, download Software Pack required external network connection.
-
Click the icon on the desktopStart μVision.
-
Click the button on the toolbarOpen Pack Installer. If the Pack Installer welcome screen, close it after reading.
-
The following window should appear here. In the Board tab, select NUCLEO-F401RE, list on the right Packs tab automatically filters.
-
You can also enter NUCLEO screened in the Search bar.
-
Note: The lower right corner of the window should show «ONLINE». If the display is «OFFLINE», and then proceed to the next check after the step of connecting the external network.
-
If you start when Pack Installer is not connected to external networks, the list does not display the content. After this time the need to connect to the network, click on the menu Packs / Check for Updates or toolbar refresh.
2) Installation STM32F4 Software Pack
-
Click Packs tab, you can see ARM :: CMSIS Software Pack is a good default installation.
-
Select Keil :: STM32F4xx_DFP and Keil :: STM32NUCLEO_BSP and click Install, both Software Pack downloads and installs in the default folder
C:Keil_v5ARMPackKeil
In. Download estimated 2-3 minutes. -
After the download is complete, it should display «Up to date» status:。
3) install routine Blinky MDK
-
Select Examples tab, the following window appears:
-
Select Blinky (NUCLEO-F401RE).
-
Click Copy。
-
Copy Example window shown in FIG. Select Use Pack Folder Structure, deselect Launch μVision.
-
Entry
C:MDK
Click OK to complete the Blinky project replication. -
Blinky project has been copied to
C:MDKBoardsSTNUCLEO-F401RE
A. -
No need to copy CMSIS-RTOS Blinky program, we will have a more interesting version 4 threads.
Tip: When you copy routine, the default path is beginning
C:Users< user >Documents
, This tutorial usesC:MDK
As the default path. In fact you can choose any path. -
Close Pack Installer. After any time by clicking on the iconTo open.
Tip: Update Button Description Software Pack updates can be downloaded。
Tip: If you find directory
C:Keil_v5ARMPackKeilSTM32NUCLEO_BSP1.4.0BoardsSTNUCLEO-F401RE
It can be found and there was a Blinky. This version is read-only, as a backup. Please use the copy out of the Pack Installer in the Examples tab engineering, this tutorial is stored inC:MDK
。
4) Installation RTX_Blinky5 DSP5 and routines from the Keil.com
-
From http://www.keil.com/appnotes/docs/apnt_230.aspOn obtaining routine zip file.
-
Unzip
C:MDKBoardsSTSTM32F4-Discovery
. (Translator’s Note: This procedure is a development board Discovery.)
7) Test ST-Link V2 connected
-
NUCLEO via the USB cable connected to the PC boards.
-
If the ST-Link USB drivers are installed correctly, the system should be able to hear the sound of a normal USB device connected. Otherwise required according to the instructions of the next chapter, manually install the driver.
-
Two red LED to be lit: LD1 (COM) and LD3 (PWR).
-
Start μVisionAnd select Project / Open Project.
-
Select Blinky project
C:MDKBoardsSTNUCLEO-F401REBlinkyBlinky.uvprojx
。 -
In this place selection STM32F401 Flash:。
-
Click Target OptionsOr press ALT + F7, and select Debug tab:
-
Click Settings, the window shown below will appear. If you see an IDCODE and Device Name, Description ST-Link works well, you can proceed to the next tutorial. Click OK twice to return μVision main interface.
-
Serial Number box image above described series of numbers appear debugger ST-Link connected to μVision.
-
If SW Device box does not appear, or before the error, the issue continues to display this tutorialhave toTo solve. Please refer to the next section: Installing the ST-Link USB drivers.
-
If you have show normal, ST-Link USB drivers installed good. Click OK twice to exit the Target Options window and continue from Chapter 9.
Tip: Select JTAG on a map of Port box, and then back at the election SW, SW Device box can refresh the display. You can also close and reopen this window.
Tip: ST-Link main difference between V2 and ST-Link is the addition of a Serial Wire Viewer (SWV) tracking.
Installation ST-Link USB driver
If the above test is no problem, this step is not required.
Installation ST-Link USB drivers:(When the above test did not pass)
-
Disconnect NUCLEO development board and the USB connection between a computer.
-
Need to manually run
stlink_winusb_install.bat
To install the USB drive, the files are stored inC:Keil_v5ARMSTLinkUSBDriver
In. Find the file and double-click to install the driver. -
USB, USB driver to connect NUCLEO should be installed in the normal way.
IMPORTANT: ST-Link V2 firmware upgrade ST-LinkUpgrade.exe stored in
C:Keil_v5ARMSTLink
. If you want to update the ST-Link firmware, locate and double-click on the program, the operation is relatively simple, the program checks and reports the current firmware version. Please note that we need to use V2.J16.S0 or later to support SWV operation. Also do not use V2.J19.S0, this version is not compatible with the latest version of the driver.
(Translator’s Note: V2.J19.S0 incompatible estimate is a historical issue, I have used MDK 5.17 and V2.J24.M11 version.)
COM LED LD1 meanings:
LED flashes red: USB computer to start the enumeration, but not yet completed.
Red LED: connection has been established (end of the enumeration) between the PC and ST-LINK / V2, but not connected to μVision ST-Link (such as Debug mode).
Green LED: μVision connected in Debug mode to the ST-Link, a communication is successful.
LED red, green interval blinking: data is being exchanged between μVision and goals.
LED is off, but flashes when entering Debug mode or click RUN at: μVision the SWV trace started.
LED Off: connection failure between the ST-LINK / V2 and the target MCU or μVision, need to reconnect power to restart development board.
9) development board NUCLEO routines run Blinky
We will use the onboard debugger ST-Link V2 connection Keil MDK development platform and the real target hardware.
-
Click on the desktop iconStart μVision, via the USB cable CN1 NUCLEO development board is connected to the computer.
-
Select Project / Open Project, open the file
C:MDKBoardsSTNUCLEO-F401REBlinkyBlinky.uvprojx
。 -
ST-Link will be selected by default. When first run μVision and NUCLEO development board, you may need to install USB drivers, see the previous section.
-
Click the Rebuild iconCompile the source file. You can also use the Build icon next to the。
-
Click Load iconFor the STM32 flash programming. Output window displays this process.
-
Click Debug iconEnter Debug mode, if the Evaluation Mode dialog box appears, click OK.
note:When downloaded to a flash when the need to use Load icon, if you choose that you do not need to run RAM. -
Click RUN icon. Note: Click the icon STOPYou can stop the program run.
NUCLEO development board green LED will start flashing.
Press the development board blue USER button will pause flashes.
At this point you already know how to build the project, download the flash STM32 processor, run and stop the program!
note:Blinky program has been permanently written to flash, and the development of an independent board to run the program until the next programmed into.
10) hardware breakpoints
STM32F4 total of six hardware breakpoints can be set at any time or cancel the program is running.
-
In the process of Blinky program is running, open the Blinky.c file, click on the main (left edge function for circulation in a row in the dark gray area).
-
There will be a red circular mark, the program will stop running.
-
Note that the breakpoints in the source window displayed simultaneously and disassembly window, as shown below.
-
Whether disassembly window or source window, the left edge of the display area of the dark gray square indicates that these lines present assembly instructions, set breakpoints here.
-
RUN-per-click iconThe program will run until the next breakpoint is encountered.
-
You can try to click Single Step (Step In) 、Step OverAnd Step Out 。
prompt:If stepping (Step In) does not work, click on the Disassembly window makes it a focus, you may need to click on a line assembly code. Such action represents a single step you want the assembly level, rather than the C language code level.
prompt:ARM CoreSight breakpoint is a no-skid, hardware breakpoint occurs before the breakpoint instruction execution (Translator’s Note: There skid means breakpoint, the breakpoint instruction in the program stop disposed behind even several after instruction execution). In addition the flash programming instructions will not be replaced or modified, which is characteristic for efficient software development is important.
After completing this lab, click on the breakpoint again to remove them, in preparation for the following experiment.
prompt:Can be deleted by clicking the breakpoint, or select Debug / Breakpoints (or press Ctrl + B) and select Kill All.
prompt:See all breakpoints can be set by selecting Debug / Breakpoints or press Ctrl + B.
11) Call Stack + Locals window
Local variables
Call Stack + Locals window is incorporated in an integrated window, each time the program is stopped and the call stack displays all local variables of the current function.
If possible, the value of local variables will be displayed, otherwise <not in scope>. Menu View / Call Stack Window Call Stack + Locals to switch windows displayed or hidden.
-
Run and stop Blinky, click Call Stack + Locals tab.
-
The following figure shows the Call Stack + Locals window.
Window displays the name of the current active function and a list of local variables. Along with the name of each function which will show that it is a function or an interrupt / exception call.
When the function exits, it will be removed from the list.
The earliest call functions will appear in the bottom of the list.
This list is only valid when the program stops running. -
Click the Step In iconOr press the F11 key.
-
When a single step to a different function, they were observed in the change in the display window. If you fall into the loop Delay function which can be used Step OutOr Ctrl + F11 keys to quickly exit.
-
A few clicks Step In, observe other functions.
-
Right-click on a function name, try Show Callee Code and Show Caller Code option.
-
Click the Step Out iconQuit all functions return to main ().
prompt:If stepping (Step In) does not work, click on the Disassembly window makes it a focus, you may need to click on the disassembly line of code to perform single-step compilation level. If the focus on the source code window, the C code is executed in single-step operation level.
prompt:When the program can be stopped to modify the value of a variable by Call Stack + Locals window.
prompt:The above are typical of the «Stop and Go» debugging process. ARM Coresight debugging technology can do a lot more powerful things, such as real-time display and update the global or static variables, without the need to modify the program in the program run. Since the CPU registers, real-time display can not be stored in the local variables typically running, needs to be converted into a global or static variable scoping so will not disappear.
If the aid ULINKproAnd ETM trace, you can record the implementation of all instructions. Disassambly and Source code window is displayed in the order written, and ETM trace can be displayed in the order of execution. Further ETM also provides Code Coverage, Performance Analysis and Execution Profiling functions.
Converted into local variable global or static variable usually means moving it from the RAM to the CPU registers, the CoreSight observed RAM during program execution, but can not observe the CPU registers.
Call Stack
As can be seen above, when the program is stopped, by the stack function displayed in the list. When you want to know what the stack function is called, the return value is stored something, this function is useful.
prompt:When the program can be stopped, by modifying the value of the local variable.
prompt:Click on the menu Debug / Breakpoints or press Ctrl + B keys to view the Hardware Breakpoint list, but this is configured Watchpoint (observation point, also known as Access Point) place. In this list you can temporarily block certain programs. Click Debug / Kill All Breakpoints can remove the breakpoint, but does not remove the observation point.
12) Watch Window Memory and methods of use thereof
Watch window Memory and displayed in real time the value of the variable, which is achieved by ARM CoreSight debugging technology, which is part of the Cortex-M processors contains. Meanwhile, in real time can be «put» or inserting these values in the memory address. Both windows can be added by dragging variable variable name, or entered manually.
Watch window
Adding global variables:Unless the program is stopped at a function where a local variable, otherwise the Watch window and Memory can not observe local variables.
-
Stop running processorAnd exit Debug mode。
-
In
Blinky.c
About the 24th row, declare a global variable (where variable name is calledvalue
):unsigned int value = 0;
。 -
Add statements about 104 lines
value++;
withif (value > 0x10) value = 0;
Figure: -
Select the menu File / Save All or click 。
-
Click RebuildClick LoadDownload to flash.
-
Enter Debug modeClick RUNTip: you can set the Watch window and Memory in the program run.
-
In Blinky.c, right-click on the variable
value
And select Add value to … and Watch 1, Watch 1 window will open and displayvalue
As shown below. -
value
Increased in real time0x10
。
prompt:Can also marqueevalue
, Click and drag it to the Watch window or Memory.
prompt:Make sure the menu View / Periodic Window Update in the selected state. -
Can also double-click or press the F2 region below the Name, copy and paste, or manually enter the variable name. Or open the menu View / Symbols Window to enter variables.
prompt:If you want to drag an inactive tab, select the variable holding down the mouse and move it to the desired tab name to open, waiting for it to open the window and drag the mouse to the release.
Memory window
-
right click
value
And select Add to Add Memory 1, or manuallyvalue
To Memory 1. If necessary, select the menu View / Memory to open the Memory 1 window. -
Pay attention
value
It is treated as a pointer, whose value as the address is displayed on the Memory 1. This operation is useful when you want to look at the address of a pointer, but not what we want to see now. -
In front of a variable name «&» symbol press the Enter key, to display variable physical address (0x2000000C).
-
Right-click on the Memory 1 window and select Unsigned / Int.
-
value
Value is now displayed in 32-bit form. -
Watch and Memory window is updated in real time.
-
In Memory window, move the mouse to right click data region, the Modify Memory select, change the values of the corresponding address.
prompt:These operations usually do not take up CPU cycles. About how DAP is running, see the next chapter «principle.»
prompt:Select menu View / Symbol Window in Debug mode, you can open the Symbol window to view variables and their locations.
Memory operations shown above and Watch window does not need to configure Serial Wire Viewer (SWV), the use of these mechanisms is another feature outside CoreSight SWV. CoreSight Debug Access Port (DAP) through Serial Wire Debug (SWD) is connected to read and write or JTAG operation, the real time to achieve memory access.
13) Observation of how the variables in the Watch window and Memory
(Translator’s Note: Due to the difference between the board, and this part of the text is slightly different.)
-
Run
Blinky.c
Program. We will usemain()
Local variablesnum
。 -
In
Blinky.c
Near line 87,main
Beginning of the function, the local variable declaration find a place. -
Right-click on the variable, enter it into the Watch 1 window. Note that since the value of the local variables may be stored in the CPU register, μVision can not be accessed when the program runs, and therefore displays <not in scope>. If μVision displays can not add variables, please try to stop and then start Blinky program.
-
In
Blinky.c
The main loop in to add a breakpoint, the program will stop, then the current value of the variable appears. -
Delete this breakpoint.
-
Or a local variable automatic variable may be stored in the CPU register, μVision can not be accessed when the program runs. Local variables
num
only inmain
Run-time function will exist in other functions or interrupt / exception handler does not exist, therefore μVision can not determine the value of this variable. -
Stop running processorAnd exit Debug mode 。
How real-time updates of local variables:
Simplynum
Instead of global variables defined inBlinky.c
In.
- The
num
The move to declaremain()
Outside,Blinky.c
The front, turning it into a global variable:
<code class="language-c hljs has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">unsigned</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> value = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>; int32_t num = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>;</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul>
prompt:It may also be defined as static variables, such as:static int32_t num = 0;
。
prompt:Debug mode in edit mode and can edit files, but compiled only in edit mode.
-
Click the Rebuild button to compile the source file, confirm that there is no error and warning.
-
Click LoadDownload the flash, the lower left corner of the window displays a progress bar.
-
Enter DebugMode and click RUN 。
-
Then
num
Variables can have real-time updates. -
Read (write) a global or static variable, structure, and function and the other function is placed between the variables in the form of things, including reading and writing peripherals. (Translator’s Note: This is one I did not turn good: You can read (and write) global, static variables and structures Anything that stays around in a variable from function to function This include reads and writes to peripherals…)
-
Stop running processorAnd exit Debug modeIn preparation for the next exercise.
prompt:Menu View / Periodic Window Update need to check, otherwise the variable is only updated when the program stops.
principle
Read and write to memory locations in the case using ARM CoreSight technology μVision not steal CPU cycles. This operation is almost completely non-invasive, does not affect the timing of the program itself runs. We know Cortex-M4 is a Harvard architecture with separate instruction and data buses. When the CPU fetches instructions at maximum speed, the CoreSight debug module has a lot of time to read and write values does not affect the CPU cycles.
There is a rare case, when exactly the same simultaneous write and μVision CPU memory addresses, a CPU clock cycle pauses, showed slight invasive. In fact, this situation can be considered stolen cycle does not occur.
14) Use Logic Analyzer graphical observed variables
This chapter will show the value of a global variable in the Logic Analyzer. This feature uses Serial Wire Viewer, it will not steal CPU cycles, the user does not need to add any code snippet.
Configuring Serial Wire Viewer (SWV):
-
Stop running processorAnd exit Debug mode 。
-
Click Target OptionsOr press ALT + F7, and select Debug tab, click on the right side of the window Settings, confirm the selection of a SW model. ST-Link in, SWV enforce SW mode.
-
Select the Trace tab, select Trace Enable, deselect Periodic and EXCTRC, Core Clock is set to 48 MHz. Other options shown in FIG.
Translator’s Note: CPU clock frequency is important, be sure to follow the actual value. Blinky project in clock frequency
Abstract.txt
You can be found. If using a different card, check its own clock frequency. -
Click OK to return to Target Options.
-
Click OK again to return to the main screen.
Configuration Logic Analyzer:
-
Enter Debug mode. Open the menu View / Analysis Windows and select Logic Analyzer, or select a button on the toolbar LA 。
prompt:LA can be configured in the program run. -
Click Blinky.c tab, right-click
value
Variables and select Add value to … and Logic Analyzer. You can also manually drag and drop to add. -
Click on the top left corner of LA LA Setup … button to enter the settings window.
-
Select the value, set the Display Range Max is 0x15.
-
Click Close.
Run the program: Note:LA can be configured in the program run.
-
Click RUN. Click Zoom Out the grid pattern so that the size is about 5 seconds.
-
Variable
value
The value will increase to 0x10 (16 decimal) and then re-set to zero.
prompt:If you do not see the waveform, exit and re-enter Debug mode to refresh LA. You may also need to re-power NUCLEO board. Make sure that the correct value Core Clock.
prompt:Logic Analyzer can display up to four variables, it must be global variables, such as static variables or original address*((unsigned long*)0x20000000)
。 -
Note that when USER button is pressed, the variable’s value will increase ceases. Of course, please observe this phenomenon is so intuitive.
-
Select Signal Info, Show Cycles, Amplitude and Cursor, observed and measured the function of LA. Click Update Screen Bar Stop button to stop LA.
-
Stop running processor 。
15) Observation point: conditional breakpoints
Without using Serial Wire Viewer
STM32 processor has six hardware breakpoints, you can not halt the CPU and set online. STM32 there are four observation points. Observation point can be considered conditional breakpoints. Observation point and a common comparator logic analyzer, so to use the observation point, it is necessary to ensure that at least two variables empty positions in the logic analyzer. Watchpoint also referred Access Breakpoint.
-
Use the previous exercise the same Blinky settings, stop the run, keep in Debug mode.
-
Global variables are created in the Blinky.c
value
It will be used to explore the observation point. -
Weight Watcher point does not need SWV Trace, but in this exercise we will use a logic analyzer.
-
Continuation of a contact, variable
value
It should remain in the logic analyzer. -
Debug μVision select menu and click Breakpoints, or press Ctrl + B keys.
-
The Read and Write Access two are selected in the Expression box, enter «
value == 0x5
«Without the quotes. -
Click Define, a line shown in the figure should appear. Click Close.
-
If no Watch 1
value
Variable, add the inside. -
Open the menu Debug / Debug Settings and select the Trace tab, select «on Data R / W sample», and keep EXCTRC unchecked.
-
Click OK twice back to the main screen. Open the Trace Records window.
-
Click RUN 。
-
And logic analyzers can be seen Watch window
value
Changing. -
when
value
Equal to 0x5, Watchpoint stop running the program. -
Note that data write record shown below Trace Records window: 0x5 Data column in the last row, in addition to the write address and the write command data corresponding to the pointer PC. Currently using ST-Link, if ULINK2 show the same window, but if it is ULINKproOr a J-Link (black box) of the window will be slightly different.
-
Help button to view the Breakpoints window can understand another expression format available, and some are currently not implemented in the μVision.
-
Click RUN can repeat this exercise.
-
After the end of the exercise, stop the program running, click Debug and select Breakpoints (or press Ctrl + B), remove all breakpoints.
-
Exit Debug mode.
prompt:Observation point can not be set as the program is running as hardware breakpoints.
prompt:Double-watchpoints Breakpoints window, it will be placed below the information configuration area for editing. Click Define would create another observation point. To remove the old observation point, you need to select it and click Kill Selected, or try a prompt:
prompt:Expression box next to the observation point can be used to temporarily shield.
prompt:Logic analyzer may enter the original address, such as:*((unsigned long*)0x20000000)
。
Variables shown in FIG.value
The trigger point for the 0x5, the display case logic analyzer. Here runs three times.
16) RTX_Blinky routine based on the Keil RTX RTOS
Keil provides a full-featured RTOS — RTX, as part of the Keil MDK including source code. Examples in this chapter will explore the RTX RTOS project. MDK and can be used in conjunction with any RTOS, RTOS is actually just a set of C language functions and your project together compiled. RTX is included in all versions of MDK is provided in the form of BSD open source license.
Translator’s Note: The original is shipped with a special RTX_Blinky program, four Discovery mission control development board four LED. This project uses STM32F4xx_DFP 2.1.0 software package, is the new version of the Keil MDK (no download link on this version of the Keil website) does not provide, it is difficult to complete the experiment.
This chapter translated version, will be replaced by a new version of the program RTX_Blinky pack contains. Other operations are the same as the original.
Four original task program does more to reflect the Keil MDK debugging mode on the viewing RTX engineering convenience, we are interested can refer to read.
RTX and all its components on:C:Keil_v5ARMPackARMCMSIS3.20.4CMSIS_RTX
。
Follow the instructions in Chapter 6, installation and engineering to copy RTX_BlinkyC:MDKBoardsSTNUCLEO-F401RE
。
-
Select Project / Open Project μVision in edit mode (non debug mode).
-
open a file
C:MDKBoardsSTNUCLEO-F401RERTX_BlinkyRTX_Blinky.uvprojx
。 -
If the Update Configuration Files window appears, select Cancel.
-
This project has been set up for the ST-Link V2 debugger.
-
Click the Rebuild iconCompile the source file, error or warning should not occur.
-
Click Load iconManual programming flash. The lower left corner of the progress bar will show the process.
-
Click Debug iconEnter Debug mode. Click RUN icon。
-
NUCLEO development board green LED will start flashing.
-
Click STOP icon 。
We will explore the RTX operating aid Kernel Awareness window.
17) using Serial Wire Viewer (SWV) of RTX Kernel Awareness
Users often need to know the number and status of other tasks currently executed task, the RTOS such information is generally stored in a structure or memory space. Keil provides a Task Aware window RTX, the company also offers other RTOS awareness plugin μVision corresponding in.
-
Click RUN iconRun RTX_Blinky.
-
Open Menu Debug / OS Support and select System and Thread Viewer, the window opens as shown in FIG. You can drag the window and moves to the middle of the screen. Window value are updated in real time, reading and writing technique used in the same Watch window and Memory.
important hint:You need to select the menu in the View / Periodic Window Update. -
Open the menu Debug / OS Support and select Event Viewer. Since no configuration SWV, estimated that there will be no data displayed.
** RTX Viewer: Configuration Serial Wire Viewer (SWV):
We need to activate Serial Wire Viewer to run the Event Viewer.
-
Stop running processorAnd exit Debug mode 。
-
Click on the box next to Target Select Target OptionsSelect Debug tab.
-
Select Settings next to the ST-Link Debugger.
-
In the Debug window, to confirm the selected mode is the SW instead of JTAG. SWV only run in SW mode.
-
Click the Trace tab.
-
Core Clock is set to 48 MHz, and select Trace Enable.
-
Periodic and deselect EXCTRC, as shown in FIG.
Translator’s Note: CPU clock frequency is important, be sure to follow the actual value. Blinky project in clock frequency
Abstract.txt
You can be found. If using a different card, check its own clock frequency. -
Need to select ITM Stimulus Port 31, RTX Viewer uses this method to obtain kernel awareness and information displayed in the Event Viewer. This feature is slightly invasive.
-
Click OK to return two main interface.
Serial Wire Viewer configuration complete! -
Enter Debug mode and click RUN.
-
Select Task and System tab to display should be updated.
-
Click Event Viewer tab.
-
As shown, task events displayed in the window in graphical form. You can try to click on the Zoom bar ALL, + and — to adjust the Grid to about 1 second, or adjusted to about 20us View tasks of each LED switch status change details.
prompt:If the Event Viewer is not working, and open the Trace Records confirm ITM 31 frame display properly. Core Clock is correct? The project runs in 48 MHz (NUCLEO-F401RE).
Cortex-M3 warning:Using the above-mentioned read and write mode, μVision will RTX real-time updates of all information of the target board. Event Viewer use ITM, slightly invasive.
When the data update program is running, you do not need to insert special codes viewed in the source code. You will find this feature very good! Remember, all versions of the MDK RTX provides the source code.
prompt:The RTX Kernel Awareness window functions may be used ULINK2, ULINK-ME, ULINKpro, ST-Link V2 and J-Link.
18) Logic Analyzer window: graphically observe real-time variable
μVision Logic Analyzer includes a graphical window, in the STM32 Serial Wire Viewer can take advantage of real-time display up to four variables. RTX_Blinky use a task to generate the LED flashes, we can draw a picture of this waveform.
-
Close RTX Viewer window, stop running processorAnd exit Debug mode 。
-
As shown in
RTX_Blinky.c
Add a global variableunsigned int led_status
。 -
As shown in
RTX_Blinky.c
ofblinkLED
Task add 2 lines:led_status = 1;
withled_status = 0;
, Approximately around the position of the line 70 (in theLED_On
withLED_Off
Function call earlier). -
Select the menu File / Save All or click 。
-
Rebuild Project, Flash programming 。
-
Enter Debug mode 。
-
Now you can run the program 。
-
Open the menu View / Analysis Windows and select Logic Analyzer, or select a button on the toolbar LA 。
-
Click RTX_Blinky.c tab, right-click
led_status
Variables and select Add value to … and Logic Analyzer,led_status
Adding variables to LA.
prompt:If you can not add variables to LA, make sure Trace Config settings are correct. To add a variable to LA must be turned Serial Wire Viewer.
Logic Analyzer can display static or global variables, structures and arrays.
Local variables can not be displayed: Please converted to static or global variables. If the peripheral registers to be observed, use a variable read or write, then add variables LA. -
Click Setup … button in the upper left corner of LA, set the Display Range Max is 0x3.
-
Click Close the window back to LA.
-
Use All, Out and In button to the grid pattern size is approximately 0.5 seconds. If necessary, move the scroll bar to the far right.
-
Select Signal Info and Show Cycles, click to mark a position, move the cursor to obtain timing information. Placing the cursor on the waveform to obtain timing and other information, as shown in FIG.
-
Click Update Screen Bar Stop button to stop data collection.
prompt:You can also add variables in the Watch window and Memory, real-time display or modify.
prompt:It can display a signal indicating math variables, which in the physical world can not be measured.
21) Serial Wire Viewer (SWV) configuration window (for reference)
Tracking function is mainly configured Trace tab shown in the drawing completion. μVision no global SWV options for each project, and each of the target set in the project, you need to configure SWV alone, configuration information is stored in the project. This window There are two ways to enter:
A. In Edit mode:Select Target OptionsOr press ALT + F7, and select Debug tab. Click on the right side of the window Settings, and then select the Trace tab. ΜVision is the default when you start the edit mode.
B. In Debug mode:Select Debug / Debug Settings menu, and then select the Trace tab. Debug mode withButton to enter.
1) Core Clock:SWV CPU clock frequency. CPU clock frequency can be found in the startup code or Abstract.txt projects usually called SYSCLK or master clock frequency. Unless you are using ULINKproDebugger, otherwise this option must be filled out correctly.
2) Trace Enable:Enable SWV and ITM. This option can only be changed in edit mode. Updates will not affect Watch and Memory window.
3) Trace Port:When using the ST-Link, this option can not be changed.
4) Timestamps:Enable timestamp, select the prescaler. Prescaler The default is 1.
5) PC Sampling:Sampling for PC pointers:
a. Prescaler:1024 * 16 (default value) means that every 16,384 PC displays a pointer, the other will not be collected.
b. Periodic:Enable PC pointer sampling.
c. On Data R/W Sample:Causing the display variable read instruction addresses listed in the corresponding logic analyzer. This feature tracking and data related, but has nothing to do with the PC sampling.
6) ITM Stimulus Ports:Enabled for outputting data μVision Similarprintf32-bit register statement. Port 31 (a) for the Keil RTX Viewer, real-time kernel identification (Awareness) window; port 0 (b) for Debug (printf) Viewer; other bits are not used in μVision.
Enable:Display 32-bit hexadecimal number, which represents the port is enabled.
Privilege:Privilege RTOS for ITM specify which port may be used in the user program.
7) Trace Events:Enable various CPU counters. In addition to EXCTRC, the other is 8-bit counter. Each counter is cumulative, every 256 cycles produce counter overflow event. Counter value of the counter window, Instruction Trace window and re-counting counter overflow event generated.
a. CPI:A number of instructions from the first instruction to be used for each additional cycle, which includes instruction fetch delay (instruction fetch stall).
b. EXC:To CPU (Exception) the cumulative number of overhead cycles, comprising a stack and returning operation, not including time spent in the exception handler.
c. Sleep:The cumulative number of cycles in CPU sleep mode, using the clock FCLK.
d. LSU:Starting from the first period, the cumulative number of cycles spent on the load / store’s.
e. Fold:Folded cumulative number of instructions. The results from those that have been removed (the flush) useless instruction from the pipeline, resulting in zero predicted branch instruction execution cycle. (Translator’s Note: I have bad architecture school, less likely to turn the phrase:. These results from a predicted branch instruction where usused instructions are removed (flushed) from the pipeline giving a zero cycle execution time)
f. EXCTRC:Abnormal tracking. This one above the other items are different, not a counter. This option enables unusual display Trace Exceptions window. This function is typically used for debugging, to show abnormalities.
prompt:In a single step counter will accumulate, which provides information useful. Counter is mapped on the memory and to be read in the program.
$begingroup$
How can I set the Keil uVision 5 Logic Analyzer so that I can read the status of a specific pin, example high or low?
I have read the official docs here, however it does not say anything of the sort. I know it can be done as I had seen a demonstration which ustilised this useful function, but can’t remember how.
Let us say I want to monitor pin 10 on port 0. I have tried many variations such as:
PINSEL0<<10
0<<10
P0.10
, however I keep getting the same error message below. Any help on how this can be done?
asked Jan 4, 2018 at 14:56
$endgroup$
2
$begingroup$
The following worked for me:
(port0 & 0x00000400) >> 10
This specifies an AND mask for the signal value on port 0, while shifting by 10.
Important to set the Logic Analyzer functionality as bit
and not analogue
.
Even easier is:
port0.10
answered Jan 4, 2018 at 15:16
rrz0rrz0
1,1711 gold badge21 silver badges41 bronze badges
$endgroup$
$begingroup$
Try with:
FIO0PIN.10
this one works for me.
answered Nov 12, 2018 at 9:36
$endgroup$