Nízkovrstvé ovladače UM3029

Informace o produktu

Produkt je sada ovladačů HAL (Hardware Abstraction Layer).
pro mikrokontroléry STM32C0. Ovladače HAL se skládají ze sady
funkce pokrývající nejběžnější periferní funkce a jsou
navrženy tak, aby nabízely bohatou sadu rozhraní API a umožňovaly snadnou interakci
vrchní vrstvy aplikace. Každý ovladač je řízen společným API
který standardizuje strukturu, funkce a parametry ovladače
jména. Ovladače HAL zahrnují sadu modulů ovladačů, každý modul
připojení k samostatnému perifernímu nebo funkčnímu režimu.

Zkratky a definice

Akronym Definice
ADC Analogově-digitální převodník
ANSI Americký národní normalizační institut
API Aplikační programovací rozhraní
BSP Balíček podpory desky
CMSIS Standardní softwarové rozhraní mikrokontroléru Cortex
CPU Centrální procesorová jednotka
CRC Výpočetní jednotka CRC
CSS Bezpečnostní systém hodin
DLYB Blokování zpoždění
DMA Přímý přístup do paměti
DMAMUX Pokročilé ovládání, univerzální nebo základní časovač
EXTI Univerzální asynchronní přijímač/vysílač
BLIKAT Univerzální synchronní přijímač/vysílač
GPIO svtage referenční vyrovnávací paměť
HAL Vrstva abstrakce hardwaru
I2C Inter-Integrated Circuit
I2S Integrovaný mezičipový zvuk
ICACHE Instrukční mezipaměť
IRDA Asociace infračervených dat
IWDG Nezávislý hlídací pes
MCO Výstup hodin mikrokontroléru
MPU Jednotka ochrany paměti
MSP Ukazatel hlavního zásobníku
NVIC Vnořený vektorový řadič přerušení
PPP Název ovladače periferie/modulu
PWR Ovládání výkonu
RCC Reset a ovládání hodin
RTC Hodiny reálného času
SMBUS Sběrnice pro správu systému
SPI Sériové periferní rozhraní
SRAM Statická paměť s náhodným přístupem
SysTick Systémový časovač tikání
TIM Časovač
UART Univerzální asynchronní přijímač/vysílač
USART Univerzální synchronní přijímač/vysílač
VREFBUF svtage referenční vyrovnávací paměť
WWDG Hlídač oken

Návod k použití produktu

Chcete-li produkt používat, postupujte takto:

  1. Stáhněte a nainstalujte potřebný software z
    STMicroelectronics webmísto.
  2. Zahrňte nezbytný ovladač HAL files ve vašem projektu, jako např
    stm32c0xx_hal_ppp.c, stm32c0xx_hal_ppp.h, stm32c0xx_hal_ppp_ex.c,
    a stm32c0xx_hal_ppp_ex.h.
  3. Inicializujte ovladače HAL pomocí souboru stm32c0xx_hal.ca
    stm32c0xx_hal.h files.
  4. Použijte k tomu standardizovaná rozhraní API poskytovaná ovladači HAL
    komunikovat s periferiemi na mikrokontroléru STM32C0.
  5. Další informace o konkrétních naleznete v uživatelské příručce
    API a periferní funkce.

UM3029
Uživatelská příručka
Popis STM32C0 HAL a nízkovrstvých ovladačů
Zavedení
STM32Cube je originální iniciativa STMicroelectronics, která výrazně zlepšuje produktivitu vývojářů snížením úsilí, času a nákladů na vývoj. STM32Cube pokrývá portfolio STM32. STM32Cube obsahuje: · STM32CubeMX, grafický softwarový konfigurační nástroj, který umožňuje generování inicializačního kódu C pomocí grafického
čarodějové. · Komplexní vestavěná softwarová platforma dodávaná pro každou řadu (jako je STM32CubeC0 pro řadu STM32C0)
Vestavěný software STM32Cube HAL, STM32 abstrakce vrstva zajišťující maximální přenositelnost v rámci portfolia STM32. HAL API jsou k dispozici pro všechna periferní zařízení.
Nízkovrstvá API (LL) nabízející rychlou lehkou expertně orientovanou vrstvu, která je blíže hardwaru než HAL. LL API jsou k dispozici pouze pro sadu periferních zařízení.
Konzistentní sada middlewarových komponent, jako je Azure® RTOS ThreadX, FileX a LevelX Vrstva ovladače HAL poskytuje jednoduchou, generickou víceinstanční sadu API (rozhraní pro programování aplikací) pro interakci s vyšší vrstvou (aplikace, knihovny a zásobníky). Rozhraní API ovladače HAL jsou rozdělena do dvou kategorií: generická rozhraní API, která poskytují společné a obecné funkce pro všechny řady STM32, a rozhraní API rozšíření, která zahrnují specifické a přizpůsobené funkce pro danou řadu nebo číslo dílu. Ovladače HAL zahrnují kompletní sadu rozhraní API připravených k použití, která zjednodušují implementaci uživatelských aplikací. NapřampKomunikační periferie obsahují rozhraní API pro inicializaci a konfiguraci periferie, správu datových přenosů v režimu dotazování, obsluhu přerušení nebo DMA a správu komunikačních chyb. Ovladače HAL jsou orientovány na funkce namísto orientované na IP. NapřampRozhraní API časovače jsou rozdělena do několika kategorií podle funkcí IP, jako je základní časovač, zachycení a modulace šířky pulzu (PWM). Vrstva ovladače HAL implementuje detekci selhání za běhu kontrolou vstupních hodnot všech funkcí. Tato dynamická kontrola zvyšuje robustnost firmwaru. Detekce běhu je také vhodná pro vývoj a ladění uživatelských aplikací. Ovladače LL nabízejí hardwarové služby založené na dostupných funkcích periferií STM32. Tyto služby přesně odrážejí hardwarové možnosti a poskytují atomické operace, které je třeba volat podle programovacího modelu popsaného v referenční příručce produktové řady. Výsledkem je, že služby LL nejsou založeny na samostatných procesech a nevyžadují žádné další paměťové zdroje pro uložení jejich stavů, čítačů nebo datových ukazatelů. Všechny operace se provádějí změnou obsahu přidružených periferních registrů. Na rozdíl od HAL nejsou LL API poskytována pro periferní zařízení, pro která není klíčovou funkcí optimalizovaný přístup, nebo pro ty, které vyžadují náročnou softwarovou konfiguraci a/nebo komplexní zásobník vyšší úrovně. HAL a LL se doplňují a pokrývají širokou škálu aplikačních požadavků: · HAL nabízí API na vysoké úrovni a orientované na funkce s vysokou úrovní přenositelnosti. Ty skrývají MCU a periferie
složitost ze strany koncového uživatele. · LL nabízí nízkoúrovňová API na úrovni registrů s lepší optimalizací, ale menší přenositelností. Ty vyžadují hluboké znalosti
specifikace MCU a periferií. Zdrojový kód ovladačů HAL a LL je vyvíjen v Strict ANSI-C, díky čemuž je nezávislý na vývojových nástrojích. Kontroluje se pomocí nástroje statické analýzy CodeSonar®. Je to plně zdokumentováno. Jsou v souladu se standardem MISRA C®:2012. Struktura této uživatelské příručky je následující: · Overview ovladačů HAL · Konecview nízkovrstvých ovladačů · Kohabitace ovladačů HAL a LL · Podrobný popis každého ovladače periferie: konfigurační struktury, funkce a jak použít dané API k sestavení
vaši aplikaci

UM3029 – Rev 1 – Září 2022 Pro další informace kontaktujte místní prodejní kancelář STMicroelectronics.

www.st.com

1
Poznámka:

UM3029
Obecné informace
Obecné informace
Balíček MCU STM32CubeC0 běží na 32bitových mikrokontrolérech STM0C32 založených na procesoru Arm® Cortex®-M. Arm je registrovaná ochranná známka společnosti Arm Limited (nebo jejích dceřiných společností) v USA a/nebo jinde.

UM3029 – Rev 1

strana 2/1419

UM3029
Zkratky a definice

2

Zkratky a definice

Zkratka ADC ANSI API BSP
CMSIS CPU CRC CSS DLYB DMA
DMAMUX EXTI FLASH GPIO HAL I2C I2S
ICACHE IRDA IWDG MCO MPU MSP NVIC PPP PWR RCC RTC
SMBUS SPI
SRAM SysTick
TIM UART USART VREFBUF WWDG

Tabulka 1. Zkratky a definice
Definice Analogově-digitální převodník Americký národní normalizační institut Aplikační programovací rozhraní
Balíček podpory desky Standardní softwarové rozhraní mikrokontroléru Cortex
Centrální procesorová jednotka Výpočtová jednotka CRC Systém zabezpečení hodin Blokování zpoždění Přímý přístup do paměti
Multiplexer požadavku na přímý přístup do paměti Externí řadič přerušení/událost Paměť Flash Obecné I/O Vrstva abstrakce hardwaru Interintegrovaný obvod Interintegrovaný zvuk Instrukční mezipaměť Infračervená datová asociace Nezávislý hlídač Výstup hodin mikrokontroléru Jednotka ochrany paměti MCU Specifický balíček Vnořený vektorový řadič přerušení STM32 periferie nebo blokování Řadič napájení Reset a řadič hodin Hodiny reálného času Sběrnice správy systému Sériové periferní rozhraní Externí paměť SRAM Časovač tikání systému
Pokročilé ovládání, univerzální nebo základní časovač Univerzální asynchronní přijímač/vysílač Univerzální synchronní přijímač/vysílač sv.tage referenční vyrovnávací paměť Window watchdog

UM3029 – Rev 1

strana 3/1419

UM3029
Nadview ovladačů HAL

3

Nadview ovladačů HAL

Ovladače HAL jsou navrženy tak, aby nabízely bohatou sadu rozhraní API a aby snadno spolupracovaly s horními vrstvami aplikace.
Každý ovladač se skládá ze sady funkcí pokrývajících nejběžnější periferní funkce. Vývoj každého ovladače je řízen společným API, které standardizuje strukturu ovladače, funkce a názvy parametrů.
Ovladače HAL zahrnují sadu modulů ovladačů, z nichž každý je propojen se samostatnou periferií. V některých případech je však modul propojen s periferním funkčním režimem. Jako exampExistuje několik modulů pro periferní zařízení USART: modul ovladače UART, modul ovladače USART, modul ovladače SMARTCARD a modul ovladače IRDA.
Hlavní vlastnosti HAL jsou následující:
· Mezirodinná přenosná sada API pokrývající běžné periferní funkce a také rozšiřující API v případě specifických periferních funkcí.
· Tři modely programování API: dotazování, přerušení a DMA.
· Rozhraní API jsou kompatibilní s RTOS:
Plně reentrantní API
Systematické využívání časových limitů v režimu dotazování
· Podpora periferních multi-instancí umožňující souběžná volání API pro více instancí dané periferie (jako je USART1 nebo USART2)
· Všechna rozhraní HAL API implementují mechanismus funkcí zpětného volání uživatele:
Peripheral Init/DeInit HAL API mohou volat funkce zpětného volání uživatele k provedení inicializace/deinicializace na úrovni periferního systému (hodiny, GPIO, přerušení, DMA)
Periferie přerušují události
Chybové události
· Mechanismus zamykání objektů: bezpečný přístup k hardwaru, který zabraňuje vícenásobným falešným přístupům ke sdíleným zdrojům.
· Časový limit používaný pro všechny procesy blokování: časový limit může být jednoduchý čítač nebo časová základna.

UM3029 – Rev 1

strana 4/1419

3.1
3.1.1
3.1.2

UM3029
HAL a uživatelská aplikace files

HAL a uživatelská aplikace files
Ovladač HAL files Ovladače HAL se skládají z následující sady files:

Tabulka 2. Ovladač HAL files

File

Popis

stm32c0xx_hal_ppp.c

Hlavní ovladač periferie/modulu file Zahrnuje rozhraní API, která jsou společná pro všechna zařízení STM32. Přampsoubor: stm32c0xx_hal_adc.c, stm32c0xx_hal_irda.c.

stm32c0xx_hal_ppp.h

Záhlaví file hlavního řidiče C file
Zahrnuje běžná data, manipulační a výčtové struktury, definující příkazy a makra, stejně jako exportovaná generická API. Přample:stm32c0xx_hal_adc.h,stm32c0xx_hal_irda.h.

stm32c0xx_hal_ppp_ex.c

Rozšíření file ovladače periferie/modulu. Zahrnuje specifická rozhraní API pro dané číslo dílu nebo rodinu, stejně jako nově definovaná rozhraní API, která přepisují výchozí generická rozhraní API, pokud je interní proces implementován jiným způsobem.
Example:stm32c0xx_hal_adc_ex.c,stm32c0xx_hal_flash_ex.c.

stm32c0xx_hal_ppp_ex.h

Záhlaví file rozšíření C file
Zahrnuje specifická data a struktury výčtu, definující příkazy a makra, stejně jako exportovaná rozhraní API specifická pro číslo dílu zařízení Exampsoubor: stm32c0xx_hal_adc_ex.h,stm32c0xx_hal_flash_ex.h.

stm32c0xx_hal.c stm32c0xx_hal.h

Tento file se používá pro inicializaci HAL a obsahuje DBGMCU, Remap a Time Delay založené na SysTick API.
stm32c0xx_hal.c záhlaví file

Šablona file ke zkopírování do složky uživatelské aplikace stm32c0xx_hal_msp_template.c Obsahuje inicializaci MSP a deinicializaci (hlavní rutina a zpětná volání)
periferie používané v uživatelské aplikaci.
stm32c0xx_hal_conf_template.h Šablona file umožňující přizpůsobení ovladačů pro danou aplikaci

stm32c0xx_hal_def.h

Společné prostředky HAL, jako jsou společné příkazy definice, výčty, struktury a makra

Uživatelská aplikace files Minimum filePotřebné pro sestavení aplikace pomocí HAL jsou uvedeny v tabulce níže:

Tabulka 3. Uživatelská aplikace files

File system_stm32c0xx.c
startup_stm32c0xx.s stm32c0xx_flash.icf
(volitelné) stm32c0xx_hal_msp.c stm32c0xx_hal_conf.h

Popis
Tento file obsahuje SystemInit(), který je volán při spuštění těsně po resetování a před větvením do hlavního programu. Nekonfiguruje systémové hodiny při spuštění (na rozdíl od standardní knihovny). To se provádí pomocí HAL API v uživateli files. Umožňuje přemístění vektorové tabulky v interní paměti SRAM.
Specifické pro toolchain file který obsahuje popisovač resetu a vektory výjimek.
U některých toolchainů umožňuje přizpůsobit velikost zásobníku/haldy požadavkům aplikace.
Linker file pro EWARM toolchain umožňující především přizpůsobení velikosti zásobníku/haldy požadavkům aplikace.
Tento file obsahuje MSP inicializaci a deinicializaci (hlavní rutina a zpětná volání) periferního zařízení používaného v uživatelské aplikaci.
Tento file umožňuje uživateli přizpůsobit ovladače HAL pro konkrétní aplikaci.

UM3029 – Rev 1

strana 5/1419

Poznámka:

UM3029
HAL a uživatelská aplikace files

File stm32c0xx_it.c/.h
hlavní.c/.h

Popis Není povinné upravovat tuto konfiguraci. Aplikace může používat výchozí konfiguraci bez jakýchkoli úprav.
Tento file obsahuje obsluhu výjimek a servisní rutinu přerušení periferií a v pravidelných časových intervalech volá HAL_IncTick() pro zvýšení lokální proměnné (deklarované v stm32c0xx_hal.c) používané jako časová základna HAL. Ve výchozím nastavení se tato funkce v Systick ISR nazývá každá 1 ms. .
Rutina PPP_IRQHandler() musí volat HAL_PPP_IRQHandler(), pokud je v aplikaci použit proces založený na přerušení.
Tento file obsahuje hlavní programovou rutinu, zejména: · volání HAL_Init() · implementace asse_failed() · konfigurace systémových hodin · periferní inicializace HAL a kód uživatelské aplikace.

Balíček STM32Cube je dodáván se šablonami projektů připravenými k použití, jednou pro každou podporovanou desku. Každý projekt obsahuje filevýše uvedené a předkonfigurovaný projekt pro podporované toolchainy. Každá šablona projektu poskytuje prázdnou funkci hlavní smyčky a lze ji použít jako výchozí bod pro seznámení se s nastavením projektu pro STM32Cube. Jeho vlastnosti jsou následující:
· Obsahuje zdroje ovladačů HAL, CMSIS a BSP, což jsou minimální komponenty pro vývoj kódu na dané desce.
· Obsahuje cesty pro všechny součásti firmwaru. · Definuje podporované zařízení STM32 a umožňuje odpovídajícím způsobem konfigurovat ovladače CMSIS a HAL. · Poskytuje uživatele připravené k použití fileje předem nakonfigurováno, jak je definováno níže:
HAL je inicializováno SysTick ISR implementováno pro HAL_GetTick() Systémové hodiny nakonfigurované s vybranou frekvencí zařízení.
Pokud je existující projekt zkopírován do jiného umístění, je třeba aktualizovat cesty pro zahrnutí.

UM3029 – Rev 1

strana 6/1419

Obrázek 1. Přample šablony projektu

UM3029
Datové struktury HAL

3.2
3.2.1

Datové struktury HAL
Každý ovladač HAL může obsahovat následující datové struktury: · Struktury periferních ovladačů · Inicializační a konfigurační struktury · Specifické procesní struktury.
Struktury periferních ovladačů API mají modulární generickou víceinstanční architekturu, která umožňuje pracovat s několika IP instancemi současně. PPP_HandleTypeDef *handle je hlavní struktura, která je implementována v ovladačích HAL. Zvládá konfiguraci periferií/modulů a registruje a vkládá všechny struktury a proměnné potřebné pro sledování toku periferních zařízení.

UM3029 – Rev 1

strana 7/1419

Poznámka:

UM3029
Datové struktury HAL
Periferní rukojeť se používá pro následující účely:
· Podpora více instancí: každá instance periferie/modulu má svůj vlastní ovladač. V důsledku toho jsou zdroje instancí nezávislé.
· Interkomunikace periferních procesů: rukojeť se používá ke správě sdílených datových zdrojů mezi procesními rutinami. Přample: globální ukazatele, úchyty DMA, stavový automat.
· Úložiště: tento popisovač se také používá ke správě globálních proměnných v rámci daného ovladače HAL.
Bývalýample obvodové struktury je zobrazen níže:
typedef struct { USART_TypeDef *Instance; /* USART registruje základní adresu */ USART_InitTypeDef Init; /* Parametry komunikace Usart */ uint8_t *pTxBuffPtr;/* Ukazatel na Usart Tx transfer Buffer */ uint16_t TxXferSize; /* Usart Tx Transfer size */ __IO uint16_t TxXferCount;/* Usart Tx Transfer Counter */ uint8_t *pRxBuffPtr;/* Ukazatel na Usart Rx transfer Buffer */ uint16_t RxXferSize; /* Usart Rx Velikost přenosu */ __IO uint16_t RxXferCount; /* Usart Rx Transfer Counter */ DMA_HandleTypeDef *hdmatx; /* Parametry úchytu Usart Tx DMA */ DMA_HandleTypeDef *hdmarx; /* Parametry rukojeti Usart Rx DMA */ HAL_LockTypeDef Lock; /* Zamykání objektu */ __IO HAL_USART_StateTypeDef State; /* Stav komunikace Usart */ __IO HAL_USART_ErrorTypeDef ErrorCode;/* Kód chyby USART */ }USART_HandleTypeDef;
1. Funkce více instancí znamená, že všechna rozhraní API použitá v aplikaci jsou reentrantní a vyhýbají se použití globálních proměnných, protože podprogramy nemusí být reentrantní, pokud spoléhají na to, že globální proměnná zůstane nezměněna, ale tato proměnná je upravena, když je podprogram rekurzivně vyvolal. Z tohoto důvodu jsou dodržována následující pravidla: Reentrantní kód neobsahuje žádná statická (nebo globální) nekonstantní data: reentrantní funkce mohou pracovat s globálními daty. NapřampObslužná rutina pro opětovné přihlášení přerušení může získat část stavu hardwaru pro práci (napřample čtecí vyrovnávací paměť sériového portu), která je nejen globální, ale také nestálá. Přesto se nedoporučuje typické použití statických proměnných a globálních dat v tom smyslu, že by se v těchto proměnných měly používat pouze atomické instrukce readmodify-write. Během provádění takové instrukce by nemělo být možné, aby došlo k přerušení nebo signálu. Reentrantní kód nemění svůj vlastní kód.
2. Když periferní zařízení může spravovat několik procesů současně pomocí DMA (full duplex case), je do PPP_HandleTypeDef přidán popisovač rozhraní DMA pro každý proces.
3. U sdílených a systémových periferií se nepoužívá žádný handle nebo objekt instance. Periferie, kterých se týká tato výjimka, jsou následující: GPIO SYSTICK NVIC PWR RCC FLASH

UM3029 – Rev 1

strana 8/1419

3.2.2
Poznámka: 3.2.3

UM3029
Datové struktury HAL
Inicializační a konfigurační struktura Tyto struktury jsou definovány v obecné hlavičce ovladače file když je společný pro všechna čísla dílů. Když se mohou změnit z jednoho čísla dílu na druhé, jsou struktury definovány v záhlaví rozšíření file pro každé číslo dílu.
typedef struct { uint32_t BaudRate; /*!< Tento člen konfiguruje přenosovou rychlost komunikace UART.*/ uint32_t WordLength; /*!< Určuje počet datových bitů přenesených nebo přijatých v rámci.*/ uint32_t StopBits; /*!< Určuje počet přenesených stop bitů.*/ uint32_t Parita; /*!< Určuje režim parity. */ režim uint32_t; /*!< Určuje, zda je povolen nebo zakázán režim příjmu nebo vysílání.*/ uint32_t HwFlowCtl; /*!< Určuje, zda je povolen nebo zakázán režim řízení toku hardwaru.*/ uint32_t OverSampmník; /*!< Určuje, zda je Over sampling 8 je povoleno nebo zakázáno pro dosažení vyšší rychlosti (až fPCLK/8).*/ }UART_InitTypeDef;
Struktura konfigurace se používá k inicializaci dílčích modulů nebo dílčích instancí. Viz níže exampsoubor: HAL_ADC_ConfigChannel (ADC_HandleTypeDef* hadc, ADC_ChannelConfTypeDef* sConfig)
Specifické procesní struktury Pro konkrétní proces se používají specifické procesní struktury (společné API). Jsou definovány v hlavičce generického ovladače file. Přampten:
HAL_PPP_Process (PPP_HandleTypeDef* hadc, PPP_ProcessConfig* sConfig)

UM3029 – Rev 1

strana 9/1419

3.3
Poznámka: Poznámka:

UM3029
Klasifikace API

Klasifikace API
Rozhraní HAL API jsou rozdělena do následujících kategorií:
· Generic APIs: společné generické API pro všechna zařízení STM32. Tato rozhraní API jsou následně přítomna v obecném ovladači HAL files všech mikrokontrolérů STM32.
HAL_StatusTypeDef HAL_ADC_Init(ADC_HandleTypeDef* hadc); HAL_StatusTypeDef HAL_ADC_DeInit(ADC_HandleTypeDef *hadc); HAL_StatusTypeDef HAL_ADC_Start(ADC_HandleTypeDef* hadc); HAL_StatusTypeDef HAL_ADC_Stop(ADC_HandleTypeDef* hadc); HAL_StatusTypeDef HAL_ADC_Start_IT(ADC_HandleTypeDef* hadc); HAL_StatusTypeDef HAL_ADC_Stop_IT(ADC_HandleTypeDef* hadc); void HAL_ADC_IRQHandler(ADC_HandleTypeDef* hadc);
· Rozhraní API pro rozšíření: Tato sada rozhraní API je rozdělena do dvou podkategorií:
Rozhraní API specifická pro rodinu: Rozhraní API vztahující se na danou rodinu. Jsou umístěny v ovladači rozšíření HAL file (viz napřample níže týkající se ADC).
HAL_StatusTypeDef HAL_ADCEx_Calibration_Start(ADC_HandleTypeDef* hadc,uint32_t SingleDiff); uint32_t HAL_ADCEx_Calibration_GetValue(ADC_HandleTypeDef* hadc, uint32_t SingleDiff);
Rozhraní API specifická pro funkce/zařízení: tato rozhraní API jsou implementována v rozšíření file a ohraničené specifickými příkazy definice vzhledem k bitům nebo vlastnostem CMSIS a v závislosti na čísle části zařízení.
Struktura dat související s konkrétními rozhraními API je vymezena příkazem definice čísla dílu zařízení. Nachází se v odpovídající rozšiřující hlavičce C file. Následující tabulka shrnuje umístění různých kategorií rozhraní HAL API v ovladači files.

Společná rozhraní API Rozhraní API specifická pro dané zařízení Rozhraní API specifická pro zařízení

Tabulka 4. Klasifikace API Obecná file X –

Rozšíření file XXX

Rozhraní API specifická pro rodinu se vztahují pouze k dané rodině. To znamená, že pokud je specifické API implementováno v jiné rodině a argumenty této druhé rodiny jsou odlišné, může být nutné přidat další struktury a argumenty. Obslužné rutiny IRQ se používají pro běžné procesy a procesy specifické pro rodinu.

UM3029 – Rev 1

strana 10/1419

3.4

UM3029
Zařízení podporovaná ovladači HAL

Zařízení podporovaná ovladači HAL

Tabulka 5. Seznam zařízení podporovaných ovladači HAL

IP/module stm32c0xx_hal.c stm32c0xx_hal_adc.c stm32c0xx_hal_adc_ex.c stm32c0xx_hal_cortex.c stm32c0xx_hal_crc.c stm32c0xx_hal_crc_ex.c stm32c0xx_hal_dma.c stm32c0xx_hal_dma_ex.c stm32c0xx_hal_exti.c stm32c0xx_hal_flash.c stm32c0xx_hal_flash_ex.c stm32c0xx_hal_gpio.c stm32c0xx_hal_i2c.c stm32c0xx_hal_i2c_ex.c stm32c0xx_hal_i2s.c stm32c0xx_hal_irda.c stm32c0xx_hal_iwdg.c stm32c0xx_hal_msp_template.c stm32c0xx_hal_pwr.c stm32c0xx_hal_pwr_ex.c stm32c0xx_hal_rcc.c stm32c0xx_hal_rcc_ex.c stm32c0xx_hal_rtc.c stm32c0xx_hal_rtc_ex.c stm32c0xx_hal_smartcard.c stm32c0xx_hal_smartcard_ex.c stm32c0xx_hal_smbus.c stm32c0xx_hal_smbus_ex.c stm32c0xx_hal_spi.c stm32c0xx_hal_spi_ex.c stm32c0xx_hal_tim.c stm32c0xx_hal_tim_ex.c stm32c0xx_hal_uart.c stm32c0xx_hal_uart_ex.c stm32c0xx_hal_usart.c stm32c0xx_hal_usart_ex.c stm32c0xx_hal_wwdg.c

STM32C031xx Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano

STM32C011xx Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano

UM3029 – Rev 1

strana 11/1419

UM3029
Pravidla ovladače HAL

3.5
3.5.1

Pravidla ovladače HAL
Pravidla pojmenování rozhraní HAL API V ovladačích HAL se používají následující pravidla pojmenování:

Tabulka 6. Pravidla pro pojmenování rozhraní HAL API

File jména
Název modulu
Název funkce
Název rukojeti
Init struktura
jméno
Název výčtu

Obecný stm32c0xx_hal_ppp (c/h)
HAL_PPP_Function HAL_PPP_FeatureFunction_MODE
PPP_HandleTypedef PPP_InitTypeDef
HAL_PPP_StructnameTypeDef

Rozhraní API specifická pro rodinu stm32c0xx_hal_ppp_ex (c/h)
HAL_PPP_ MODUL HAL_PPPEx_Function HAL_PPPEx_FeatureFunction_MODE
NA
NA
NA

Rozhraní API pro konkrétní zařízení stm32c0xx_ hal_ppp_ex (c/h)
HAL_PPPEx_Function HAL_PPPEx_FeatureFunction_MODE
NA PPP_InitTypeDef
NA

· Předpona PPP odkazuje na funkční režim periferie a nikoli na periferii samotnou. Napřample, pokud USART, PPP může být USART, IRDA, UART nebo SMARTCARD v závislosti na režimu periferie.
· Konstanty použité v jednom file jsou definovány v rámci tohoto file. Konstanta používaná v několika files je definováno v záhlaví file. Všechny konstanty jsou psány velkými písmeny, kromě parametrů funkce periferního ovladače.
· názvy proměnných typedef by měly mít příponu _TypeDef.
· Registry jsou považovány za konstanty. Ve většině případů jsou jejich názvy psány velkými písmeny a používají stejné zkratky jako v referenčních příručkách STM32C0.
· Registry periferií jsou deklarovány ve struktuře PPP_TypeDef (napřample ADC_TypeDef) v záhlaví stm32c0xxx.h file:
stm32c0xxx.h odpovídá stm32c031xx.h a stm32c011xx.h.
· Názvy periferních funkcí mají předponu HAL_, pak odpovídající periferní akronym velkými písmeny následovaný podtržítkem. První písmeno každého slova je velké (napřampHAL_UART_Transmit()). V názvu funkce je povoleno pouze jedno podtržítko, které odděluje zkratku periferie od zbytku názvu funkce.
· Struktura obsahující parametry inicializace periferie PPP se jmenuje PPP_InitTypeDef (napřampsoubor ADC_InitTypeDef).
· Struktura obsahující specifické konfigurační parametry pro periferii PPP se jmenuje PPP_xxxxConfTypeDef (např.ample ADC_ChannelConfTypeDef).
· Struktury periferních úchytů se nazývají PPP_HandleTypedef (např. DMA_HandleTypeDef)
· Funkce používané k inicializaci periferie PPP podle parametrů specifikovaných v PPP_InitTypeDef se jmenují HAL_PPP_Init (např.ampHAL_TIM_Init()).
· Funkce používané k resetování periferních registrů PPP na jejich výchozí hodnoty se jmenují HAL_PPP_DeInit (např.ampHAL_TIM_DeInit()).
· Přípona MODE odkazuje na procesní režim, kterým může být dotazování, přerušení nebo DMA. Jako example, když se kromě nativních zdrojů používá DMA, měla by být funkce volána: HAL_PPP_Function_DMA().
· Předpona Feature by měla odkazovat na novou funkci. Přampsoubor: HAL_ADCEx_InjectedStart()() odkazuje na režim vstřikování.

UM3029 – Rev 1

strana 12/1419

UM3029
Pravidla ovladače HAL

3.5.2 Poznámka:

Obecná pravidla pro pojmenování HAL · U sdílených a systémových periferií se nepoužívá žádný handle nebo objekt instance. Toto pravidlo platí pro
následující periferie:
GPIO SYSTICK NVIC RCC FLASH Example: HAL_GPIO_Init() vyžaduje pouze adresu GPIO a její konfigurační parametry.
HAL_StatusTypeDef HAL_GPIO_Init (GPIO_TypeDef* GPIOx, GPIO_InitTypeDef *Init) { /*Tělo inicializace GPIO */ }
· Makra, která obsluhují přerušení a specifické konfigurace hodin, jsou definována v každém ovladači periferie/modulu. Tato makra jsou exportována v záhlaví periferního ovladače files, aby je mohlo rozšíření použít file. Seznam těchto maker je definován níže:
Tento seznam není vyčerpávající a lze přidat další makra související s periferními funkcemi, aby je bylo možné použít v uživatelské aplikaci.

Tabulka 7. Makra obsluhující přerušení a specifické konfigurace hodin

Makra

Popis

__HAL_PPP_ENABLE_IT(__HANDLE__, __INTERRUPT__) Povoluje specifické periferní přerušení

__HAL_PPP_DISABLE_IT(__HANDLE__, __INTERRUPT__)

Zakáže určité periferní přerušení

__HAL_PPP_GET_IT (__HANDLE__, __ PŘERUŠENÍ __) Získá konkrétní stav přerušení periferie

__HAL_PPP_CLEAR_IT (__HANDLE__, __ PŘERUŠENÍ __) Vymaže konkrétní stav přerušení periferie

__HAL_PPP_GET_FLAG (__HANDLE__, __FLAG__) Získá konkrétní stav příznaku periferie

__HAL_PPP_CLEAR_FLAG (__HANDLE__, __FLAG__) Vymaže konkrétní stav příznaku periferie

__HAL_PPP_ENABLE(__HANDLE__)

Umožňuje periferní zařízení

__HAL_PPP_DISABLE(__HANDLE__)

Deaktivuje periferní zařízení

__HAL_PPP_XXXX (__HANDLE__, __PARAM__)

Specifické makro ovladače PPP HAL

__HAL_PPP_GET_ IT_SOURCE (__HANDLE__, __ PŘERUŠENÍ __)

Zkontroluje zdroj zadaného přerušení

· NVIC a stm32c0xx_hal_cortex.c jsou dvě základní funkce Arm® Cortex®. Rozhraní API související s těmito funkcemi se nacházejí v stm32c0xx_hal_cortex.c file.
· Při čtení stavového bitu nebo příznaku z registrů se skládá z posunutých hodnot v závislosti na počtu načtených hodnot a jejich velikosti. V tomto případě je vrácená stavová šířka 32 bitů. Přampten:
STAV = XX | (YY << 16) nebo STATUS = XX | (YY << 8) | (YY << 16) | (YY << 24).
· Handle PPP jsou platné před použitím HAL_PPP_Init() API. Funkce init provede kontrolu před úpravou polí rukojeti.
HAL_PPP_Init(PPP_HandleTypeDef) if(hppp == NULL)
{ return HAL_ERROR; }

UM3029 – Rev 1

strana 13/1419

3.5.3
3.6

UM3029
Obecná API HAL

· Používají se makra definovaná níže: Podmíněné makro:
#define ABS(x) (((x) > 0) ? (x) : -(x))
Makro pseudokódu (makro s více instrukcemi):
#define __HAL_LINKDMA(__HANDLE__, __PPP_DMA_FIELD_, __DMA_HANDLE_) do{ (__HANDLE__)->__PPP_DMA_FIELD_ = &(__DMA_HANDLE_); (__DMA_HANDLE_).Rodič = (__HANDLE__); } while(0)

Funkce obsluhy přerušení HAL a zpětného volání Kromě rozhraní API zahrnují ovladače periferií HAL:
· Obsluha periferního přerušení HAL_PPP_IRQHandler(), která by měla být volána z stm32c0xx_it.c · Funkce zpětného volání uživatele.
Funkce zpětného volání uživatele jsou definovány jako prázdné funkce s atributem „slabý“. Musí být definovány v uživatelském kódu. Existují tři typy funkcí zpětných volání uživatelů:
· Zpětná volání inicializace/deinicializace na úrovni periferního systému: HAL_PPP_MspInit() a HAL_PPP_MspDeInit
· Zpracování kompletních zpětných volání: HAL_PPP_ProcessCpltCallback · Zpětné volání při chybě: HAL_PPP_ErrorCallback.

Tabulka 8. Funkce zpětného volání

Funkce zpětného volání

Example

HAL_PPP_MspInit() / _DeInit()

Exampsoubor: HAL_USART_MspInit()
Volá se z funkce API HAL_PPP_Init() k provedení inicializace na úrovni periferního systému (GPIO, hodiny, DMA, přerušení)

Exampsoubor: HAL_USART_TxCpltCallback HAL_PPP_ProcessCpltCallback
Volá periferní zařízení nebo obsluha přerušení DMA po dokončení procesu

HAL_PPP_ErrorCallback

Example: HAL_USART_ErrorCallback Volá periferní zařízení nebo obsluha přerušení DMA, když dojde k chybě

Obecná API HAL
Obecná rozhraní API poskytují společné obecné funkce platné pro všechna zařízení STM32. Skládají se ze čtyř skupin API:
· Inicializační a deinicializační funkce:HAL_PPP_Init(), HAL_PPP_DeInit() · Funkce IO operace: HAL_PPP_Read(), HAL_PPP_Write(),HAL_PPP_Transmit(), HAL_PPP_Receive() · Řídící funkce: HAL_PPP_Set_ (GPPet (GPP)). · Funkce Stav a chyby: HAL_PPP_GetState (), HAL_PPP_GetError ().
U některých ovladačů periferií/modulů jsou tyto skupiny upraveny v závislosti na implementaci periferie/modulu.
Example: v ovladači časovače je seskupení API založeno na funkcích časovače (jako je PWM, OC a IC).
Funkce inicializace a deinicializace umožňují inicializaci periferie a konfiguraci nízkoúrovňových zdrojů, zejména hodin, GPIO, alternativních funkcí (AF) a případně DMA a přerušení. Funkce HAL_DeInit() obnoví výchozí stav periferie, uvolní nízkoúrovňové prostředky a odstraní jakoukoli přímou závislost na hardwaru.
Funkce IO operace provádějí řádkový přístup k datům užitečné zátěže periferie v režimech zápisu a čtení.
Ovládací funkce slouží k dynamické změně konfigurace periferií a nastavení jiného provozního režimu.

UM3029 – Rev 1

strana 14/1419

3.7
3.7.1

UM3029
Rozhraní API rozšíření HAL

Funkce stavu periferií a chyb umožňují za běhu načíst stav periferie a datového toku a identifikovat typ chyb, které se vyskytly. BývalýampNíže uvedený text je založen na periferii ADC. Seznam generických API není vyčerpávající. Uvádí se pouze jako example.

Tabulka 9. Obecná rozhraní API HAL

Funkční skupina Inicializační skupina
IO provozní skupina
Kontrolní skupina Stav a chyby
skupina

Společný název API

Popis

HAL_ADC_Init()

Tato funkce inicializuje periferní zařízení a konfiguruje nízkoúrovňové zdroje (hodiny, GPIO, AF..)

HAL_ADC_DeInit()

Tato funkce obnoví výchozí stav periferie, uvolní nízkoúrovňové zdroje a odstraní jakoukoli přímou závislost na hardwaru.

HAL_ADC_Start ()

Tato funkce spouští konverze ADC, když je použita metoda dotazování

HAL_ADC_Stop ()

Tato funkce zastaví převody ADC při použití metody dotazování

Tato funkce umožňuje čekání na konec převodů při použití metody dotazování HAL_ADC_PollForConversion(). V tomto případě je hodnota časového limitu určena pomocí
uživatele podle aplikace.

HAL_ADC_Start_IT()

Tato funkce spouští převody ADC při použití metody přerušení

HAL_ADC_Stop_IT() HAL_ADC_IRQHandler()

Tato funkce zastaví převody ADC při použití metody přerušení
Tato funkce zpracovává požadavky na přerušení ADC

HAL_ADC_ConvCpltCallback()

Funkce zpětného volání volaná v podprogramu IT, aby indikovala konec aktuálního procesu nebo když byl dokončen přenos DMA

HAL_ADC_ErrorCallback()

Funkce zpětného volání volaná v podprogramu IT, pokud došlo k chybě periferie nebo k chybě přenosu DMA

HAL_ADC_ConfigChannel()

Tato funkce konfiguruje vybraný běžný kanál ADC, odpovídající rank v sekvenceru a sampčas

HAL_ADC_AnalogWDGConfig Tato funkce konfiguruje analogový hlídací pes pro vybraný ADC

HAL_ADC_GetState()

Tato funkce umožňuje za běhu získat stav periferie a datového toku.

HAL_ADC_GetError()

Tato funkce umožňuje za běhu dostat chybu, ke které došlo během rutiny IT

Rozhraní API rozšíření HAL
Rozšíření modelu HAL přesview Rozšiřující rozhraní API poskytují specifické funkce nebo přepisují upravená rozhraní API pro konkrétní rodinu (sérii) nebo konkrétní číslo dílu v rámci stejné rodiny. Model rozšíření se skládá z přídavných file, stm32c0xx_hal_ppp_ex.c, který zahrnuje všechny specifické funkce a definující příkazy (stm32c0xx_hal_ppp_ex.h) pro dané číslo dílu. Pod example založené na periferii ADC:

Tabulka 10. Rozhraní API rozšíření HAL

Skupina funkcí HAL_ADCEx_CalibrationStart() HAL_ADCEx_Calibration_GetValue()

Common API name Tato funkce se používá ke spuštění automatické kalibrace ADC
Tato funkce se používá k získání kalibračního faktoru ADC

UM3029 – Rev 1

strana 15/1419

3.7.2

UM3029
Rozhraní API rozšíření HAL
Modelové případy rozšíření HAL Specifické periferní funkce mohou být ovládány ovladači HAL pěti různými způsoby. Jsou popsány níže.
Přidání funkce specifické pro číslo dílu Když je vyžadována nová funkce specifická pro dané zařízení, jsou nová rozhraní API přidána do rozšíření stm32c0xx_hal_ppp_ex.c file. Jmenují se HAL_PPPEx_Function().
Obrázek 2. Přidání funkcí specifických pro zařízení

Example: stm32c0xx_hal_pwr_ex.c/h #pokud je definováno(PWR_SHDW_SUPPORT) void HAL_PWREx_EnterSHUTDOWNMode(void); #endif
Přidání funkce specifické pro rodinu V tomto případě je rozhraní API přidáno do ovladače rozšíření C file a pojmenované HAL_PPPEx_Function ().
Obrázek 3. Přidání funkcí specifických pro rodinu

Přidání nového periferního zařízení (specifického pro zařízení patřící do dané rodiny)
Pokud je vyžadováno periferní zařízení, které je dostupné pouze v konkrétním zařízení, jsou API odpovídající tomuto novému perifernímu zařízení/modulu (newPPP) přidána do nového souboru stm32c0xx_hal_newppp.c. Nicméně zahrnutí tohoto file je vybráno v stm32c0xx_hal_conf.h pomocí makra:
#define HAL_NEWPPP_MODULE_ENABLED

UM3029 – Rev 1

strana 16/1419

Obrázek 4. Přidání nových periferií

UM3029
Rozhraní API rozšíření HAL

Exampsoubor: stm32c0xx_hal_adc.c/h
Aktualizace stávajících společných rozhraní API V tomto případě jsou rutiny definovány se stejnými názvy v rozšíření stm32c0xx_hal_ppp_ex.c file, zatímco generické API je definováno jako slabé, takže kompilátor přepíše původní rutinu nově definovanou funkcí.
Obrázek 5. Aktualizace stávajících rozhraní API

Aktualizace stávajících datových struktur
Struktura dat pro konkrétní číslo dílu zařízení (napřample PPP_InitTypeDef) může mít různá pole. V tomto případě je datová struktura definována v hlavičce rozšíření file a oddělené konkrétním příkazem Definice čísla dílu.

UM3029 – Rev 1

strana 17/1419

UM3029
File inkluzní model

3.8

File inkluzní model

Záhlaví běžného ovladače HAL file (stm32c0xx_hal.h) obsahuje společné konfigurace pro celou knihovnu HAL. Je to jediná hlavička file který je součástí uživatelských zdrojů a zdrojů HAL C fileaby bylo možné využívat prostředky HAL.

Obrázek 6. File inkluzní model

Ovladač PPP je samostatný modul, který se používá v projektu. Uživatel musí v konfiguraci povolit odpovídající příkaz definice USE_HAL_PPP_MODULE file.
/******************************************************* ******************** * @file stm32c0xx_hal_conf.h * @author MCD Application Team * @version VX.YZ * @date dd-mm-yyyy * @brief This file obsahuje moduly, které mají být použity ****************************************************** ************************** (…) #define HAL_USART_MODULE_ENABLED #define HAL_IRDA_MODULE_ENABLED #define HAL_DMA_MODULE_ENABLED #define HAL_RCC_MODULE_ENABLED (…)

UM3029 – Rev 1

strana 18/1419

3.9

UM3029
Společné zdroje HAL

Společné zdroje HAL
Společné prostředky HAL, jako jsou společné definované výčty, struktury a makra, jsou definovány v stm32c0xx_hal_def.h. Hlavním společným definovaným výčtem je HAL_StatusTypeDef.
· Stav HAL Stav HAL používají téměř všechna rozhraní API HAL, kromě booleovských funkcí a obsluhy IRQ. Vrací stav aktuálních operací API. Má čtyři možné hodnoty, jak je popsáno níže:
Typedef enum { HAL_OK = 0x00, HAL_ERROR = 0x01, HAL_BUSY = 0x02, HAL_TIMEOUT = 0x03 } HAL_StatusTypeDef;
· Zámek HAL Zámek HAL používají všechna rozhraní HAL API k zabránění přístupu náhodným sdíleným zdrojům.
typedef enum { HAL_UNLOCKED = 0x00, /*!
Kromě běžných prostředků má soubor stm32c0xx_hal_def.h file volá stm32c0xx.h file v knihovně CMSIS, abyste získali datové struktury a mapování adres pro všechna periferní zařízení:
Deklarace periferních registrů a definice bitů. Makra pro přístup k hardwaru periferních registrů (jako je registr zápisu nebo registr čtení). · Běžná makra Makro definující HAL_MAX_DELAY
#define HAL_MAX_DELAY 0xFFFFFFFF
Makro propojující periferní zařízení PPP s ukazatelem struktury DMA:
#define __HAL_LINKDMA(__HANDLE__, __PPP_DMA_FIELD_, __DMA_HANDLE_) udělat{
(__HANDLE__)->__PPP_DMA_FIELD_ = &(__DMA_HANDLE_); (__DMA_HANDLE_).Rodič = (__HANDLE__); } while(0)

Konfigurace HAL
Konfigurace file, stm32c0xx_hal_conf.h, umožňuje přizpůsobení ovladačů pro uživatelskou aplikaci. Úprava této konfigurace není povinná: aplikace může používat výchozí konfiguraci bez jakýchkoli úprav.
Pro konfiguraci těchto parametrů by měl uživatel povolit, zakázat nebo upravit některé možnosti zrušením komentáře, komentářem nebo úpravou hodnot souvisejících příkazů Definice, jak je popsáno v tabulce níže:

Tabulka 11. Definujte příkazy používané pro konfiguraci HAL

Položka konfigurace HSE_VALUE
HSE_STARTUP_TIMEOUT HSI_VALUE
HSI48_VALUE
LSI_VALUE

Popis
Definuje hodnotu externího oscilátoru (HSE) vyjádřenou v Hz. Při použití jiné hodnoty krystalu musí uživatel upravit toto definování.
Časový limit pro spuštění HSE, vyjádřený v ms
Definuje hodnotu vnitřního oscilátoru (HSI) vyjádřenou v Hz.
Definuje hodnotu interního vysokorychlostního oscilátoru pro USB vyjádřenou v Hz. Skutečná hodnota se může lišit v závislosti na variacích objtage a teplota.
Definuje výchozí hodnotu nízkorychlostního interního oscilátoru (LSI) vyjádřenou v Hz.

Výchozí hodnota 48 000 000 Hz
100 48 000 000 Hz 48 000 000 Hz
32000 Hz

UM3029 – Rev 1

strana 19/1419

Poznámka:
3.11
3.11.1
3.11.2

UM3029
Obsluha periferií systému HAL

Položka konfigurace
LSE_VALUE LSE_STARTUP_TIMEOUT
VDD_VALUE

Popis
Definuje hodnotu externího oscilátoru (LSE) vyjádřenou v Hz. Při použití jiné hodnoty krystalu musí uživatel upravit toto definování.
Časový limit pro spuštění LSE, vyjádřený v ms
hodnota VDD

USE_RTOS

Umožňuje použití RTOS

PREFETCH_ENABLE

Povolí funkci předběžného načtení

INSTRUCTION_CACHE_ENABLE Povolí funkci ICACHE

Výchozí hodnota
32768 Hz
5000 3300 (mV) NEPRAVDA (pro budoucnost
použití) NEPRAVDA PRAVDA

Soubor stm32c0xx_hal_conf_template.h file se nachází ve složce HAL drivers Inc. Měl by být zkopírován do složky uživatele, přejmenován a upraven, jak je popsáno výše. Ve výchozím nastavení jsou hodnoty definované v stm32c0xx_hal_conf_template.h file jsou stejné jako ty použité pro examplesy a demonstrace. Všechny HAL zahrnují files jsou povoleny, aby mohly být použity v uživatelském kódu bez úprav.

Obsluha periferií systému HAL
Tato sekce dává konecview o tom, jak ovladače HAL ovládají systémové periferie. Úplný seznam API je uveden v každé části popisu ovladače periferie.

Hodiny Ke konfiguraci systémových hodin lze použít dvě hlavní funkce:
· HAL_RCC_OscConfig (RCC_OscInitTypeDef *RCC_OscInitStruct). Tato funkce konfiguruje/povoluje více zdrojů hodin (HSE, HSI, LSE, LSI).
· HAL_RCC_ClockConfig (RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t FLatency). Tato funkce
vybere zdroj systémových hodin konfiguruje děliče hodin AHB a APB1 konfiguruje počet stavů čekání paměti Flash aktualizuje konfiguraci SysTick, když se změní hodiny HCLK.
Některé periferní hodiny nejsou odvozeny od systémových hodin (například RTC). V tomto případě se konfigurace hodin provádí pomocí rozšířeného API definovaného v stm32c0xx_hal_rcc_ex.c: HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit). K dispozici jsou další funkce ovladače RCC HAL:
· Funkce HAL_RCC_DeInit() deinicializace hodin, která vrací konfiguraci hodin do stavu reset · Získejte funkce hodin, které umožňují načtení různých konfigurací hodin (jako jsou systémové hodiny, HCLK nebo
PCLK1) · Konfigurační funkce MCO a CSS
Sada maker je definována v stm32c0xx_hal_rcc.ha stm32c0xx_hal_rcc_ex.h. Umožňují provádění elementárních operací na RCC blokových registrech, jako je ovládání hodin periferií/resetování:
· __HAL_PPP_CLK_ENABLE/__HAL_PPP_CLK_DISABLE pro zapnutí/vypnutí periferních hodin · __HAL_PPP_FORCE_RESET/__HAL_PPP_RELEASE_RESET pro vynucení/uvolnění periferního resetu periferní
hodiny v režimu spánku. · __HAL_PPP_IS_CLK_ENABLED/__HAL_PPP_IS_CLK_DISABLED pro dotaz na povolené/deaktivované
stav periferních hodin. · __HAL_PPP_IS_CLK_SLEEP_ENABLED/__HAL_PPP_IS_CLK_SLEEP_DISABLED pro dotaz na
stav aktivace/deaktivace periferních hodin během režimu spánku.

GPIO Rozhraní GPIO HAL API jsou následující:

UM3029 – Rev 1

strana 20/1419

UM3029
Obsluha periferií systému HAL

· HAL_GPIO_Init() / HAL_GPIO_DeInit() · HAL_GPIO_ReadPin() / HAL_GPIO_WritePin() · HAL_GPIO_TogglePin ().
Kromě standardních režimů GPIO (vstup, výstup, analog) lze režim pinů nakonfigurovat jako EXTI s generováním přerušení nebo událostí. Při výběru režimu EXTI s generováním přerušení musí uživatel zavolat HAL_GPIO_EXTI_IRQHandler() z stm32c0xx_it.c a implementovat HAL_GPIO_EXTI_Rising_Callback() a/nebo HAL_GPIO_EXTI_Falling_Callback(). Níže uvedená tabulka popisuje pole struktury GPIO_InitTypeDef.

Tabulka 12. Popis struktury GPIO_InitTypeDef

Pole struktury Pin
Režim
Rychlost tahu

Popis
Určuje piny GPIO, které se mají nakonfigurovat. Možné hodnoty: GPIO_PIN_x nebo GPIO_PIN_All, kde x[0..15] Určuje provozní režim pro vybrané piny: režim GPIO nebo režim EXTI. Možné hodnoty jsou: · Režim GPIO
GPIO_MODE_INPUT : Plovoucí vstup GPIO_MODE_OUTPUT_PP : Výstup push-pull GPIO_MODE_OUTPUT_OD : Výstup otevřený kanál GPIO_MODE_AF_PP : Alternativní funkce push-pull GPIO_MODE_AF_OD : AnaDC Režim Alternativní funkce otevřený kanál GPIO_MODE_ANALOG GPIO_MODE_ANALOG analogový režim · Režim externího přerušení GPIO_MODE_IT_RISING : Detekce spouštění na vzestupné hraně GPIO_MODE_IT_FALLING : Klesající Detekce spouštění hrany GPIO_MODE_IT_RISING_FALLING : Detekce spouštění náběžné/sestupné hrany · Režim externí události GPIO_MODE_EVT_RISING : Detekce spouštění náběžné hrany GPIO_MODE_EVT_FALLING : Detekce spouštění klesající hrany GPIO_MODE_EVT_RISING_FALLING: Detekce spouštění náběžné/sestupné hrany
Určuje aktivaci Pull-up nebo Pull-down pro vybrané piny. Možné hodnoty jsou: GPIO_NOPULL GPIO_PULLUP GPIO_PULLDOWN
Určuje rychlost pro vybrané piny Možné hodnoty jsou: GPIO_SPEED_FREQ_LOW GPIO_SPEED_FREQ_MEDIUM GPIO_SPEED_FREQ_HIGH GPIO_SPEED_FREQ_VERY_HIGH

Níže naleznete typickou konfiguraci GPIO, napřamples:
· Konfigurace GPIO jako výstupní push-pull pro ovládání externích LED:
GPIO_InitStruct.Pin = GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed ​​= GPIO_SPEED_FREQ_MEDIUM; HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);

UM3029 – Rev 1

strana 21/1419

3.11.3 3.11.4 3.11.5

UM3029
Obsluha periferií systému HAL

· Konfigurace PA0 jako externího přerušení s citlivostí sestupné hrany:
GPIO_InitStructure.Mode = GPIO_MODE_IT_FALLING; GPIO_InitStructure.Pull = GPIO_NOPULL; GPIO_InitStructure.Pin = GPIO_PIN_0; HAL_GPIO_Init(GPIOA, &GPIO_InitStructure);

Cortex® NVIC a časovač SysTick Ovladač Cortex® HAL, stm32c0xx_hal_cortex.c, poskytuje API pro práci s NVIC a SysTick. Mezi podporovaná rozhraní API patří: · HAL_NVIC_SetPriority()/ HAL_NVIC_SetPriorityGrouping() · HAL_NVIC_GetPriority() / HAL_NVIC_GetPriorityGrouping() · HAL_NVIC_EnableIRQ()/HAL_NVIC_DisableIRQ() · HAL_andNVIC_TICK · HAL_andNVIC_TICK) IC_GetPendingIRQ() / HAL_NVIC_SetPendingIRQ () / HAL_NVIC_ClearPendingIRQ() · HAL_NVIC_GetActive(IRQn) · HAL_SYSTICK_Config() · HAL_SYSTICK_CLKSourceConfig() · HAL_SYSTICK_Callback()
PWR Ovladač PWR HAL se stará o správu napájení. Funkce sdílené všemi řadami STM32 jsou uvedeny níže: · Konfigurace kolíku pro probuzení
HAL_PWR_EnableWakeUpPin() / HAL_PWR_DisableWakeUpPin() · Vstup do režimu nízké spotřeby
HAL_PWR_EnterSLEEPMode() HAL_PWR_EnterSTANDBYMode() · Funkce správy nízké spotřeby STM32C0: HAL_PWREx_EnterSHUTDOWNMode()
EXTI EXTI není považováno za samostatné periferní zařízení, ale spíše za službu používanou jinými periferiemi, které jsou řízeny prostřednictvím API EXTI HAL. Každý periferní ovladač HAL navíc implementuje přidruženou konfiguraci a funkci EXTI jako makra ve své hlavičce file. Prvních 16 linek EXTI připojených k GPIO je spravováno pomocí ovladače GPIO. Struktura GPIO_InitTypeDef umožňuje konfiguraci I/O jako externího přerušení nebo externí události. Linky EXTI připojené interně k RTC, I2C1 a USART1 se konfigurují v ovladačích HAL těchto periferií pomocí maker uvedených v tabulce níže. Interní připojení EXTI závisí na cílovém mikrokontroléru STM32 (další podrobnosti naleznete v technickém listu produktu):

Tabulka 13. Popis konfiguračních maker EXTI

Makra __HAL_PPP_{SUBLOCK}__EXTI_ENABLE_IT()
__HAL_PPP_{SUBLOCK}__EXTI_DISABLE_IT() __HAL_ PPP_{SUBLOCK}__EXTI_GET_FLAG()

Popis Povolí dané přerušení linky EXTI Přampsoubor: __HAL_PWR_PVD_EXTI_ENABLE_IT() Zakáže daný řádek EXTI. Přampsoubor: __HAL_PWR_PVD_EXTI_DISABLE_IT() Získá daný příznak přerušení linky EXTI čekající na stav bitu.

UM3029 – Rev 1

strana 22/1419

3.11.6

UM3029
Obsluha periferií systému HAL

Makra
__HAL_ PPP_{SUBLOCK}_EXTI_CLEAR_FLAG()
__HAL_ PPP_{SUBLOCK}_EXTI_GENERATE_SWIT()
__HAL_PPP_SUBBLOCK_EXTI_ENABLE_EVENT()
__HAL_PPP_SUBBLOCK_EXTI_DISABLE_EVENT() __HAL_ PPP_SUBBLOCK_EXTI_ENABLE_RISING_EDGE() __HAL_ PPP_SUBBLOCK_EXTI_ENABLE_FALLING_EDGE() __HAL_ PPP_SUBBLOCK_SUBHRISTI_DGEDISA ISABLE_FALLING_EDGE() __HAL_ PPP_SUBBLOCK_EXTI_ENABLE_RISING_FALLING_EDGE() __HAL_ PPP_SUBBLOCK_EXTI_DISABLE_RISING_FALLING_EDGE()

Exampten:

Popis

__HAL_PWR_PVD_EXTI_GET_FLAG()

Vymaže daný bit nevyřízeného příznaku přerušení linky EXTI. Přample; __HAL_PWR_PVD_EXTI_CLEAR_FLAG()

Generuje softwarové přerušení pro danou linku EXTI. Přampsoubor: __HAL_PWR_PVD_EXTI_ GENERATE_SWIT ()

Povolit danou událost EXTI linky Přampsoubor: __HAL_RTC_WAKEUP_EXTI_ENABLE_EVENT()

Zakázat danou událost EXTI linky Přampsoubor: __HAL_RTC_WAKEUP_EXTI_DISABLE_EVENT()

Nakonfigurujte EXTI přerušení nebo událost na vzestupné hraně

Povolit EXTI přerušení nebo událost na sestupné hraně

Deaktivujte přerušení nebo událost EXTI na vzestupné hraně

Zakažte přerušení nebo událost EXTI na sestupné hraně

Povolte přerušení nebo událost EXTI na vzestupné/sestupné hraně

Zakažte přerušení nebo událost EXTI na vzestupné/sestupné hraně

Pokud je vybrán režim přerušení EXTI, uživatelská aplikace musí zavolat HAL_PPP_FUNCTION_IRQHandler() (např.ample HAL_PWR_PVD_IRQHandler()), z stm32c0xx_it.c filea implementujte funkci zpětného volání HAL_PPP_FUNCTIONCallback() (napřampHAL_PWR_PVDCallback().
DMA Ovladač DMA HAL umožňuje povolit a konfigurovat připojení periferie ke kanálům DMA (kromě interní paměti SRAM/FLASH, která nevyžaduje žádnou inicializaci). Podrobnosti o požadavku DMA pro každé periferní zařízení naleznete v referenční příručce k produktu. Pro daný kanál umožňuje rozhraní API HAL_DMA_Init() naprogramovat požadovanou konfiguraci prostřednictvím následujících parametrů: · Směr přenosu · Formáty zdrojových a cílových dat · Kruhový, normální režim řízení · Úroveň priority kanálu · Režim přírůstku zdroje a cíle · Hardwarový požadavek připojený k obvodový
K dispozici jsou dva provozní režimy: · I/O operace v režimu dotazování
1. Použijte HAL_DMA_Start() ke spuštění DMA přenosu, když byla nakonfigurována zdrojová a cílová adresa a délka přenášených dat.
2. Použijte HAL_DMA_PollForTransfer() k dotazování na konec aktuálního přenosu. V tomto případě lze v závislosti na uživatelské aplikaci nakonfigurovat pevný časový limit.

UM3029 – Rev 1

strana 23/1419

Poznámka: Poznámka:
3.12
3.12.1

UM3029
Jak používat ovladače HAL
· Operace I/O v režimu přerušení 1. Nakonfigurujte prioritu přerušení DMA pomocí HAL_NVIC_SetPriority(). 2. Povolte obslužnou rutinu DMA IRQ pomocí HAL_NVIC_EnableIRQ(). 3. Použijte HAL_DMA_Start_IT() ke spuštění DMA přenosu, když byla nakonfigurována zdrojová a cílová adresa a délka přenášených dat. V tomto případě je nakonfigurováno přerušení DMA. 4. Použijte HAL_DMA_IRQHandler() volanou pod podprogramem DMA_IRQHandler() přerušení. 5. Po dokončení přenosu dat se provede funkce HAL_DMA_IRQHandler() a uživatelskou funkci lze zavolat přizpůsobením ukazatele funkce XferCpltCallback a XferErrorCallback (který je členem struktury rukojeti DMA).
K zajištění efektivní správy DMA jsou k dispozici další funkce a makra: · Použijte funkci HAL_DMA_GetState() pro vrácení stavu DMA a HAL_DMA_GetError() v případě chyby
detekce. · Použijte funkci HAL_DMA_Abort() k přerušení aktuálního přenosu. Nejpoužívanější makra ovladače DMA HAL jsou následující: · __HAL_DMA_ENABLE: povolí zadaný kanál DMA · __HAL_DMA_DISABLE: zakáže zadaný kanál DMA · __HAL_DMA_GET_FLAG: získá nevyřízené příznaky kanálu DMA · __HAL_DMA_CLEAR_CLEAR_BLE_ending povolí příznak DMA_CLEAR_FLAG: pEN a zadaná přerušení kanálu DMA · __HAL_DMA_DISABLE_IT: deaktivuje zadaná přerušení kanálu DMA · __HAL_DMA_GET_IT_SOURCE: zkontroluje, zda bylo zadané přerušení kanálu DMA povoleno nebo
not Pokud je periferní zařízení používáno v režimu DMA, musí být inicializace DMA provedena zpětným voláním HAL_PPP_MspInit(). Kromě toho musí uživatelská aplikace přiřadit ovladač DMA k ovladači PPP (viz část „Funkce provozu HAL IO“). Zpětná volání kanálu DMA musí být inicializována uživatelskou aplikací pouze v případě přenosu z paměti do paměti. Při použití přenosů z periferie do paměti se však tato zpětná volání automaticky inicializují voláním funkce procesního rozhraní API, která používá DMA.
Jak používat ovladače HAL
Modely použití HAL Následující obrázek ukazuje typické použití ovladače HAL a interakci mezi uživatelem aplikace, ovladačem HAL a přerušeními.

UM3029 – Rev 1

strana 24/1419

stm32c0xxx_it.c
DMAx_IRQHandler nebo
PPP_IRQHandler

UM3029
Jak používat ovladače HAL

Obrázek 7. Model ovladače HAL

hal_msp.c app.c/main.c
1. Deklarace PPP handle 2. Init handle Params 3. Volání HAL_PPP_init()
HAL_PPP_Mspinit()

stm32c0xxx_hal_ppp.c

Služby

stm32c0xx_hal_gpio.c/h

HAL_PPP_Init()

stm32c0xx_hal_rcc.c/h stm32c0xx_hal_nvic.c/h

Volání HAL_PPP_Process()

HAL_PPP_Process()

stm32c0xx_hal_dma.c/h

Model přerušení

Model DMA

Hal_PPP_ProcessCpltCallBack() Hal_PPP_ErrorCallBack()

Volání HAL_PPP_DeInit() HAL_PPP_MspDeinit()

HAL_PPP_DeInit()

Poznámka:
3.12.2

Funkce implementované v ovladači HAL jsou zobrazeny zeleně, funkce volané z obsluhy přerušení tečkovanými čarami a funkce msp implementované v uživatelské aplikaci červeně. Netečkované čáry představují interakce mezi funkcemi uživatelské aplikace. V zásadě jsou rozhraní API ovladače HAL volána od uživatele files a volitelně z obslužných programů přerušení file když se používají rozhraní API založená na DMA nebo periferních vyhrazených přerušeních PPP. Při použití periferních přerušení DMA nebo PPP jsou volána zpětná volání dokončení procesu PPP, která informují uživatele o dokončení procesu v režimu událostí v reálném čase (přerušení). Všimněte si, že stejná zpětná volání dokončení procesu se používají pro DMA v režimu přerušení.
Inicializace HAL
Globální inicializace HAL Kromě funkcí inicializace a deinicializace periferií je k dispozici sada rozhraní API pro inicializaci jádra HAL implementovaného v file stm32c0xx_hal.c. · HAL_Init(): tato funkce musí být volána při spuštění aplikace
inicializovat mezipaměť dat/instrukcí a frontu předběžného načtení nastavit časovač SysTick tak, aby generoval přerušení každou 1 ms (na základě hodin HSI) s funkcí zpětného volání uživatele HAL_MspInit() s nejnižší prioritou pro provádění inicializací na systémové úrovni (hodiny, GPIO, DMA,
přerušení). HAL_MspInit() je definována jako „slabá“ prázdná funkce v ovladačích HAL. · HAL_DeInit()
resetuje všechna periferní zařízení zavolá funkci HAL_MspDeInit(), což je uživatelská funkce zpětného volání, která provádí de-inicializaci na systémové úrovni.

UM3029 – Rev 1

strana 25/1419

UM3029
Jak používat ovladače HAL

3.12.2.2

· HAL_GetTick(): tato funkce získá aktuální hodnotu čítače SysTick (zvýšenou v přerušení SysTick), kterou používají ovladače periferií ke zpracování časových limitů.
· HAL_Delay(). tato funkce implementuje zpoždění (vyjádřené v milisekundách) pomocí časovače SysTick.
Při použití HAL_Delay() je třeba postupovat opatrně, protože tato funkce poskytuje přesné zpoždění (vyjádřené v milisekundách) na základě proměnné inkrementované v SysTick ISR. To znamená, že pokud je HAL_Delay() voláno z periferního ISR, pak přerušení SysTick musí mít nejvyšší prioritu (číselně nižší) než periferní přerušení, jinak je ISR volajícího zablokováno.
Inicializace systémových hodin Konfigurace hodin se provádí na začátku uživatelského kódu. Uživatel však může změnit konfiguraci hodin ve svém vlastním kódu.
Pod typickou sekvencí konfigurace hodin pro dosažení maximální taktovací frekvence 48 MHz na základě hodin HSE.
/** * @brief Konfigurace systémových hodin * @retval Žádné */
void SystemClock_Config(void) {
RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
/** Inicializuje oscilátory RCC podle zadaných parametrů * ve struktuře RCC_OscInitTypeDef. */ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; RCC_OscInitStruct.HSIState = RCC_HSI_ON; RCC_OscInitStruct.HSIDiv = RCC_HSI_DIV1; RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
Error_Handler(); } /** Inicializuje hodiny CPU, AHB a APB */ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|RCC_CLOCKTYPE_PCLK1; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI; RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV1;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK) {
Error_Handler(); } }
Proces inicializace HAL MSP Inicializace periferie se provádí pomocí HAL_PPP_Init(), zatímco inicializace hardwarových prostředků používaných periferním zařízením (PPP) se provádí během této inicializace voláním funkce zpětného volání MSP HAL_PPP_MspInit().
Zpětné volání MspInit provádí inicializaci na nízké úrovni související s různými doplňkovými hardwarovými prostředky: RCC, GPIO, NVIC a DMA.
Všechny ovladače HAL s úchyty obsahují dvě zpětná volání MSP pro inicializaci a deinicializaci:

UM3029 – Rev 1

strana 26/1419

UM3029
Jak používat ovladače HAL

3.12.3

/** * @brief Inicializuje PPP MSP. * @param hppp: PPP handle * @retval None */ void __weak HAL_PPP_MspInit(PPP_HandleTypeDef *hppp) { /* POZNÁMKA: Tato funkce by neměla být upravována, když je potřeba zpětné volání, HAL_PPP_MspInit by mohla být implementována v uživateli file */ } /** * @brief Deinicializuje PPP MSP. * @param hppp: PPP handle * @retval None */ void __weak HAL_PPP_MspDeInit(PPP_HandleTypeDef *hppp) { /* POZNÁMKA: Tato funkce by neměla být upravována, když je potřeba zpětné volání, HAL_PPP_MspDeInit by mohla být implementována v uživateli file */ }
Zpětná volání MSP jsou v každém ovladači periferií deklarována jako prázdná jako slabé funkce. Uživatel je může použít k nastavení nízkoúrovňového inicializačního kódu nebo je vynechat a použít vlastní inicializační rutinu. Zpětné volání HAL MSP je implementováno uvnitř souboru stm32c0xx_hal_msp.c file v uživatelských složkách. Soubor stm32c0xx_hal_msp.c file šablona se nachází ve složce HAL a měla by být zkopírována do složky uživatele. Může být generován automaticky nástrojem STM32CubeMX a dále upravován. Všimněte si, že všechny rutiny jsou deklarovány jako slabé funkce a mohly by být přepsány nebo odebrány, aby bylo možné použít uživatelský nízkoúrovňový inicializační kód. stm32c0xx_hal_msp.c file obsahuje následující funkce:

Rutina void HAL_MspInit() void HAL_MspDeInit() void HAL_PPP_MspInit() void HAL_PPP_MspDeInit()

Tabulka 14. Funkce MSP Popis
Rutina globální inicializace MSP Rutina globální deinicializace MSP
PPP MSP inicializační rutina PPP MSP deinicializační rutina

Ve výchozím nastavení, pokud není třeba během provádění programu deinicializovat žádné periferní zařízení, celá inicializace MSP se provádí v Hal_MspInit() a MSP Deinicializace v Hal_MspDeInit(). V tomto případě HAL_PPP_MspInit() a HAL_PPP_MspDeInit() nejsou implementovány. Když je třeba za běhu deinicializovat jedno nebo více periferních zařízení a nízkoúrovňové zdroje daného periferního zařízení je třeba uvolnit a použít jiným periferním zařízením, jsou pro inicializaci příslušné periferie a dalších periferií implementovány HAL_PPP_MspDeInit() a HAL_PPP_MspInit(). a deinicializace jsou uloženy v globálních HAL_MspInit() a HAL_MspDeInit(). Pokud globální HAL_MspInit() a HAL_MspDeInit() nemá nic inicializovat, lze tyto dvě rutiny jednoduše vynechat.
Provozní proces HAL I/O Funkce HAL s interním zpracováním dat, jako je vysílání, příjem, zápis a čtení, jsou obecně poskytovány se třemi následujícími režimy zpracování dat: · Režim dotazování · Režim přerušení · Režim DMA
Režim dotazování V režimu dotazování vrací funkce HAL stav procesu, když je zpracování dat v režimu blokování dokončeno. Operace je považována za dokončenou, když funkce vrátí stav HAL_OK, jinak je vrácen chybový stav. Uživatel může získat více informací prostřednictvím funkce HAL_PPP_GetState(). Zpracování dat je řešeno interně ve smyčce. Časový limit (vyjádřený v ms) se používá k zabránění zablokování procesu. BývalýampNíže ukazuje typickou sekvenci zpracování v režimu Polling:

UM3029 – Rev 1

strana 27/1419

UM3029
Jak používat ovladače HAL

3.12.3.2

HAL_StatusTypeDef HAL_PPP_Transmit ( PPP_HandleTypeDef * phandle, uint8_t pData, int16_tSize,uint32_tTimeout) { if((pData == NULL ) || (Velikost == 0)) { return HAL_ERROR; } (…) while (zpracování dat běží) { if( dosažen časový limit ) { return HAL_TIMEOUT; } } (…) return HAL_OK; }
Režim přerušení
V režimu přerušení vrací funkce HAL stav procesu po spuštění zpracování dat a povolení příslušného přerušení. Konec operace je indikován zpětným voláním deklarovaným jako slabá funkce. Uživatel si jej může přizpůsobit tak, aby byl v reálném čase informován o dokončení procesu. Uživatel může také získat stav procesu pomocí funkce HAL_PPP_GetState().
V režimu přerušení jsou v ovladači deklarovány čtyři funkce: · HAL_PPP_Process_IT(): spouští proces · HAL_PPP_IRQHandler(): globální periferní přerušení PPP · __weak HAL_PPP_ProcessCpltCallback (): zpětné volání vzhledem k dokončení procesu. · __slabý HAL_PPP_ProcessErrorCallback(): zpětné volání vzhledem k chybě procesu. Chcete-li použít proces v režimu přerušení, je v uživateli volána HAL_PPP_Process_IT(). file a HAL_PPP_IRQHandler v stm32c0xx_it.c. Funkce HAL_PPP_ProcessCpltCallback() je v ovladači deklarována jako slabá funkce. To znamená, že jej uživatel může znovu deklarovat v aplikaci. Funkce v ovladači se nezmění.
Bývalýample použití je znázorněno níže: main.c file:
UART_HandleTypeDef UartHandle; int main(void) { /* Nastavit uživatelské parametry */ UartHandle.Init.BaudRate = 9600; UartHandle.Init.WordLength = UART_DATABITS_8; UartHandle.Init.StopBits = UART_STOPBITS_1; UartHandle.Init.Parity = UART_PARITY_NONE; UartHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE; UartHandle.Init.Mode = UART_MODE_TX_RX; UartHandle.Init.Instance = USART1; HAL_UART_Init(&UartHandle); HAL_UART_SendIT(&UartHandle, TxBuffer, sizeof(TxBuffer)); zatímco (1); } void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart) { } void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart) { }

UM3029 – Rev 1

strana 28/1419

3.12.3.3

UM3029
Jak používat ovladače HAL
stm32c0xx_it.cfile:
extern UART_HandleTypeDef UartHandle; void USART1_IRQHandler(void) { HAL_UART_IRQHandler(&UartHandle); }
Režim DMA V režimu DMA funkce HAL vrací stav procesu po zahájení zpracování dat prostřednictvím DMA a po povolení příslušného přerušení DMA. Konec operace je indikován zpětným voláním deklarovaným jako slabá funkce a uživatel si jej může přizpůsobit tak, aby byl v reálném čase informován o dokončení procesu. Uživatel může také získat stav procesu pomocí funkce HAL_PPP_GetState(). Pro režim DMA jsou v ovladači deklarovány tři funkce: · HAL_PPP_Process_DMA(): spuštění procesu · HAL_PPP_DMA_IRQHandler(): přerušení DMA používané periferním zařízením PPP · __weak HAL_PPP_ProcessCpltCallback(): zpětné volání vzhledem k dokončení procesu. · __weak HAL_PPP_ErrorCpltCallback(): zpětné volání vzhledem k chybě procesu. Chcete-li použít proces v režimu DMA, je v uživateli volána HAL_PPP_Process_DMA(). file a HAL_PPP_DMA_IRQHandler() je umístěn v stm32c0xx_it.c. Při použití režimu DMA se inicializace DMA provádí zpětným voláním HAL_PPP_MspInit(). Uživatel by měl také přiřadit popisovač DMA k popisovači PPP. Za tímto účelem musí být ovladače všech periferních ovladačů, které používají DMA, deklarovány takto:
typedef struct { PPP_TypeDef *Instance; /* Registrovat základní adresu */ PPP_InitTypeDef Init; /* Parametry komunikace PPP */ HAL_StateTypeDef State; /* Stav komunikace PPP */ (…) DMA_HandleTypeDef *hdma; /* přidružený popisovač DMA */ } PPP_HandleTypeDef;
Inicializace se provádí následovně (UART example):
int main(void) { /* Nastavit uživatelské parametry */ UartHandle.Init.BaudRate = 9600; UartHandle.Init.WordLength = UART_DATABITS_8; UartHandle.Init.StopBits = UART_STOPBITS_1; UartHandle.Init.Parity = UART_PARITY_NONE; UartHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE; UartHandle.Init.Mode = UART_MODE_TX_RX; UartHandle.Init.Instance = UART1; HAL_UART_Init(&UartHandle); (..) } void HAL_USART_MspInit (UART_HandleTypeDef * huart) { static DMA_HandleTypeDef hdma_tx; statický DMA_HandleTypeDef hdma_rx; (…) __HAL_LINKDMA(UartHandle, DMA_Handle_tx, hdma_tx); __HAL_LINKDMA(UartHandle, DMA_Handle_rx, hdma_rx); (…)}
Funkce HAL_PPP_ProcessCpltCallback() je v ovladači deklarována jako slabá funkce, což znamená, že ji uživatel může znovu deklarovat v kódu aplikace. Funkce v ovladači by se neměla měnit. Bývalýample použití je znázorněno níže:

UM3029 – Rev 1

strana 29/1419

3.12.4

UM3029
Jak používat ovladače HAL

hlavní.c file:
UART_HandleTypeDef UartHandle; int main(void) { /* Nastavit uživatelské parametry */ UartHandle.Init.BaudRate = 9600; UartHandle.Init.WordLength = UART_DATABITS_8; UartHandle.Init.StopBits = UART_STOPBITS_1; UartHandle.Init.Parity = UART_PARITY_NONE; UartHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE; UartHandle.Init.Mode = UART_MODE_TX_RX; UartHandle.Init.Instance = USART1; HAL_UART_Init(&UartHandle); HAL_UART_Send_DMA(&UartHandle, TxBuffer, sizeof(TxBuffer)); zatímco (1); } void HAL_UART_TxCpltCallback(UART_HandleTypeDef *phuart) { } void HAL_UART_TxErrorCallback(UART_HandleTypeDef *phuart) { }
stm32c0xx_it.c file:
extern UART_HandleTypeDef UartHandle; void DMAx_IRQHandler(void) { HAL_DMA_IRQHandler(&UartHandle.DMA_Handle_tx); }
HAL_USART_TxCpltCallback() a HAL_USART_ErrorCallback() by měly být propojeny ve funkci HAL_PPP_Process_DMA() se zpětným voláním dokončení přenosu DMA a zpětným voláním chyby přenosu DMA pomocí následujícího příkazu:
HAL_PPP_Process_DMA (PPP_HandleTypeDef *hppp, Params….) { (…) hppp->DMA_Handle->XferCpltCallback = HAL_UART_TxCpltCallback ; hppp->DMA_Handle->XferErrorCallback = HAL_UART_ErrorCallback ; (…)}

Timeout a správa chyb
Správa časového limitu Časový limit se často používá pro rozhraní API, která pracují v režimu dotazování. Definuje prodlevu, během které by měl blokovací proces čekat, než se vrátí chyba. Bývalýampsoubor je uveden níže: HAL_StatusTypeDef HAL_DMA_PollForTransfer(DMA_HandleTypeDef *hdma, uint32_t CompleteLevel, uint32_t Timeout)
Možné hodnoty časového limitu jsou následující:

Tabulka 15. Hodnoty časového limitu

Hodnota časového limitu

Popis

0

Bez dotazování: Okamžitá kontrola procesu a ukončení

1 … (HAL_MAX_DELAY -1) (1)

Časový limit v ms

HAL_MAX_DELAY

Nekonečné hlasování, dokud nebude proces úspěšný

1. HAL_MAX_DELAY je definováno v stm32c0xx_hal_def.h jako 0xFFFFFFFF

V některých případech se však používá pevný časový limit pro periferní zařízení systému nebo procesy interního ovladače HAL. V těchto případech má časový limit stejný význam a používá se stejným způsobem, kromě případů, kdy je definován lokálně v ovladačích a nelze jej upravit nebo zavést jako argument v uživatelské aplikaci.

UM3029 – Rev 1

strana 30/1419

UM3029
Jak používat ovladače HAL

3.12.4.2

Example pevného časového limitu:
#define LOCAL_PROCESS_TIMEOUT 100 HAL_StatusTypeDef HAL_PPP_Process(PPP_HandleTypeDef) { (…) timeout = HAL_GetTick() + LOCAL_PROCESS_TIMEOUT; (…) while(ProcessOngoing) { (…) if(HAL_GetTick() timeout) { /* Proces odemčen */ __HAL_UNLOCK(hppp); hppp->State= HAL_PPP_STATE_TIMEOUT; návrat HAL_PPP_STATE_TIMEOUT; } } (…) }
Následující example ukazuje, jak používat časový limit uvnitř funkcí dotazování:
HAL_PPP_StateTypeDef HAL_PPP_Poll (PPP_HandleTypeDef *hppp, uint32_t Timeout) { (…) timeout = HAL_GetTick() + Timeout; (…) while(ProcessOngoing) { (…) if(Timeout != HAL_MAX_DELAY) { if(HAL_GetTick() timeout) { /* Proces odemčen */ __HAL_UNLOCK(hppp); hppp->State= HAL_PPP_STATE_TIMEOUT; return hppp->State; } } (…) }
Správa chyb
Ovladače HAL implementují kontrolu následujících položek:
· Platné parametry: pro některé procesy by použité parametry měly být platné a již definované, jinak může systém spadnout nebo přejít do nedefinovaného stavu. Tyto kritické parametry jsou před použitím kontrolovány (viz napřample níže).
HAL_StatusTypeDef HAL_PPP_Process(PPP_HandleTypeDef* hppp, uint32_t *pdata, uint32 Velikost) { if ((pData == NULL ) || (Velikost == 0)) { return HAL_ERROR; } }

UM3029 – Rev 1

strana 31/1419

UM3029
Jak používat ovladače HAL

3.12.4.3

· Valid handle: PPP periferní handle je nejdůležitějším argumentem, protože zachovává důležité parametry ovladače PPP. Kontroluje se vždy na začátku funkce HAL_PPP_Init().
HAL_StatusTypeDef HAL_PPP_Init(PPP_HandleTypeDef* hppp) { if (hppp == NULL) //handle by již měla být přidělena { return HAL_ERROR; } }
· Chyba časového limitu: následující příkaz se použije, když dojde k chybě časového limitu:
while (Proces probíhá) { timeout = HAL_GetTick() + Timeout; while (zpracování dat běží) { if(timeout) { return HAL_TIMEOUT; } }
Když dojde k chybě během periferního procesu, HAL_PPP_Process () se vrátí se stavem HAL_ERROR. Ovladač HAL PPP implementuje HAL_PPP_GetError (), aby bylo možné načíst původ chyby.
HAL_PPP_ErrorTypeDef HAL_PPP_GetError (PPP_HandleTypeDef *hppp);
Ve všech periferních úchytech je definován HAL_PPP_ErrorTypeDef a používá se k uložení posledního chybového kódu.
typedef struct { PPP_TypeDef * Instance; /* PPP registruje základní adresu */ PPP_InitTypeDef Init; /* Inicializační parametry PPP */ HAL_LockTypeDef Lock; /* Uzamykací objekt PPP */ __IO HAL_PPP_StateTypeDef State; /* stav PPP */ __IO HAL_PPP_ErrorTypeDef ErrorCode; /* Kód chyby PPP */ (…) /* Parametry specifické pro PPP */ } PPP_HandleTypeDef;
Chybový stav a globální stav periferie jsou vždy aktualizovány před vrácením chyby: PPP->State = HAL_PPP_READY; /* Připravte periferii */ PP->ErrorCode = HAL_ERRORCODE ; /* Nastaví kód chyby */ _HAL_UNLOCK(PPP) ; /* Odemkněte prostředky PPP */ return HAL_ERROR; /*návrat s chybou HAL */
HAL_PPP_GetError () musí být použit v režimu přerušení ve zpětném volání chyby:
void HAL_PPP_ProcessCpltCallback(PPP_HandleTypeDef *hspi) { ErrorCode = HAL_PPP_GetError (hppp); /* načíst kód chyby */ }
Kontrola za běhu HAL implementuje detekci selhání běhu kontrolou vstupních hodnot všech funkcí ovladače HAL. Kontrola za běhu je dosažena pomocí makra serve_param. Toto makro se používá ve všech funkcích ovladače HAL, které mají vstupní parametr. Umožňuje ověřit, že vstupní hodnota leží v povolených hodnotách parametru. Chcete-li povolit kontrolu za běhu, použijte makro sustain_param a ponechte definici USE_FULL_ASSERT bez komentáře v stm32c0xx_hal_conf.h file.

UM3029 – Rev 1

strana 32/1419

UM3029
Jak používat ovladače HAL

void HAL_UART_Init(UART_HandleTypeDef *huart) { (..) /* Zkontrolujte parametry */ sustain_param(IS_UART_INSTANCE(huart->Instance)); asse_param(IS_UART_BAUDRATE(huart->Init.BaudRate)); tvrdit_param(IS_UART_SLOVO_DÉLKA(huart->Init.DélkaSlova)); asse_param(IS_UART_STOPBITS(huart->Init.StopBits)); sustain_param(IS_UART_PARITY(huart->Init.Parita)); sustain_param(IS_UART_MODE(huart->Init.Mode)); asse_param(IS_UART_HARDWARE_FLOW_CONTROL(huart->Init.HwFlowCtl)); (..)

Pozor:

/** @defgroup UART_Word_Length * @{ */ #define UART_WORDLENGTH_8B ((uint32_t)0x00000000) #define UART_WORDLENGTH_9B ((uint32_t)USART_CR1_M) #define UART_WORDLENGTH_TH=WORD TH_8B) ||. ((DÉLKA) == UART_WORDLENGTH_9B))
Pokud je výraz předaný makruasse_param nepravdivý, zavolá se funkce theassert_failed a vrátí název zdroje. file a číslo zdrojové linky volání, které selhalo. Pokud je výraz pravdivý, není vrácena žádná hodnota. Makro serve_param je implementováno v stm32c0xx_hal_conf.h:
/* Exportované makro ————————————————————*/ #ifdef USE_FULL_ASSERT /** * @brief Makro serve_param se používá pro kontrolu parametrů funkce. * @param expr: Pokud je výraz nepravdivý, zavolá funkci Claim_failed * která hlásí název zdroje file a číslo zdrojové * linky volání, které selhalo. * Pokud je výraz pravdivý, nevrací žádnou hodnotu. * @retval Žádné */ #define Claim_param(expr) ((výraz)?(void)0:assert_failed((uint8_t *)__FILE__, __LINE__)) /* Exportované funkce ————————————–*/ void serve_failed(uint8_t* file, řádek uint32_t); #else #define Claim_param(expr)((void)0) #endif /* USE_FULL_ASSERT */
Funkce Claim_failed je implementována v main.c file nebo v jakémkoli jiném uživateli C file:
#ifdef USE_FULL_ASSERT /** * @brief Uvádí název zdroje file a číslo zdrojového řádku *, kde došlo k chybě serve_param. * @param file: ukazatel na zdroj file jméno * @řádek param: hlášení_param chybové číslo zdrojového řádku * @retval Žádný */ void serve_failed(uint8_t* file, uint32_t line) { /* Uživatel může přidat svou vlastní implementaci, kterou bude hlásit file jméno a číslo řádku, např.: printf(“Chybná hodnota parametrů: file %s na řádku %drn”, file, řádek) */ /* Nekonečná smyčka */ while (1) { } }
Kvůli režijní kontrole za běhu se doporučuje používat ji během vývoje a ladění kódu aplikace a odstranit ji z konečné aplikace, aby se zlepšila velikost a rychlost kódu.

UM3029 – Rev 1

strana 33/1419

4
4.1
Poznámka:

UM3029
Nadview nízkovrstvých ovladačů

Nadview nízkovrstvých ovladačů

Ovladače nízké vrstvy (LL) jsou navrženy tak, aby nabízely rychlou a lehkou expertně orientovanou vrstvu, která je blíže hardwaru než HAL. Na rozdíl od HAL nejsou LL API poskytována pro periferní zařízení, kde optimalizovaný přístup není klíčovou funkcí, nebo pro ty, které vyžadují náročnou softwarovou konfiguraci a/nebo komplexní zásobník vyšší úrovně (jako je USB). Funkce ovladačů LL:
· Sada funkcí pro inicializaci hlavních funkcí periferie podle parametrů specifikovaných v datových strukturách
· Sada funkcí používaných k vyplnění inicializačních datových struktur resetovanými hodnotami každého pole · Funkce pro provedení periferní deinicializace (periferní registry obnoveny na výchozí hodnoty) · Sada inline funkcí pro přímý a atomický přístup k registrům · Plná nezávislost z HAL, protože ovladače LL lze použít buď v samostatném režimu (bez ovladačů HAL)
nebo ve smíšeném režimu (s ovladači HAL) · Plné pokrytí podporovaných periferních funkcí
Nízkovrstvé ovladače poskytují hardwarové služby založené na dostupných funkcích periferií STM32. Tyto služby přesně odrážejí hardwarové možnosti a poskytují jednorázové operace, které musí být volány podle programovacího modelu popsaného v referenční příručce mikrokontrolérové ​​řady. V důsledku toho služby LL neimplementují žádné zpracování a nevyžadují žádné další paměťové zdroje pro uložení jejich stavů, čítačů nebo datových ukazatelů: všechny operace se provádějí změnou obsahu souvisejících periferních registrů.
Nízkovrstvé files
Nízkovrstvé ovladače jsou postaveny na header/C files (jeden na každou podporovanou periferii) plus pět záhlaví files pro některé funkce související se systémem a kortexem.

Tabulka 16. Ovladač LL files

File

Popis

stm32c0xx_ll_bus.h

Toto je h-zdroj file pro řízení základní sběrnice a aktivaci a deaktivaci periferních hodin Přampsoubor: LL_AHB1_GRP1_EnableClock

stm32c0xx_ll_ppp.h/.c

stm32c0xx_ll_ppp.c poskytuje funkce inicializace periferií, jako je LL_PPP_Init(), LL_PPP_StructInit(), LL_PPP_DeInit(). Všechna ostatní rozhraní API jsou definována v stm32c0xx_ll_ppp.h file.
Nízkovrstvý ovladač PPP je samostatný modul. Chcete-li jej použít, aplikace jej musí zahrnout do souboru stm32c0xx_ll_ppp.h file.

stm32c0xx_ll_cortex.h

Rozhraní API pro provoz registrů souvisejících s Cortex-M včetně Systick, Low power (jako LL_SYSTICK_xxxxx a LL_LPM_xxxxx „Režim nízké spotřeby“)

stm32c0xx_ll_utils.h/.c

Tento file pokrývá generická API: · Čtení jedinečného ID zařízení a elektronického podpisu · Správa časové základny a zpoždění · Konfigurace systémových hodin.

Operace související se systémem. stm32c0xx_ll_system.h
Exampsoubor: LL_SYSCFG_xxx, LL_DBGMCU_xxx a LL_FLASH_xxx

Šablona file umožňující definovat makro sustain_param, které se používá, když je povolena kontrola za běhu. stm32_assert_template.h Toto file je vyžadován pouze v případě, že se ovladače LL používají v samostatném režimu (bez volání rozhraní API HAL). Měl by být zkopírován do složky aplikace a přejmenován na stm32_assert.h.

Neexistuje žádná konfigurace file pro řidiče LL. Nízká vrstva files jsou umístěny ve stejné složce ovladače HAL.

UM3029 – Rev 1

strana 34/1419

Obrázek 8. Nízkovrstvé složky ovladače

UM3029
Nízkovrstvé files

Obecně platí, že ovladače nízké vrstvy zahrnují pouze zařízení STM32 CMSIS file. #include „stm32yyxx.h“

UM3029 – Rev 1

strana 35/1419

UM3029
Nadview nízkovrstvých API a pravidel pojmenování
Obrázek 9. Nízkovrstvý ovladač CMSIS files

4.2
4.2.1

Aplikace files musí obsahovat pouze použitou hlavičku ovladače nízké vrstvy files.
Nadview nízkovrstvých API a pravidel pojmenování
Funkce inicializace periferií Ovladače LL nabízejí tři sady inicializačních funkcí. Jsou definovány v stm32c0xx_ll_ppp.c file: · Funkce pro inicializaci hlavních funkcí periferií podle parametrů specifikovaných v datových strukturách · Sada funkcí používaných k vyplnění inicializačních datových struktur resetovanými hodnotami každého pole · Funkce pro deinicializaci periferií (registry periferií obnovené na výchozí hodnoty) Definice těchto inicializačních funkcí LL a souvisejících zdrojů (struktura, literály a prototypy) je podmíněna přepínačem kompilace: USE_FULL_LL_DRIVER. Chcete-li používat tyto funkce, musí být tento přepínač přidán do preprocesoru kompilátoru toolchain nebo do jakékoli obecné hlavičky file který je zpracován před ovladači LL. Níže uvedená tabulka ukazuje seznam běžných funkcí poskytovaných pro všechna podporovaná periferní zařízení:

UM3029 – Rev 1

strana 36/1419

UM3029
Nadview nízkovrstvých API a pravidel pojmenování

Tabulka 17. Běžné funkce inicializace periferií

Funkce LL_PPP_Init

Typ návratu
· ErrorStatus ·

LL_PPP_StructInit

prázdnota

·

LL_PPP_DeInit ErrorStatus ·

Parametry

Popis

PPP_TypeDef* PPPx LL_PPP_InitTypeDef* PPP_InitStruct LL_PPP_InitTypeDef* PPP_InitStruct
PPP_TypeDef* PPPx

Inicializuje hlavní funkce periferie podle parametrů zadaných v PPP_InitStruct.
Exampsoubor: LL_USART_Init(USART_TypeDef *USARTx, LL_USART_InitTypeDef *USART_InitStruct)
Vyplní každý člen PPP_InitStruct jeho výchozí hodnotou.
Example. LL_USART_StructInit(LL_USART_InitTypeDef *USART_InitStruct)
Deinicializuje periferní registry, tj. obnoví je na jejich výchozí resetované hodnoty.
Example. LL_USART_DeInit(USART_TypeDef *USARTx)

Pro některá periferní zařízení jsou k dispozici další funkce (viz Tabulka 18. Volitelné funkce inicializace periferií ).

Tabulka 18. Volitelné funkce inicializace periferií

Funkce

Typ návratu

Parametry

Examples
Inicializuje periferní funkce podle parametrů zadaných v PPP_InitStruct.

LL_PPP{_CATEGORY}_Init

· ErrorStatus ·

Exampten:
LL_ADC_INJ_Init(ADC_TypeDef *ADCx, LL_ADC_INJ_InitTypeDef *ADC_INJ_InitStruct)

PPP_TypeDef* PPPx LL_PPP{_CATEGORY}_InitTypeDef* PPP{_CATEGORY}_InitStruct

LL_RTC_TIME_Init(RTC_TypeDef *RTCx, uint32_t RTC_Format, LL_RTC_TimeTypeDef *RTC_TimeStruct)
LL_RTC_DATE_Init(RTC_TypeDef *RTCx, uint32_t RTC_Format, LL_RTC_DateTypeDef *RTC_DateStruct)

LL_TIM_IC_Init(TIM_TypeDef* TIMx, kanál uint32_t, LL_TIM_IC_InitTypeDef* TIM_IC_InitStruct)

LL_PPP{_CATEGORY}_StructInit

prázdnota

LL_PPP{_CATEGORY}_InitTypeDef* PPP{_CATEGORY}_InitStruct

LL_PPP_CommonInit

· ErrorStatus ·

PPP_TypeDef* PPPx LL_PPP_CommonInitTypeDef* PPP_CommonInitStruct

LL_PPP_CommonStructInit

prázdnota

LL_PPP_CommonInitTypeDef* PPP_CommonInitStruct

LL_PPP_ClockInit

· ErrorStatus ·

PPP_TypeDef* PPPx LL_PPP_ClockInitTypeDef* PPP_ClockInitStruct

LL_TIM_ENCODER_Init(TIM_TypeDef* TIMx, LL_TIM_ENCODER_InitTypeDef* TIM_EncoderInitStruct)
Vyplní každý člen PPP{_CATEGORY}_InitStruct jeho výchozí hodnotou.
Exampsoubor: LL_ADC_INJ_StructInit(LL_ADC_INJ_InitTypeDef *ADC_INJ_InitStruct)
Inicializuje společné funkce sdílené mezi různými instancemi stejného periferního zařízení.
Exampsoubor: LL_ADC_CommonInit(ADC_Common_TypeDef *ADCxy_COMMON, LL_ADC_CommonInitTypeDef *ADC_CommonInitStruct)
Vyplní každý člen PPP_CommonInitStruct jeho výchozí hodnotou
Exampsoubor: LL_ADC_CommonStructInit(LL_ADC_CommonInitTypeDef *ADC_CommonInitStruct)
Inicializuje konfiguraci periferních hodin v synchronním režimu.

UM3029 – Rev 1

strana 37/1419

UM3029
Nadview nízkovrstvých API a pravidel pojmenování

Funkce

Typ návratu

LL_PPP_ClockStructInit

prázdnota

Parametry LL_PPP_ClockInitTypeDef*
PPP_ClockInitStruct

Examples
Exampsoubor: LL_USART_ClockInit(USART_TypeDef *USARTx, LL_USART_ClockInitTypeDef *USART_ClockInitStruct)
Vyplní každý člen PPP_ClockInitStruct jeho výchozí hodnotou
Exampsoubor: LL_USART_ClockStructInit(LL_USART_ClockInitTypeDef *USART_ClockInitStruct)

4.2.1.1
Poznámka: 4.2.2

Kontrola za běhu Stejně jako ovladače HAL i inicializační funkce LL implementují detekci selhání za běhu kontrolou vstupních hodnot všech funkcí ovladače LL. Další podrobnosti naleznete v části 3.12.4.3 Kontrola doby běhu. Při použití ovladačů LL v samostatném režimu (bez volání funkcí HAL) jsou k použití kontroly za běhu vyžadovány následující akce: 1. Zkopírujte soubor stm32_assert_template.h do složky aplikace a přejmenujte jej na stm32_assert.h. Tento file definuje
makro asse_param, které se používá, když je povolena kontrola za běhu. 2. Zahrňte stm32_assert.h file v hlavní hlavičce aplikace file. 3. Přidejte přepínač kompilace USE_FULL_ASSERT do preprocesoru kompilátoru toolchain nebo do libovolného obecného
záhlaví file který je zpracován před ovladačem stm32_assert.h. Kontrola doby chodu není k dispozici pro inline funkce LL.
Funkce konfigurace na úrovni periferních registrů Kromě funkcí inicializace periferií nabízejí ovladače LL sadu inline funkcí pro přímý přístup k atomickému registru. Jejich formát je následující:
__STATIC_INLINE return_type LL_PPP_Function (PPPx_TypeDef *PPPx, argumenty)
Pojmenování „Funkce“ je definováno v závislosti na kategorii akcí: · Správa specifických přerušení, požadavku DMA a stavových příznaků: Nastavit/Získat/Vymazat/Povolit/Zakázat příznaky zap.
registru přerušení a stavu

Tabulka 19. Správa specifických přerušení, požadavků DMA a stavových příznaků

Jméno
LL_PPP_{_CATEGORY}_ActionItem_BITNAME LL_PPP{_CATEGORY}_IsItem_BITNAME_Action

Examples
· LL_RCC_IsActiveFlag_LSIRDY · LL_RCC_IsActiveFlag_FWRST() · LL_ADC_ClearFlag_EOC(ADC1) · LL_DMA_ClearFlag_TCx(DMA_TypeDef* DMAx)

Poznámka:

Přerušení příznaku položky
DMA

Akce Vyjasnit
Povolit zakázat
Získat Povolit Zakázat
Získat

Tabulka 20. Dostupné formáty funkcí
Formát LL_PPP_IsActiveFlag_BITNAME
LL_PPP_ClearFlag_BITNAME LL_PPP_EnableIT_BITNAME LL_PPP_DisableIT_BITNAME LL_PPP_IsEnabledIT_BITNAME LL_PPP_EnableDMAReq_BITNAME LL_PPP_DisableDMAReq_BITNAME LLEnabledBITAReq

BITNAME odkazuje na název bitu periferního registru, jak je popsáno v referenční příručce produktové řady.

UM3029 – Rev 1

strana 38/1419

Poznámka: Poznámka:

UM3029
Nadview nízkovrstvých API a pravidel pojmenování

· Správa aktivace/deaktivace periferních hodin: Povolit/zakázat/resetovat periferní hodiny

Tabulka 21. Správa aktivace/deaktivace periferních hodin

Název LL_BUS_GRPx_ActionClock{Mode} ·
·

Examples
LL_AHB1_GRP1_EnableClock (LL_AHB1_GRP1_PERIPH_DMA1) LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_RTC)

'x' odpovídá indexu skupiny a odkazuje na index upraveného registru na dané sběrnici. „bus“ odpovídá názvu autobusu.
· Správa aktivace/deaktivace periferií: Povolí/zakáže periferní zařízení nebo aktivuje/deaktivuje specifické periferní funkce

Tabulka 22. Správa aktivace/deaktivace periferních zařízení

Jméno
· LL_PPP{_CATEGORY}_Action{Item} · LL_PPP{_CATEGORY}_IsItemAction ·
· ·

Examples
LL_ADC_Enable () LL_ADC_StartCalibration(); LL_ADC_IsCalibrationOnGoing; LL_RCC_HSI_Enable () LL_RCC_HSI_IsReady()

· Správa konfigurace periferií: Nastavte/získejte nastavení konfigurace periferií

Tabulka 23. Správa konfigurace periferních zařízení

Název LL_PPP{_CATEGORY}_Set{ nebo
Získat}ConfigItem

Examples LL_USART_SetBaudRate (USART2, hodiny, LL_USART_BAUDRATE_9600)

· Správa periferních registrů: Zápis/čtení obsahu registru/restartování adresy relativního registru DMA
Tabulka 24. Správa periferních registrů
Název LL_PPP_WriteReg(__INSTANCE__, __REG__, __VALUE__)
LL_PPP_ReadReg(__INSTANCE__, __REG__) LL_PPP_DMA_GetRegAddr (PPP_TypeDef *PPPx,{případná dílčí instance: Channel} , {uint32_t Propriety})
Vlastnost je proměnná používaná k identifikaci směru přenosu DMA nebo typu datového registru.

UM3029 – Rev 1

strana 39/1419

5
5.1
Poznámka:
5.2
Poznámka:

UM3029
Společné bydlení HAL a LL
Společné bydlení HAL a LL
Low-ayer API jsou navržena pro použití v samostatném režimu nebo v kombinaci s HAL. Nelze je automaticky použít s HAL pro stejnou periferní instanci. Pokud používáte rozhraní LL API pro konkrétní instanci, můžete stále používat rozhraní HAL API pro jiné instance. Buďte opatrní, aby nízkovrstvá rozhraní API mohla přepsat některé registry, jejichž obsah je zrcadlen v úchytech HAL.
Nízkovrstvý ovladač používaný v samostatném režimu
Nízkovrstvá rozhraní API lze použít bez volání služeb ovladače HAL. To se provede jednoduchým zahrnutím stm32c0xx_ll_ppp.h do aplikace files. LL API pro danou periferii jsou volána provedením stejné sekvence, jako je ta, kterou doporučuje programovací model v příslušné referenční příručce produktové řady. V tomto případě lze ovladače HAL přidružené k použité periferii z pracovního prostoru odebrat. Rámec STM32CubeC0 by se však měl používat stejným způsobem jako v případě ovladačů HAL, což znamená, že systém file, spuštění file a CMSIS by se měly používat vždy. Pokud jsou zahrnuty ovladače BSP, použité ovladače HAL spojené s ovladači funkcí BSP by měly být zahrnuty do pracovního prostoru, i když je aplikační vrstva nepoužívá.
Smíšené použití nízkovrstvých API a HAL ovladačů
V tomto případě se nízkovrstvá rozhraní API používají ve spojení s ovladači HAL k dosažení přímých operací a operací založených na úrovni registru. Smíšené použití je povoleno, je však třeba vzít v úvahu: · Doporučuje se nepoužívat současně HAL API a kombinaci nízkovrstvých API pro
danou periferní instanci. V takovém případě by mělo být odpovídajícím způsobem aktualizováno jedno nebo více soukromých polí ve struktuře popisovače HAL PPP. · Pro operace a procesy, které nemění pole handle včetně inicializační struktury, lze rozhraní API ovladače HAL a služby nízké vrstvy používat společně pro stejnou periferní instanci. · Nízkovrstvé ovladače lze bez omezení používat se všemi ovladači HAL, které nejsou založeny na objektech handle (RCC, common HAL, Flash a GPIO). Několik exampsoubory ukazující, jak používat HAL a LL ve stejné aplikaci, jsou poskytovány v rámci firmwarového balíčku stm32c0 (viz např.ampprojekty les_MIX). 1. Když se nepoužívají rozhraní API HAL Init/DeInit a jsou nahrazena makry nízké vrstvy, funkce InitMsp() nejsou volány a inicializace MSP by měla být provedena v uživatelské aplikaci. 2. Když se nepoužívají procesní API a odpovídající funkce se provádí prostřednictvím nízkovrstvých API, zpětná volání nejsou volána a následné zpracování nebo správu chyb by měla provádět uživatelská aplikace. 3. Když se pro operace procesů používají rozhraní API LL, nelze volat rozhraní API HAL obslužné rutiny IRQ a IRQ by měla implementovat uživatelská aplikace. Každý ovladač LL implementuje makra potřebná ke čtení a vymazání souvisejících příznaků přerušení.

UM3029 – Rev 1

strana 40/1419

6

Ovladač systému HAL

UM3029
Ovladač systému HAL

6.1
6.1.1
6.1.3

Popis API ovladače firmwaru HAL
V následující části jsou uvedeny různé funkce knihovny HAL.
Jak používat tento ovladač
Společný ovladač HAL obsahuje sadu obecných a společných rozhraní API, které mohou používat ovladače periferních zařízení PPP a uživatel k zahájení používání HAL. HAL obsahuje dvě kategorie rozhraní API: · Common HAL API · Services HAL API
Inicializační a konfigurační funkce HAL
Tato část poskytuje funkce umožňující: · Inicializovat rozhraní Flash, alokaci NVIC a počáteční konfiguraci hodin časové základny. · Deinicializovat společnou část HAL. · Nakonfigurujte zdroj časové základny tak, aby měl časovou základnu 1 ms s vyhrazenou prioritou přerušení Tick.
Časovač SysTick se standardně používá jako zdroj časové základny, ale uživatel může případně implementovat svůj správný zdroj časové základny (univerzální časovač např.ample nebo jiný zdroj času), mějte na paměti, že trvání časové základny by mělo být zachováno 1 ms, protože hodnoty PPP_TIMEOUT_VALUE jsou definovány a zpracovávány v milisekundách.
Funkce konfigurace časové základny (HAL_InitTick ()) je volána automaticky na začátku programu po resetování pomocí HAL_Init() nebo kdykoli, když jsou nakonfigurovány hodiny, pomocí HAL_RCC_ClockConfig().
Zdroj časové základny je nakonfigurován tak, aby generoval přerušení v pravidelných časových intervalech. Pokud je HAL_Delay() voláno z periferního ISR procesu, je třeba dávat pozor, linka přerušení Tick musí mít vyšší prioritu (číselně nižší) než periferní přerušení. Jinak bude proces ISR volajícího zablokován.
funkce ovlivňující konfigurace časové základny jsou deklarovány jako __weak, aby bylo možné přepsání v případě jiných implementací v uživateli file.
Tato část obsahuje následující rozhraní API: · HAL_Init() · HAL_DeInit() · HAL_MspInit() · HAL_MspDeInit() · HAL_InitTick()
Funkce ovládání HAL
Tato část poskytuje funkce, které umožňují: · Poskytnout hodnotu tick v milisekundách · Poskytnout blokovací zpoždění v milisekundách · Pozastavit přerušení zdroje časové základny · Obnovit přerušení zdroje časové základny · Získat verzi ovladače HAL API · Získat identifikátor zařízení · Získat identifikátor revize zařízení Tato část obsahuje následující rozhraní API: · HAL_IncTick() · HAL_GetTick() · HAL_GetTickPrio() · HAL_SetTickFreq()

UM3029 – Rev 1

strana 41/1419

UM3029
Popis API ovladače firmwaru HAL

· HAL_GetTickFreq() · HAL_Delay() · HAL_SuspendTick() · HAL_ResumeTick() · HAL_GetHalVersion() · HAL_GetREVID() · HAL_GetDEVID() · HAL_GetUIDw0() UID · HAL_G)et · HAL_Get

6.1.4

Funkce ladění HAL
Tato část poskytuje funkce umožňující: · Povolit/zakázat modul ladění v režimu STOP · Povolit/zakázat modul ladění v režimu STANDBY Tato část obsahuje následující rozhraní API: · HAL_DBGMCU_EnableDBGStopMode() · HAL_DBGMCU_DisableDBGStopMode() · HAL_DBGMCU_EnableDBGStBGMD_tBGSDby de()

6.1.5

Funkce konfigurace HAL SYSCFG
Tato část poskytuje funkce umožňující: · Povolit/zakázat přemapování pinů · Povolit/zakázat analogový přepínač I/O vol.tage booster Tato část obsahuje následující rozhraní API: · HAL_SYSCFG_EnableIOAnalogSwitchBooster() · HAL_SYSCFG_DisableIOAnalogSwitchBooster() · HAL_SYSCFG_EnableRemap() · HAL_SYSCFG_DisableRemap() · HAL_SYSCFG_SetPinBSYSGindGet_SetPinBindGBinH

6.1.6

Podrobný popis funkcí

HAL_Init

Název funkce HAL_StatusTypeDef HAL_Init (void)

Popis funkce
Nakonfigurujte předběžné načtení Flash a mezipaměť instrukcí, zdroj časové základny, NVIC a jakýkoli požadovaný globální hardware nízké úrovně voláním funkce zpětného volání HAL_MspInit(), která bude volitelně definována uživatelem. file stm32c0xx_hal_msp.c.

Návratové hodnoty ·

HAL: stav

UM3029 – Rev 1

strana 42/1419

UM3029
Popis API ovladače firmwaru HAL

Poznámky

· Funkce HAL_Init() je volána na začátku programu po resetu a před konfigurací hodin.
· Ve výchozí implementaci se jako zdroj časové základny používá systémový časovač (Systick). Konfigurace systému Systick je založena na hodinách HSI, protože HSI jsou hodiny používané po resetu systému. Po dokončení se tick časové základny začne zvyšovat: čítač proměnných tick se zvyšuje každou 1 ms v obsluze přerušení SysTick_Handler().

HAL_DeInit

Název funkce HAL_StatusTypeDef HAL_DeInit (void)

Popis funkce Tato funkce deinicializuje společnou část HAL a zastaví zdroj časové základny.

Návratové hodnoty ·

HAL: stav

Poznámky

· Tato funkce je volitelná.

HAL_MspInit

Název funkce void HAL_MspInit (void )

Popis funkce Inicializujte MSP.

Návratové hodnoty ·

Žádný:

HAL_MspDeInit

Název funkce void HAL_MspDeInit (void )

Popis funkce Deinicializuje MSP.

Návratové hodnoty ·

Žádný:

HAL_InitTick

Název funkce HAL_StatusTypeDef HAL_InitTick (uint32_t TickPriority)

Popis funkce
Tato funkce konfiguruje zdroj časové základny: Zdroj času je nakonfigurován tak, aby měl časovou základnu 1 ms s vyhrazenou prioritou přerušení Tick.

Parametry ·

TickPriority: Zaškrtněte prioritu přerušení.

Návratové hodnoty ·

HAL: stav

UM3029 – Rev 1

strana 43/1419

UM3029
Popis API ovladače firmwaru HAL

Poznámky

· Tato funkce je volána automaticky na začátku programu po resetování pomocí HAL_Init() nebo kdykoli, když jsou hodiny překonfigurovány pomocí HAL_RCC_ClockConfig().
· Ve výchozí implementaci je zdrojem časové základny časovač SysTick. Slouží ke generování přerušení v pravidelných časových intervalech. Je třeba dávat pozor, pokud je HAL_Delay() voláno z periferního ISR procesu. Přerušení SysTick musí mít vyšší prioritu (numericky nižší) než periferní přerušení. Jinak bude proces ISR volajícího zablokován. Funkce je deklarována jako __weak, aby byla přepsána v případě jiné implementace v uživateli file.

HAL_IncTick

Název funkce void HAL_IncTick (void )

Popis funkce Tato funkce se volá ke zvýšení globální proměnné „uwTick“ používané jako časová základna aplikace.

Návratové hodnoty ·

Žádný:

Poznámky

· Ve výchozí implementaci je tato proměnná inkrementována každou 1 ms v SysTick ISR. · Tato funkce je deklarována jako __weak, aby byla přepsána v případě jiných implementací v uživateli file.

HAL_Delay

Název funkce void HAL_Delay (uint32_t Delay)

Popis funkce Tato funkce poskytuje minimální zpoždění (v milisekundách) na základě inkrementace proměnné.

Parametry ·

Delay: určuje délku doby zpoždění v milisekundách.

Návratové hodnoty ·

Žádný:

Poznámky

· Ve výchozí implementaci je zdrojem časové základny časovač SysTick. Používá se ke generování přerušení v pravidelných časových intervalech, kde se uwTick zvyšuje.
· Tato funkce je deklarována jako __weak, aby byla přepsána v případě jiných implementací v uživateli file.

HAL_GetTick

Název funkce uint32_t HAL_GetTick (void)

Popis funkce Poskytuje hodnotu tick v milisekundách.

Návratové hodnoty ·

tick: hodnota

Poznámky

· Tato funkce je deklarována jako __weak, aby byla přepsána v případě jiných implementací v uživateli file.

UM3029 – Rev 1

strana 44/1419

UM3029
Popis API ovladače firmwaru HAL

HAL_GetTickPrio

Název funkce uint32_t HAL_GetTickPrio (void)

Popis funkce Tato funkce vrací prioritu zaškrtnutí.

Návratové hodnoty ·

klíště: priorita

HAL_SetTickFreq

Název funkce HAL_StatusTypeDef HAL_SetTickFreq (uint32_t Freq)

Popis funkce Set new tick Freq.

Návratové hodnoty ·

stav:

HAL_GetTickFreq

Název funkce uint32_t HAL_GetTickFreq (void)

Popis funkce návratová frekvence tikání.

Návratové hodnoty ·

tick: perioda v Hz

HAL_SuspendTick

Název funkce void HAL_SuspendTick (void )

Popis funkce Suspend Tick přírůstek.

Návratové hodnoty ·

Žádný:

Poznámky

· Ve výchozí implementaci je zdrojem časové základny časovač SysTick. Slouží ke generování přerušení v pravidelných časových intervalech. Po zavolání HAL_SuspendTick() bude přerušení SysTick deaktivováno, a tak je přírůstek Tick pozastaven.
· Tato funkce je deklarována jako __weak, aby byla přepsána v případě jiných implementací v uživateli file.

HAL_ResumeTick Název funkce
void HAL_ResumeTick (void ) Popis funkce
Obnovit přírůstek Tick.

UM3029 – Rev 1

strana 45/1419

UM3029
Popis API ovladače firmwaru HAL

Návratové hodnoty ·
Poznámky ·
·

Žádný:
Ve výchozí implementaci je zdrojem časové základny časovač SysTick. Slouží ke generování přerušení v pravidelných časových intervalech. Jakmile je zavoláno HAL_ResumeTick(), přerušení SysTick bude povoleno, a tak se obnoví přírůstek Tick. Tato funkce je deklarována jako __weak, aby byla přepsána v případě jiných implementací v uživateli file.

HAL_GetHalVersion

Název funkce uint32_t HAL_GetHalVersion (void)

Popis funkce Vrací revizi HAL.

Návratové hodnoty ·

verze: : 0xXYZR (8 bitů pro každé desetinné místo, R pro RC)

HAL_GetREVID

Název funkce uint32_t HAL_GetREVID (void)

Popis funkce Vrací identifikátor revize zařízení.

Návratové hodnoty ·

Zařízení: identifikátor revize

HAL_GetDEVID

Název funkce uint32_t HAL_GetDEVID (void)

Popis funkce Vrací identifikátor zařízení.

Návratové hodnoty ·

Zařízení: identifikátor

HAL_GetUIDw0

Název funkce uint32_t HAL_GetUIDw0 (neplatný)

Popis funkce Vrací první slovo jedinečného identifikátoru zařízení (UID založené na 96 bitech)

Návratové hodnoty ·

Zařízení: identifikátor

HAL_GetUIDw1 Název funkce
uint32_t HAL_GetUIDw1 (neplatné)

UM3029 – Rev 1

strana 46/1419

UM3029
Popis API ovladače firmwaru HAL

Popis funkce Vrací druhé slovo jedinečného identifikátoru zařízení (UID založené na 96 bitech)

Návratové hodnoty ·

Zařízení: identifikátor

HAL_GetUIDw2

Název funkce uint32_t HAL_GetUIDw2 (neplatný)

Popis funkce Vrací třetí slovo jedinečného identifikátoru zařízení (UID založené na 96 bitech)

Návratové hodnoty ·

Zařízení: identifikátor

HAL_DBGMCU_EnableDBGStopMode

Název funkce void HAL_DBGMCU_EnableDBGStopMode (void)

Popis funkce Povolte ladicí modul během režimu STOP.

Návratové hodnoty ·

Žádný:

HAL_DBGMCU_DisableDBGStopMode

Název funkce void HAL_DBGMCU_DisableDBGStopMode (void)

Popis funkce Deaktivujte ladicí modul během režimu STOP.

Návratové hodnoty ·

Žádný:

HAL_DBGMCU_EnableDBGSstandbyMode

Název funkce void HAL_DBGMCU_EnableDBGSstandbyMode (void )

Popis funkce Povolte modul ladění v režimu STANDBY.

Návratové hodnoty ·

Žádný:

HAL_DBGMCU_DisableDBGSStandbyMode Název funkce
void HAL_DBGMCU_DisableDBGSstandbyMode (void ) Popis funkce
V režimu STANDBY deaktivujte ladicí modul.

UM3029 – Rev 1

strana 47/1419

UM3029
Popis API ovladače firmwaru HAL

Návratové hodnoty ·

Žádný:

HAL_SYSCFG_EnableIOAnalogSwitchBooster

Název funkce void HAL_SYSCFG_EnableIOAnalogSwitchBooster (void)

Popis funkce Povolení analogového spínače I/O voltage posilovač.

Návratové hodnoty ·

Žádný:

HAL_SYSCFG_DisableIOAnalogSwitchBooster

Název funkce void HAL_SYSCFG_DisableIOAnalogSwitchBooster (void)

Popis funkce Deaktivujte I/O analogový přepínač voltage posilovač.

Návratové hodnoty ·

Žádný:

HAL_SYSCFG_EnableRemap

Název funkce void HAL_SYSCFG_EnableRemap (uint32_t PinRemap)

Popis funkce Povolte přemapování na PA11_PA12.

Parametry ·

PinRemap: určuje, které piny je třeba přemapovat Tento parametr může být libovolnou kombinací následujících hodnot:
SYSCFG_REMAP_PA11
SYSCFG_REMAP_PA12

Návratové hodnoty ·

Žádný:

HAL_SYSCFG_DisableRemap

Název funkce void HAL_SYSCFG_DisableRemap (uint32_t PinRemap)

Popis funkce Zakažte přemapování na PA11_PA12.

Parametry ·

PinRemap: určuje, které piny se budou chovat normálně Tento parametr může být libovolnou kombinací následujících hodnot:
SYSCFG_REMAP_PA11
SYSCFG_REMAP_PA12

UM3029 – Rev 1

strana 48/1419

UM3029
Ovladač firmwaru HAL definuje

Návratové hodnoty ·

Žádný:

HAL_SYSCFG_SetPinBinding

Název funkce void HAL_SYSCFG_SetPinBinding (uint32_t pin_binding)

Popis funkce Set Pin Binding.

Parametry ·

pin_binding: určuje, který pin bude vázat konkrétní GPIO pro každý balíček matrice Tento parametr může být libovolnou kombinací HAL_BIND_xx definuje

Návratové hodnoty ·

Žádný:

HAL_SYSCFG_GetPinBinding

Název funkce uint32_t HAL_SYSCFG_GetPinBinding (void )

Popis funkce return Konfigurace Pin Binding

Návratové hodnoty ·

PinMux: konfigurace

6.2

Ovladač firmwaru HAL definuje

V následující části jsou uvedeny různé definice a makra modulu.

6.2.1

HAL Konfigurace HAL Bind Pin

HAL_BIND_WLCSP14_PINF2_PA1 STM32C031 Balíček WLCSP14, PinF2 přiřazený k GPIO PA1

HAL_BIND_WLCSP14_PINF2_PA2 STM32C031 Balíček WLCSP14, PinF2 přiřazený k GPIO PA2

HAL_BIND_WLCSP14_PING3_PF2 STM32C031 Balíček WLCSP14, PinG3 přiřazený k GPIO PF2

HAL_BIND_WLCSP14_PING3_PA0 STM32C031 Balíček WLCSP14, PinG3 přiřazený k GPIO PA0

HAL_BIND_WLCSP14_PINJ1_PA8 STM32C031 Balíček WLCSP14, PinJ1 přiřazený k GPIO PA8

HAL_BIND_WLCSP14_PINJ1_PA11 STM32C031 Balíček WLCSP14, PinJ1 přiřazený k GPIO PA11

HAL_BIND_WLCSP14_PINH2_PA5 STM32C031 Balíček WLCSP14, PinH2 přiřazený k GPIO PA5

UM3029 – Rev 1

strana 49/1419

HAL_BIND_WLCSP14_PINH2_PA6 STM32C031 Balíček WLCSP14, PinH2 přiřazený k GPIO PA6
HAL_BIND_WLCSP14_PING1_PA7 STM32C031 Balíček WLCSP14, PinG1 přiřazený k GPIO PA7
HAL_BIND_WLCSP14_PING1_PA12 STM32C031 Balíček WLCSP14, PinG1 přiřazený k GPIO PA12
HAL_BIND_WLCSP14_PINJ3_PA3 STM32C031 Balíček WLCSP14, PinJ3 přiřazený k GPIO PA3
HAL_BIND_WLCSP14_PINJ3_PA4 STM32C031 Balíček WLCSP14, PinJ3 přiřazený k GPIO PA4
Výběr signálu obálky IR modulace HAL_SYSCFG_IRDA_ENV_SEL_TIM16
00: Timer16 je vybrán jako zdroj obálky IR modulace HAL_SYSCFG_IRDA_ENV_SEL_USART1
01: USART1 je vybrán jako zdroj obálky IR modulace HAL_SYSCFG_IRDA_ENV_SEL_USART2
10: USART2 je vybrán jako zdroj obálky IR modulace
Volba polarity IR výstupu HAL_SYSCFG_IRDA_POLARITY_NOT_INVERTED
00: Polarita IR výstupu není invertována HAL_SYSCFG_IRDA_POLARITY_INVERTED
01: Invertovaná polarita IR výstupu
HAL ISR Wrapper HAL_SYSCFG_ITLINE0
Interní definice pro zpracování maker HAL_SYSCFG_ITLINE2
Interní definice pro zpracování maker HAL_SYSCFG_ITLINE3
Interní definice pro zpracování maker HAL_SYSCFG_ITLINE4
Interní definice pro zpracování maker HAL_SYSCFG_ITLINE5
Interní definice pro zpracování maker HAL_SYSCFG_ITLINE6
Interní definice pro zpracování maker HAL_SYSCFG_ITLINE7
Interní definice pro zpracování maker
UM3029 – Rev 1

UM3029
Ovladač firmwaru HAL definuje
strana 50/1419

HAL_SYSCFG_ITLINE9 Interní definice pro zpracování maker
HAL_SYSCFG_ITLINE10 Interní definice pro zpracování maker
HAL_SYSCFG_ITLINE11 Interní definice pro zpracování maker
HAL_SYSCFG_ITLINE12 Interní definice pro zpracování maker
HAL_SYSCFG_ITLINE13 Interní definice pro zpracování maker
HAL_SYSCFG_ITLINE14 Interní definice pro zpracování maker
HAL_SYSCFG_ITLINE16 Interní definice pro zpracování maker
HAL_SYSCFG_ITLINE19 Interní definice pro zpracování maker
HAL_SYSCFG_ITLINE21 Interní definice pro zpracování maker
HAL_SYSCFG_ITLINE22 Interní definice pro zpracování maker
HAL_SYSCFG_ITLINE23 Interní definice pro zpracování maker
HAL_SYSCFG_ITLINE25 Interní definice pro zpracování maker
HAL_SYSCFG_ITLINE27 Interní definice pro zpracování maker
HAL_SYSCFG_ITLINE28 Interní definice pro zpracování maker
HAL_ITLINE_WWDG Přerušení WWDG
HAL_ITLINE_RTC RTC přerušení
HAL_ITLINE_FLASH_ITF Přerušení Flash ITF
HAL_ITLINE_CLK_CTRL Přerušení řízení CLK
HAL_ITLINE_EXTI0 Externí přerušení 0
UM3029 – Rev 1

UM3029
Ovladač firmwaru HAL definuje
strana 51/1419

HAL_ITLINE_EXTI1 Externí přerušení 1
HAL_ITLINE_EXTI2 Externí přerušení 2
HAL_ITLINE_EXTI3 Externí přerušení 3
HAL_ITLINE_EXTI4 Přerušení EXTI4
HAL_ITLINE_EXTI5 Přerušení EXTI5
HAL_ITLINE_EXTI6 Přerušení EXTI6
HAL_ITLINE_EXTI7 Přerušení EXTI7
HAL_ITLINE_EXTI8 Přerušení EXTI8
HAL_ITLINE_EXTI9 Přerušení EXTI9
HAL_ITLINE_EXTI10 Přerušení EXTI10
HAL_ITLINE_EXTI11 Přerušení EXTI11
HAL_ITLINE_EXTI12 Přerušení EXTI12
HAL_ITLINE_EXTI13 Přerušení EXTI13
HAL_ITLINE_EXTI14 Přerušení EXTI14
HAL_ITLINE_EXTI15 Přerušení EXTI15
HAL_ITLINE_DMA1_CH1 Přerušení kanálu 1 DMA1
HAL_ITLINE_DMA1_CH2 Přerušení kanálu 1 DMA2
HAL_ITLINE_DMA1_CH3 Přerušení kanálu 1 DMA3
HAL_ITLINE_DMAMUX Přerušení DMAMUX
UM3029 – Rev 1

UM3029
Ovladač firmwaru HAL definuje
strana 52/1419

Přerušení HAL_ITLINE_ADC ADC
HAL_ITLINE_TIM1_BRK Přerušení TIM1 BRK
Přerušení HAL_ITLINE_TIM1_UPD TIM1 UPD
HAL_ITLINE_TIM1_TRG Přerušení TIM1 TRG
HAL_ITLINE_TIM1_CCU TIM1 CCU přerušení
HAL_ITLINE_TIM3 Přerušení TIM3
HAL_ITLINE_TIM14 Přerušení TIM14
HAL_ITLINE_TIM16 Přerušení TIM16
HAL_ITLINE_TIM17 Přerušení TIM17
HAL_ITLINE_I2C1 Přerušení I2C1
HAL_ITLINE_SPI1 Přerušení SPI1
HAL_ITLINE_USART1 USART1 GLB přerušení
HAL_ITLINE_USART2 USART2 GLB přerušení
Přemapování pinů SYSCFG_REMAP_PA11
PA11 pad se chová digitálně jako PA9 GPIO pin SYSCFG_REMAP_PA12
PA12 pad se chová digitálně jako PA10 GPIO pin
Definice stavu HAL HAL_SMBUS_STATE_RESET
SMBUS ještě není inicializován nebo zakázán HAL_SMBUS_STATE_READY
SMBUS inicializován a připraven k použití HAL_SMBUS_STATE_BUSY
Interní proces SMBUS probíhá
UM3029 – Rev 1

UM3029
Ovladač firmwaru HAL definuje
strana 53/1419

UM3029
Ovladač firmwaru HAL definuje
HAL_SMBUS_STATE_MASTER_BUSY_TX Proces přenosu kmenových dat probíhá
Proces příjmu kmenových dat HAL_SMBUS_STATE_MASTER_BUSY_RX probíhá
HAL_SMBUS_STATE_SLAVE_BUSY_TX Proces přenosu dat Slave probíhá
HAL_SMBUS_STATE_SLAVE_BUSY_RX Proces příjmu dat Slave probíhá
Stav časového limitu HAL_SMBUS_STATE_TIMEOUT
HAL_SMBUS_STATE_ERROR Proces příjmu probíhá
HAL_SMBUS_STATE_LISTEN Režim naslouchání adres probíhá
Zaškrtněte Frekvence HAL_TICK_FREQ_10HZ
HAL_TICK_FREQ_100 Hz
HAL_TICK_FREQ_1KHZ
HAL_TICK_FREQ_DEFAULT
Režim spouštění SYSCFG_BOOT_MAINFLASH
Hlavní paměť Flash mapovaná na 0x0000 0000 SYSCFG_BOOT_SYSTEMFLASH
Systémová paměť Flash mapovaná na 0x0000 0000 SYSCFG_BOOT_SRAM
Vestavěná SRAM mapovaná na 0x0000 0000
Přerušit SYSCFG_BREAK_LOCKUP
Povoluje a zamyká výstup LOCKUP CortexM0+ s Break Input TIM1/16/17
Exportovaná makra SYSCFG __HAL_GET_PENDING_IT
Poznámky: · Povolit určení zdroje přerušení na řádek.
__HAL_SYSCFG_REMAPMEMORY_FLASH
__HAL_SYSCFG_REMAPMEMORY_SYSTEMFLASH

UM3029 – Rev 1

strana 54/1419

UM3029
Ovladač firmwaru HAL definuje
__HAL_SYSCFG_REMAPMEMORY_SRAM
__HAL_SYSCFG_GET_BOOT_MODE Popis: · Vraťte režim spouštění podle konfigurace uživatelem. Návratová hodnota: · Režim spouštění podle konfigurace uživatelem. Vrácená hodnota může být jedna z následujících hodnot
__HAL_SYSCFG_BREAK_LOCKUP_LOCK Poznámky: · Vybraná konfigurace je uzamčena a lze ji odemknout pouze resetem systému. Povoluje a zamyká připojení výstupu Cortex-M0+ LOCKUP (Hardfault) ke vstupu TIM1/16/17 Break
__HAL_SYSCFG_FASTMODEPLUS_ENABLE Popis: · Možnost řízení v rychlém režimu Plus povoluje/zakazuje makra. Parametry: · __FASTMODEPLUS__: Tento parametr může mít hodnotu
__HAL_SYSCFG_FASTMODEPLUS_DISABLE
__HAL_SYSCFG_IRDA_ENV_SELECTION Popis: · výběr makra signálu modulační obálky pomocí bitů [7:6] registru SYSCFG_CFGR1 Parametry: · __SOURCE__: Tento parametr může mít hodnotu
__HAL_SYSCFG_GET_IRDA_ENV_SELECTION
__HAL_SYSCFG_IRDA_OUT_POLARITY_SELECTION Popis: · Výběr polarity IROut pomocí bitu[5] registru SYSCFG_CFGR1. Parametry: · __SEL__: Tento parametr může mít hodnotu
__HAL_SYSCFG_GET_POLARITY Popis: · Vraťte režim polarity IROut podle konfigurace uživatelem. Návratová hodnota: · Polarita IROut podle konfigurace uživatelem. Vrácená hodnota může být jedna z
__HAL_SYSCFG_BREAK_ENABLE Popis: · Přerušit vstup do funkce TIM1/16/17 povolit/zakázat makra. Parametry: · __BREAK__: Tento parametr může mít hodnotu
__HAL_SYSCFG_BREAK_DISABLE
Rychlý režim Plus na GPIO
SYSCFG_FASTMODEPLUS_PB6 Povolí rychlý režim Plus na PB6

UM3029 – Rev 1

strana 55/1419

SYSCFG_FASTMODEPLUS_PB7 Povolí rychlý režim Plus na PB7
SYSCFG_FASTMODEPLUS_PB8 Povolí rychlý režim Plus na PB8
SYSCFG_FASTMODEPLUS_PB9 Povolí rychlý režim Plus na PB9
SYSCFG_FASTMODEPLUS_PA9 Povolí rychlý režim Plus na PA9
SYSCFG_FASTMODEPLUS_PA10 Povolí rychlý režim Plus na PA10
SYSCFG_FASTMODEPLUS_PC14 Povolí rychlý režim Plus na PC14
Aktivace rychlého režimu Plus pro I2Cx SYSCFG_FASTMODEPLUS_I2C1
Povolte rychlý režim Plus na I2C1

UM3029
Ovladač firmwaru HAL definuje

UM3029 – Rev 1

strana 56/1419

7

Generický ovladač HAL ADC

UM3029
Generický ovladač HAL ADC

7.1
7.1.1
7.1.2

Ovladač firmwaru ADC registruje struktury
ADC_OversamplingTypeDef ADC_OversamplingTypeDef je definován v datových polích stm32c0xx_hal_adc.h · poměr uint32_t · uint32_t RightBitShift · uint32_t Dokumentace pole TriggeredMode · uint32_t ADC_OversamplingTypeDef::Poměr
Konfiguruje oversampling poměr. Tento parametr může mít hodnotu ADC_HAL_EC_OVS_RATIO · uint32_t ADC_OversamplingTypeDef::RightBitShift
Konfiguruje koeficient dělení pro Oversampler. Tento parametr může mít hodnotu ADC_HAL_EC_OVS_SHIFT · uint32_t ADC_OversamplingTypeDef::TriggeredMode Vybírá pravidelně spouštěné oversampling režimu. Tento parametr může mít hodnotu ADC_HAL_EC_OVS_DISCONT_MODE
ADC_InitTypeDef ADC_InitTypeDef je definováno v datových polích stm32c0xx_hal_adc.h · uint32_t ClockPrescaler · uint32_t rozlišení · uint32_t DataAlign · uint32_t ScanConvMode · uint32_t Funkce uint32_t EOCSePower Auto State ContinuousConvMode · uint32_t NbrOfConversion · FunctionalState DiscontinuousConvMode · uint32_t ExternalTrigConv · uint32_t ExternalTrigConvEdge · FunctionalState DMAContinuousRequests · přetečení uint32_t · uintXNUMX_t SamplingTimeCommon1 · uint32_t SamplingTimeCommon2 · FunctionalState OversamplingMode · ADC_OversamplingTypeDef Oversampling · uint32_t Dokumentace pole TriggerFrequencyMode

UM3029 – Rev 1

strana 57/1419

UM3029
Ovladač firmwaru ADC registruje struktury
· uint32_t ADC_InitTypeDef::ClockPrescaler
Vyberte zdroj hodin ADC (synchronní hodiny odvozené od hodin APB nebo asynchronní hodiny odvozené od systémových hodin nebo PLL (seznam dostupných hodin naleznete v referenční příručce)) a předděličku hodin. Tento parametr může mít hodnotu ADC_HAL_EC_COMMON_CLOCK_SOURCE. Poznámka: Konfigurace hodin ADC je společná pro všechny instance ADC. Poznámka: V případě režimu synchronních hodin založených na HCLK/1 musí být konfigurace povolena pouze v případě, že systémové hodiny mají 50% pracovní cyklus (APB předdělička nakonfigurovaná uvnitř RCC musí být vynechána a PCLK hodiny musí mít 50% pracovní cyklus) . Podrobnosti naleznete v referenční příručce. Poznámka: V případě použití asynchronních hodin musí být vybrané hodiny předběžně povoleny na nejvyšší úrovni RCC. Poznámka: Tento parametr lze upravit pouze v případě, že jsou zakázány všechny instance ADC.
· uint32_t ADC_InitTypeDef::Resolution
Nakonfigurujte rozlišení ADC. Tento parametr může mít hodnotu ADC_HAL_EC_RESOLUTION
· uint32_t ADC_InitTypeDef::DataAlign
Zadejte zarovnání dat ADC v registru dat konverze (vpravo nebo vlevo). Formáty zarovnání a rozlišení najdete v referenční příručce. Tento parametr může mít hodnotu ADC_HAL_EC_DATA_ALIGN
· uint32_t ADC_InitTypeDef::ScanConvMode
Nakonfigurujte sekvencer ADC skupiny regular. U této řady STM32, ADC group regular sekvencer, jsou k dispozici oba režimy „plně konfigurovatelné“ nebo „ne plně konfigurovatelné“:
sekvencer nakonfigurován tak, aby byl plně konfigurovatelný: délka sekvenceru a ovlivnění každé úrovně kanálu jsou konfigurovatelné.
Délka sekvence: Nastavte počet úrovní v sekvenci skenování.
Směr sekvence: Pokud není uvedeno v parametrech, směr skenování sekvenceru je vpřed (od úrovně 1 do úrovně n).
sekvencer nakonfigurován tak, aby nebyl plně konfigurovatelný: délka sekvenceru a ovlivnění každé hodnosti kanálu jsou pevně dané HW číslem kanálu.
Délka sekvence: Počet ranků v sekvenci skenování je určen počtem kanálů nastaveným v sekvenci, pořadí každého kanálu je pevně dané HW číslem kanálu. (kanál 0 pevně nastaven na úrovni 0, kanál 1 pevně na úrovni 1, …).
Směr sekvence: Pokud není uvedeno v parametrech, směr skenování sekvenceru je vpřed (od nejnižšího čísla kanálu po nejvyšší číslo kanálu). Tento parametr lze přidružit k parametru 'DiscontinuousConvMode', aby byla hlavní sekvence rozdělena do po sobě jdoucích částí. Sekvencer je automaticky povolen, pokud je nastaveno několik kanálů (sekvenátor nelze deaktivovat, jako tomu může být u jiných zařízení STM32): Pokud je nastaven pouze 1 kanál: Převod se provádí v jediném režimu. Pokud je nastaveno několik kanálů: Konverze se provádějí v sekvenčním režimu. Tento parametr může být hodnotou ADC_Scan_mode
· uint32_t ADC_InitTypeDef::EOCSelection
Určete, který příznak EOC (End Of Conversion) se použije pro převod dotazováním a přerušením: konec převodu jednotek nebo převod konce sekvence. Tento parametr může být hodnotou ADC_EOCSelection.
· FunctionalState ADC_InitTypeDef::LowPowerAutoWait
Vyberte dynamické automatické zpoždění s nízkou spotřebou: nová konverze se spustí pouze tehdy, když byla předchozí konverze (pro skupinu ADC běžná) načtena uživatelským softwarem pomocí funkce HAL_ADC_GetValue(). Tato funkce automaticky přizpůsobuje frekvenci spouštění konverzí ADC rychlosti systému, který čte data. Navíc se tím zabrání riziku překročení u nízkofrekvenčních aplikací. Tento parametr lze nastavit na ENABLE nebo DISABLE. Poznámka: Nedoporučuje se používat s přerušením nebo DMA (HAL_ADC_Start_IT(), HAL_ADC_Start_DMA()), protože tyto režimy musí okamžitě vymazat příznak EOC (CPU pro uvolnění čekající události IRQ nebo DMA). Automatické čekání bude fungovat, ale po velmi krátkou dobu, čímž se zahazuje jeho zamýšlená výhoda (kromě specifického případu vysokého zatížení CPU nebo DMA přenosů, které mohou ospravedlnit použití automatického čekání). Použijte s dotazováním: 1. Spusťte konverzi pomocí HAL_ADC_Start(), 2. Později, když jsou potřeba data konverze ADC: použijte HAL_ADC_PollForConversion() k zajištění dokončení konverze a HAL_ADC_GetValue() k načtení výsledku konverze a spuštění dalšího spuštění konverze.
· FunctionalState ADC_InitTypeDef::LowPowerAutoPowerOff
Vyberte režim automatického vypnutí: ADC se po konverzi automaticky vypne a automaticky se probudí, když je spuštěna nová konverze (s časem spuštění mezi spuštěním a začátkem sampling). Tuto funkci lze kombinovat s režimem automatického čekání (parametr 'LowPowerAutoWait'). Tento parametr lze nastavit na ENABLE nebo DISABLE. Poznámka: Pokud je povolena, tato funkce také vypne vyhrazený 14 MHz RC oscilátor ADC (HSI14)

UM3029 – Rev 1

strana 58/1419

UM3029
Ovladač firmwaru ADC registruje struktury
· FunctionalState ADC_InitTypeDef::ContinuousConvMode
Určete, zda se konverze provádí v jednoduchém režimu (jedna konverze) nebo v nepřetržitém režimu pro běžnou skupinu ADC poté, co došlo k prvnímu spuštění konverze ADC (softwarové spuštění nebo externí spuštění). Tento parametr lze nastavit na ENABLE nebo DISABLE.
· uint32_t ADC_InitTypeDef::NbrOfConversion
Zadejte počet ranků, které budou převedeny v rámci běžného skupinového sekvenceru. Tento parametr je závislý na ScanConvMode:
sekvencer nakonfigurován na plně konfigurovatelný: Počet úrovní v sekvenci skenování je konfigurovatelný pomocí tohoto parametru. Poznámka: Po prvním volání 'HAL_ADC_Init()' musí být každá úroveň odpovídající parametru „NbrOfConversion“ nastavena pomocí 'HAL_ADC_ConfigChannel()'. Poté, když jsou nastaveny všechny potřebné úrovně sekvenceru, může být parametr 'NbrOfConversion' aktualizován bez úpravy konfigurace úrovní sekvenceru (řady sekvenceru nad 'NbrOfConversion' jsou vyřazeny).
sekvencer nakonfigurovaný tak, aby nebyl plně konfigurovatelný: Počet úrovní v sekvenci skenování je definován počtem kanálů nastavených v sekvenci. Tento parametr je vyřazen. Tento parametr musí být číslo mezi Min_Data = 1 a Max_Data = 8. Poznámka: Tento parametr je nutné upravit, pokud neprobíhá žádná konverze v běžné skupině (ADC deaktivováno nebo ADC povoleno bez kontinuálního režimu nebo externího spouštěče, který by mohl spustit konverzi) .
· FunctionalState ADC_InitTypeDef::DiscontinuousConvMode
Určete, zda se sekvence konverzí skupiny ADC regular provádí v Complete-sequence/ Discontinuous-sequence (hlavní sekvence rozdělená do po sobě jdoucích částí). Diskontinuální režim se používá pouze v případě, že je povolen sekvencer (parametr 'ScanConvMode'). Pokud je sekvencer zakázán, je tento parametr vyřazen. Diskontinuální režim lze aktivovat pouze v případě, že je kontinuální režim zakázán. Pokud je povolen nepřetržitý režim, toto nastavení parametru se zruší. Tento parametr lze nastavit na ENABLE nebo DISABLE. Poznámka: U této řady STM32 je pravidelný počet přírůstků nespojitých řad ADC skupiny pevně nastaven na jeden po druhém.
· uint32_t ADC_InitTypeDef::ExternalTrigConv
Vyberte externí zdroj události použitý ke spuštění pravidelného spuštění konverze skupiny ADC. Pokud je nastaveno na ADC_SOFTWARE_START, externí spouštěče jsou zakázány a místo nich se používá spouštěcí software. Tento parametr může být hodnotou ADC_regular_external_trigger_source. Upozornění: externí zdroj spouštění je společný pro všechny instance ADC.
· uint32_t ADC_InitTypeDef::ExternalTrigConvEdge
Vyberte okraj externí události, který se používá ke spuštění pravidelného spuštění konverze skupiny ADC. Pokud je zdroj spouštění nastaven na ADC_SOFTWARE_START, je tento parametr vyřazen. Tento parametr může být hodnotou ADC_regular_external_trigger_edge
· FunctionalState ADC_InitTypeDef::DMAContinuousRequests
Určete, zda jsou požadavky DMA prováděny v režimu jednoho záběru (přenos DMA se zastaví při dosažení počtu konverzí) nebo v nepřetržitém režimu (přenos DMA neomezený, bez ohledu na počet konverzí). Tento parametr lze nastavit na ENABLE nebo DISABLE. Poznámka: V nepřetržitém režimu musí být DMA nakonfigurováno v kruhovém režimu. V opačném případě bude při dosažení ukazatele maxima vyrovnávací paměti DMA spuštěno přetečení.
· uint32_t ADC_InitTypeDef::Overrun
Vyberte chování v případě přetečení: data přepsána nebo zachována (výchozí). Tento parametr může mít hodnotu ADC_HAL_EC_REG_OVR_DATA_BEHAVIOR. Poznámka: V případě přetečení nastaveného na data zachována a použití s ​​programovacím modelem s přerušením (HAL_Start_IT()): ADC IRQ handler musí vymazat koncové konverzní příznaky, to vyvolá uvolnění zachovaných dat. V případě potřeby mohou být tato data uložena ve funkci HAL_ADC_ConvCpltCallback(), umístěná v kódu uživatelského programu (volána před vymazáním příznaků konverze). Poznámka: Hlášení chyb s ohledem na režim konverze:
Použití s ​​převodem ADC pomocí dotazování na událost nebo přerušení: Chyba je hlášena pouze v případě, že je překročení nastaveno na zachování dat. Pokud je překročení nastaveno na přepsání dat, uživatel nemůže dobrovolně přečíst všechna převedená data, což není považováno za chybný případ.
Použití s ​​ADC konverzí pomocí DMA: Chyba je hlášena bez ohledu na nastavení přetečení (DMA se očekává, že zpracuje všechna data z datového registru).

UM3029 – Rev 1

strana 59/1419

7.1.3

UM3029
Ovladač firmwaru ADC registruje struktury
· uint32_t ADC_InitTypeDef::SamplingTimeCommon1 Set sampdoba trvání společná pro skupinu kanálů. Jednotka: Hodinové cykly ADC Doba převodu je součet sampdoba zpracování a doba zpracování (12.5 hodinových cyklů ADC při rozlišení ADC 12 bitů, 10.5 cyklů při 10 bitech, 8.5 cyklů při 8 bitech, 6.5 cyklů při 6 bitech). Poznámka: Na této rodině STM32 jsou dvě různé sampPokud jsou k dispozici nastavení doby trvání, každý kanál může použít jedno z těchto dvou nastavení. Na některých jiných zařízeních STM32 je tento parametr v kanálu a je umístěn ve struktuře inicializace kanálu ADC. Tento parametr může mít hodnotu ADC_HAL_EC_CHANNEL_SAMPLINGTIME Poznámka: V případě použití interních měřicích kanálů (VrefInt/Vbat/TempSensor), sampmusí být respektována časová omezení (napřampčas lze upravit ve funkci hodin ADC a sampling time setting) Hodnoty časování, parametry TS_vrefint, TS_vbat, TS_temp (hrubé pořadí hodnot: několik desítek mikrosekund) naleznete v datovém listu zařízení.
· uint32_t ADC_InitTypeDef::SamplingTimeCommon2 Set sampčas prodlevy společný pro skupinu kanálů, možné druhé společné nastavení. Jednotka: Hodinové cykly ADC Doba převodu je součet sampdoba zpracování a doba zpracování (12.5 hodinových cyklů ADC při rozlišení ADC 12 bitů, 10.5 cyklů při 10 bitech, 8.5 cyklů při 8 bitech, 6.5 cyklů při 6 bitech). Poznámka: Na této rodině STM32 jsou dvě různé sampPokud jsou k dispozici nastavení doby trvání, každý kanál může použít jedno z těchto dvou nastavení. Na některých jiných zařízeních STM32 je tento parametr v kanálu a je umístěn ve struktuře inicializace kanálu ADC. Tento parametr může mít hodnotu ADC_HAL_EC_CHANNEL_SAMPLINGTIME Poznámka: V případě použití interních měřicích kanálů (VrefInt/Vbat/TempSensor), sampmusí být respektována časová omezení (napřampčas lze upravit ve funkci hodin ADC a sampling time setting) Hodnoty časování, parametry TS_vrefint, TS_vbat, TS_temp (hrubé pořadí hodnot: několik desítek mikrosekund) naleznete v datovém listu zařízení.
· FunctionalState ADC_InitTypeDef::OversamplingMode Určete, zda jsou oversampfunkce je povolena nebo zakázána. Tento parametr lze nastavit na ENABLE nebo DISABLE. Poznámka: Tento parametr lze upravit pouze v případě, že na normální skupině ADC neprobíhá žádná konverze.
· ADC_OversamplingTypeDef ADC_InitTypeDef::Oversampling Určete Oversampling parametry. Upozornění: toto nastavení přepíše předchozí nastaveníampling konfigurace v případě překročeníampling je již povolen.
· uint32_t ADC_InitTypeDef::TriggerFrequencyMode Nastaví režim spouštěcí frekvence ADC. Tento parametr může mít hodnotu ADC_HAL_EC_REG_TRIGGER_FREQ. Poznámka: Režim spouštěcí frekvence ADC musí být nastaven na nízkou frekvenci, když je překročena doba trvání před událostí spuštění konverze ADC (mezi aktivací ADC a událostí spuštění konverze ADC nebo mezi dvěma událostmi spuštění konverze ADC). Hodnota trvání: Viz datový list zařízení, parametr „tIdle“. Poznámka: Když je režim spouštěcí frekvence ADC nastaven na nízkou frekvenci, před spuštěním převodu ADC se vloží několik cyklů přezbrojení, což vyvolá zpoždění 2 hodinových cyklů ADC.
ADC_ChannelConfTypeDef ADC_ChannelConfTypeDef je definován v datových polích stm32c0xx_hal_adc.h
· uint32_t kanál · uint32_t pořadí · uint32_t SamplingTime
Terénní dokumentace
· uint32_t ADC_ChannelConfTypeDef::Channel Zadejte kanál, který chcete nakonfigurovat, do běžné skupiny ADC. Tento parametr může mít hodnotu ADC_HAL_EC_CHANNEL Poznámka: V závislosti na zařízení a instancích ADC nemusí být některé kanály dostupné na pinech balíčku zařízení. Dostupnost kanálů naleznete v datovém listu zařízení.
· uint32_t ADC_ChannelConfTypeDef::Rank Přidejte nebo odeberte kanál z běžného skupinového sekvenceru ADC a určete jeho konverzi. Tento parametr je závislý na ScanConvMode:
sekvencer nakonfigurovaný tak, aby byl plně konfigurovatelný: Řazení kanálů do každé úrovně sekvence skenování: jakýkoli kanál lze umístit do jakékoli úrovně.
sekvencer nakonfigurovaný tak, aby nebyl plně konfigurovatelný: rank každého kanálu je pevně stanoven HW číslem kanálu. (kanál 0 pevně nastaven na úrovni 0, kanál 1 pevně na úrovni 1, …). Přestože je rank kanálu pevně daný, tento parametr umožňuje další možnost: odstranit vybraný rank (vybraný kanál) ze sekvenceru. Tento parametr může mít hodnotu ADC_HAL_EC_REG_SEQ_RANKS

UM3029 – Rev 1

strana 60/1419

7.1.4

UM3029
Ovladač firmwaru ADC registruje struktury
· uint32_t ADC_ChannelConfTypeDef::SamplingTime
Samphodnotu času, která se má nastavit pro vybraný kanál. Jednotka: Hodinové cykly ADC Doba převodu je součet sampdoba zpracování a doba zpracování (12.5 hodinových cyklů ADC při rozlišení ADC 12 bitů, 10.5 cyklů při 10 bitech, 8.5 cyklů při 8 bitech, 6.5 cyklů při 6 bitech). Tento parametr může mít hodnotu ADC_HAL_EC_SAMPLINGTIME_COMMON Poznámka: Na této rodině STM32 jsou dvě různé sampK dispozici jsou nastavení doby trvání (viz parametry „SamplingTimeCommon1“ a „SamplingTimeCommon2”), každý kanál může používat jedno z těchto dvou nastavení. Poznámka: V případě použití interních měřicích kanálů (VrefInt/Vbat/TempSensor), sampmusí být respektována časová omezení (napřampčas lze upravit ve funkci hodin ADC a sampnastavení doby trvání) Hodnoty časování naleznete v datovém listu zařízení.
ADC_AnalogWDGConfTypeDef ADC_AnalogWDGConfTypeDef je definován v stm32c0xx_hal_adc.h
Datová pole
· uint32_t WatchdogNumber
· uint32_t WatchdogMode
· Kanál uint32_t
· FunctionalState ITMode
· uint32_t HighThreshold
· uint32_t LowThreshold
Terénní dokumentace
· uint32_t ADC_AnalogWDGConfTypeDef::WatchdogNumber
Vyberte, který analogový hlídač ADC monitoruje vybraný kanál. Pro Analog Watchdog 1: Lze monitorovat pouze 1 kanál (nebo celkovou skupinu kanálů nastavením parametru 'WatchdogMode') Pro Analog Watchdog 2 a 3: Lze monitorovat několik kanálů (následným voláním 'HAL_ADC_AnalogWDGConfig()' pro každý kanál) Tento parametr může mít hodnotu ADC_HAL_EC_AWD_NUMBER.
· uint32_t ADC_AnalogWDGConfTypeDef::WatchdogMode
Nakonfigurujte režim analogového hlídače ADC: jeden/všechny/žádné kanály. Pro Analog Watchdog 1: Nakonfigurujte režim analogového watchdogu ADC: jeden kanál nebo všechny kanály, skupina ADC běžná. Pro Analog Watchdog 2 a 3: Několik kanálů lze monitorovat postupným aplikováním inicializační struktury AWD. Tento parametr může být hodnotou ADC_analog_watchdog_mode.
· uint32_t ADC_AnalogWDGConfTypeDef::Kanál
Vyberte, který kanál ADC bude monitorován analogovým hlídačem. Pro Analog Watchdog 1: Tento parametr má vliv pouze v případě, že je parametr 'WatchdogMode' nakonfigurován na jednom kanálu (může být monitorován pouze 1 kanál). Pro Analog Watchdog 2 a 3: Lze monitorovat několik kanálů. Chcete-li použít tuto funkci, volejte postupně funkci HAL_ADC_AnalogWDGConfig() pro každý kanál, který chcete přidat (nebo odebrat s hodnotou 'ADC_ANALOGWATCHDOG_NONE'). Tento parametr může mít hodnotu ADC_HAL_EC_CHANNEL.
· FunctionalState ADC_AnalogWDGConfTypeDef::ITMode
Určete, zda je analogový watchdog nakonfigurován v režimu přerušení nebo dotazování. Tento parametr lze nastavit na ENABLE nebo DISABLE
· uint32_t ADC_AnalogWDGConfTypeDef::HighThreshold
Nakonfigurujte horní prahovou hodnotu analogového hlídače ADC. V závislosti na zvoleném rozlišení ADC (12, 10, 8 nebo 6 bitů) musí být tento parametr číslem mezi Min_Data = 0x000 a Max_Data = 0xFFF, 0x3FF, 0xFF nebo 0x3F. Poznámka: Analogový watchdog 2 a 3 je omezen na rozlišení 8 bitů: pokud je rozlišení ADC 12 bitů, 4 LSB jsou ignorovány, pokud je rozlišení ADC 10 bitů, 2 LSB jsou ignorovány. Poznámka: Pokud ADC překročíampje povoleno, jsou ovlivněny prahové hodnoty analogového hlídacího obvodu ADC: porovnání prahových hodnot analogového hlídacího zařízení se provádí na oversampkonečný výpočet (po aplikaci poměru a posunu): bitové pole datového registru ADC [15:4] (12 nejvýznamnějších bitů).
· uint32_t ADC_AnalogWDGConfTypeDef::LowThreshold
Konfiguruje dolní prahovou hodnotu analogového hlídače ADC. V závislosti na zvoleném rozlišení ADC (12, 10, 8 nebo 6 bitů) musí být tento parametr číslem mezi Min_Data = 0x000 a Max_Data = 0xFFF, 0x3FF, 0xFF nebo 0x3F. Poznámka: Analogový watchdog 2 a 3 je omezen na rozlišení 8 bitů: pokud je rozlišení ADC 12 bitů, 4 LSB jsou ignorovány, pokud je rozlišení ADC 10 bitů, 2 LSB jsou ignorovány. Poznámka: Pokud ADC překročíampje povoleno, jsou ovlivněny prahové hodnoty analogového hlídacího obvodu ADC: porovnání prahových hodnot analogového hlídacího zařízení se provádí na oversampkonečný výpočet (po aplikaci poměru a posunu): bitové pole datového registru ADC [15:4] (12 nejvýznamnějších bitů).

UM3029 – Rev 1

strana 61/1419

7.1.5

UM3029
Ovladač firmwaru ADC registruje struktury
__ADC_HandleTypeDef __ADC_HandleTypeDef je definováno v datových polích stm32c0xx_hal_adc.h · ADC_TypeDef * Instance · ADC_InitTypeDef Init · DMA_HandleTypeDef ·t DMA_Handle ·Ty HAL_Lock32 HAL_LockTy u __IO uint32_t ErrorCode · uint32_t ADCGroupRegularSequencerRanks · void(* ConvCpltCallback · void(* ConvHalfCpltCallback · void(* LevelOutOfWindowCallback · void(* ErrorCallbackWindu ·Void*C CallbackWindu void*C CallbackWindu void) LevelOutOfWindow2Callback · void(* EndOfSamplingCallback · void(* MspInitCallback · void(* Dokumentace pole MspDeInitCallback · ADC_TypeDef* __ADC_HandleTypeDef::Instance
Zaregistrujte základní adresu · ADC_InitTypeDef __ADC_HandleTypeDef::Init
Parametry inicializace ADC a nastavení pravidelných konverzí · DMA_HandleTypeDef* __ADC_HandleTypeDef::DMA_Handle
Pointer DMA Handler · HAL_LockTypeDef __ADC_HandleTypeDef::Lock
Uzamykací objekt ADC · __IO uint32_t __ADC_HandleTypeDef::State
Stav komunikace ADC (bitmapa stavů ADC) · __IO uint32_t __ADC_HandleTypeDef::ErrorCode
Kód chyby ADC · uint32_t __ADC_HandleTypeDef::ADCGroupRegularSequencerRanks
ADC group pravidelné ukládání nastavení ranků do paměti, používané v režimu „plně konfigurovatelné“ (viz parametr 'ScanConvMode') · void(* __ADC_HandleTypeDef::ConvCpltCallback)(struct __ADC_HandleTypeDef *hadc) ADC konverze kompletní zpětné volání · void(* __ADC_HandleTypeDef::ConvHalfCpltCallback)(struct __ADC_HandleTypeDef *hadc) ADC zpětné volání s polovičním přenosem DMA · void(* __ADC_HandleTypeDef::LevelOutOfWindowCallback)_struct _dogleThadc1 zpětné volání · void(* __ADC_HandleTypeDef::ErrorCallback)(struct __ADC_HandleTypeDef *hadc) zpětné volání chyby ADC · void(* __ADC_HandleTypeDef::LevelOutOfWindow2Callback)(structandle _Tdogy2_H) zpětné volání ADC void(* __ADC_HandleTypeDef::LevelOutOfWindow3Callback)(struct __ADC_HandleTypeDef *hadc) ADC analogové zpětné volání 3 · void(* __ADC_HandleTypeDef::EndOfSamplingCallback)(struct __ADC_HandleTypeDef *hadc) ADC konec sampzpětné volání

UM3029 – Rev 1

strana 62/1419

7.2
7.2.1
7.2.2

UM3029
Popis API ovladače ADC Firmware
· void(* __ADC_HandleTypeDef::MspInitCallback)(struct __ADC_HandleTypeDef *hadc) Zpětné volání ADC Msp Init
· void(* __ADC_HandleTypeDef::MspDeInitCallback)(struct __ADC_HandleTypeDef *hadc) Zpětné volání ADC Msp DeInit
Popis API ovladače ADC Firmware
V následující části jsou uvedeny různé funkce knihovny ADC.
Periferní funkce ADC
· 12bitové, 10bitové, 8bitové nebo 6bitové konfigurovatelné rozlišení. · Generování přerušení na konci běžného převodu a v případě analogového watchdogu nebo událostí přetečení. · Jednotlivé a nepřetržité režimy konverze. · Režim skenování pro konverzi několika kanálů za sebou. · Zarovnání dat s vestavěnou koherencí dat. · Programovatelné sampling time (společný pro skupinu kanálů) · Externí spouštění (časovač nebo EXTI) s konfigurovatelnou polaritou · Generování požadavku DMA pro přenos dat konverzí běžné skupiny. · Kalibrace ADC · Konverze ADC běžné skupiny. · Požadavky na napájení ADC: 1.62 V až 3.6 V. · Vstupní rozsah ADC: od Vref- (připojeno k Vssa) do Vref+ (připojeno k Vdda nebo k externímu vol.tage
odkaz).
Jak používat tento ovladač
Konfigurace parametrů nejvyšší úrovně souvisejících s ADC
1. Povolte rozhraní ADC Předpokladem je, že hodiny ADC musí být nakonfigurovány na nejvyšší úrovni RCC. Upozornění: Na STM32C0 je maximální hodinová frekvence ADC 35 MHz (viz datový list zařízení). Proto musí být zdroj hodin ADC z RCC a předděličky ADC hodin nakonfigurován tak, aby zůstal pod touto maximální frekvencí. Povinná jsou dvě nastavení hodin: Hodiny ADC (takty jádra, případně také převodní hodiny). ADC hodiny (převodní hodiny). Čtyři možné zdroje hodin: synchronní hodiny z hodin APB (stejné jako hodiny jádra ADC) nebo asynchronní hodiny z úrovně RCC: SYSCLK, HSI48. Přampsoubor: Do HAL_ADC_MspInit() (doporučené umístění kódu) nebo s jinou konfigurací parametrů hodin zařízení: __HAL_RCC_ADC_CLK_ENABLE(); (povinné: takt jádra) Zdroj hodin ADC a hodinový předdělička se konfigurují na úrovni ADC s parametrem „ClockPrescaler“ pomocí funkce HAL_ADC_Init().
2. Konfigurace pinů ADC Povolte hodiny pro GPIO ADC pomocí makra __HAL_RCC_GPIOx_CLK_ENABLE() Nakonfigurujte tyto piny ADC v analogovém režimu pomocí funkce HAL_GPIO_Init()
3. Volitelně v případě použití ADC s přerušeními: Nakonfigurujte NVIC pro ADC pomocí funkce HAL_NVIC_EnableIRQ(ADCx_IRQn) Vložte funkci obsluhy přerušení ADC HAL_ADC_IRQHandler() do funkce odpovídajícího vektoru přerušení ADC ADCx_IRQHandler().
4. Volitelně v případě použití DMA: Nakonfigurujte DMA (kanál DMA, režim normální nebo kruhový, …) pomocí funkce HAL_DMA_Init(). Nakonfigurujte NVIC pro DMA pomocí funkce HAL_NVIC_EnableIRQ(DMAx_Channelx_IRQn) Vložte funkci obsluhy přerušení ADC HAL_ADC_IRQHandler() do funkce odpovídajícího vektoru přerušení DMA DMAx_Channelx_IRQHandler().

UM3029 – Rev 1

strana 63/1419

UM3029
Popis API ovladače ADC Firmware

Poznámka:

Konfigurace parametrů ADC, group regular, channel
1. Nakonfigurujte parametry ADC (rozlišení, zarovnání dat, …) a parametry běžné skupiny (spouštěč konverze, sekvencer, …) pomocí funkce HAL_ADC_Init().
2. Pomocí funkce HAL_ADC_ConfigChannel() nakonfigurujte kanály pro parametry běžné skupiny (číslo kanálu, pořadí kanálu do sekvenceru, …, do běžné skupiny).
3. Volitelně nakonfigurujte parametry analogového watchdogu (sledované kanály, prahové hodnoty, …) pomocí funkce HAL_ADC_AnalogWDGConfig().
Provádění ADC převodů
1. Volitelně proveďte automatickou kalibraci ADC pro zlepšení přesnosti převodu pomocí funkce HAL_ADCEx_Calibration_Start().
2. Ovladač ADC lze použít ve třech režimech: dotazování, přerušení, přenos pomocí DMA. Konverze ADC pomocí dotazování: Aktivujte periferní zařízení ADC a spusťte převody pomocí funkce HAL_ADC_Start() Počkejte na dokončení převodu ADC pomocí funkce HAL_ADC_PollForConversion() Načtěte výsledky převodu pomocí funkce HAL_ADC_GetValue() Zastavte převod a deaktivujte periferní zařízení ADC pomocí funkce HAL_ADC_Stop() Konverze ADC přerušení: Aktivujte periferii ADC a spusťte převod pomocí funkce HAL_ADC_Start_IT() Počkejte na dokončení převodu ADC voláním funkce HAL_ADC_ConvCpltCallback() (tato funkce musí být implementována v uživatelském programu) Načtení výsledků převodu pomocí funkce HAL_ADC_GetValue() Zastavení převodu a vypnutí periferie ADC pomocí funkce HAL_ADC_Stop_IT() převod ADC s přenosem DMA: Aktivujte periferii ADC a spusťte převod pomocí funkce HAL_ADC_Start_DMA() Počkejte na dokončení převodu ADC voláním funkce HAL_ADC_ConvCpltCallback() nebo HAL_ADC_ConvHalfCpltCallback() (tyto funkce musí být implementovány v uživatelském programu) Výsledky převodu jsou automaticky přeneseny pomocí DMA do adresy cílové proměnné. Zastavte konverzi a deaktivujte periferní zařízení ADC pomocí funkce HAL_ADC_Stop_DMA()
Funkce zpětného volání musí být implementovány v uživatelském programu: · HAL_ADC_ErrorCallback() · HAL_ADC_LevelOutOfWindowCallback() (zpětné volání analogového hlídacího psa) · HAL_ADC_ConvCpltCallback() · HAL_ADC_ConvHalfCpltCallback
Deinicializace ADC
1. Deaktivujte rozhraní ADC Hodiny ADC lze tvrdě resetovat a deaktivovat na nejvyšší úrovni RCC. Tvrdý reset periferií ADC pomocí makra __ADCx_FORCE_RESET(), __ADCx_RELEASE_RESET(). Deaktivace hodin ADC pomocí ekvivalentního makra/funkcí jako konfiguračního kroku. Přampsoubor: Do HAL_ADC_MspDeInit() (doporučené umístění kódu) nebo s jinou konfigurací parametrů hodin zařízení: RCC_OscInitStructure.OscillatorType = RCC_OSCILLATORTYPE_HSI14; RCC_OscInitStructure.HSI14State = RCC_HSI14_OFF; (pokud se nepoužívá pro systémové hodiny) HAL_RCC_OscConfig(&RCC_OscInitStructure);
2. Konfigurace pinů ADC Zakažte hodiny pro ADC GPIO pomocí makra __HAL_RCC_GPIOx_CLK_DISABLE()
3. Volitelně v případě použití ADC s přerušeními: Deaktivujte NVIC pro ADC pomocí funkce HAL_NVIC_EnableIRQ(ADCx_IRQn)

UM3029 – Rev 1

strana 64/1419

7.2.3

UM3029
Popis API ovladače ADC Firmware
4. Volitelně v případě použití DMA: Deinicializujte DMA pomocí funkce HAL_DMA_Init(). Zakázat NVIC pro DMA pomocí funkce HAL_NVIC_EnableIRQ(DMAx_Channelx_IRQn)
Registrace zpětného volání
Příznak kompilace USE_HAL_ADC_REGISTER_CALLBACKS, je-li nastaven na 1, umožňuje uživateli dynamicky konfigurovat zpětná volání ovladače. Pomocí funkce @ref HAL_ADC_RegisterCallback() zaregistrujte zpětné volání přerušení. Funkce @ref H

Dokumenty / zdroje

Ovladače ST UM3029 Low Layer [pdfUživatelská příručka
UM3029 ovladače nízké vrstvy, UM3029, ovladače nízké vrstvy, ovladače vrstvy

Reference

Zanechte komentář

Vaše emailová adresa nebude zveřejněna. Povinná pole jsou označena *