Obsługa przetwornika ADC w mikrokontrolerach STM32
Na początku programu następuje inicjalizacja poszczególnych elementów jak: RCC, GPIO, przerwanie SysTick, konwerter ADC oraz inicjalizacja wyświetlacza. Zasadnicza część programu jest realizowana w nieskończonej pętli. Na początku tej pętli jest wykonywany odczyt rejestru po skończonym pomiarze konwertera ADC. Odczyt jest realizowany wraz wykonaniem iloczynu logicznego, który zeruje cztery najmniej znaczące bity. W następnym kroku jest obliczane napięcie – wykorzystywane są tu zmienne typu float. Kolejnym etapem jest wyznaczenie wartości poszczególnych cyfr wartości napięcia, są to obliczenia matematyczne z wykorzystaniem rzutowania zmiennych na zmienną typu uint8_t. Na końcu uzyskane dane są prezentowane na podłączonym wyświetlaczu.
Szczególną uwagę należy zwrócić na sposób prezentowania wyniku danych za pomocą diod LED. Operacja ta jest realizowana przez zapis do rejestru BSRR odpowiedniego portu. Rejestr ten jest 32-bitwy i realizuje dwie funkcje. Za pierwszą z nich odpowiedzialne jest 16 starszych bitów, ich ustawienie powoduje ustawienie stanu niskiego na wskazanych wyjściach. Drugą funkcję realizuje 16 młodszych bitów, które odpowiedzialne są za ustawienie wskazanych wyjść w stan wysoki.
W programie należy zwrócić także uwagę na inicjalizację konwertera ADC, kod przedstawiono na listingu 2.
List. 2
void Configuration_ADC(void)
{
ADC_InitTypeDef ADC_InitStructure;
//konfiguracja ADC1
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
ADC_InitStructure.ADC_ScanConvMode = DISABLE;
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfChannel = 1;
ADC_Init(ADC1, &ADC_InitStructure);
//
ADC_RegularChannelConfig(ADC1, ADC_Channel_14, 1, ADC_SampleTime_71Cycles5);
//włączenie ADC1
ADC_Cmd(ADC1, ENABLE);
//wywołanie resetu rejestrów kalibracji
ADC_ResetCalibration(ADC1);
//oczekiwanie na zakończenie resetu
while(ADC_GetResetCalibrationStatus(ADC1));
//wywołanie kalibracji
ADC_StartCalibration(ADC1);
//oczekiwanie na zakończenie kalibracji
while(ADC_GetCalibrationStatus(ADC1));
}
Jest to klasyczna inicjalizacja przetwornika, uwagę należy zwrócić, iż po inicjalizacji ciągła praca przetwornika ADC jest wyłączona. Jak zostało zaznaczone wcześniej rozpoczęcie pojedynczej konwersji przetwornika ADC jest realizowane przez programowe ustawienie odpowiedniego bitu rejestru. Operacja ta jest realizowana w czasie obsługi przerwania od SysTick, kod obsługi przerwania został przedstawiono na listingu 3.
List. 3
void SysTick_Handler(void)
{
//ustawienie bitu EXTTRIG rozpoczynającego pojedyńczy pomiar
ADC1->CR2 |= 0x00100000;
}
Mariusz Dziębowski
m.dziebowski@interia.pl
Odnośniki:
Moduł wyświetlacza LCD KAmodLCD1
Zestaw uruchomieniowy ZL27ARM


PM-3133-CPS – inteligentny trójfazowy licznik energii z CANopen
Czujnik drgań STMicroelectronics z wbudowaną AI alternatywą dla czujników piezoelektrycznych do monitorowania urządzeń przemysłowych
Słabe ogniwa elektroniki: Dlaczego jakość wiązek kablowych i płytek PCB decyduje o Twoim zysku? 


![https://www.youtube.com/watch?v=gHcP8AajoN4 Szymon Robak oprowadza po katowickim Laboratorium Badań Kompatybilności Elektromagnetycznej w Sieć Badawcza Łukasiewicz - Instytucie Sztucznej Inteligencji i Cyberbezpieczeństwa. Zapraszamy na film! [materiał redakcyjny]](https://mikrokontroler.pl/wp-content/uploads/2026/06/Szymon-Robak-tytulowe.png)
![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)

