<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://www.mikrocontroller.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mtothea</id>
	<title>Mikrocontroller.net - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://www.mikrocontroller.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mtothea"/>
	<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/articles/Spezial:Beitr%C3%A4ge/Mtothea"/>
	<updated>2026-04-21T12:37:46Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.39.7</generator>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Benutzer:Mtothea&amp;diff=84568</id>
		<title>Benutzer:Mtothea</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Benutzer:Mtothea&amp;diff=84568"/>
		<updated>2014-08-20T16:19:47Z</updated>

		<summary type="html">&lt;p&gt;Mtothea: /* Basic Timer */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Meine kleinen Programme&lt;br /&gt;
== Basic Timer ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
// Mein erstes Mainfile&lt;br /&gt;
&lt;br /&gt;
// Mit der conf-Datei beherrschen und steuern wir&lt;br /&gt;
// die gesammte &lt;br /&gt;
#include &amp;quot;stm32f4xx_conf.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;stm32f4xx.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
void RCC_init(void){&lt;br /&gt;
	// ueber die RCC werden die diversen Peripherie-Einheiten eingeschaltet&lt;br /&gt;
	// (durch konfiguration der RCC)&lt;br /&gt;
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);&lt;br /&gt;
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM7, ENABLE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void GPIO_init(void){//Name ist selbst gew‰hlt&lt;br /&gt;
	// hier werden alle GPIO-Pins konfiguriert&lt;br /&gt;
	// etwas schwieriger, weil es ueber eine Struktur&lt;br /&gt;
	// gemacht werden muss, dafuer ist dann alles auf&lt;br /&gt;
	// einen Schlag erledigt&lt;br /&gt;
	&lt;br /&gt;
	GPIO_InitTypeDef GPIO_InitTypeStructure;&lt;br /&gt;
	&lt;br /&gt;
	GPIO_InitTypeStructure.GPIO_Mode=GPIO_Mode_OUT;&lt;br /&gt;
	GPIO_InitTypeStructure.GPIO_OType=GPIO_OType_PP;&lt;br /&gt;
	GPIO_InitTypeStructure.GPIO_Pin=GPIO_Pin_15 | GPIO_Pin_14 | GPIO_Pin_13 | GPIO_Pin_12;&lt;br /&gt;
	GPIO_InitTypeStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;&lt;br /&gt;
	GPIO_InitTypeStructure.GPIO_Speed=GPIO_Speed_2MHz;&lt;br /&gt;
&lt;br /&gt;
	GPIO_Init(GPIOD, &amp;amp;GPIO_InitTypeStructure);&lt;br /&gt;
}&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
void TIM7_init(void){&lt;br /&gt;
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;&lt;br /&gt;
	TIM_TimeBaseInitStructure.TIM_Prescaler=16800;&lt;br /&gt;
  TIM_TimeBaseInitStructure.TIM_Period=2500;&lt;br /&gt;
	TIM_TimeBaseInit(TIM7, &amp;amp;TIM_TimeBaseInitStructure);&lt;br /&gt;
	&lt;br /&gt;
	// Der Timer muss nicht nur ueber die RCC eingeschaltet werden,&lt;br /&gt;
	// sondern auch nur so zum Zaehlen gebracht werden.&lt;br /&gt;
	// Das ist im Bedarfsfall ein/ausschaltbar.&lt;br /&gt;
	TIM_Cmd(TIM7, ENABLE);&lt;br /&gt;
	&lt;br /&gt;
	// dieser Timer darf einen Interrupt auslˆsen&lt;br /&gt;
	TIM_ITConfig(TIM7, TIM_IT_Update, ENABLE);&lt;br /&gt;
}	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void NVIC_init(void){&lt;br /&gt;
	NVIC_InitTypeDef NVIC_InitTypeStructure;&lt;br /&gt;
	NVIC_InitTypeStructure.NVIC_IRQChannel = TIM7_IRQn;&lt;br /&gt;
	NVIC_InitTypeStructure.NVIC_IRQChannelCmd = ENABLE;&lt;br /&gt;
	NVIC_InitTypeStructure.NVIC_IRQChannelPreemptionPriority = 0;&lt;br /&gt;
	NVIC_InitTypeStructure.NVIC_IRQChannelSubPriority = 0;&lt;br /&gt;
	NVIC_Init(&amp;amp;NVIC_InitTypeStructure);&lt;br /&gt;
}&lt;br /&gt;
	&lt;br /&gt;
void TIM7_IRQHandler(void){&lt;br /&gt;
	// 1. Diese Funktion MUSS so heissen&lt;br /&gt;
	// 2. Diese Funtion wird beim Auftreten des Interrups ausgefuehrt&lt;br /&gt;
	// 3. Das PENDING BIT muss zurueckgesetzt werden&lt;br /&gt;
	&lt;br /&gt;
	// Das ist die Nutzlast der Interrupt Service Routine (Handler)&lt;br /&gt;
	GPIO_ToggleBits(GPIOD, GPIO_Pin_15 | GPIO_Pin_14 | GPIO_Pin_13 | GPIO_Pin_12); &lt;br /&gt;
	&lt;br /&gt;
	TIM_ClearITPendingBit(TIM7, TIM_IT_Update);&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
int main(void){&lt;br /&gt;
	&lt;br /&gt;
	RCC_init();		// Stromversorgung&lt;br /&gt;
	GPIO_init();	// Alle Pins konfigurieren&lt;br /&gt;
	&lt;br /&gt;
	GPIO_SetBits(GPIOD, GPIO_Pin_14 | GPIO_Pin_12);&lt;br /&gt;
	&lt;br /&gt;
	TIM7_init();	// Timer 7 los&lt;br /&gt;
	NVIC_init();	// NVIC, oje&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	while(1){		// jetzt immer Nase bohren, weil Core sonst&lt;br /&gt;
							// die Arbeit einstellen wuerde&lt;br /&gt;
							// hier erfolgt das blinken&lt;br /&gt;
		&lt;br /&gt;
	// hier tun wir genau gar nix, der Kern kˆnnte auch Schlafen&lt;br /&gt;
	// das ist gutes Nasebohren&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Systick ===&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
//Mit der CONF-Datei beherrschen und steuern wir&lt;br /&gt;
//die ganze FW-Lib&lt;br /&gt;
#include &amp;quot;stm32f4xx_conf.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
//die Includes, damit wir und nichtmehr&lt;br /&gt;
//irgedwelche Adressen zusammensuchen muessen&lt;br /&gt;
#include &amp;quot;stm32f4xx.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void RCC_initialisieren(void){&lt;br /&gt;
//ueber die RCC werden die diversen Peripherie-Einheiten&lt;br /&gt;
//eingeschaltet (durch Konfiguration der RCC)&lt;br /&gt;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void GPIO_initialisieren(void){&lt;br /&gt;
//hier werden alle GPIO-Pins konfiguriert&lt;br /&gt;
//etwas schwieriger, weil es ueber eine Struktur&lt;br /&gt;
//gemacht werden muss, dafuer ist dann alles auf&lt;br /&gt;
//einen Schlag erledigt&lt;br /&gt;
&lt;br /&gt;
GPIO_InitTypeDef GPIO_InitTypeStructure;&lt;br /&gt;
GPIO_InitTypeStructure.GPIO_Mode=GPIO_Mode_OUT;&lt;br /&gt;
GPIO_InitTypeStructure.GPIO_OType=GPIO_OType_PP;&lt;br /&gt;
GPIO_InitTypeStructure.GPIO_Pin=GPIO_Pin_15| GPIO_Pin_14| GPIO_Pin_13| GPIO_Pin_12;&lt;br /&gt;
GPIO_InitTypeStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;&lt;br /&gt;
GPIO_InitTypeStructure.GPIO_Speed=GPIO_Speed_2MHz; &lt;br /&gt;
GPIO_Init(GPIOD, &amp;amp;GPIO_InitTypeStructure);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void SysTick_initialisieren (void){&lt;br /&gt;
&lt;br /&gt;
SysTick_Config(SystemCoreClock/100);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
char counter = 0;&lt;br /&gt;
&lt;br /&gt;
void SysTick_Handler(void) {&lt;br /&gt;
	counter++;&lt;br /&gt;
	if (counter==25)&lt;br /&gt;
		GPIO_ToggleBits(GPIOD,GPIO_Pin_15);&lt;br /&gt;
	if (counter==50)&lt;br /&gt;
		GPIO_ToggleBits(GPIOD,GPIO_Pin_14);&lt;br /&gt;
	if (counter==75)&lt;br /&gt;
		GPIO_ToggleBits(GPIOD,GPIO_Pin_13);&lt;br /&gt;
	if (counter==100){&lt;br /&gt;
		GPIO_ToggleBits(GPIOD,GPIO_Pin_12);&lt;br /&gt;
		counter = 0;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
int main(void){&lt;br /&gt;
&lt;br /&gt;
RCC_initialisieren(); // Stromversorgung&lt;br /&gt;
GPIO_initialisieren(); // Alle Pins konfigurieren und schonmal zwei LEDs einschalten&lt;br /&gt;
SysTick_initialisieren();&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
while(1){} // Hier tun wir GENAU GAR NIX&lt;br /&gt;
// Der Kern koennte auch schlafen&lt;br /&gt;
// Es wird nur auf die Unterbrechung durch den Interrtup gewartet&lt;br /&gt;
// Das ist &amp;quot;gutes&amp;quot; Nasebohren&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== USART ==&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
// Mein erstes Mainfile&lt;br /&gt;
&lt;br /&gt;
// Mit der conf-Datei beherrschen und steuern wir&lt;br /&gt;
// die gesammte &lt;br /&gt;
#include &amp;quot;stm32f4xx_conf.h&amp;quot;&lt;br /&gt;
#include &amp;quot;stm32f4xx.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
void RCC_init(void){&lt;br /&gt;
	// ueber die RCC werden die diversen Peripherie-Einheiten eingeschaltet&lt;br /&gt;
	// (durch konfiguration der RCC)&lt;br /&gt;
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);&lt;br /&gt;
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);&lt;br /&gt;
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);&lt;br /&gt;
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void GPIO_init(void){//Name ist selbst gew‰hlt&lt;br /&gt;
	// hier werden alle GPIO-Pins konfiguriert&lt;br /&gt;
	// etwas schwieriger, weil es ueber eine Struktur&lt;br /&gt;
	// gemacht werden muss, dafuer ist dann alles auf&lt;br /&gt;
	// einen Schlag erledigt&lt;br /&gt;
	&lt;br /&gt;
	GPIO_InitTypeDef GPIO_InitTypeStructure;&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	GPIO_InitTypeStructure.GPIO_Mode=GPIO_Mode_OUT;&lt;br /&gt;
	GPIO_InitTypeStructure.GPIO_OType=GPIO_OType_PP;&lt;br /&gt;
	GPIO_InitTypeStructure.GPIO_Pin=GPIO_Pin_13;&lt;br /&gt;
	GPIO_InitTypeStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;&lt;br /&gt;
	GPIO_InitTypeStructure.GPIO_Speed=GPIO_Speed_2MHz;&lt;br /&gt;
&lt;br /&gt;
	GPIO_Init(GPIOD, &amp;amp;GPIO_InitTypeStructure);&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	GPIO_InitTypeStructure.GPIO_Mode=GPIO_Mode_AF;&lt;br /&gt;
	GPIO_InitTypeStructure.GPIO_OType=GPIO_OType_PP;&lt;br /&gt;
	GPIO_InitTypeStructure.GPIO_Pin=GPIO_Pin_15;&lt;br /&gt;
	GPIO_InitTypeStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;&lt;br /&gt;
	GPIO_InitTypeStructure.GPIO_Speed=GPIO_Speed_2MHz;&lt;br /&gt;
	&lt;br /&gt;
	GPIO_Init(GPIOD, &amp;amp;GPIO_InitTypeStructure);&lt;br /&gt;
	GPIO_PinAFConfig(GPIOD, GPIO_PinSource15, GPIO_AF_TIM4);&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	GPIO_InitTypeStructure.GPIO_Mode=GPIO_Mode_AF;&lt;br /&gt;
	GPIO_InitTypeStructure.GPIO_OType=GPIO_OType_PP;&lt;br /&gt;
	GPIO_InitTypeStructure.GPIO_Pin=GPIO_Pin_2;&lt;br /&gt;
	GPIO_InitTypeStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;&lt;br /&gt;
	GPIO_InitTypeStructure.GPIO_Speed=GPIO_Speed_2MHz;&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	GPIO_Init(GPIOA, &amp;amp;GPIO_InitTypeStructure);&lt;br /&gt;
	GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_USART2);&lt;br /&gt;
	&lt;br /&gt;
	// Eine Led wird von Beginn an eingeschaltet&lt;br /&gt;
	GPIO_SetBits(GPIOD, GPIO_Pin_13);&lt;br /&gt;
}&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void USART2_init(void){&lt;br /&gt;
	USART_InitTypeDef USART_InitStructure;&lt;br /&gt;
	&lt;br /&gt;
	USART_InitStructure.USART_BaudRate=9600;&lt;br /&gt;
	USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;&lt;br /&gt;
	USART_InitStructure.USART_Mode=USART_Mode_Tx;&lt;br /&gt;
	USART_InitStructure.USART_Parity=USART_Parity_No;&lt;br /&gt;
	USART_InitStructure.USART_StopBits=USART_StopBits_1;&lt;br /&gt;
	USART_InitStructure.USART_WordLength=USART_WordLength_8b;&lt;br /&gt;
	&lt;br /&gt;
	USART_Init(USART2, &amp;amp;USART_InitStructure);&lt;br /&gt;
	USART_Cmd(USART2, ENABLE);&lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
void TIM4_init(void){&lt;br /&gt;
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;&lt;br /&gt;
	TIM_OCInitTypeDef TIM_OCInitStructure;&lt;br /&gt;
	&lt;br /&gt;
	TIM_TimeBaseInitStructure.TIM_Prescaler=99;	// 41999 w‰re standard&lt;br /&gt;
  TIM_TimeBaseInitStructure.TIM_Period=1999;&lt;br /&gt;
	TIM_TimeBaseInit(TIM4, &amp;amp;TIM_TimeBaseInitStructure);&lt;br /&gt;
	&lt;br /&gt;
	// Der Timer muss nicht nur ueber die RCC eingeschaltet werden,&lt;br /&gt;
	// sondern auch nur so zum Zaehlen gebracht werden.&lt;br /&gt;
	// Das ist im Bedarfsfall ein/ausschaltbar.&lt;br /&gt;
	TIM_Cmd(TIM4, ENABLE);&lt;br /&gt;
	&lt;br /&gt;
	// jetzt den Channel konfigurieren&lt;br /&gt;
	TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;&lt;br /&gt;
	TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;&lt;br /&gt;
	TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;&lt;br /&gt;
	TIM_OCInitStructure.TIM_Pulse=100;	// 1000 w‰re Standard&lt;br /&gt;
	&lt;br /&gt;
	TIM_OC4Init(TIM4, &amp;amp;TIM_OCInitStructure);&lt;br /&gt;
&lt;br /&gt;
}	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
int main(void){&lt;br /&gt;
	&lt;br /&gt;
	RCC_init();		// Stromversorgung&lt;br /&gt;
	GPIO_init();	// Alle Pins konfigurieren&lt;br /&gt;
	&lt;br /&gt;
	GPIO_SetBits(GPIOD, GPIO_Pin_14 | GPIO_Pin_12);&lt;br /&gt;
	&lt;br /&gt;
	TIM4_init();	// Timer 7 los&lt;br /&gt;
	USART2_init();&lt;br /&gt;
	&lt;br /&gt;
	while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) !=SET) {&lt;br /&gt;
&lt;br /&gt;
		}&lt;br /&gt;
	USART_SendData(USART2, 65);&lt;br /&gt;
&lt;br /&gt;
		&lt;br /&gt;
	&lt;br /&gt;
	while(1){		// jetzt immer Nase bohren, weil Core sonst&lt;br /&gt;
							// die Arbeit einstellen wuerde&lt;br /&gt;
							// hier erfolgt das blinken&lt;br /&gt;
		&lt;br /&gt;
	// hier tun wir genau gar nix, der Kern kˆnnte auch Schlafen&lt;br /&gt;
	// das ist gutes Nasebohren&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mtothea</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Benutzer:Mtothea&amp;diff=84567</id>
		<title>Benutzer:Mtothea</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Benutzer:Mtothea&amp;diff=84567"/>
		<updated>2014-08-20T16:18:32Z</updated>

		<summary type="html">&lt;p&gt;Mtothea: /* Basic Timer */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Meine kleinen Programme&lt;br /&gt;
== Basic Timer ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
// Mein erstes Mainfile&lt;br /&gt;
&lt;br /&gt;
// Mit der conf-Datei beherrschen und steuern wir&lt;br /&gt;
// die gesammte &lt;br /&gt;
#include &amp;quot;stm32f4xx_conf.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;stm32f4xx.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
void RCC_init(void){&lt;br /&gt;
	// ueber die RCC werden die diversen Peripherie-Einheiten eingeschaltet&lt;br /&gt;
	// (durch konfiguration der RCC)&lt;br /&gt;
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);&lt;br /&gt;
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM7, ENABLE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void GPIO_init(void){//Name ist selbst gew‰hlt&lt;br /&gt;
	// hier werden alle GPIO-Pins konfiguriert&lt;br /&gt;
	// etwas schwieriger, weil es ueber eine Struktur&lt;br /&gt;
	// gemacht werden muss, dafuer ist dann alles auf&lt;br /&gt;
	// einen Schlag erledigt&lt;br /&gt;
	&lt;br /&gt;
	GPIO_InitTypeDef GPIO_InitTypeStructure;&lt;br /&gt;
	&lt;br /&gt;
	GPIO_InitTypeStructure.GPIO_Mode=GPIO_Mode_OUT;&lt;br /&gt;
	GPIO_InitTypeStructure.GPIO_OType=GPIO_OType_PP;&lt;br /&gt;
	GPIO_InitTypeStructure.GPIO_Pin=GPIO_Pin_15 | GPIO_Pin_14 | GPIO_Pin_13 | GPIO_Pin_12;&lt;br /&gt;
	GPIO_InitTypeStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;&lt;br /&gt;
	GPIO_InitTypeStructure.GPIO_Speed=GPIO_Speed_2MHz;&lt;br /&gt;
&lt;br /&gt;
	GPIO_Init(GPIOD, &amp;amp;GPIO_InitTypeStructure);&lt;br /&gt;
}&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
void TIM7_init(void){&lt;br /&gt;
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;&lt;br /&gt;
	TIM_TimeBaseInitStructure.TIM_Prescaler=16800;&lt;br /&gt;
  TIM_TimeBaseInitStructure.TIM_Period=2500;&lt;br /&gt;
	TIM_TimeBaseInit(TIM7, &amp;amp;TIM_TimeBaseInitStructure);&lt;br /&gt;
	&lt;br /&gt;
	// Der Timer muss nicht nur ueber die RCC eingeschaltet werden,&lt;br /&gt;
	// sondern auch nur so zum Zaehlen gebracht werden.&lt;br /&gt;
	// Das ist im Bedarfsfall ein/ausschaltbar.&lt;br /&gt;
	TIM_Cmd(TIM7, ENABLE);&lt;br /&gt;
	&lt;br /&gt;
	// dieser Timer darf einen Interrupt auslˆsen&lt;br /&gt;
	TIM_ITConfig(TIM7, TIM_IT_Update, ENABLE);&lt;br /&gt;
}	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void NVIC_init(void){&lt;br /&gt;
	NVIC_InitTypeDef NVIC_InitTypeStructure;&lt;br /&gt;
	NVIC_InitTypeStructure.NVIC_IRQChannel = TIM7_IRQn;&lt;br /&gt;
	NVIC_InitTypeStructure.NVIC_IRQChannelCmd = ENABLE;&lt;br /&gt;
	NVIC_InitTypeStructure.NVIC_IRQChannelPreemptionPriority = 0;&lt;br /&gt;
	NVIC_InitTypeStructure.NVIC_IRQChannelSubPriority = 0;&lt;br /&gt;
	NVIC_Init(&amp;amp;NVIC_InitTypeStructure);&lt;br /&gt;
}&lt;br /&gt;
	&lt;br /&gt;
void TIM7_IRQHandler(void){&lt;br /&gt;
	// 1. Diese Funktion MUSS so heissen&lt;br /&gt;
	// 2. Diese Funtion wird beim Auftreten des Interrups ausgefuehrt&lt;br /&gt;
	// 3. Das PENDING BIT muss zurueckgesetzt werden&lt;br /&gt;
	&lt;br /&gt;
	// Das ist die Nutzlast der Interrupt Service Routine (Handler)&lt;br /&gt;
	GPIO_ToggleBits(GPIOD, GPIO_Pin_15 | GPIO_Pin_14 | GPIO_Pin_13 | GPIO_Pin_12); &lt;br /&gt;
	&lt;br /&gt;
	TIM_ClearITPendingBit(TIM7, TIM_IT_Update);&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
int main(void){&lt;br /&gt;
	&lt;br /&gt;
	RCC_init();		// Stromversorgung&lt;br /&gt;
	GPIO_init();	// Alle Pins konfigurieren&lt;br /&gt;
	&lt;br /&gt;
	GPIO_SetBits(GPIOD, GPIO_Pin_14 | GPIO_Pin_12);&lt;br /&gt;
	&lt;br /&gt;
	TIM7_init();	// Timer 7 los&lt;br /&gt;
	NVIC_init();	// NVIC, oje&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	while(1){		// jetzt immer Nase bohren, weil Core sonst&lt;br /&gt;
							// die Arbeit einstellen wuerde&lt;br /&gt;
							// hier erfolgt das blinken&lt;br /&gt;
		&lt;br /&gt;
	// hier tun wir genau gar nix, der Kern kˆnnte auch Schlafen&lt;br /&gt;
	// das ist gutes Nasebohren&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== USART ==&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
// Mein erstes Mainfile&lt;br /&gt;
&lt;br /&gt;
// Mit der conf-Datei beherrschen und steuern wir&lt;br /&gt;
// die gesammte &lt;br /&gt;
#include &amp;quot;stm32f4xx_conf.h&amp;quot;&lt;br /&gt;
#include &amp;quot;stm32f4xx.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
void RCC_init(void){&lt;br /&gt;
	// ueber die RCC werden die diversen Peripherie-Einheiten eingeschaltet&lt;br /&gt;
	// (durch konfiguration der RCC)&lt;br /&gt;
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);&lt;br /&gt;
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);&lt;br /&gt;
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);&lt;br /&gt;
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void GPIO_init(void){//Name ist selbst gew‰hlt&lt;br /&gt;
	// hier werden alle GPIO-Pins konfiguriert&lt;br /&gt;
	// etwas schwieriger, weil es ueber eine Struktur&lt;br /&gt;
	// gemacht werden muss, dafuer ist dann alles auf&lt;br /&gt;
	// einen Schlag erledigt&lt;br /&gt;
	&lt;br /&gt;
	GPIO_InitTypeDef GPIO_InitTypeStructure;&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	GPIO_InitTypeStructure.GPIO_Mode=GPIO_Mode_OUT;&lt;br /&gt;
	GPIO_InitTypeStructure.GPIO_OType=GPIO_OType_PP;&lt;br /&gt;
	GPIO_InitTypeStructure.GPIO_Pin=GPIO_Pin_13;&lt;br /&gt;
	GPIO_InitTypeStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;&lt;br /&gt;
	GPIO_InitTypeStructure.GPIO_Speed=GPIO_Speed_2MHz;&lt;br /&gt;
&lt;br /&gt;
	GPIO_Init(GPIOD, &amp;amp;GPIO_InitTypeStructure);&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	GPIO_InitTypeStructure.GPIO_Mode=GPIO_Mode_AF;&lt;br /&gt;
	GPIO_InitTypeStructure.GPIO_OType=GPIO_OType_PP;&lt;br /&gt;
	GPIO_InitTypeStructure.GPIO_Pin=GPIO_Pin_15;&lt;br /&gt;
	GPIO_InitTypeStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;&lt;br /&gt;
	GPIO_InitTypeStructure.GPIO_Speed=GPIO_Speed_2MHz;&lt;br /&gt;
	&lt;br /&gt;
	GPIO_Init(GPIOD, &amp;amp;GPIO_InitTypeStructure);&lt;br /&gt;
	GPIO_PinAFConfig(GPIOD, GPIO_PinSource15, GPIO_AF_TIM4);&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	GPIO_InitTypeStructure.GPIO_Mode=GPIO_Mode_AF;&lt;br /&gt;
	GPIO_InitTypeStructure.GPIO_OType=GPIO_OType_PP;&lt;br /&gt;
	GPIO_InitTypeStructure.GPIO_Pin=GPIO_Pin_2;&lt;br /&gt;
	GPIO_InitTypeStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;&lt;br /&gt;
	GPIO_InitTypeStructure.GPIO_Speed=GPIO_Speed_2MHz;&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	GPIO_Init(GPIOA, &amp;amp;GPIO_InitTypeStructure);&lt;br /&gt;
	GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_USART2);&lt;br /&gt;
	&lt;br /&gt;
	// Eine Led wird von Beginn an eingeschaltet&lt;br /&gt;
	GPIO_SetBits(GPIOD, GPIO_Pin_13);&lt;br /&gt;
}&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void USART2_init(void){&lt;br /&gt;
	USART_InitTypeDef USART_InitStructure;&lt;br /&gt;
	&lt;br /&gt;
	USART_InitStructure.USART_BaudRate=9600;&lt;br /&gt;
	USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;&lt;br /&gt;
	USART_InitStructure.USART_Mode=USART_Mode_Tx;&lt;br /&gt;
	USART_InitStructure.USART_Parity=USART_Parity_No;&lt;br /&gt;
	USART_InitStructure.USART_StopBits=USART_StopBits_1;&lt;br /&gt;
	USART_InitStructure.USART_WordLength=USART_WordLength_8b;&lt;br /&gt;
	&lt;br /&gt;
	USART_Init(USART2, &amp;amp;USART_InitStructure);&lt;br /&gt;
	USART_Cmd(USART2, ENABLE);&lt;br /&gt;
	&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
void TIM4_init(void){&lt;br /&gt;
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;&lt;br /&gt;
	TIM_OCInitTypeDef TIM_OCInitStructure;&lt;br /&gt;
	&lt;br /&gt;
	TIM_TimeBaseInitStructure.TIM_Prescaler=99;	// 41999 w‰re standard&lt;br /&gt;
  TIM_TimeBaseInitStructure.TIM_Period=1999;&lt;br /&gt;
	TIM_TimeBaseInit(TIM4, &amp;amp;TIM_TimeBaseInitStructure);&lt;br /&gt;
	&lt;br /&gt;
	// Der Timer muss nicht nur ueber die RCC eingeschaltet werden,&lt;br /&gt;
	// sondern auch nur so zum Zaehlen gebracht werden.&lt;br /&gt;
	// Das ist im Bedarfsfall ein/ausschaltbar.&lt;br /&gt;
	TIM_Cmd(TIM4, ENABLE);&lt;br /&gt;
	&lt;br /&gt;
	// jetzt den Channel konfigurieren&lt;br /&gt;
	TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;&lt;br /&gt;
	TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;&lt;br /&gt;
	TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;&lt;br /&gt;
	TIM_OCInitStructure.TIM_Pulse=100;	// 1000 w‰re Standard&lt;br /&gt;
	&lt;br /&gt;
	TIM_OC4Init(TIM4, &amp;amp;TIM_OCInitStructure);&lt;br /&gt;
&lt;br /&gt;
}	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
int main(void){&lt;br /&gt;
	&lt;br /&gt;
	RCC_init();		// Stromversorgung&lt;br /&gt;
	GPIO_init();	// Alle Pins konfigurieren&lt;br /&gt;
	&lt;br /&gt;
	GPIO_SetBits(GPIOD, GPIO_Pin_14 | GPIO_Pin_12);&lt;br /&gt;
	&lt;br /&gt;
	TIM4_init();	// Timer 7 los&lt;br /&gt;
	USART2_init();&lt;br /&gt;
	&lt;br /&gt;
	while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) !=SET) {&lt;br /&gt;
&lt;br /&gt;
		}&lt;br /&gt;
	USART_SendData(USART2, 65);&lt;br /&gt;
&lt;br /&gt;
		&lt;br /&gt;
	&lt;br /&gt;
	while(1){		// jetzt immer Nase bohren, weil Core sonst&lt;br /&gt;
							// die Arbeit einstellen wuerde&lt;br /&gt;
							// hier erfolgt das blinken&lt;br /&gt;
		&lt;br /&gt;
	// hier tun wir genau gar nix, der Kern kˆnnte auch Schlafen&lt;br /&gt;
	// das ist gutes Nasebohren&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mtothea</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Benutzer:Mtothea&amp;diff=84566</id>
		<title>Benutzer:Mtothea</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Benutzer:Mtothea&amp;diff=84566"/>
		<updated>2014-08-20T16:15:06Z</updated>

		<summary type="html">&lt;p&gt;Mtothea: Die Seite wurde neu angelegt: „== Basic Timer ==  &amp;lt;code&amp;gt; // Mein erstes Mainfile  // Mit der conf-Datei beherrschen und steuern wir // die gesammte  #include &amp;quot;stm32f4xx_conf.h&amp;quot;  #include &amp;quot;st…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Basic Timer ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
// Mein erstes Mainfile&lt;br /&gt;
&lt;br /&gt;
// Mit der conf-Datei beherrschen und steuern wir&lt;br /&gt;
// die gesammte &lt;br /&gt;
#include &amp;quot;stm32f4xx_conf.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;stm32f4xx.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
void RCC_init(void){&lt;br /&gt;
	// ueber die RCC werden die diversen Peripherie-Einheiten eingeschaltet&lt;br /&gt;
	// (durch konfiguration der RCC)&lt;br /&gt;
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);&lt;br /&gt;
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM7, ENABLE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void GPIO_init(void){//Name ist selbst gew‰hlt&lt;br /&gt;
	// hier werden alle GPIO-Pins konfiguriert&lt;br /&gt;
	// etwas schwieriger, weil es ueber eine Struktur&lt;br /&gt;
	// gemacht werden muss, dafuer ist dann alles auf&lt;br /&gt;
	// einen Schlag erledigt&lt;br /&gt;
	&lt;br /&gt;
	GPIO_InitTypeDef GPIO_InitTypeStructure;&lt;br /&gt;
	&lt;br /&gt;
	GPIO_InitTypeStructure.GPIO_Mode=GPIO_Mode_OUT;&lt;br /&gt;
	GPIO_InitTypeStructure.GPIO_OType=GPIO_OType_PP;&lt;br /&gt;
	GPIO_InitTypeStructure.GPIO_Pin=GPIO_Pin_15 | GPIO_Pin_14 | GPIO_Pin_13 | GPIO_Pin_12;&lt;br /&gt;
	GPIO_InitTypeStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;&lt;br /&gt;
	GPIO_InitTypeStructure.GPIO_Speed=GPIO_Speed_2MHz;&lt;br /&gt;
&lt;br /&gt;
	GPIO_Init(GPIOD, &amp;amp;GPIO_InitTypeStructure);&lt;br /&gt;
}&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
void TIM7_init(void){&lt;br /&gt;
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;&lt;br /&gt;
	TIM_TimeBaseInitStructure.TIM_Prescaler=16800;&lt;br /&gt;
  TIM_TimeBaseInitStructure.TIM_Period=2500;&lt;br /&gt;
	TIM_TimeBaseInit(TIM7, &amp;amp;TIM_TimeBaseInitStructure);&lt;br /&gt;
	&lt;br /&gt;
	// Der Timer muss nicht nur ueber die RCC eingeschaltet werden,&lt;br /&gt;
	// sondern auch nur so zum Zaehlen gebracht werden.&lt;br /&gt;
	// Das ist im Bedarfsfall ein/ausschaltbar.&lt;br /&gt;
	TIM_Cmd(TIM7, ENABLE);&lt;br /&gt;
	&lt;br /&gt;
	// dieser Timer darf einen Interrupt auslˆsen&lt;br /&gt;
	TIM_ITConfig(TIM7, TIM_IT_Update, ENABLE);&lt;br /&gt;
}	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void NVIC_init(void){&lt;br /&gt;
	NVIC_InitTypeDef NVIC_InitTypeStructure;&lt;br /&gt;
	NVIC_InitTypeStructure.NVIC_IRQChannel = TIM7_IRQn;&lt;br /&gt;
	NVIC_InitTypeStructure.NVIC_IRQChannelCmd = ENABLE;&lt;br /&gt;
	NVIC_InitTypeStructure.NVIC_IRQChannelPreemptionPriority = 0;&lt;br /&gt;
	NVIC_InitTypeStructure.NVIC_IRQChannelSubPriority = 0;&lt;br /&gt;
	NVIC_Init(&amp;amp;NVIC_InitTypeStructure);&lt;br /&gt;
}&lt;br /&gt;
	&lt;br /&gt;
void TIM7_IRQHandler(void){&lt;br /&gt;
	// 1. Diese Funktion MUSS so heissen&lt;br /&gt;
	// 2. Diese Funtion wird beim Auftreten des Interrups ausgefuehrt&lt;br /&gt;
	// 3. Das PENDING BIT muss zurueckgesetzt werden&lt;br /&gt;
	&lt;br /&gt;
	// Das ist die Nutzlast der Interrupt Service Routine (Handler)&lt;br /&gt;
	GPIO_ToggleBits(GPIOD, GPIO_Pin_15 | GPIO_Pin_14 | GPIO_Pin_13 | GPIO_Pin_12); &lt;br /&gt;
	&lt;br /&gt;
	TIM_ClearITPendingBit(TIM7, TIM_IT_Update);&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
int main(void){&lt;br /&gt;
	&lt;br /&gt;
	RCC_init();		// Stromversorgung&lt;br /&gt;
	GPIO_init();	// Alle Pins konfigurieren&lt;br /&gt;
	&lt;br /&gt;
	GPIO_SetBits(GPIOD, GPIO_Pin_14 | GPIO_Pin_12);&lt;br /&gt;
	&lt;br /&gt;
	TIM7_init();	// Timer 7 los&lt;br /&gt;
	NVIC_init();	// NVIC, oje&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	while(1){		// jetzt immer Nase bohren, weil Core sonst&lt;br /&gt;
							// die Arbeit einstellen wuerde&lt;br /&gt;
							// hier erfolgt das blinken&lt;br /&gt;
		&lt;br /&gt;
	// hier tun wir genau gar nix, der Kern kˆnnte auch Schlafen&lt;br /&gt;
	// das ist gutes Nasebohren&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mtothea</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datenuebertragung-STM32F4&amp;diff=84369</id>
		<title>Datenuebertragung-STM32F4</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datenuebertragung-STM32F4&amp;diff=84369"/>
		<updated>2014-08-05T17:07:53Z</updated>

		<summary type="html">&lt;p&gt;Mtothea: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Datenübertragung über 4 Datenleitungen ==&lt;br /&gt;
&lt;br /&gt;
Zwei STM32F4 Discovery Boards sollen durch 4 parallele Datenleitungen und eine Steuerleitung, ähnlich der LCD-Implementierung, miteinander kommunizieren. An einem Board werden über eine PS/2 Tastatur Zeichen eingegeben. Von diesem Board werden die Zeichen an das zweite Board übertragen. Das zweite Board sendet diese Zeichen über die USART-Schnittstelle an ein PC-Terminal Programm (Putty oder Teraterm).&lt;br /&gt;
&lt;br /&gt;
== Blockschaltbild ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Blockschaltbild STM32F4.png]]&lt;br /&gt;
Beschreibung des Projekts als Fließtext und/oder Liste von Features.  &lt;br /&gt;
&lt;br /&gt;
== PIN-Belegung ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Schaltplan stm32f4kom.png]]&lt;br /&gt;
&lt;br /&gt;
== Übertragung ==&lt;br /&gt;
&lt;br /&gt;
Die Übertragung erfolgt parallel über 4 Datenleitungen. Eine Control Leitung „C“ teilt den Empfänger (RCV) mit wann die vom Sender (XMT) angelegten Daten gültig sind (positive Flanke des Control Signales). Da ein Character aus 8 Bit besteht, jedoch nur 4 Datenleitungen für die parallele Übertragung verfügbar sind, muss ein Character in Nibbles zu 4 Bit unterteilt werden. Auf der Empfangsseite werden die 2 empfangenen Nibbles wieder zu einem Character mit 8 Bit zusammengesetzt.&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Site A&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
  * @brief  Main-Funktion&lt;br /&gt;
  * @param  None&lt;br /&gt;
  * @retval None&lt;br /&gt;
  */&lt;br /&gt;
int main(void){&lt;br /&gt;
/* Stromversorgung / mit Takt versorgen */&lt;br /&gt;
      RCC_initialisieren();&lt;br /&gt;
      /* Pins konfigurieren */&lt;br /&gt;
      GPIO_initialisieren();&lt;br /&gt;
      /* Interrupt fuer PS2-Clock */&lt;br /&gt;
      EXTILine15_10_Config();&lt;br /&gt;
      /* Auf interrupt warten */&lt;br /&gt;
while(1){} }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;RCC Config&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
* @brief Stromversorgung und Takt für SYSCFG und GPIO aktivieren&lt;br /&gt;
  * @param  None&lt;br /&gt;
  * @retval None&lt;br /&gt;
  */&lt;br /&gt;
void RCC_initialisieren(void){&lt;br /&gt;
&lt;br /&gt;
      /* Für EXTI - GPIO */&lt;br /&gt;
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);&lt;br /&gt;
      // EXTI mit Takt versorgen&lt;br /&gt;
      /* Für XMT */&lt;br /&gt;
      RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);&lt;br /&gt;
      // GPIOC mit Takt versorgen&lt;br /&gt;
      /* Für PS2 */&lt;br /&gt;
      RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);&lt;br /&gt;
      // GPIOE mit Takt versorgen&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GPIO Config&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
  * @brief  GPIO Pins konfigurieren&lt;br /&gt;
  * Transmit:GPIOC (Pin 0-3 Daten,Pin 15 Steuerleitung) &lt;br /&gt;
  *  PS2: GPIOE (Pin 9 -&amp;gt; Daten | Pin 11 -&amp;gt; Clock)&lt;br /&gt;
  * @param  None&lt;br /&gt;
  * @retval None&lt;br /&gt;
  */&lt;br /&gt;
void GPIO_initialisieren(void){&lt;br /&gt;
      /* Senddata (Daten) */&lt;br /&gt;
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;&lt;br /&gt;
      // Ports als Output definieren&lt;br /&gt;
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3; // Pins 0,1,2,3 aktivieren&lt;br /&gt;
      GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; // Output Modus: Push-pull &lt;br /&gt;
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; // Abtastfrequenz auf 2MHz       &lt;br /&gt;
      GPIO_Init(GPIOC, &amp;amp;GPIO_InitStructure);&lt;br /&gt;
      // GPIOC Konfiguration übergeben, Pointer auf Struktur mit Config&lt;br /&gt;
      &lt;br /&gt;
      /* Steuerleitung */&lt;br /&gt;
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; // Port als Output definieren &lt;br /&gt;
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; // Pin 15 aktivieren &lt;br /&gt;
      GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; // Output Modus: Push-pull &lt;br /&gt;
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; // Abtastfrequenz auf 2MHz       &lt;br /&gt;
      GPIO_Init(GPIOC, &amp;amp;GPIO_InitStructure);&lt;br /&gt;
      // GPIOC Konfiguration übergeben, Pointer auf Struktur mit Config&lt;br /&gt;
      &lt;br /&gt;
      /* PS2 -&amp;gt; (Pin 9 -&amp;gt; Daten | Pin 11 -&amp;gt; Clock) */ &lt;br /&gt;
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; // Port als Input definieren &lt;br /&gt;
      GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; // Input Modus: Pull-Up &lt;br /&gt;
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_11;&lt;br /&gt;
      // Pin9 und Pin11 aktivieren&lt;br /&gt;
      GPIO_Init(GPIOE, &amp;amp;GPIO_InitStructure);&lt;br /&gt;
      // GPIOE Konfiguration übergeben, Pointer auf Struktur mit Config&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EXTI-Config&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
  * @brief  EXTI auf PE11 konfigurieren&lt;br /&gt;
  * @param  None&lt;br /&gt;
  * @retval None&lt;br /&gt;
  */&lt;br /&gt;
void EXTILine15_10_Config(void) {&lt;br /&gt;
&lt;br /&gt;
      SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource11);&lt;br /&gt;
      // Verbinde EXTILine15_10 mit PE11&amp;lt;br /&amp;gt;&lt;br /&gt;
      EXTI_InitStructure.EXTI_Line = EXTI_Line11; // EXTI_Line 11&amp;lt;br /&amp;gt;&lt;br /&gt;
      EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; // Auf Interrupt-Mode&lt;br /&gt;
      EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;&lt;br /&gt;
      // fallende Flanke (-&amp;gt; low) = Daten sind gueltig&lt;br /&gt;
      // EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;&lt;br /&gt;
      EXTI_InitStructure.EXTI_LineCmd = ENABLE; // EXTI aktivieren EXTI_Init(&amp;amp;EXTI_InitStructure);&lt;br /&gt;
      // EXTI Konfiguration übergeben , Pointer auf Struktur mit Config&lt;br /&gt;
      NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;      &lt;br /&gt;
      // NVIC-Kanal 15_10 für EXTI_Line 11&lt;br /&gt;
      NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01; // PreemtionPrio = 1 &lt;br /&gt;
      NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01; // SubPrio = 1 &lt;br /&gt;
      NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; &lt;br /&gt;
      // NVIC-Kanal aktivieren &lt;br /&gt;
      NVIC_Init(&amp;amp;NVIC_InitStructure);&lt;br /&gt;
      // NVIC Konfiguration übergeben , Pointer auf Struktur mit Config&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Interrupt-Routine&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
* @brief Interrupt Handler für Pin11 (Clock von der Tastatur) * @param None&lt;br /&gt;
* @retval None&lt;br /&gt;
*/&lt;br /&gt;
void EXTI15_10_IRQHandler(void) {&lt;br /&gt;
      if(EXTI_GetITStatus(EXTI_Line11) != RESET) // überprüfen ob Pending Bit gesetzt ist &lt;br /&gt;
      {&lt;br /&gt;
            ps2_data(); // Aufruf der Funktin in &amp;quot;functions.c&amp;quot; &lt;br /&gt;
            EXTI_ClearITPendingBit(EXTI_Line11); // Pendingbit löschen&lt;br /&gt;
      }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
Receive Programm(Keil Projekt): &lt;br /&gt;
[[Datei:RCV_v18.zip]]&lt;br /&gt;
&lt;br /&gt;
Transmitt Programm(Keil Projekt): &lt;br /&gt;
[[Datei:XMT_v21.zip]]&lt;/div&gt;</summary>
		<author><name>Mtothea</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:XMT_v21.zip&amp;diff=84368</id>
		<title>Datei:XMT v21.zip</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:XMT_v21.zip&amp;diff=84368"/>
		<updated>2014-08-05T17:07:17Z</updated>

		<summary type="html">&lt;p&gt;Mtothea: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mtothea</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:RCV_v18.zip&amp;diff=84367</id>
		<title>Datei:RCV v18.zip</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:RCV_v18.zip&amp;diff=84367"/>
		<updated>2014-08-05T17:05:08Z</updated>

		<summary type="html">&lt;p&gt;Mtothea: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mtothea</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datenuebertragung-STM32F4&amp;diff=84366</id>
		<title>Datenuebertragung-STM32F4</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datenuebertragung-STM32F4&amp;diff=84366"/>
		<updated>2014-08-05T17:03:29Z</updated>

		<summary type="html">&lt;p&gt;Mtothea: /* Code */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Datenübertragung über 4 Datenleitungen ==&lt;br /&gt;
&lt;br /&gt;
Zwei STM32F4 Discovery Boards sollen durch 4 parallele Datenleitungen und eine Steuerleitung, ähnlich der LCD-Implementierung, miteinander kommunizieren. An einem Board werden über eine PS/2 Tastatur Zeichen eingegeben. Von diesem Board werden die Zeichen an das zweite Board übertragen. Das zweite Board sendet diese Zeichen über die USART-Schnittstelle an ein PC-Terminal Programm (Putty oder Teraterm).&lt;br /&gt;
&lt;br /&gt;
== Blockschaltbild ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Blockschaltbild STM32F4.png]]&lt;br /&gt;
Beschreibung des Projekts als Fließtext und/oder Liste von Features.  &lt;br /&gt;
&lt;br /&gt;
== PIN-Belegung ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Schaltplan stm32f4kom.png]]&lt;br /&gt;
&lt;br /&gt;
== Übertragung ==&lt;br /&gt;
&lt;br /&gt;
Die Übertragung erfolgt parallel über 4 Datenleitungen. Eine Control Leitung „C“ teilt den Empfänger (RCV) mit wann die vom Sender (XMT) angelegten Daten gültig sind (positive Flanke des Control Signales). Da ein Character aus 8 Bit besteht, jedoch nur 4 Datenleitungen für die parallele Übertragung verfügbar sind, muss ein Character in Nibbles zu 4 Bit unterteilt werden. Auf der Empfangsseite werden die 2 empfangenen Nibbles wieder zu einem Character mit 8 Bit zusammengesetzt.&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Site A&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
  * @brief  Main-Funktion&lt;br /&gt;
  * @param  None&lt;br /&gt;
  * @retval None&lt;br /&gt;
  */&lt;br /&gt;
int main(void){&lt;br /&gt;
/* Stromversorgung / mit Takt versorgen */&lt;br /&gt;
      RCC_initialisieren();&lt;br /&gt;
      /* Pins konfigurieren */&lt;br /&gt;
      GPIO_initialisieren();&lt;br /&gt;
      /* Interrupt fuer PS2-Clock */&lt;br /&gt;
      EXTILine15_10_Config();&lt;br /&gt;
      /* Auf interrupt warten */&lt;br /&gt;
while(1){} }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;RCC Config&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
* @brief Stromversorgung und Takt für SYSCFG und GPIO aktivieren&lt;br /&gt;
  * @param  None&lt;br /&gt;
  * @retval None&lt;br /&gt;
  */&lt;br /&gt;
void RCC_initialisieren(void){&lt;br /&gt;
&lt;br /&gt;
      /* Für EXTI - GPIO */&lt;br /&gt;
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);&lt;br /&gt;
      // EXTI mit Takt versorgen&lt;br /&gt;
      /* Für XMT */&lt;br /&gt;
      RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);&lt;br /&gt;
      // GPIOC mit Takt versorgen&lt;br /&gt;
      /* Für PS2 */&lt;br /&gt;
      RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);&lt;br /&gt;
      // GPIOE mit Takt versorgen&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GPIO Config&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
  * @brief  GPIO Pins konfigurieren&lt;br /&gt;
  * Transmit:GPIOC (Pin 0-3 Daten,Pin 15 Steuerleitung) &lt;br /&gt;
  *  PS2: GPIOE (Pin 9 -&amp;gt; Daten | Pin 11 -&amp;gt; Clock)&lt;br /&gt;
  * @param  None&lt;br /&gt;
  * @retval None&lt;br /&gt;
  */&lt;br /&gt;
void GPIO_initialisieren(void){&lt;br /&gt;
      /* Senddata (Daten) */&lt;br /&gt;
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;&lt;br /&gt;
      // Ports als Output definieren&lt;br /&gt;
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3; // Pins 0,1,2,3 aktivieren&lt;br /&gt;
      GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; // Output Modus: Push-pull &lt;br /&gt;
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; // Abtastfrequenz auf 2MHz       &lt;br /&gt;
      GPIO_Init(GPIOC, &amp;amp;GPIO_InitStructure);&lt;br /&gt;
      // GPIOC Konfiguration übergeben, Pointer auf Struktur mit Config&lt;br /&gt;
      &lt;br /&gt;
      /* Steuerleitung */&lt;br /&gt;
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; // Port als Output definieren &lt;br /&gt;
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; // Pin 15 aktivieren &lt;br /&gt;
      GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; // Output Modus: Push-pull &lt;br /&gt;
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; // Abtastfrequenz auf 2MHz       &lt;br /&gt;
      GPIO_Init(GPIOC, &amp;amp;GPIO_InitStructure);&lt;br /&gt;
      // GPIOC Konfiguration übergeben, Pointer auf Struktur mit Config&lt;br /&gt;
      &lt;br /&gt;
      /* PS2 -&amp;gt; (Pin 9 -&amp;gt; Daten | Pin 11 -&amp;gt; Clock) */ &lt;br /&gt;
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; // Port als Input definieren &lt;br /&gt;
      GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; // Input Modus: Pull-Up &lt;br /&gt;
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_11;&lt;br /&gt;
      // Pin9 und Pin11 aktivieren&lt;br /&gt;
      GPIO_Init(GPIOE, &amp;amp;GPIO_InitStructure);&lt;br /&gt;
      // GPIOE Konfiguration übergeben, Pointer auf Struktur mit Config&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EXTI-Config&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
  * @brief  EXTI auf PE11 konfigurieren&lt;br /&gt;
  * @param  None&lt;br /&gt;
  * @retval None&lt;br /&gt;
  */&lt;br /&gt;
void EXTILine15_10_Config(void) {&lt;br /&gt;
&lt;br /&gt;
      SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource11);&lt;br /&gt;
      // Verbinde EXTILine15_10 mit PE11&amp;lt;br /&amp;gt;&lt;br /&gt;
      EXTI_InitStructure.EXTI_Line = EXTI_Line11; // EXTI_Line 11&amp;lt;br /&amp;gt;&lt;br /&gt;
      EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; // Auf Interrupt-Mode&lt;br /&gt;
      EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;&lt;br /&gt;
      // fallende Flanke (-&amp;gt; low) = Daten sind gueltig&lt;br /&gt;
      // EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;&lt;br /&gt;
      EXTI_InitStructure.EXTI_LineCmd = ENABLE; // EXTI aktivieren EXTI_Init(&amp;amp;EXTI_InitStructure);&lt;br /&gt;
      // EXTI Konfiguration übergeben , Pointer auf Struktur mit Config&lt;br /&gt;
      NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;      &lt;br /&gt;
      // NVIC-Kanal 15_10 für EXTI_Line 11&lt;br /&gt;
      NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01; // PreemtionPrio = 1 &lt;br /&gt;
      NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01; // SubPrio = 1 &lt;br /&gt;
      NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; &lt;br /&gt;
      // NVIC-Kanal aktivieren &lt;br /&gt;
      NVIC_Init(&amp;amp;NVIC_InitStructure);&lt;br /&gt;
      // NVIC Konfiguration übergeben , Pointer auf Struktur mit Config&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Interrupt-Routine&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
* @brief Interrupt Handler für Pin11 (Clock von der Tastatur) * @param None&lt;br /&gt;
* @retval None&lt;br /&gt;
*/&lt;br /&gt;
void EXTI15_10_IRQHandler(void) {&lt;br /&gt;
      if(EXTI_GetITStatus(EXTI_Line11) != RESET) // überprüfen ob Pending Bit gesetzt ist &lt;br /&gt;
      {&lt;br /&gt;
            ps2_data(); // Aufruf der Funktin in &amp;quot;functions.c&amp;quot; &lt;br /&gt;
            EXTI_ClearITPendingBit(EXTI_Line11); // Pendingbit löschen&lt;br /&gt;
      }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mtothea</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datenuebertragung-STM32F4&amp;diff=84365</id>
		<title>Datenuebertragung-STM32F4</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datenuebertragung-STM32F4&amp;diff=84365"/>
		<updated>2014-08-05T16:59:25Z</updated>

		<summary type="html">&lt;p&gt;Mtothea: /* Code */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Datenübertragung über 4 Datenleitungen ==&lt;br /&gt;
&lt;br /&gt;
Zwei STM32F4 Discovery Boards sollen durch 4 parallele Datenleitungen und eine Steuerleitung, ähnlich der LCD-Implementierung, miteinander kommunizieren. An einem Board werden über eine PS/2 Tastatur Zeichen eingegeben. Von diesem Board werden die Zeichen an das zweite Board übertragen. Das zweite Board sendet diese Zeichen über die USART-Schnittstelle an ein PC-Terminal Programm (Putty oder Teraterm).&lt;br /&gt;
&lt;br /&gt;
== Blockschaltbild ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Blockschaltbild STM32F4.png]]&lt;br /&gt;
Beschreibung des Projekts als Fließtext und/oder Liste von Features.  &lt;br /&gt;
&lt;br /&gt;
== PIN-Belegung ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Schaltplan stm32f4kom.png]]&lt;br /&gt;
&lt;br /&gt;
== Übertragung ==&lt;br /&gt;
&lt;br /&gt;
Die Übertragung erfolgt parallel über 4 Datenleitungen. Eine Control Leitung „C“ teilt den Empfänger (RCV) mit wann die vom Sender (XMT) angelegten Daten gültig sind (positive Flanke des Control Signales). Da ein Character aus 8 Bit besteht, jedoch nur 4 Datenleitungen für die parallele Übertragung verfügbar sind, muss ein Character in Nibbles zu 4 Bit unterteilt werden. Auf der Empfangsseite werden die 2 empfangenen Nibbles wieder zu einem Character mit 8 Bit zusammengesetzt.&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Site A&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
  * @brief  Main-Funktion&lt;br /&gt;
  * @param  None&lt;br /&gt;
  * @retval None&lt;br /&gt;
  */&lt;br /&gt;
int main(void){&lt;br /&gt;
/* Stromversorgung / mit Takt versorgen */&lt;br /&gt;
      RCC_initialisieren();&lt;br /&gt;
      /* Pins konfigurieren */&lt;br /&gt;
      GPIO_initialisieren();&lt;br /&gt;
      /* Interrupt fuer PS2-Clock */&lt;br /&gt;
      EXTILine15_10_Config();&lt;br /&gt;
      /* Auf interrupt warten */&lt;br /&gt;
while(1){} }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
* @brief Stromversorgung und Takt für SYSCFG und GPIO aktivieren&lt;br /&gt;
  * @param  None&lt;br /&gt;
  * @retval None&lt;br /&gt;
  */&lt;br /&gt;
void RCC_initialisieren(void){&lt;br /&gt;
&lt;br /&gt;
      /* Für EXTI - GPIO */&lt;br /&gt;
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);&lt;br /&gt;
      // EXTI mit Takt versorgen&lt;br /&gt;
      /* Für XMT */&lt;br /&gt;
      RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);&lt;br /&gt;
      // GPIOC mit Takt versorgen&lt;br /&gt;
      /* Für PS2 */&lt;br /&gt;
      RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);&lt;br /&gt;
      // GPIOE mit Takt versorgen&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
  * @brief  GPIO Pins konfigurieren&lt;br /&gt;
  * Transmit:GPIOC (Pin 0-3 Daten,Pin 15 Steuerleitung) &lt;br /&gt;
  *  PS2: GPIOE (Pin 9 -&amp;gt; Daten | Pin 11 -&amp;gt; Clock)&lt;br /&gt;
  * @param  None&lt;br /&gt;
  * @retval None&lt;br /&gt;
  */&lt;br /&gt;
void GPIO_initialisieren(void){&lt;br /&gt;
      /* Senddata (Daten) */&lt;br /&gt;
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;&lt;br /&gt;
      // Ports als Output definieren&lt;br /&gt;
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3; // Pins 0,1,2,3 aktivieren&lt;br /&gt;
      GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; // Output Modus: Push-pull &lt;br /&gt;
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; // Abtastfrequenz auf 2MHz       &lt;br /&gt;
      GPIO_Init(GPIOC, &amp;amp;GPIO_InitStructure);&lt;br /&gt;
      // GPIOC Konfiguration übergeben, Pointer auf Struktur mit Config&lt;br /&gt;
      &lt;br /&gt;
      /* Steuerleitung */&lt;br /&gt;
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; // Port als Output definieren &lt;br /&gt;
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; // Pin 15 aktivieren &lt;br /&gt;
      GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; // Output Modus: Push-pull &lt;br /&gt;
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; // Abtastfrequenz auf 2MHz       &lt;br /&gt;
      GPIO_Init(GPIOC, &amp;amp;GPIO_InitStructure);&lt;br /&gt;
      // GPIOC Konfiguration übergeben, Pointer auf Struktur mit Config&lt;br /&gt;
      &lt;br /&gt;
      /* PS2 -&amp;gt; (Pin 9 -&amp;gt; Daten | Pin 11 -&amp;gt; Clock) */ &lt;br /&gt;
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; // Port als Input definieren &lt;br /&gt;
      GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; // Input Modus: Pull-Up &lt;br /&gt;
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_11;&lt;br /&gt;
      // Pin9 und Pin11 aktivieren&lt;br /&gt;
      GPIO_Init(GPIOE, &amp;amp;GPIO_InitStructure);&lt;br /&gt;
      // GPIOE Konfiguration übergeben, Pointer auf Struktur mit Config&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
  * @brief  EXTI auf PE11 konfigurieren&lt;br /&gt;
  * @param  None&lt;br /&gt;
  * @retval None&lt;br /&gt;
  */&lt;br /&gt;
void EXTILine15_10_Config(void) {&lt;br /&gt;
&lt;br /&gt;
      SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource11);&lt;br /&gt;
      // Verbinde EXTILine15_10 mit PE11&amp;lt;br /&amp;gt;&lt;br /&gt;
      EXTI_InitStructure.EXTI_Line = EXTI_Line11; // EXTI_Line 11&amp;lt;br /&amp;gt;&lt;br /&gt;
      EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; // Auf Interrupt-Mode&lt;br /&gt;
      EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;&lt;br /&gt;
      // fallende Flanke (-&amp;gt; low) = Daten sind gueltig&lt;br /&gt;
      // EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;&lt;br /&gt;
       EXTI_InitStructure.EXTI_LineCmd = ENABLE; // EXTI aktivieren EXTI_Init(&amp;amp;EXTI_InitStructure);&lt;br /&gt;
      // EXTI Konfiguration übergeben , Pointer auf Struktur mit Config&lt;br /&gt;
       NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;      &lt;br /&gt;
      // NVIC-Kanal 15_10 für EXTI_Line 11&lt;br /&gt;
      NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01; // PreemtionPrio = 1 &lt;br /&gt;
      NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01; // SubPrio = 1 &lt;br /&gt;
      NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; &lt;br /&gt;
      // NVIC-Kanal aktivieren &lt;br /&gt;
      NVIC_Init(&amp;amp;NVIC_InitStructure);&lt;br /&gt;
      // NVIC Konfiguration übergeben , Pointer auf Struktur mit Config&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mtothea</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datenuebertragung-STM32F4&amp;diff=84364</id>
		<title>Datenuebertragung-STM32F4</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datenuebertragung-STM32F4&amp;diff=84364"/>
		<updated>2014-08-05T16:57:37Z</updated>

		<summary type="html">&lt;p&gt;Mtothea: /* Code */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Datenübertragung über 4 Datenleitungen ==&lt;br /&gt;
&lt;br /&gt;
Zwei STM32F4 Discovery Boards sollen durch 4 parallele Datenleitungen und eine Steuerleitung, ähnlich der LCD-Implementierung, miteinander kommunizieren. An einem Board werden über eine PS/2 Tastatur Zeichen eingegeben. Von diesem Board werden die Zeichen an das zweite Board übertragen. Das zweite Board sendet diese Zeichen über die USART-Schnittstelle an ein PC-Terminal Programm (Putty oder Teraterm).&lt;br /&gt;
&lt;br /&gt;
== Blockschaltbild ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Blockschaltbild STM32F4.png]]&lt;br /&gt;
Beschreibung des Projekts als Fließtext und/oder Liste von Features.  &lt;br /&gt;
&lt;br /&gt;
== PIN-Belegung ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Schaltplan stm32f4kom.png]]&lt;br /&gt;
&lt;br /&gt;
== Übertragung ==&lt;br /&gt;
&lt;br /&gt;
Die Übertragung erfolgt parallel über 4 Datenleitungen. Eine Control Leitung „C“ teilt den Empfänger (RCV) mit wann die vom Sender (XMT) angelegten Daten gültig sind (positive Flanke des Control Signales). Da ein Character aus 8 Bit besteht, jedoch nur 4 Datenleitungen für die parallele Übertragung verfügbar sind, muss ein Character in Nibbles zu 4 Bit unterteilt werden. Auf der Empfangsseite werden die 2 empfangenen Nibbles wieder zu einem Character mit 8 Bit zusammengesetzt.&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Site A&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
  * @brief  Main-Funktion&lt;br /&gt;
  * @param  None&lt;br /&gt;
  * @retval None&lt;br /&gt;
  */&lt;br /&gt;
int main(void){&lt;br /&gt;
/* Stromversorgung / mit Takt versorgen */&lt;br /&gt;
      RCC_initialisieren();&lt;br /&gt;
      /* Pins konfigurieren */&lt;br /&gt;
      GPIO_initialisieren();&lt;br /&gt;
      /* Interrupt fuer PS2-Clock */&lt;br /&gt;
      EXTILine15_10_Config();&lt;br /&gt;
      /* Auf interrupt warten */&lt;br /&gt;
while(1){} }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
* @brief Stromversorgung und Takt für SYSCFG und GPIO aktivieren&lt;br /&gt;
  * @param  None&lt;br /&gt;
  * @retval None&lt;br /&gt;
  */&lt;br /&gt;
void RCC_initialisieren(void){&lt;br /&gt;
&lt;br /&gt;
      /* Für EXTI - GPIO */&lt;br /&gt;
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);&lt;br /&gt;
      // EXTI mit Takt versorgen&lt;br /&gt;
      /* Für XMT */&lt;br /&gt;
      RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);&lt;br /&gt;
      // GPIOC mit Takt versorgen&lt;br /&gt;
      /* Für PS2 */&lt;br /&gt;
      RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);&lt;br /&gt;
      // GPIOE mit Takt versorgen&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
  * @brief  GPIO Pins konfigurieren&lt;br /&gt;
  * Transmit:GPIOC (Pin 0-3 Daten,Pin 15 Steuerleitung) &lt;br /&gt;
  *  PS2: GPIOE (Pin 9 -&amp;gt; Daten | Pin 11 -&amp;gt; Clock)&lt;br /&gt;
  * @param  None&lt;br /&gt;
  * @retval None&lt;br /&gt;
  */&lt;br /&gt;
void GPIO_initialisieren(void){&lt;br /&gt;
      /* Senddata (Daten) */&lt;br /&gt;
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;&lt;br /&gt;
      // Ports als Output definieren&lt;br /&gt;
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3; // Pins 0,1,2,3 aktivieren&lt;br /&gt;
      GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; // Output Modus: Push-pull &lt;br /&gt;
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; // Abtastfrequenz auf 2MHz       &lt;br /&gt;
      GPIO_Init(GPIOC, &amp;amp;GPIO_InitStructure);&lt;br /&gt;
      // GPIOC Konfiguration übergeben, Pointer auf Struktur mit Config&lt;br /&gt;
      &lt;br /&gt;
      /* Steuerleitung */&lt;br /&gt;
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; // Port als Output definieren &lt;br /&gt;
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; // Pin 15 aktivieren &lt;br /&gt;
      GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; // Output Modus: Push-pull &lt;br /&gt;
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; // Abtastfrequenz auf 2MHz       &lt;br /&gt;
      GPIO_Init(GPIOC, &amp;amp;GPIO_InitStructure);&lt;br /&gt;
      // GPIOC Konfiguration übergeben, Pointer auf Struktur mit Config&lt;br /&gt;
      &lt;br /&gt;
      /* PS2 -&amp;gt; (Pin 9 -&amp;gt; Daten | Pin 11 -&amp;gt; Clock) */ &lt;br /&gt;
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; // Port als Input definieren &lt;br /&gt;
      GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; // Input Modus: Pull-Up &lt;br /&gt;
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_11;&lt;br /&gt;
      // Pin9 und Pin11 aktivieren&lt;br /&gt;
      GPIO_Init(GPIOE, &amp;amp;GPIO_InitStructure);&lt;br /&gt;
      // GPIOE Konfiguration übergeben, Pointer auf Struktur mit Config&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
  * @brief  EXTI auf PE11 konfigurieren&lt;br /&gt;
  * @param  None&lt;br /&gt;
  * @retval None&lt;br /&gt;
  */&lt;br /&gt;
void EXTILine15_10_Config(void) {&lt;br /&gt;
&lt;br /&gt;
	SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource11);&lt;br /&gt;
&lt;br /&gt;
	// Verbinde EXTILine15_10 mit PE11&lt;br /&gt;
	EXTI_InitStructure.EXTI_Line = EXTI_Line11; // EXTI_Line 11&lt;br /&gt;
	EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; // Auf Interrupt-Mode&lt;br /&gt;
	EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;&lt;br /&gt;
	// fallende Flanke (-&amp;gt; low) = Daten sind gueltig&lt;br /&gt;
	// EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;&lt;br /&gt;
 	EXTI_InitStructure.EXTI_LineCmd = ENABLE; // EXTI aktivieren EXTI_Init(&amp;amp;EXTI_InitStructure);&lt;br /&gt;
	// EXTI Konfiguration übergeben , Pointer auf Struktur mit Config&lt;br /&gt;
	NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;&lt;br /&gt;
&lt;br /&gt;
	// NVIC-Kanal 15_10 für EXTI_Line 11&lt;br /&gt;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01; // PreemtionPrio = 1 &lt;br /&gt;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01; // SubPrio = 1 &lt;br /&gt;
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; &lt;br /&gt;
	// NVIC-Kanal aktivieren &lt;br /&gt;
	NVIC_Init(&amp;amp;NVIC_InitStructure);&lt;br /&gt;
	// NVIC Konfiguration übergeben , Pointer auf Struktur mit Config&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mtothea</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datenuebertragung-STM32F4&amp;diff=84363</id>
		<title>Datenuebertragung-STM32F4</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datenuebertragung-STM32F4&amp;diff=84363"/>
		<updated>2014-08-05T16:56:30Z</updated>

		<summary type="html">&lt;p&gt;Mtothea: /* Datenübertragung über 4 Datenleitungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Datenübertragung über 4 Datenleitungen ==&lt;br /&gt;
&lt;br /&gt;
Zwei STM32F4 Discovery Boards sollen durch 4 parallele Datenleitungen und eine Steuerleitung, ähnlich der LCD-Implementierung, miteinander kommunizieren. An einem Board werden über eine PS/2 Tastatur Zeichen eingegeben. Von diesem Board werden die Zeichen an das zweite Board übertragen. Das zweite Board sendet diese Zeichen über die USART-Schnittstelle an ein PC-Terminal Programm (Putty oder Teraterm).&lt;br /&gt;
&lt;br /&gt;
== Blockschaltbild ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Blockschaltbild STM32F4.png]]&lt;br /&gt;
Beschreibung des Projekts als Fließtext und/oder Liste von Features.  &lt;br /&gt;
&lt;br /&gt;
== PIN-Belegung ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Schaltplan stm32f4kom.png]]&lt;br /&gt;
&lt;br /&gt;
== Übertragung ==&lt;br /&gt;
&lt;br /&gt;
Die Übertragung erfolgt parallel über 4 Datenleitungen. Eine Control Leitung „C“ teilt den Empfänger (RCV) mit wann die vom Sender (XMT) angelegten Daten gültig sind (positive Flanke des Control Signales). Da ein Character aus 8 Bit besteht, jedoch nur 4 Datenleitungen für die parallele Übertragung verfügbar sind, muss ein Character in Nibbles zu 4 Bit unterteilt werden. Auf der Empfangsseite werden die 2 empfangenen Nibbles wieder zu einem Character mit 8 Bit zusammengesetzt.&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Site A&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
  * @brief  Main-Funktion&lt;br /&gt;
  * @param  None&lt;br /&gt;
  * @retval None&lt;br /&gt;
  */&lt;br /&gt;
int main(void){&lt;br /&gt;
/* Stromversorgung / mit Takt versorgen */&lt;br /&gt;
      RCC_initialisieren();&lt;br /&gt;
      /* Pins konfigurieren */&lt;br /&gt;
      GPIO_initialisieren();&lt;br /&gt;
      /* Interrupt fuer PS2-Clock */&lt;br /&gt;
      EXTILine15_10_Config();&lt;br /&gt;
      /* Auf interrupt warten */&lt;br /&gt;
while(1){} }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
* @brief Stromversorgung und Takt für SYSCFG und GPIO aktivieren&lt;br /&gt;
  * @param  None&lt;br /&gt;
  * @retval None&lt;br /&gt;
  */&lt;br /&gt;
void RCC_initialisieren(void){&lt;br /&gt;
&lt;br /&gt;
      /* Für EXTI - GPIO */&lt;br /&gt;
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);&lt;br /&gt;
      // EXTI mit Takt versorgen&lt;br /&gt;
      /* Für XMT */&lt;br /&gt;
      RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);&lt;br /&gt;
      // GPIOC mit Takt versorgen&lt;br /&gt;
      /* Für PS2 */&lt;br /&gt;
      RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);&lt;br /&gt;
      // GPIOE mit Takt versorgen&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
  * @brief  GPIO Pins konfigurieren&lt;br /&gt;
  * Transmit:GPIOC (Pin 0-3 Daten,Pin 15 Steuerleitung) &lt;br /&gt;
  *  PS2: GPIOE (Pin 9 -&amp;gt; Daten | Pin 11 -&amp;gt; Clock)&lt;br /&gt;
  * @param  None&lt;br /&gt;
  * @retval None&lt;br /&gt;
  */&lt;br /&gt;
void GPIO_initialisieren(void){&lt;br /&gt;
      /* Senddata (Daten) */&lt;br /&gt;
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;&lt;br /&gt;
      // Ports als Output definieren&lt;br /&gt;
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3; // Pins 0,1,2,3 aktivieren&lt;br /&gt;
      GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; // Output Modus: Push-pull &lt;br /&gt;
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; // Abtastfrequenz auf 2MHz       &lt;br /&gt;
      GPIO_Init(GPIOC, &amp;amp;GPIO_InitStructure);&lt;br /&gt;
      // GPIOC Konfiguration übergeben, Pointer auf Struktur mit Config&lt;br /&gt;
      &lt;br /&gt;
      /* Steuerleitung */&lt;br /&gt;
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; // Port als Output definieren &lt;br /&gt;
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; // Pin 15 aktivieren &lt;br /&gt;
      GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; // Output Modus: Push-pull &lt;br /&gt;
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; // Abtastfrequenz auf 2MHz       &lt;br /&gt;
      GPIO_Init(GPIOC, &amp;amp;GPIO_InitStructure);&lt;br /&gt;
      // GPIOC Konfiguration übergeben, Pointer auf Struktur mit Config&lt;br /&gt;
      &lt;br /&gt;
      /* PS2 -&amp;gt; (Pin 9 -&amp;gt; Daten | Pin 11 -&amp;gt; Clock) */ &lt;br /&gt;
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; // Port als Input definieren &lt;br /&gt;
      GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; // Input Modus: Pull-Up &lt;br /&gt;
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_11;&lt;br /&gt;
      // Pin9 und Pin11 aktivieren&lt;br /&gt;
      GPIO_Init(GPIOE, &amp;amp;GPIO_InitStructure);&lt;br /&gt;
      // GPIOE Konfiguration übergeben, Pointer auf Struktur mit Config&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
  * @brief  EXTI auf PE11 konfigurieren&lt;br /&gt;
  * @param  None&lt;br /&gt;
  * @retval None&lt;br /&gt;
  */&lt;br /&gt;
void EXTILine15_10_Config(void) {&lt;br /&gt;
&lt;br /&gt;
	SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource11);&lt;br /&gt;
&lt;br /&gt;
	// Verbinde EXTILine15_10 mit PE11&lt;br /&gt;
	EXTI_InitStructure.EXTI_Line = EXTI_Line11; // EXTI_Line 11 				&lt;br /&gt;
	EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; // Auf Interrupt-Mode &lt;br /&gt;
	EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;&lt;br /&gt;
	// fallende Flanke (-&amp;gt; low) = Daten sind gueltig&lt;br /&gt;
	// EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;&lt;br /&gt;
 	EXTI_InitStructure.EXTI_LineCmd = ENABLE; // EXTI aktivieren EXTI_Init(&amp;amp;EXTI_InitStructure);&lt;br /&gt;
	// EXTI Konfiguration übergeben , Pointer auf Struktur mit Config&lt;br /&gt;
	NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;&lt;br /&gt;
&lt;br /&gt;
	// NVIC-Kanal 15_10 für EXTI_Line 11 &lt;br /&gt;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01; // PreemtionPrio = 1 				&lt;br /&gt;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01; // SubPrio = 1 &lt;br /&gt;
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; // 	NVIC-Kanal aktivieren &lt;br /&gt;
	NVIC_Init(&amp;amp;NVIC_InitStructure);&lt;br /&gt;
	// NVIC Konfiguration übergeben , Pointer auf Struktur mit Config&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mtothea</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datenuebertragung-STM32F4&amp;diff=84362</id>
		<title>Datenuebertragung-STM32F4</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datenuebertragung-STM32F4&amp;diff=84362"/>
		<updated>2014-08-05T16:55:12Z</updated>

		<summary type="html">&lt;p&gt;Mtothea: /* Code */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Datenübertragung über 4 Datenleitungen ==&lt;br /&gt;
&lt;br /&gt;
Ziel des Projektes ist, zwei STM32F4 Discovery Boards sollen durch 4 parallele Datenleitungen und eine Steuerleitung, ähnlich der LCD-Implementierung, miteinander kommunizieren. An einem Board werden über eine PS/2 Tastatur Zeichen eingegeben. Von diesem Board werden die Zeichen an das zweite Board übertragen. Das zweite Board sendet diese Zeichen über die USART-Schnittstelle an ein PC-Terminal Programm (Putty oder Teraterm).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Blockschaltbild ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Blockschaltbild STM32F4.png]]&lt;br /&gt;
Beschreibung des Projekts als Fließtext und/oder Liste von Features.  &lt;br /&gt;
&lt;br /&gt;
== PIN-Belegung ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Schaltplan stm32f4kom.png]]&lt;br /&gt;
&lt;br /&gt;
== Übertragung ==&lt;br /&gt;
&lt;br /&gt;
Die Übertragung erfolgt parallel über 4 Datenleitungen. Eine Control Leitung „C“ teilt den Empfänger (RCV) mit wann die vom Sender (XMT) angelegten Daten gültig sind (positive Flanke des Control Signales). Da ein Character aus 8 Bit besteht, jedoch nur 4 Datenleitungen für die parallele Übertragung verfügbar sind, muss ein Character in Nibbles zu 4 Bit unterteilt werden. Auf der Empfangsseite werden die 2 empfangenen Nibbles wieder zu einem Character mit 8 Bit zusammengesetzt.&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Site A&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
  * @brief  Main-Funktion&lt;br /&gt;
  * @param  None&lt;br /&gt;
  * @retval None&lt;br /&gt;
  */&lt;br /&gt;
int main(void){&lt;br /&gt;
/* Stromversorgung / mit Takt versorgen */&lt;br /&gt;
      RCC_initialisieren();&lt;br /&gt;
      /* Pins konfigurieren */&lt;br /&gt;
      GPIO_initialisieren();&lt;br /&gt;
      /* Interrupt fuer PS2-Clock */&lt;br /&gt;
      EXTILine15_10_Config();&lt;br /&gt;
      /* Auf interrupt warten */&lt;br /&gt;
while(1){} }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
* @brief Stromversorgung und Takt für SYSCFG und GPIO aktivieren&lt;br /&gt;
  * @param  None&lt;br /&gt;
  * @retval None&lt;br /&gt;
  */&lt;br /&gt;
void RCC_initialisieren(void){&lt;br /&gt;
&lt;br /&gt;
      /* Für EXTI - GPIO */&lt;br /&gt;
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);&lt;br /&gt;
      // EXTI mit Takt versorgen&lt;br /&gt;
      /* Für XMT */&lt;br /&gt;
      RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);&lt;br /&gt;
      // GPIOC mit Takt versorgen&lt;br /&gt;
      /* Für PS2 */&lt;br /&gt;
      RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);&lt;br /&gt;
      // GPIOE mit Takt versorgen&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
  * @brief  GPIO Pins konfigurieren&lt;br /&gt;
  * Transmit:GPIOC (Pin 0-3 Daten,Pin 15 Steuerleitung) &lt;br /&gt;
  *  PS2: GPIOE (Pin 9 -&amp;gt; Daten | Pin 11 -&amp;gt; Clock)&lt;br /&gt;
  * @param  None&lt;br /&gt;
  * @retval None&lt;br /&gt;
  */&lt;br /&gt;
void GPIO_initialisieren(void){&lt;br /&gt;
      /* Senddata (Daten) */&lt;br /&gt;
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;&lt;br /&gt;
      // Ports als Output definieren&lt;br /&gt;
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3; // Pins 0,1,2,3 aktivieren&lt;br /&gt;
      GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; // Output Modus: Push-pull &lt;br /&gt;
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; // Abtastfrequenz auf 2MHz       &lt;br /&gt;
      GPIO_Init(GPIOC, &amp;amp;GPIO_InitStructure);&lt;br /&gt;
      // GPIOC Konfiguration übergeben, Pointer auf Struktur mit Config&lt;br /&gt;
      &lt;br /&gt;
      /* Steuerleitung */&lt;br /&gt;
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; // Port als Output definieren &lt;br /&gt;
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; // Pin 15 aktivieren &lt;br /&gt;
      GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; // Output Modus: Push-pull &lt;br /&gt;
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; // Abtastfrequenz auf 2MHz       &lt;br /&gt;
      GPIO_Init(GPIOC, &amp;amp;GPIO_InitStructure);&lt;br /&gt;
      // GPIOC Konfiguration übergeben, Pointer auf Struktur mit Config&lt;br /&gt;
      &lt;br /&gt;
      /* PS2 -&amp;gt; (Pin 9 -&amp;gt; Daten | Pin 11 -&amp;gt; Clock) */ &lt;br /&gt;
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; // Port als Input definieren &lt;br /&gt;
      GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; // Input Modus: Pull-Up &lt;br /&gt;
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_11;&lt;br /&gt;
      // Pin9 und Pin11 aktivieren&lt;br /&gt;
      GPIO_Init(GPIOE, &amp;amp;GPIO_InitStructure);&lt;br /&gt;
      // GPIOE Konfiguration übergeben, Pointer auf Struktur mit Config&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
  * @brief  EXTI auf PE11 konfigurieren&lt;br /&gt;
  * @param  None&lt;br /&gt;
  * @retval None&lt;br /&gt;
  */&lt;br /&gt;
void EXTILine15_10_Config(void) {&lt;br /&gt;
&lt;br /&gt;
	SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource11);&lt;br /&gt;
&lt;br /&gt;
	// Verbinde EXTILine15_10 mit PE11&lt;br /&gt;
	EXTI_InitStructure.EXTI_Line = EXTI_Line11; // EXTI_Line 11 				&lt;br /&gt;
	EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; // Auf Interrupt-Mode &lt;br /&gt;
	EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;&lt;br /&gt;
	// fallende Flanke (-&amp;gt; low) = Daten sind gueltig&lt;br /&gt;
	// EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;&lt;br /&gt;
 	EXTI_InitStructure.EXTI_LineCmd = ENABLE; // EXTI aktivieren EXTI_Init(&amp;amp;EXTI_InitStructure);&lt;br /&gt;
	// EXTI Konfiguration übergeben , Pointer auf Struktur mit Config&lt;br /&gt;
	NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;&lt;br /&gt;
&lt;br /&gt;
	// NVIC-Kanal 15_10 für EXTI_Line 11 &lt;br /&gt;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01; // PreemtionPrio = 1 				&lt;br /&gt;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01; // SubPrio = 1 &lt;br /&gt;
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; // 	NVIC-Kanal aktivieren &lt;br /&gt;
	NVIC_Init(&amp;amp;NVIC_InitStructure);&lt;br /&gt;
	// NVIC Konfiguration übergeben , Pointer auf Struktur mit Config&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mtothea</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datenuebertragung-STM32F4&amp;diff=84361</id>
		<title>Datenuebertragung-STM32F4</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datenuebertragung-STM32F4&amp;diff=84361"/>
		<updated>2014-08-05T16:52:03Z</updated>

		<summary type="html">&lt;p&gt;Mtothea: /* Code */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Datenübertragung über 4 Datenleitungen ==&lt;br /&gt;
&lt;br /&gt;
Ziel des Projektes ist, zwei STM32F4 Discovery Boards sollen durch 4 parallele Datenleitungen und eine Steuerleitung, ähnlich der LCD-Implementierung, miteinander kommunizieren. An einem Board werden über eine PS/2 Tastatur Zeichen eingegeben. Von diesem Board werden die Zeichen an das zweite Board übertragen. Das zweite Board sendet diese Zeichen über die USART-Schnittstelle an ein PC-Terminal Programm (Putty oder Teraterm).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Blockschaltbild ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Blockschaltbild STM32F4.png]]&lt;br /&gt;
Beschreibung des Projekts als Fließtext und/oder Liste von Features.  &lt;br /&gt;
&lt;br /&gt;
== PIN-Belegung ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Schaltplan stm32f4kom.png]]&lt;br /&gt;
&lt;br /&gt;
== Übertragung ==&lt;br /&gt;
&lt;br /&gt;
Die Übertragung erfolgt parallel über 4 Datenleitungen. Eine Control Leitung „C“ teilt den Empfänger (RCV) mit wann die vom Sender (XMT) angelegten Daten gültig sind (positive Flanke des Control Signales). Da ein Character aus 8 Bit besteht, jedoch nur 4 Datenleitungen für die parallele Übertragung verfügbar sind, muss ein Character in Nibbles zu 4 Bit unterteilt werden. Auf der Empfangsseite werden die 2 empfangenen Nibbles wieder zu einem Character mit 8 Bit zusammengesetzt.&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Site A&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
  * @brief  Main-Funktion&lt;br /&gt;
  * @param  None&lt;br /&gt;
  * @retval None&lt;br /&gt;
  */&lt;br /&gt;
int main(void){&lt;br /&gt;
/* Stromversorgung / mit Takt versorgen */&lt;br /&gt;
      RCC_initialisieren();&lt;br /&gt;
      /* Pins konfigurieren */&lt;br /&gt;
      GPIO_initialisieren();&lt;br /&gt;
      /* Interrupt fuer PS2-Clock */&lt;br /&gt;
      EXTILine15_10_Config();&lt;br /&gt;
      /* Auf interrupt warten */&lt;br /&gt;
while(1){} }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
* @brief Stromversorgung und Takt für SYSCFG und GPIO aktivieren&lt;br /&gt;
  * @param  None&lt;br /&gt;
  * @retval None&lt;br /&gt;
  */&lt;br /&gt;
void RCC_initialisieren(void){&lt;br /&gt;
&lt;br /&gt;
      /* Für EXTI - GPIO */&lt;br /&gt;
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);&lt;br /&gt;
      // EXTI mit Takt versorgen&lt;br /&gt;
      /* Für XMT */&lt;br /&gt;
      RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);&lt;br /&gt;
      // GPIOC mit Takt versorgen&lt;br /&gt;
      /* Für PS2 */&lt;br /&gt;
      RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);&lt;br /&gt;
      // GPIOE mit Takt versorgen&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
  * @brief  GPIO Pins konfigurieren&lt;br /&gt;
  * Transmit:GPIOC (Pin 0-3 Daten,Pin 15 Steuerleitung) &lt;br /&gt;
  *  PS2: GPIOE (Pin 9 -&amp;gt; Daten | Pin 11 -&amp;gt; Clock)&lt;br /&gt;
  * @param  None&lt;br /&gt;
  * @retval None&lt;br /&gt;
  */&lt;br /&gt;
void GPIO_initialisieren(void){&lt;br /&gt;
      /* Senddata (Daten) */&lt;br /&gt;
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;&lt;br /&gt;
      // Ports als Output definieren&lt;br /&gt;
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3; // Pins 0,1,2,3 aktivieren&lt;br /&gt;
      GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; // Output Modus: Push-pull &lt;br /&gt;
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; // Abtastfrequenz auf 2MHz       &lt;br /&gt;
      GPIO_Init(GPIOC, &amp;amp;GPIO_InitStructure);&lt;br /&gt;
      // GPIOC Konfiguration übergeben, Pointer auf Struktur mit Config&lt;br /&gt;
      &lt;br /&gt;
      /* Steuerleitung */&lt;br /&gt;
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; // Port als Output definieren &lt;br /&gt;
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; // Pin 15 aktivieren &lt;br /&gt;
      GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; // Output Modus: Push-pull &lt;br /&gt;
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; // Abtastfrequenz auf 2MHz       &lt;br /&gt;
      GPIO_Init(GPIOC, &amp;amp;GPIO_InitStructure);&lt;br /&gt;
      // GPIOC Konfiguration übergeben, Pointer auf Struktur mit Config&lt;br /&gt;
      &lt;br /&gt;
      /* PS2 -&amp;gt; (Pin 9 -&amp;gt; Daten | Pin 11 -&amp;gt; Clock) */ &lt;br /&gt;
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; // Port als Input definieren &lt;br /&gt;
      GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; // Input Modus: Pull-Up &lt;br /&gt;
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_11;&lt;br /&gt;
      // Pin9 und Pin11 aktivieren&lt;br /&gt;
      GPIO_Init(GPIOE, &amp;amp;GPIO_InitStructure);&lt;br /&gt;
      // GPIOE Konfiguration übergeben, Pointer auf Struktur mit Config&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mtothea</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datenuebertragung-STM32F4&amp;diff=84360</id>
		<title>Datenuebertragung-STM32F4</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datenuebertragung-STM32F4&amp;diff=84360"/>
		<updated>2014-08-05T16:45:53Z</updated>

		<summary type="html">&lt;p&gt;Mtothea: Die Seite wurde neu angelegt: „== Datenübertragung über 4 Datenleitungen ==  Ziel des Projektes ist, zwei STM32F4 Discovery Boards sollen durch 4 parallele Datenleitungen und eine Steuerle…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Datenübertragung über 4 Datenleitungen ==&lt;br /&gt;
&lt;br /&gt;
Ziel des Projektes ist, zwei STM32F4 Discovery Boards sollen durch 4 parallele Datenleitungen und eine Steuerleitung, ähnlich der LCD-Implementierung, miteinander kommunizieren. An einem Board werden über eine PS/2 Tastatur Zeichen eingegeben. Von diesem Board werden die Zeichen an das zweite Board übertragen. Das zweite Board sendet diese Zeichen über die USART-Schnittstelle an ein PC-Terminal Programm (Putty oder Teraterm).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Blockschaltbild ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Blockschaltbild STM32F4.png]]&lt;br /&gt;
Beschreibung des Projekts als Fließtext und/oder Liste von Features.  &lt;br /&gt;
&lt;br /&gt;
== PIN-Belegung ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Schaltplan stm32f4kom.png]]&lt;br /&gt;
&lt;br /&gt;
== Übertragung ==&lt;br /&gt;
&lt;br /&gt;
Die Übertragung erfolgt parallel über 4 Datenleitungen. Eine Control Leitung „C“ teilt den Empfänger (RCV) mit wann die vom Sender (XMT) angelegten Daten gültig sind (positive Flanke des Control Signales). Da ein Character aus 8 Bit besteht, jedoch nur 4 Datenleitungen für die parallele Übertragung verfügbar sind, muss ein Character in Nibbles zu 4 Bit unterteilt werden. Auf der Empfangsseite werden die 2 empfangenen Nibbles wieder zu einem Character mit 8 Bit zusammengesetzt.&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
&lt;br /&gt;
Site A&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
  * @brief  Main-Funktion&lt;br /&gt;
  * @param  None&lt;br /&gt;
  * @retval None&lt;br /&gt;
  */&lt;br /&gt;
int main(void){&lt;br /&gt;
/* Stromversorgung / mit Takt versorgen */&lt;br /&gt;
      RCC_initialisieren();&lt;br /&gt;
      /* Pins konfigurieren */&lt;br /&gt;
      GPIO_initialisieren();&lt;br /&gt;
      /* Interrupt fuer PS2-Clock */&lt;br /&gt;
      EXTILine15_10_Config();&lt;br /&gt;
      /* Auf interrupt warten */&lt;br /&gt;
while(1){} }&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mtothea</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Schaltplan_stm32f4kom.png&amp;diff=84359</id>
		<title>Datei:Schaltplan stm32f4kom.png</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Schaltplan_stm32f4kom.png&amp;diff=84359"/>
		<updated>2014-08-05T16:41:30Z</updated>

		<summary type="html">&lt;p&gt;Mtothea: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mtothea</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Blockschaltbild_STM32F4.png&amp;diff=84358</id>
		<title>Datei:Blockschaltbild STM32F4.png</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Blockschaltbild_STM32F4.png&amp;diff=84358"/>
		<updated>2014-08-05T16:39:06Z</updated>

		<summary type="html">&lt;p&gt;Mtothea: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mtothea</name></author>
	</entry>
</feed>