Gast
#6642007
Ich stelle hier mal ein kleines Program zum Ansteuern von WS2812B LED Pixeln rein. Eine passende Lib ohne HAL konnte ich auf die schnelle nicht finden, deshalb hier der 100ertste Aufguss. Das ganze ist für STM32F103 bzw. STM32F3x3 (BluePill u.ä.). Verwendet wird A8 als Ausgang, da der einmal 5V tauglich ist und zum anderen nicht von den anderen UARTs,SPIs,I2Cs belegt ist. Bei mir gehen die Pixel direkt am 3.3V Push/Pull Ausgang, bei Problemen kann man aber auch den Ausgang als OpenDrain konfigurieren mit einem Widerstand gegen +5V. A8 bedingt Timer 1 Channel 1 und DMA1 Channel5. Die Ausgabe erfolgt continuierlich mit 75µs Pause zwischen den Paketen und läuft komplett ohne CPU und ohne Interrupts. Im TIM1 Update wird jeweil des nächste Byte in das PWM Register TIM1->CCR1 geschrieben. Der DMA Teil läuft cirkular durch, die nötigen Breaks werden durch eine entsprechende Anzal 0-Bytes realisiert. Ein kurzes Testprogramm sieht so aus:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
Andere Abhängigkeiten ausser den µC-Headern gibt es nicht. Auf eine Doppelbufferung wurde verzichtet. Ich brauche das nicht für Lichtspielereien, sondern nutze das zu sowas wie Akkulandestands Anzeige o.ä. mit wenigen Pixeln. https://www.amazon.de/ZHITING-Lichtstreifen-Treiberplatine-8-Kanal-integrierte-vollfarbgesteuerte-Entwicklungsplatine/dp/B08J2S5N8D/ref=sr_1_5?__mk_de_DE=%C3%85M%C3%85%C5%BD%C3%95%C3%91&dchild=1&keywords=neopixel&qid=1617358391&s=software&sr=1-5