Obsługa przetwornika ADC w mikrokontrolerach STM32
W prezentowanym projekcie pokazano wykorzystanie 12-bitowego przetwornika analogowo-cyfrowego (ADC) wbudowanego w mikrokontroler STM32F103. W projekcie jest mierzone napięcie na wyprowadzeniu PC4 mikrokontrolera STM32 zamontowanego w zestawie ZL27ARM. Napięcie to można zmieniać za pomocy zamontowanego potencjometru. Zmierzone napięcie jest prezentowane na wyświetlaczu LCD dołączonego modułu KAmodLCD1 jako odczytana wartość rejestru przetwornika ADC mikrokontrolera, obliczona wartość napięcia oraz bargraf. Dodatkowo wartość 8 najbardziej znaczących bitów jest przedstawiana na diodach LED zestawu ZL27ARM.
|
Projekty referencyjne dla ZL27ARM Portal www.stm32.eu przygotował projekty referencyjne dla mikrokontrolerów z rodziny STM32, które zostały opublikowane tu. Są one dostępne bezpłatnie, konieczne jest tylko zarejestrowanie się jako użytkownik portalu. |
Na rysunku 1 przedstawiono sposób dołączenia modułu wyświetlacza do zestawu ZL27ARM. Połączenie wygodnie jest wykonać za pomocą kolorowych przewodów CAB_A pokazanych na rysunku 2. Na rysunku 3 pokazano wyświetlacz LCD podczas pracy programu.
Rys. 1. Sposób dołączenia wyświetlacza do mikrokontrolera STM32
Rys. 2. Kolorowe przewody CAB_A ułatwiające wykonanie połączeń
Rys. 3. Widok wyświetlacza podczas pracy programu
Rzadko jest wymagane, aby pomiar napięcia odbywał się w cyklu ciągłym. Przedstawiony program wykonuje pomiar w momencie ustawienia odpowiedniego bitu w czasie obsługi przerwania SysTick. Na listingu 1 przedstawiono funkcję main programu.
List. 1
int main(void)
{
Configuration_RCC();
Configuration_GPIO();
Configuration_Interrupts();
Configuration_ADC();
//inicjalizacja i obsługa wyświetlacza
PCD8544_INIT();
PCD8544_LCDClear();
PCD8544_LCDWriteText("Voltage", 21, 0);
PCD8544_LCDWrite();
while(1)
{
//
ADC1Reg = ADC_GetConversionValue(ADC1) & 0xFF0;
ADC1Val = (ADC1Reg * 3.3 / 4096);
//przekształcenie wartosci ADC1Val do postaci umożliwiającej prezentację na wywietlaczu
temp[0] = (uint8_t)(ADC1Val / 1.0);
temp[1] = (uint8_t)((ADC1Val - temp[0]) / 0.1) ;
temp[2] = (uint8_t)((ADC1Val - temp[0] - (temp[1] * 0.1))/ 0.01);
//prezentacja napięcia na pinie PC4 na wywietlaczu
PCD8544_LCDWriteSignDouble(temp[0] + 0x30, 12, 2);
PCD8544_LCDWriteSignDouble('.', 24, 2);
PCD8544_LCDWriteSignDouble(temp[1] + 0x30, 36, 2);
PCD8544_LCDWriteSignDouble(temp[2] + 0x30, 48, 2);
PCD8544_LCDWriteSignDouble('V', 60, 2);
//wyświetlenie wartości heksadecymalnej zmiennej ADC1Val
PCD8544_LCDWriteSign('0', 27, 1);
PCD8544_LCDWriteSign('x', 33, 1);
PCD8544_LCDWriteSign(ASCII_HEX(ADC1Reg % 0x1000 / 0x100), 39, 1);
PCD8544_LCDWriteSign(ASCII_HEX(ADC1Reg % 0x100 / 0x10), 45, 1);
PCD8544_LCDWriteSign(ASCII_HEX(ADC1Reg % 0x10 / 0x1), 51, 1);
//wyświetlenie bargrafu
PCD8544_LCDBargraph(ADC1Reg & 0xFF0,0xFF0,5);
//wyslanie danych na wyświetlacz
PCD8544_LCDWrite();
//wyzerowanie 8 najstarszych bitów GPIOB
GPIOB->BSRR = 0xFF000000;
//ustawienie 8 najstarszych bitów GPIOB
GPIOB->BSRR = (ADC1Reg << 4);
}
}




Od wzmacniacza nieodwracającego do integratora i wzmacniacza ładunkowego, czyli historia z zaskakującą pointą jak w dobrym kryminale
Green czy smart? Jak decyzje ESG zaczynają optymalizować procesy produkcyjne
Firma Semicon ma w ofercie narzędzia do obróbki przewodów 

![https://www.youtube.com/watch?v=BgxJVTwYJ-s Zapraszamy do obejrzenia filmu i wysłuchania krótkich wypowiedzi prelegentów Hardware Forum 2026 i organizatorów majowej konferencji dla inżynierów z branży elektronicznej: Konrad Bruliński z Lemontech, prof. Krzysztof Kulpa z Politechniki Warszawskiej, Zbigniew Huber z FLC, Ewa Załupska z firmy KROK, Jerzy Kozieł z MPTECH, Grzegorz Potyralski z VIGO Photonics, dr Krzysztof Czuba z Politechniki Warszawskiej, Anna Beata Kalisz Hedegaard z Quantum Security Defence, Adrian Cichosz z Elhurt Dystrybucja Anna Kamińska z Creotech Quantum, oraz Łukasz Jaeszke i Adam Jaeszke z TEK.day [materiał redakcyjny]](https://mikrokontroler.pl/wp-content/uploads/2026/05/tytulowe-film-1.png)



