Also ohne diese seltsame Lib sieht es irgendwie einfacher aus:
1 | void
|
2 | led (int brightness)
|
3 | {
|
4 | if (brightness < 0) brightness = 0;
|
5 | if (brightness > 100) brightness = 100;
|
6 |
|
7 | RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;
|
8 | RCC->APB1ENR |= RCC_APB1ENR_DACEN;
|
9 | GPIOA->MODER |= 3 << (4 * 2);
|
10 | DAC->CR = DAC_CR_EN1;
|
11 | DAC->DHR12R1 = 1000 + brightness * 30;
|
12 | return;
|
13 | }
|
Mir scheint, der wesentliche Unterschied ist DAC_TRIGGER_SOFTWARE, ich
schalte keinen Trigger ein. Deshalb kann ich jederzeit einfach neue
Daten ins Holding Register schreiben.
Die "1000" ist ein Offset für (oder gegen) der Treiber-Transistor.