In diesem Projekt habe ich eine Digitale Uhr gebaut. Die Zeit wird von GPS Modul geholt, angezeigte Zeit ist sehr präzis. Der Format ist eigentlich in UTC Format ausgegeben, wird aber in Software angepasst. https://eckstein-shop.de/UART-GPS-NEO-6M Die Zeit wird geparst von empfangenen Daten aus dem Modul. Diese Modul schickt Daten in NMEA-0183 Protocol. https://en.wikipedia.org/wiki/NMEA_0183 Ein Buffer von Daten wird über USART über DMA empfangen, ein Interrupt wird ausgelöst wenn 384 bytes in dem Fall, empfangen ist. Diese String wird über SPI Leitung an eine 8 Digit LED Display Modul(MAX7219) übermittelt. https://eckstein-shop.de/8-Digit-LED-Display-Digital-Tube-Red-MAX7219 Hier ist das Projekt mit Source code und allem: :) https://github.com/abtom87/DigitalClock-SPI_GPSTime_STM32F4 Die Software habe ich mit SW4STM32 AC6, eine Eclipse basierte Open-source IDE entwickelt, und nur mit Standard Preipheral Libraries, OHNE MXCUBE. :))) Ich hatte nur Serial port(USART) und Logikanalyzer zur Verfügung für Debugzwecke. Ich habe versucht mehrmals OPENOCD in mein IDE zu integrieren aber hat es nicht funktioniert.
:
Bearbeitet durch User
Beitrag #5347651 wurde vom Autor gelöscht.
So, jetzt habe ich den Projekt mit ein kleiner Twist bisschen upgegradet, und zwar, mit FreeRTOS. :) https://github.com/abtom87/FreeRTOS_SPI_Serial_GPS Es gibt jetzt, insgesamt 3 Tasks, ein Task ist wie ein Dummy Task, der onboard LEDs togglet und ein string ausgibt. Der zweite Task wartet auf eine Semaphore die von DMA IRQ gegeben wird und wenn dass passiert, Infos aus dem DMA Buffer werden in einem lokalen buffer kopiert, nur die Zeit wird geparst und über LED Display MAX7219 (SPI) angezeigt. Der dritte Task wartet auf eine Semaphore die von ein andere USART Rx IRQ gegeben wird, d.h es gibt ein IRQ handler um eine Zeichen von User zu empfangen. Und dieses event ist auch wie der DMA interrupt, asynchron. Jetzt ist es so programmiert das wenn der User irgendeinem Zeichen über Terminal eingibt, dieses Zeichen wird empfangen und ausgegeben. Ich wollte es so machen dass, wenn Man das Zeichen "d" tippt, das Datum auf der LED Display angezeigt wird. Ein "Nice to have" feature. Das Problem ist nur dass, das entsprechende GPS Infos (http://www.gpsinformation.org/dale/nmea.htm#ZDA) wegen Datum können Indoors leider nicht empfangen werden. /***************/ Tool chain Setup /***************/ IDE- OpenSW4STM32 Compiler- ARM-GCC Debugger-OpenOCD OS- Ubuntu 16.04 Flash tool- ST-Link (https://github.com/texane/stlink) /***************/ Hardware Setup /***************/ Evalboard- STM32F411 Discovery Kit (http://www.st.com/en/evaluation-tools/32f411ediscovery.html) LED Dislay - MAX7219 / Segment Display (https://eckstein-shop.de/8-Digit-LED-Display-Digital-Tube-Red-MAX7219) GPS Module - UART-GPS-NEO-6M (https://eckstein-shop.de/UART-GPS-NEO-6M) USB Serial Konverter. Die FreeRTOS version verwendet hier ist v9.0.0. Ich habe nur ein paar APIs von FreeRTOS verwendet, um tasks zu erstellen und konfigurieren mit stack size, priority etc
1 | xTaskCreateStatic |
, um den scheduler zu starten
1 | vTaskStartScheduler |
. Einige APIs wurden verwendet um ISR und Handler Task miteinander zu synchronisieren, diese sind
1 | xSemaphoreGiveFromISR |
der in ein ISR aufgerufen wird , und
1 | xSemaphoreTake |
der in einer entsprechende Handler task aufgerufen wird. Ich finde FreeRTOS wirklich genial, ich habe nur einige APIs verwendet, habe kaum an der Oberfläche gekratzt. Es gibt so viele APIs die man verwenden kann. Ich bin immer noch nicht so ganz zufrieden mit der Design, bin noch am lernen also, es gibt bestimmt ein bessere Weg die Tasks nochmal zu zerteilen, ich meine mit Queues oder so kann man den GPS Task besser managen. Also wenn einer oder anderer von euch Tipps/Vorschläge habt, ich höre zu. Ich bin noch am lernen, und echt-Zeit System lernt man wirklich wenn man die Hands-on verwendet hat.
Aa B. schrieb: > In diesem Projekt habe ich eine Digitale Uhr gebaut. Und wo ist die Uhr? Ich sehe nur ein Steckbrett und ein ST-Discovery-Brettl. Und gesteckte Drähte. W.S.
W.S. schrieb: > Und wo ist die Uhr? > Ich sehe nur ein Steckbrett und ein ST-Discovery-Brettl. Und gesteckte > Drähte. > W.S. Ich glaube Sie meinen/erwarten ein richtige PCB wo alle Teile gelötet sind, ich habe das so nicht gemacht sondern auf ein Breadboard. Ich denke ich muss mein Originale post umformulieren.
Aa B. schrieb: > Ich glaube Sie meinen/erwarten ein richtige PCB Nö, ich hätte ein richtiges Gerät erwartet. Also etwas, das man seiner Ehefrau schenken kann, also mit richtigem Gehäuse, Stromversorgung und so weiter. Eben etwas, das den Namen 'Projekt' verdient. Stattdessen sehe ich eine Art Beschreibung, was du so an IDE, St-Lib und dergleichen verwendet hast, daß du 384 Bytes aus einem GPS-Modul gesammelt hast und daß du für die 4800 Baud mit dem UART auch noch DMA benutzt hast. Ich will dich wahrlich nicht abbringen von deinem Basteln, schließlich macht es dir Freude und das soll so sein. Aber ein Projekt braucht denn doch etwas mehr. W.S.
W.S. schrieb: > Nö, ich hätte ein richtiges Gerät erwartet. Also etwas, das man seiner > Ehefrau schenken kann, also mit richtigem Gehäuse, Stromversorgung und > so weiter. Eben etwas, das den Namen 'Projekt' verdient. > Da haben Sie leider recht. Wenn ich verheiratet wäre und mit diese Frau auch verheiratet bleiben möchte dann ist diese bastelaktion als Geschenk kein gute Idee.:) Ich bin mir nicht sicher ob sie mein 2te Post von dem Thread gelesen haben aber, der Inhalt allgemein ist sehr Softwarelastig. Also es würde mich freuen wenn eine oder der andere Software Bruder davon profitieren kann, weil ich selber auch von diese Forum über AVR und STM32 vieles gelernt habe. Deshalb habe ich die Infos und Code die man über mein GitHub Link sehen kann, hier gepostet, und dadurch kann jemand was lernen oder ich kann selber mein SW verbessern, wenn jemand ein Anregung hat :)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.