Changes to Software part

This commit is contained in:
Andreas Mieke 2018-04-02 15:20:43 +02:00
parent d11382ed9f
commit d109bae8d7
15 changed files with 101 additions and 128 deletions

View file

@ -128,9 +128,6 @@
\clearpage \clearpage
\pageauthor{Mieke} \pageauthor{Mieke}
\input{Mieke/Software} \input{Mieke/Software}
\clearpage
\pageauthor{Mieke}
\input{Mieke/Mieke} \input{Mieke/Mieke}
\clearpage \clearpage

View file

@ -28,20 +28,19 @@ Der Inhalt des \gls{STDLib} \gls{CMSIS}-Packs kann in \fref{fig:cmsis-inhalt} ge
[Header [Header
[armv10\_serbus.h, is file] [armv10\_serbus.h, is file]
[armv10\_std.h, is file] [armv10\_std.h, is file]
[STD\_STM32\_F103RB\_ASM.INC, is file]
[STM32\_F103RB\_MEM\_MAP.INC, is file]] [STM32\_F103RB\_MEM\_MAP.INC, is file]]
[Library [Library
[armv10\_serbus.lib, is file] [armv10\_serbus.lib, is file]
[ARMV10\_STD.lib, is file]] [ARMV10\_STD.lib, is file]]
[HTBL Hollabrunn.STD-Pack.pdsc, is file] [HTBL\_Hollabrunn.STD-Pack.pdsc, is file]
] ]
\end{forest} \end{forest}
} }
Das Pack beinhaltet somit Header-Files, genauer das für die \gls{STDLib} und für eine serielle Bus Library, im Unterordner \texttt{Header}. Des weiteren wurden in diesem Ordner auch Include-Files für die Assembler-Programmierung abgelegt. Dies ist zwar laut offizieller Dokumentation (siehe: \cite[arm:CMSISPack]) nicht der passende Ort für solche Dateien, wurde aber zur Einfachkeit trotzdem so gewählt. Daneben gibt es noch das Verzeichnis \texttt{Library}, in welchem die kompilierten Bibliotheken gespiechert werden. Alle Versionen und Abhängigkeiten werden zentral im \texttt{.pdsc}-File im Wurzelverzeichnis verwaltet, der Inhalt dieses Files kann in \fref{lst:pdsc} eingesehen werden. Das Pack beinhaltet somit Header-Files, genauer das für die \gls{STDLib} und für eine serielle Bus Library, im Unterordner \texttt{Header}. Des weiteren wurden in diesem Ordner auch Include-Files für die Assembler-Programmierung abgelegt. Dies ist zwar laut offizieller Dokumentation (siehe: \cite{arm:CMSISPack}) nicht der passende Ort für solche Dateien, wurde aber zur Einfachkeit trotzdem so gewählt. Daneben gibt es noch das Verzeichnis \texttt{Library}, in welchem die kompilierten Bibliotheken gespiechert werden. Alle Versionen und Abhängigkeiten werden zentral im \texttt{.pdsc}-File im Wurzelverzeichnis verwaltet, der Inhalt dieses Files kann in \fref{lst:pdsc} eingesehen werden.
\FloatBarrier \FloatBarrier
\lstinputlisting[language={XML}, caption=Inhalt des PDSC-Files der \gls{STDLib}, label=lst:pdsc]{Mieke/Pack/Files/HTBL-Hollabrunn.STD-Pack.pdsc} \lstinputlisting[language={XML}, caption=Inhalt des PDSC-Files der \gls{STDLib}, label=lst:pdsc]{Mieke/Pack/Files/HTBL_Hollabrunn.STD-Pack.pdsc}
Die Attribute der einzelnen Komponenten werden in der offiziellen Dokumentation genauer erläutert, die \fref{fig:pack-attrs} stellt nur eine kurze Übersicht dar. Neben dem Namen und der Beschreibung gibt die \texttt{PDSC}-Datei auch an welche Datei zu welchem Software Pack gehört, welche Version eines Packs zur Verfügung gestellt wird und welche Abhängigkeiten bestehen (zum Beispiel hängt die Serbus Library von der \gls{STDLib} ab). Die Attribute der einzelnen Komponenten werden in der offiziellen Dokumentation genauer erläutert, die \fref{fig:pack-attrs} stellt nur eine kurze Übersicht dar. Neben dem Namen und der Beschreibung gibt die \texttt{PDSC}-Datei auch an welche Datei zu welchem Software Pack gehört, welche Version eines Packs zur Verfügung gestellt wird und welche Abhängigkeiten bestehen (zum Beispiel hängt die Serbus Library von der \gls{STDLib} ab).

View file

@ -1,5 +1,3 @@
\section{Software}
\label{sec:software}
\subsection{Keil \uVision{} 5} \subsection{Keil \uVision{} 5}
\label{sec:uvision-5} \label{sec:uvision-5}
Zur Programmierung des neuen \gls{Minimalsystem}s wurde die \gls{IDE} Keil \uVision{} 5 verwendet. Da sich diese erheblich von der Version 4 unterscheidet, und das Projekt weiters auch im Unterricht verwendet werden solle, wurde eine Anleitung für eben diese neue Version 5 der \gls{IDE} verfasst, welche alle Schritte von der Installation bis zum \gls{Debugging} erklärt und demonstriert. Weiters wurde der \gls{Debugging}-Adapter ausgetauscht, anstelle eine \gls{Keil} ULINK/ME kommt nun standardmäßig ein ST-Link zum Einsatz. Zur Programmierung des neuen \gls{Minimalsystem}s wurde die \gls{IDE} Keil \uVision{} 5 verwendet. Da sich diese erheblich von der Version 4 unterscheidet, und das Projekt weiters auch im Unterricht verwendet werden solle, wurde eine Anleitung für eben diese neue Version 5 der \gls{IDE} verfasst, welche alle Schritte von der Installation bis zum \gls{Debugging} erklärt und demonstriert. Weiters wurde der \gls{Debugging}-Adapter ausgetauscht, anstelle eine \gls{Keil} ULINK/ME kommt nun standardmäßig ein ST-Link zum Einsatz.

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<package schemaVersion="1.4" xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:noNamespaceSchemaLocation="PACK.xsd"> <package schemaVersion="1.4" xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:noNamespaceSchemaLocation="PACK.xsd">
<vendor>HTBL Hollabrunn</vendor> <vendor>HTL Hollabrunn</vendor>
<name>STD-Pack</name> <name>STD-Pack</name>
<description>HTL Hollabrunn library and include pack</description> <description>HTL Hollabrunn library and include pack</description>
<url></url> <url></url>
@ -8,35 +8,40 @@
<releases> <releases>
<release version="1.0.0" date="2017-07-16"> <release version="1.0.0" date="2017-07-16">
Initial version Initial version -- Mieke
</release>
<release version="2.0.0" date="2017-07-20">
Major version push -- REJ
</release>
<release version="2.1.0" date="2018-04-02">
Removing Start Up code as it is no longer needed, due to code which exists within the CMSIS packs -- Mieke
</release> </release>
</releases> </releases>
<keywords> <keywords>
<keyword>HTBL Hollabrunn</keyword> <keyword>HTL Hollabrunn</keyword>
<keyword>STD Library</keyword> <keyword>STD Library</keyword>
<keyword>Serbus Library</keyword> <keyword>Serbus Library</keyword>
</keywords> </keywords>
<components> <components>
<component Cclass="HTBL Hollabrunn" Cgroup="Libraries" Csub="STDLib" Cversion="1.0.0"> <component Cclass="HTL Hollabrunn" Cgroup="Libraries" Csub="STDLib" Cversion="2.0.0">
<description>Standard library for the HTBL</description> <description>Standard library for the HTL</description>
<files> <files>
<file category="header" name="Header/armv10_std.h"/> <file category="header" name="Header/armv10_std.h"/>
<file category="library" name="Library/ARMV10_STD.lib"/> <file category="library" name="Library/ARMV10_STD.lib"/>
</files> </files>
</component> </component>
<component Cclass="HTBL Hollabrunn" Cgroup="Libraries" Csub="SerbusLib" Cversion="1.0.0" condition="STDLib"> <component Cclass="HTL Hollabrunn" Cgroup="Libraries" Csub="SerbusLib" Cversion="1.0.0" condition="STDLib">
<description>Serial bus library for the HTBL</description> <description>Serial bus library for the HTL</description>
<files> <files>
<file category="header" name="Header/armv10_serbus.h"/> <file category="header" name="Header/armv10_serbus.h"/>
<file category="library" name="Library/armv10_serbus.lib"/> <file category="library" name="Library/armv10_serbus.lib"/>
</files> </files>
</component> </component>
<component Cclass="HTBL Hollabrunn" Cgroup="Assembler" Csub="Includes" Cversion="1.0.0"> <component Cclass="HTL Hollabrunn" Cgroup="Assembler" Csub="Includes" Cversion="2.0.0">
<description>Assembler includes for the HTBL</description> <description>Assembler includes for the HTL</description>
<files> <files>
<file category="header" name="Header/STD_STM32_F103RB_ASM.INC"/>
<file category="header" name="Header/STM32_F103RB_MEM_MAP.INC"/> <file category="header" name="Header/STM32_F103RB_MEM_MAP.INC"/>
</files> </files>
</component> </component>
@ -45,7 +50,7 @@
<conditions> <conditions>
<condition id="STDLib"> <condition id="STDLib">
<description>Standard library</description> <description>Standard library</description>
<require Cclass="HTBL Hollabrunn" Cgroup="Libraries" Csub="STDLib" /> <require Cclass="HTL Hollabrunn" Cgroup="Libraries" Csub="STDLib" />
</condition> </condition>
</conditions> </conditions>
</package> </package>

View file

@ -1,30 +0,0 @@
;******************************************************************************
;* (C) Copyright HTL - HOLLABRUNN 2009-2010 All rights reserved. AUSTRIA *
;* *
;* File Name: std32_f103rb_std.inc *
;* Autor: Josef Reisinger *
;* Version: V1.00 *
;* Date: 25/10/2010 *
;* Description: Standard Library für ARM Corttex M3 *
;******************************************************************************
;* History: V1.00 creation *
;* *
;******************************************************************************
EXTERN init_leds_switches
EXTERN set_leds
EXTERN get_actual_switches
EXTERN wait_ms
EXTERN wait_10us
EXTERN uart_init
EXTERN uart_put_char
EXTERN uart_get_char
EXTERN uart_put_string
EXTERN uart_clear
EXTERN uart_put_hex
EXTERN nib2asc
EXTERN hex2bcd
EXTERN asc2nib
END

View file

@ -1,14 +1,20 @@
; File soll in Verzeichnis "C:\Keil\ARM\INC\ST\STM32F10x" kopiert werden (Installationspfad µVision) ;******************************************************************************
; * @file STM32_F103RB_MEM_MAP.IC
; * @author Josef Reisinger
; * @version V2.0
; * @date 22-November-2017
; * @brief CMSIS Cortex-M3 Device Peripheral Access Layer Include File.
; * This file contains the most important peripheral register's definitions
; and memory mapping for STM32F10x Performance line,
PERIPH_BB_BASE EQU 0x42000000 PERIPH_BB_BASE EQU 0x42000000
PERIPH_BASE EQU 0x40000000 PERIPH_BASE EQU 0x40000000
APB1PERIPH_BASE EQU PERIPH_BASE
APB2PERIPH_BASE EQU PERIPH_BASE + 0x10000 APB2PERIPH_BASE EQU PERIPH_BASE + 0x10000
AHBPERIPH_BASE EQU PERIPH_BASE + 0x20000 AHBPERIPH_BASE EQU PERIPH_BASE + 0x20000
GPIOA_BASE EQU APB2PERIPH_BASE + 0x0800 GPIOA_BASE EQU APB2PERIPH_BASE + 0x0800
GPIOA_CRL EQU GPIOA_BASE GPIOA_CRL EQU GPIOA_BASE
GPIOA_CRH EQU GPIOA_BASE+0x04 GPIOA_CRH EQU GPIOA_BASE+0x04
@ -48,6 +54,15 @@ USART1_CR2 EQU USART1_BASE+0x10
USART1_CR3 EQU USART1_BASE+0x14 USART1_CR3 EQU USART1_BASE+0x14
USART1_GTPR EQU USART1_BASE+0x18 USART1_GTPR EQU USART1_BASE+0x18
USART2_BASE EQU APB1PERIPH_BASE + 0x4400
USART2_SR EQU USART2_BASE
USART2_DR EQU USART2_BASE+0x04
USART2_BRR EQU USART2_BASE+0x08
USART2_CR1 EQU USART2_BASE+0x0C
USART2_CR2 EQU USART2_BASE+0x10
USART2_CR3 EQU USART2_BASE+0x14
USART2_GTPR EQU USART2_BASE+0x18
RCC_BASE EQU AHBPERIPH_BASE + 0x1000 RCC_BASE EQU AHBPERIPH_BASE + 0x1000
RCC_CR EQU RCC_BASE RCC_CR EQU RCC_BASE

View file

@ -1,4 +1,4 @@
#!/bin/bash #!/bin/bash
cd Files cd Files
7z a "../HTBL Hollabrunn.STD-Pack.1.0.0.pack" * -tzip 7z a "../HTBL_Hollabrunn.STD-Pack.2.1.0.pack" * -tzip
cd .. cd ..

BIN
Mieke/SW/MT/MT.pdf Normal file

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

BIN
Mieke/SW/ODD/ODDDragon.pdf Normal file

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

View file

@ -2,9 +2,15 @@
\label{sec:software} \label{sec:software}
Im Zuge dieser Diplomarbeit entstanden zwei größere Softwareprojekte für das \gls{ARM} Cortex-M3 \gls{Minimalsystem}. Im Zuge dieser Diplomarbeit entstanden zwei größere Softwareprojekte für das \gls{ARM} Cortex-M3 \gls{Minimalsystem}.
\subsection{Tag der offenen Tür} \subsection{ODDDragon}
Für die Tage der offenen Tür der HTBL Hollabrunn im Jahr 2017/18 entstand ein Testprogramm, welches die neuen Features des Minimalsystems demonstrieren sollte. Hierzu wurde ein einfaches \gls{GUI} für das NEXTION-Display programmiert, welche die X, Y und Z Werte der Beschleunigung vom über SPI angesteuerten Gyroskop ausliest, und in Form eines Graphen anzeigt. Des weiteren wurde eine -- nicht 100\% funktinierenden -- Funktion zum Speichern des Graphen (auf dem verbauten EEPROM) programmiert. Für die Tage der offenen Tür der HTBL Hollabrunn im Jahr 2017/18 entstand ein Testprogramm, welches die neuen Features des Minimalsystems demonstrieren sollte. Hierzu wurde ein einfaches \gls{GUI} für das NEXTION-Display programmiert, welche die X, Y und Z Werte der Beschleunigung vom über SPI angesteuerten Gyroskop ausliest, und in Form eines Graphen anzeigt. Des weiteren wurde eine -- nicht 100\% funktinierenden -- Funktion zum Speichern des Graphen (auf dem verbauten EEPROM) programmiert.
\fig{oddd-bsb}{Tag der offenen Tür: Blockschaltbild}{Tag der offenen Tür: Blockschaltbild}{0.75\textwidth}{Mieke/SW/ODD/ODDDragon}
\fig{oddd-gui1}{Tag der offenen Tür: GUI Hauptansicht}{Tag der offenen Tür: GUI Hauptansicht}{0.75\textwidth}{Mieke/SW/ODD/MainDisplay}
\fig{oddd-gui2}{Tag der offenen Tür: GUI Einstellungen}{Tag der offenen Tür: GUI Einstellungen}{0.75\textwidth}{Mieke/SW/ODD/SettingsDisplay}
\fig{oddd-gui3}{Tag der offenen Tür: GUI BMA Daten}{Tag der offenen Tür: GUI BMA Daten}{0.75\textwidth}{Mieke/SW/ODD/GyroDisplay}
\subsubsection{main.c} \subsubsection{main.c}
Das Hauptprogramm in \texttt{main.c} initsialisiert alle Ports sowie den SysTick Interrupt. Die einzelnen Komponenten wurden für die Übersichtlichkeit in extra Files ausgelagert. Im Hauptprogramm ist außerdem der Main-Loop, welcher die Werte vom BMA einliest und am Display ausgibt. Der Main-Loop fragt auch Displayeingaben ab und reagiert auf diese (Start/Stopp, Speichern und Laden). Das Hauptprogramm in \texttt{main.c} initsialisiert alle Ports sowie den SysTick Interrupt. Die einzelnen Komponenten wurden für die Übersichtlichkeit in extra Files ausgelagert. Im Hauptprogramm ist außerdem der Main-Loop, welcher die Werte vom BMA einliest und am Display ausgibt. Der Main-Loop fragt auch Displayeingaben ab und reagiert auf diese (Start/Stopp, Speichern und Laden).
\lstinputlisting[language={[ANSI]C}, caption=Tag der offenen Tür: Hauptprogramm, label=lst:sw-odd-main]{Mieke/SW/ODD/main.c} \lstinputlisting[language={[ANSI]C}, caption=Tag der offenen Tür: Hauptprogramm, label=lst:sw-odd-main]{Mieke/SW/ODD/main.c}
@ -52,8 +58,10 @@ Dieses Headerfile enthält alle Deklarationen, welche für die Bluetooth-Signal
Dieses C-File enthält die Implementation der Bluetooth Funktionen des Demoprogramms. Dieses C-File enthält die Implementation der Bluetooth Funktionen des Demoprogramms.
\lstinputlisting[language={[ANSI]C}, caption=Tag der offenen Tür: Bluetooth Implementation, label=lst:sw-odd-bluetoothc]{Mieke/SW/ODD/bluetooth.c} \lstinputlisting[language={[ANSI]C}, caption=Tag der offenen Tür: Bluetooth Implementation, label=lst:sw-odd-bluetoothc]{Mieke/SW/ODD/bluetooth.c}
\subsection{Testprogramm} \subsection{Testprogramm Minimalsystem}
Um die im Unterricht hergestellten Einheiten des \gls{Minimalsystem}s testen zu können, musste ein Testpgrogramm geschrieben werden, welches alle verwendeten Peripherieeinheiten ansteuern kann. Dabei war es nicht das Ziel eine bestimmte Funktion zu erreichen, sondenr zu testen, ob die Busse komplett durchverbunden sind, oder ob sich irgendwo auf der Leiterkarte kalte Lötstellen oder andere Fehler befinden. Dementsprechend testen diese Tests nur ob generell eine Kommunikation mit einer Peripherieeinheit möglich ist, und nicht ob diese auch korrekt funktioniert. Um die im Unterricht hergestellten Einheiten des \gls{Minimalsystem}s testen zu können, musste ein Testpgrogramm geschrieben werden, welches alle verwendeten Peripherieeinheiten ansteuern kann. Dabei war es nicht das Ziel eine bestimmte Funktion zu erreichen, sondern zu testen, ob die Busse komplett durchverbunden sind, oder ob sich irgendwo auf der Leiterkarte kalte Lötstellen oder andere Fehler befinden. Dementsprechend testen diese Tests nur ob generell eine Kommunikation mit einer Peripherieeinheit möglich ist, und nicht ob diese auch korrekt funktioniert.
\fig{mt-bsb}{Tests: Blockschaltbild}{Tests: Blockschaltbild}{0.75\textwidth}{Mieke/SW/MT/MT}
\subsubsection{main.h} \subsubsection{main.h}
Einige globale Definitionen. Einige globale Definitionen.

View file

@ -1,20 +1,27 @@
#include "stm32f10x.h" #include "stm32f10x.h" // Device header
#include "stm32f10x_gpio.h" // Keil::Device:StdPeriph Drivers:GPIO
void init_leds_switches(void) { #include "stm32f10x_rcc.h" // Keil::Device:StdPeriph Drivers:RCC
RCC->APB2ENR |= RCC_APB2ENR_IOPBEN;
GPIOB->CRH &= 0x00000000;
GPIOB->CRH |= 0x00000003;
}
int main() int main()
{ {
int i; uint8_t data;
init_leds_switches();
for (;;) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIOB->ODR = 0x01FF & ~(GPIOB->ODR & 0x01FF); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
for (i=0; i < 65535; i++);
for (i=0; i < 65535; i++); GPIO_InitTypeDef gpio;
for (i=0; i < 65535; i++); GPIO_StructInit(&gpio);
gpio.GPIO_Mode = GPIO_Mode_Out_PP;
gpio.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9;
GPIO_Init(GPIOC, &gpio);
gpio.GPIO_Mode = GPIO_Mode_IPU;
gpio.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8;
GPIO_Init(GPIOA, &gpio);
for(;;) {
data = (GPIO_ReadInputData(GPIOA) & 0x000F) | ((GPIO_ReadInputData(GPIOA) & 0x01E0) >> 1);
GPIO_Write(GPIOC, ((data & 0xE0) << 2) | ((data & 0x1F) << 1));
} }
} }

View file

@ -45,7 +45,7 @@ Danach muss dieser mit einem Doppelklick gestartet werden. Eventuell zeigt Windo
\fig{tut-install1}{\uVision{} 5: Begrüßungsbildschirm}{Begrüßungsbildschirm des Installers}{0.75\textwidth}{Mieke/Tutorial/Screenshots/install1} \fig{tut-install1}{\uVision{} 5: Begrüßungsbildschirm}{Begrüßungsbildschirm des Installers}{0.75\textwidth}{Mieke/Tutorial/Screenshots/install1}
Wenn der Dialog bestätigt wurde, startet der eigentliche Installationsprozess. Im Begrüßungsbildschirm (\fref{fig:tut-install1}) wird nochmals erläutert welche Version der Software zur Zeit installiert wird (in diesem Fall \uVision{} in Version \texttt{5.23}). Die Richtigkeit dieser Angaben wird mit einem Klick auf \texttt{Next} bestätigt. Wenn der Dialog bestätigt wurde, startet der eigentliche Installationsprozess. Im Begrüßungsbildschirm (\fref{fig:tut-install1}) wird nochmals erläutert welche Version der Software zur Zeit installiert wird (in diesem Fall \uVision{} in Version \texttt{5.24}). Die Richtigkeit dieser Angaben wird mit einem Klick auf \texttt{Next} bestätigt.
\fig{tut-install2}{\uVision{} 5: Lizenzbedingungen}{Lizenzbedingungen}{0.75\textwidth}{Mieke/Tutorial/Screenshots/install2} \fig{tut-install2}{\uVision{} 5: Lizenzbedingungen}{Lizenzbedingungen}{0.75\textwidth}{Mieke/Tutorial/Screenshots/install2}
@ -93,7 +93,7 @@ Nachdem die Updates erfolgreich eingespielt wurden sollte sich die gerade noch l
\fig{tut-pack6}{\uVision{} 5: Prozessor des Minimalsystems}{Prozessor des \gls{Minimalsystem}s}{\textwidth}{Mieke/Tutorial/Screenshots/pack6} \fig{tut-pack6}{\uVision{} 5: Prozessor des Minimalsystems}{Prozessor des \gls{Minimalsystem}s}{\textwidth}{Mieke/Tutorial/Screenshots/pack6}
Danach muss der passende Prozessor ausgewählt werden (\fref{fig:tut-pack6}). Im Zuge dieser Diplomarbeit wurde der Prozessor für den Schulgebrauch von \texttt{STM32F103RB} zu einem \texttt{STM32F107RB} geändert, dieser bietet mehr Features als der Alte Prozessor. Man kann den richtigen Prozessor entweder über die Liste auswählen, oder einfach das Suchfeld oben links verwenden um direkt den Richtigen angezeigt zu bekommen. Danach muss der passende Prozessor ausgewählt werden (\fref{fig:tut-pack6}). Im Zuge dieser Diplomarbeit wurde der Prozessor für den Schulgebrauch von \texttt{STM32F103RB} zu einem \texttt{\gls{cpu}} geändert, dieser bietet mehr Features als der alte Prozessor. Man kann den richtigen Prozessor entweder über die Liste auswählen, oder einfach das Suchfeld oben links verwenden um direkt den Richtigen angezeigt zu bekommen.
\fig{tut-pack7}{\uVision{} 5: Verfügbare Pakete für Prozessor}{Verfügbare Pakete für den Prozessor des \gls{Minimalsystem}s}{0.75\textwidth}{Mieke/Tutorial/Screenshots/pack7} \fig{tut-pack7}{\uVision{} 5: Verfügbare Pakete für Prozessor}{Verfügbare Pakete für den Prozessor des \gls{Minimalsystem}s}{0.75\textwidth}{Mieke/Tutorial/Screenshots/pack7}
@ -125,7 +125,7 @@ Mit einem Klick auf den entsprechenden Menüpunkt (\fref{fig:tut-projekt2}) kann
\fig{tut-projekt3}{\uVision{} 5: Prozessorauswahldialog}{Prozessorauswahldialog}{0.75\textwidth}{Mieke/Tutorial/Screenshots/projekt3} \fig{tut-projekt3}{\uVision{} 5: Prozessorauswahldialog}{Prozessorauswahldialog}{0.75\textwidth}{Mieke/Tutorial/Screenshots/projekt3}
Im nächsten Bildschirm (\fref{fig:tut-projekt3}) wird abgefragt welcher Prozessor verwendet werden soll, in unserem Fall ist dies wieder der \texttt{STM32F107RB}. Man kann den richtigen Prozessor entweder in der Liste heraus suchen, oder den Namen direkt in das Suchfeld eingeben. Auf der rechten Seite wird ein Beschreibungstext mit den Features des gewählten Prozessors angezeigt. Im nächsten Bildschirm (\fref{fig:tut-projekt3}) wird abgefragt welcher Prozessor verwendet werden soll, in unserem Fall ist dies wieder der \texttt{\gls{cpu}}. Man kann den richtigen Prozessor entweder in der Liste heraus suchen, oder den Namen direkt in das Suchfeld eingeben. Auf der rechten Seite wird ein Beschreibungstext mit den Features des gewählten Prozessors angezeigt.
\fig{tut-projekt4}{\uVision{} 5: Laufzeitumgebungskonfigurationsfenster}{Laufzeitumgebungskonfigurationsfenster}{0.75\textwidth}{Mieke/Tutorial/Screenshots/projekt4} \fig{tut-projekt4}{\uVision{} 5: Laufzeitumgebungskonfigurationsfenster}{Laufzeitumgebungskonfigurationsfenster}{0.75\textwidth}{Mieke/Tutorial/Screenshots/projekt4}
@ -137,12 +137,12 @@ Danach wird gefragt welche \gls{CMSIS}-Libraries eingebunden werden sollen (\fre
\fig{tut-projekt5}{\uVision{} 5: Beispielprogramm}{Beispielprogramm}{0.75\textwidth}{Mieke/Tutorial/Screenshots/projekt5} \fig{tut-projekt5}{\uVision{} 5: Beispielprogramm}{Beispielprogramm}{0.75\textwidth}{Mieke/Tutorial/Screenshots/projekt5}
In \fref{fig:tut-projekt5} ist ein kleines Beispielprogramm zu sehen, welches die LEDs der LED-/Schalterplatine blinken lässt. Links zu sehen ist der Projektbaum. \gls{C}-Files werden über den entsprechenden Menüpunkt (Rechtsklick auf die \texttt{Source Group 1} und dann \texttt{Add Item to Group...}) angelegt und direkt in das Projekt eingebunden. Der passende Dateiname und Typ ist im folgenden Fenster (\fref{fig:tut-projekt5-2}) entsprechend zu wählen. Das \fref{lst:tut-example1} kann einfach in das \gls{C}-File kopiert werden. In \fref{fig:tut-projekt5} ist ein kleines Beispielprogramm zu sehen, welches die Schalter der \gls{Basisplatine} einliest und die LEDs dementsprechend leuchten lässt. Links zu sehen ist der Projektbaum. \gls{C}-Files werden über den entsprechenden Menüpunkt (Rechtsklick auf die \texttt{Source Group 1} und dann \texttt{Add Item to Group...}) angelegt und direkt in das Projekt eingebunden. Der passende Dateiname und Typ ist im folgenden Fenster (\fref{fig:tut-projekt5-2}) entsprechend zu wählen. Das \fref{lst:tut-example1} kann einfach in das \gls{C}-File kopiert werden.
\fig{tut-projekt5-2}{\uVision{} 5: Dateierstellungsdialog}{Dateierstellungsdialog}{0.75\textwidth}{Mieke/Tutorial/Screenshots/asm2} \fig{tut-projekt5-2}{\uVision{} 5: Dateierstellungsdialog}{Dateierstellungsdialog}{0.75\textwidth}{Mieke/Tutorial/Screenshots/asm2}
\FloatBarrier \FloatBarrier
\lstinputlisting[language={[ANSI]C}, caption=LED Blinklicht, label=lst:tut-example1]{Mieke/Tutorial/Listings/example1.c} \lstinputlisting[language={[ANSI]C}, caption=LED/Schalter Test, label=lst:tut-example1]{Mieke/Tutorial/Listings/example1.c}
\fig{tut-projekt5-1}{\uVision{} 5: Schaltfläche zum kompilieren}{Schaltfläche zum kompilieren}{0.3\textwidth}{Mieke/Tutorial/Screenshots/projekt5-1} \fig{tut-projekt5-1}{\uVision{} 5: Schaltfläche zum kompilieren}{Schaltfläche zum kompilieren}{0.3\textwidth}{Mieke/Tutorial/Screenshots/projekt5-1}
@ -150,35 +150,21 @@ Als nächstes muss das geschriebene Programm kompiliert werden, dazu ist einfach
\fig{tut-projekt6}{\uVision{} 5: Optionsschaltfläche}{Optionsschaltfläche}{0.3\textwidth}{Mieke/Tutorial/Screenshots/projekt6} \fig{tut-projekt6}{\uVision{} 5: Optionsschaltfläche}{Optionsschaltfläche}{0.3\textwidth}{Mieke/Tutorial/Screenshots/projekt6}
Bevor nun aber das fertig kompilierte Programm auf das \gls{Minimalsystem} geflasht werden kann, muss der Debugging Adapter\footnote{In unserem Fall ein \gls{Keil} ULINK-ME} angeschlossen (\fref{fig:tut-projekt6-1}) und dessen Software geupdatet werden. Dies kann mittels Klick auf den Zauberstab (\fref{fig:tut-projekt6}) gestartet werden werden. Bevor nun aber das fertig kompilierte Programm auf das \gls{Minimalsystem} geflasht werden kann, muss der Debugging Adapter\footnote{In unserem Fall ein ST Link V2} angeschlossen (\fref{fig:tut-projekt6-1}) werden. Dies kann mittels Klick auf den Zauberstab (\fref{fig:tut-projekt6}) kann der richtige Debugger ausgewählt werden.
\fig{tut-projekt6-1}{\uVision{} 5: Aufbau des Minimalsystems}{Aufbau des \gls{Minimalsystem}s}{0.75\textwidth}{Mieke/Tutorial/Pictures/SetUp} \fig{tut-projekt6-1}{\uVision{} 5: Aufbau des Minimalsystems}{Aufbau des \gls{Minimalsystem}s}{\textwidth}{Allgemein/img/Gesamtsystem}
\fig{tut-projekt7}{\uVision{} 5: Optionsfenster}{Optionsfenster}{0.75\textwidth}{Mieke/Tutorial/Screenshots/projekt7} \fig{tut-projekt7}{\uVision{} 5: Optionsfenster}{Optionsfenster}{0.75\textwidth}{Mieke/Tutorial/Screenshots/debugging12}
Danach geht das in \fref{fig:tut-projekt7} abgebildete Fenster auf. Eventuell steht die Auswahl nicht auf dem Debug Reiter oben, dann ist dies manuell mittels Mausklick durchzuführen. Auf der rechten Seite muss der Radio Button bei \texttt{Use} ausgewählt werden und im Dropdown daneben \texttt{ULINK2/ME Cortex Debugger}. Wenn die Updateaufforderung (\fref{fig:tut-projekt8}) nicht automatisch auftaucht, muss der Button \texttt{Settings} geklickt werden. Danach geht das in \fref{fig:tut-projekt7} abgebildete Fenster auf. Eventuell steht die Auswahl nicht auf dem Debug Reiter oben, dann ist dies manuell mittels Mausklick durchzuführen. Auf der rechten Seite muss der Radio Button bei \texttt{Use} ausgewählt werden und im Dropdown daneben \texttt{ST-Link Debugger}.
\fig{tut-projekt8}{\uVision{} 5: Firmwareupdate}{Firmwareupdate}{0.75\textwidth}{Mieke/Tutorial/Screenshots/projekt8}
\begin{warning}
Achtung: Das Firmware Update ist notwendig um den Debugger zusammen mit \uVision{} 5 zu verwenden, allerdings ist dieser dann nicht mehr mit Version 4 kompatibel, hierfür muss die Firmware wieder mittels externem Programm auf die Alte geändert werden.
\end{warning}
Die Meldung zum Update der Firmware muss mittels Klick auf den Button \texttt{OK} bestätigt werden. Danach muss gewartet werden, bis das Update durchgelaufen ist.
\begin{warning}
Achtung: Trennen Sie in dieser Zeit nicht das USB Kabel des Debuggers, da dieser sonst gegebenenfalls irreperabel beschädigt werden könnte!
\end{warning}
Wenn das Update fertig durchgelaufen ist, und wieder das Optionsfenster (\fref{fig:tut-projekt7}) zu sehen ist, stellen Sie sicher, dass die dort gezeigten Einstellungen übereinstimmen, und klicken Sie dann auf \texttt{OK}.
\fig{tut-projekt9}{\uVision{} 5: Debugger Einstellungen}{Debugger Einstellungen}{0.75\textwidth}{Mieke/Tutorial/Screenshots/projekt9} \fig{tut-projekt9}{\uVision{} 5: Debugger Einstellungen}{Debugger Einstellungen}{0.75\textwidth}{Mieke/Tutorial/Screenshots/projekt9}
Im nun auf gegangenen Fenster (\fref{fig:tut-projekt9}) sollte die Checkbox \texttt{Reset and Run} aktiviert werden. Dies ist zwar für den korrekten Betrieb nicht nötig, erleichtert aber das Arbeiten sehr, da nicht nach jedem mal neu flashen der Reset Knopf des Prozessors gedrückt werden muss. Danach klickt man auf \texttt{Settings} rechts daneben. Im nun auf gegangenen Fenster (\fref{fig:tut-projekt9}) sollte die Checkbox \texttt{Reset and Run} aktiviert werden. Dies ist zwar für den korrekten Betrieb nicht nötig, erleichtert aber das Arbeiten sehr, da nicht nach jedem mal neu flashen der Reset Knopf des Prozessors gedrückt werden muss.
\fig{tut-projekt10}{\uVision{} 5: Load Button}{Load Button}{0.3\textwidth}{Mieke/Tutorial/Screenshots/projekt10} \fig{tut-projekt10}{\uVision{} 5: Load Button}{Load Button}{0.3\textwidth}{Mieke/Tutorial/Screenshots/projekt10}
Nun kann das kompilierte Programm mittels des Load Buttons (\fref{fig:tut-projekt10}) auf den Zielprozessor geladen werden. Wenn die Einstellungen, welche bei \fref{fig:tut-projekt9} zu sehen sind richtig angewendet wurden, sollte nun die LEDs der LED-/Schalterplatine anfangen zu blinken. Damit ist die \uVision{} \gls{IDE} in der Version 5 fertig eingerichtet und bereit verwendet zu werden! Nun kann das kompilierte Programm mittels des Load Buttons (\fref{fig:tut-projekt10}) auf den Zielprozessor geladen werden. Wenn die Einstellungen, welche bei \fref{fig:tut-projekt9} zu sehen sind richtig angewendet wurden, sollte nun die LEDs der \gls{Basisplatine} entsprechend den Schalterpositionen leuchten. Damit ist die \uVision{} \gls{IDE} in der Version 5 fertig eingerichtet und bereit verwendet zu werden!
\subsubsection{Debugging} \subsubsection{Debugging}
\label{sec:tut-debugging} \label{sec:tut-debugging}
@ -228,46 +214,34 @@ Eine weitere Möglichkeit des Debuggings ist es, das Memory Fenster zu benutzen.
Mit Hilfe des Watches Fenster (\fref{fig:tut-debugging11}) können Variablen im \gls{C} Programm \enquote{beobachtet} werden. Das Fenster zeigt, sofern auf die Variable an der entsprechenden Programmstelle zugegriffen werden kann, immer den aktuellen Wert eben dieser an. Auch hier ist es möglich den Wert in Echtzeit zu ändern, außerdem können einfache Berechnungen durchgeführt werden. Mit Hilfe des Watches Fenster (\fref{fig:tut-debugging11}) können Variablen im \gls{C} Programm \enquote{beobachtet} werden. Das Fenster zeigt, sofern auf die Variable an der entsprechenden Programmstelle zugegriffen werden kann, immer den aktuellen Wert eben dieser an. Auch hier ist es möglich den Wert in Echtzeit zu ändern, außerdem können einfache Berechnungen durchgeführt werden.
\subsubsubsection[Keil ULINK2/ME Debugger]{\gls{Keil} ULINK2/ME Debugger} % \subsubsection{Assembler-Programmierung}
\label{sec:tut-debugging1} % \label{sec:tut-asm}
Der ULINK/ME\footnote{Diese Bezeichnung bezeichnet die alte Firmware, nach dem Upgrade der Firmware für \uVision{} 5 wird dieser Adapter als ULINK2/ME bezeichnet und ist inkompatibel zu \uVision{} 4.} ist der Standard-Debug-Adapter, welcher bis 2017 verwendet wurde und bei den alten \gls{Minimalsystem}en immer noch verwendet wird. Die entsprechende Konfiguration und das nötige Firmware-Upgrade wurden hierfür schon in \fref{sec:tut-firstproject3} erläutert. Hierbei sind besonders \fref{fig:tut-projekt7} und \fref{fig:tut-projekt9} zu beachten. % Zu Beginn wird die Programmierung vom Cortex-M3 mittels Assembler unterrichtet, dementsprechend befasst sich auch dieses Tutorial zuerst mir der Assembler-Programmierung. Hierzu wird ein Beispielprogramm verwendet und erläutert wie die \gls{IDE} eingestellt werden muss, und was alles zu tun ist um dieses Programm erfolgreich zu assemblieren und auszuprobieren.
\subsubsubsection{ST-Link Debugger} % Als erstes muss ein neues Projekt angelegt werden wie in \fref{sec:tut-firstproject3} erklärt. Wichtig hierbei ist es die richtigen \gls{CMSIS}-Packs zu wählen, da das Ziel ein Assembler-Projekt ist, ist hierbei das HTL Assembler-Pack (\fref{fig:tut-asm1}) zu wählen.
\label{sec:tut-debugging2}
Das neue \gls{Minimalsystem} ist dafür vorgesehen mit einem ST-Link Debugger im \gls{SWD}-Modus verwendet zu werden. Wenn das \gls{Core-Modul} mit der \gls{Basisplatine} vebunden ist, kann allerdings auch der ULINK2/ME \gls{Debugging}-Adapter verwendet werden. Der ST-Link braucht im Gegensatz zu einem auf \gls{JTAG} basierenden Debugger weniger Pins und somit weniger Platz auf dem Zielsystem. Die \gls{IDE} muss lediglich auf diesen neuen Debugger umgestellt werden, siehe dazu auch das Debug-Fenster, wo der ST-Link Debugger ausgewählt ist (\fref{fig:tut-debugging12}). Nähere Infos dazu, wie man zu diesem Fenster kommt kann in \fref{sec:tut-firstproject3} gefunden werden. Die Verwendung des aktuellen ST-Link (Version 2) \gls{Debugging}-Adapters ist in \uVision{} 4 nicht mehr möglich. % \fig{tut-asm1}{\uVision{} 5: Paketwahldialog mit HTL Pack}{Paketwahldialog mit HTL Pack}{0.75\textwidth}{Mieke/Tutorial/Screenshots/asm1}
\fig{tut-debugging12}{\uVision{} 5: Debug Fenster (ST-Link ausgewählt)}{Debug Fenster (ST-Link ausgewählt)}{0.75\textwidth}{Mieke/Tutorial/Screenshots/debugging12} % Ist dies erledigt, kann eine neue Assembler Source-Datei erstellt werden, dazu klickt man mit der rechten Maustaste auf die \texttt{Source Group 1} und wählt im Kontextmenü \texttt{Add New Item to Group...}, im sich nun öffnenden Fenster (\fref{fig:tut-asm2}) wählt man nun \texttt{Asm File} und vergibt einen passenden Namen (zum Beispiel \texttt{main.s}).
\subsubsection{Assembler-Programmierung} % \fig{tut-asm2}{\uVision{} 5: Dateierstellungsdialog}{Dateierstellungsdialog}{0.75\textwidth}{Mieke/Tutorial/Screenshots/asm2}
\label{sec:tut-asm}
Zu Beginn wird die Programmierung vom Cortex-M3 mittels Assembler unterrichtet, dementsprechend befasst sich auch dieses Tutorial zuerst mir der Assembler-Programmierung. Hierzu wird ein Beispielprogramm verwendet und erläutert wie die \gls{IDE} eingestellt werden muss, und was alles zu tun ist um dieses Programm erfolgreich zu assemblieren und auszuprobieren. % Durch einen Kick auf \texttt{Add} wird die Datei hinzugefügt und kann anschließend bearbeitet werden. In diesem Beispiel wird das erste Beispielprogramm (eine blinkende LED auf der LED-/Schalterplatine) programmiert. Hierzu ist der Source Code aus \fref{lst:tut-asm} zu verwenden. In der zweiten Zeile wird die HTBL Memory Map inkludiert, welche durch das \gls{CMSIS}-Pack zur Verfügung gestellt wird.
Als erstes muss ein neues Projekt angelegt werden wie in \fref{sec:tut-firstproject3} erklärt. Wichtig hierbei ist es die richtigen \gls{CMSIS}-Packs zu wählen, da das Ziel ein Assembler-Projekt ist, ist hierbei das HTL Assembler-Pack (\fref{fig:tut-asm1}) zu wählen. % \lstinputlisting[language={[ARM]Assembler}, caption=LED Blinklicht, label=lst:tut-asm]{Mieke/Tutorial/Listings/asm.s}
\fig{tut-asm1}{\uVision{} 5: Paketwahldialog mit HTL Pack}{Paketwahldialog mit HTL Pack}{0.75\textwidth}{Mieke/Tutorial/Screenshots/asm1} % Danach kann das Programm assembliert und anschließend auf den Cortex geladen werden. Dieses vorgehen ist näher in \fref{sec:tut-firstproject3} beschrieben. Nun sollte, nach einem Reset des Microcontrollers, die erste LED von rechts (PB8) auf der LED-/Schalterplatine blinken. Nähere Informationen zum Debugging können in \fref{sec:tut-debugging} gefunden werden.
Ist dies erledigt, kann eine neue Assembler Source-Datei erstellt werden, dazu klickt man mit der rechten Maustaste auf die \texttt{Source Group 1} und wählt im Kontextmenü \texttt{Add New Item to Group...}, im sich nun öffnenden Fenster (\fref{fig:tut-asm2}) wählt man nun \texttt{Asm File} und vergibt einen passenden Namen (zum Beispiel \texttt{main.s}). % \subsubsection{\gls{C}-Programmierung}
% \label{sec:tut-c}
\fig{tut-asm2}{\uVision{} 5: Dateierstellungsdialog}{Dateierstellungsdialog}{0.75\textwidth}{Mieke/Tutorial/Screenshots/asm2} % Nach dem Einstieg mit Assembler, wird auch die Programmierung mit der Sprache \gls{C} unterrichtet, die Projekterstellung für diese Sprache weicht nicht sonderlich von der für Assembler (\fref{sec:tut-asm}) und dem vorgehen im Allgemeinen (\fref{sec:tut-firstproject3}) ab. Allerdings ist auch hier zu beachten das richtige \gls{CMSIS} Pack der HTL zu verwenden. Dies ist im Anfang noch nicht so wichtig, da die ersten Programme ohne die \gls{STDLib} auskommen, allerdings ist diese in den späteren Programmen unbedingt nötig. Um die Library einzufügen, ist diese im Pack Manager (\fref{fig:tut-c1}) auszuwählen.
Durch einen Kick auf \texttt{Add} wird die Datei hinzugefügt und kann anschließend bearbeitet werden. In diesem Beispiel wird das erste Beispielprogramm (eine blinkende LED auf der LED-/Schalterplatine) programmiert. Hierzu ist der Source Code aus \fref{lst:tut-asm} zu verwenden. In der zweiten Zeile wird die HTBL Memory Map inkludiert, welche durch das \gls{CMSIS}-Pack zur Verfügung gestellt wird. % \fig{tut-c1}{\uVision{} 5: Paketwahldialog mit HTL STDLib Pack}{Paketwahldialog mit \gls{STDLib} Pack}{0.75\textwidth}{Mieke/Tutorial/Screenshots/c1}
\lstinputlisting[language={[ARM]Assembler}, caption=LED Blinklicht, label=lst:tut-asm]{Mieke/Tutorial/Listings/asm.s} % Als erstes Demoprogramm ist hier ein Lauflicht, welches in \fref{lst:tut-c} zu sehen ist, zu realisieren.
Danach kann das Programm assembliert und anschließend auf den Cortex geladen werden. Dieses vorgehen ist näher in \fref{sec:tut-firstproject3} beschrieben. Nun sollte, nach einem Reset des Microcontrollers, die erste LED von rechts (PB8) auf der LED-/Schalterplatine blinken. Nähere Informationen zum Debugging können in \fref{sec:tut-debugging} gefunden werden. % \lstinputlisting[language={[ANSI]C}, caption=LED Lauflicht, label=lst:tut-c]{Mieke/Tutorial/Listings/c.c}
\subsubsection{\gls{C}-Programmierung} % Auch hier verhält sich das Debugging so wie in \fref{sec:tut-debugging} beschrieben.
\label{sec:tut-c}
Nach dem Einstieg mit Assembler, wird auch die Programmierung mit der Sprache \gls{C} unterrichtet, die Projekterstellung für diese Sprache weicht nicht sonderlich von der für Assembler (\fref{sec:tut-asm}) und dem vorgehen im Allgemeinen (\fref{sec:tut-firstproject3}) ab. Allerdings ist auch hier zu beachten das richtige \gls{CMSIS} Pack der HTL zu verwenden. Dies ist im Anfang noch nicht so wichtig, da die ersten Programme ohne die \gls{STDLib} auskommen, allerdings ist diese in den späteren Programmen unbedingt nötig. Um die Library einzufügen, ist diese im Pack Manager (\fref{fig:tut-c1}) auszuwählen.
\fig{tut-c1}{\uVision{} 5: Paketwahldialog mit HTL STDLib Pack}{Paketwahldialog mit \gls{STDLib} Pack}{0.75\textwidth}{Mieke/Tutorial/Screenshots/c1}
Als erstes Demoprogramm ist hier ein Lauflicht, welches in \fref{lst:tut-c} zu sehen ist, zu realisieren.
\lstinputlisting[language={[ANSI]C}, caption=LED Lauflicht, label=lst:tut-c]{Mieke/Tutorial/Listings/c.c}
Auch hier verhält sich das Debugging so wie in \fref{sec:tut-debugging} beschrieben.