HAL 드라이버 개요
HAL 드라이버는 다양한 API를 제공합니다.
각기 다른 기능을 구성 할 수 있습니다. 각 드라이버의 개발은 설계 구조, 기능 및 변수 변수입니다.
HAL 드라이버를 사용할 수 있습니다. 거기에 따라 모듈이 주변 장치 기능 모드에 연결될 수 있습니다. 예를 들어 USART 환경 장치 UART 드라이버 모듈, USART 드라이버 모듈, 스마트 카드 드라이버 모듈 및 IRDA 드라이버 모듈과 같은 모듈이 있습니다.
HAL의 주요 기능은 다음과 기능입니다.
- API 주변 장치 기능의 기능 및 API
- 3 가지 API 프로그래밍 모델 : 폴링, 프로그래밍 및 DMA.
- API는 RTOS를 준수합니다.
-충분한 재진입 API-
폴링 모드에서 시간이 걸리면 구성됨 사용합니다. - 필요한 주변기기 (USART1, USART2 …)
- 모든 HAL API입니다. 사용자 콜백 함수 함수를 구현합니다.
-Peripheral Init / DeInit HAL API (클럭, GPIO, 호스트, DMA)가 수행 될 수 있습니다.
-주변기기 이벤트 이벤트
-이벤트 이벤트. - 안전한 잠금 액세스 : 공유하고 있습니다.
- 모든 차단 프로세스에 사용되는 시간 동안 : 시간이 오래 걸리는 카운터 또는 시간 축일 수 있습니다.
HAL 및 사용자 응용 프로그램 파일
HAL 드라이버 파일
HAL 드라이버는 다음 파일 세트로 구성 메뉴입니다.
stm32f7xx_hal_ppp.c
예 : stm32f7xx_hal_adc.c, stm32f7xx_hal_irda.c, …
주 주변 장치 / 모듈 시스템 파일. 여기에 모든 STM32 장치가 있습니다.
stm32f7xx_hal_ppp.h
예 : stm32f7xx_hal_adc.h, stm32f7xx_hal_irda.h, …
기본 시스템 C 파일의 각 파일의 형식 및 장치
stm32f7xx_hal_ppp_ex.c
예 : stm32f7xx_hal_adc_ex.c, stm32f7xx_hal_dma_ex.c, …
주변 장치 / 모듈 드라이버의 확장 파일. 기본 API를 사용하여 API를 사용할 수 있습니다.
stm32f7xx_hal_ppp_ex.h
예 : stm32f7xx_hal_adc_ex.h, stm32f7xx_hal_dma_ex.h, …
파일 C 파일의 파일 파일. API를 사용할 수 있습니다.
stm32f7xx_hal.c
DBGMCU, Remap 및 Time Delay를 포함하여 systick API를 사용할 수 있습니다.
stm32f7xx_hal.c 파란 파일
사용자 응용 프로그램 프로그램 프로그램 프로그램 폴더 폴더 여기에 사용자 응용 프로그램 프로그램 설정 단추.
필요한 응용 프로그램의 프로그램을 선택할 수 있습니다.
특징 정의 문, 특징, 구조 및 그래프 및 이와 유사한 HAL 자원
주변 구조 구조 초기화
및 구성
구조 구조.
API
다중 기능 지원 : 각 환경 장치 결과적으로 효율적인 자원입니다.
주변 프로세스 상호 통신 :이 핸들은 프로세스 루틴간에 공유 데이터 리소스를 관리하는 데 사용됩니다.
예를 들어, 대화, DMA 핸들, 상태
저장 저장 :
STM32F7 HAL API 버전 규칙
- PPPprefix는 주변 장치 자체가 아닌 주변 장치 기능 모드를 나타냅니다. USART, IRDA, UART 또는 SMARTCARD 일 수 있습니다.
- 한 파일을 사용했습니다. 여러 파일에서 사용되는 상수입니다. 주변 장치 드라이버 기능이 있습니다.
- typedef 변수 이름은 _TypeDefro 접미사를 주름 야합니다.
- 필요한 것은 상수로있다. stm32f7xx 참조 설명서 및 거기에 따라 선택하십시오.
- PPP_TypeDef 구조 (예 : ADC_TypeDef) .h, stm32f765xx.h, stm32f767xx.h, stm32f768xx.h, stm32f768xx.h, stm32f777xx.h, stm32f778xx.h 및 stm32f779xx.h.
- 주변 장치 기능 이름이 있습니다. 각 단어의 첫 글자입니다 (예 : HAL_UART_Transmit ()). 함수 이름에 하나의 밑줄입니다.
- PPP_InitTypeDef (예 : ADC_InitTypeDef)입니다.
- PPP_xxxxConfTypeDef (예 : ADC_ChannelConfTypeDef)입니다.
- 주변 핸들 구조의 이름은 PPP_HandleTypedef (예 : DMA_HandleTypeDef)입니다.
- PAL_PPP_Init (예 : HAL_TIM_Init ())입니다.
- PPP 주변 장치를 선택하면 PPP_DeInit입니다 (예 : TIM_DeInit.)
- 모드 접미사는 폴링, 다양한 또는 DMA 일 수있는 프로세스 모드를 나타냅니다. HAL_PPP_Function_DMA ()라고합니다.
- 특징 접음 사는 새로운 기능을 참조해야합니다. 예 : HAL_ADC_Start ()는 여러 모드입니다.
2.5.2 HAL 일반 규약 규칙
공유 및 시스템 환경 장치의
용도
-GPIO
-SYSTICK
-NVIC
-RCC
-FLASH
예 : HAL_GPIO_Init ()는 GPIO 주소와 옵션 옵션 옵션 변수 만 필요합니다.
- NVIC 및 SYSTICK은 두 가지 ARM Cortex입니다. 더 많은 기능 API가 stm32f7xx_hal_cortex.c 파일에 있습니다.
- 필요한 값을 선택하십시오. 폭이 32 비트입니다.
예 : 상태 = XX | (YY << 16) 또는 상태 = XX | (YY << 8) | (YY << 16) | (YY << 24) “. - PPP 핸들은 HAL_PPP_Init () API를 사용하기 전에 유효합니다. init 함수는 핸들 필드를 수정합니다.
HAL_PPP_Init (PPP_HandleTypeDef) if (hppp == NULL) {return HAL_ERROR; } - 저에 정의있다.
- 조건부 매크로 : #define ABS (x) (((x)> 0)? (x)
🙁 x)) 의사 코드 매크로 (여러 매크로 매크로) :#define __HAL_LINKDMA (__ HANDLE__, __PPP_DMA_FIELD_, __DMA_HANDLE _) \ do {\(__HANDLE __)-> __ PPP_DMA_FIELD_ = & (__ DMA_HANDLE_); \ (__DMA_HANDLE_). 부모 =(__ 핸들 __); \} 동안 (0)
2.5.3 HAL 기능하고 콜백 함수
API
- stm32f7xx_it.c에서 호출해야합니다 HAL_PPP_IRQHandler () 주변 장치 버퍼 호출
사용자 콜백 함수. - 사용자 콜백 함수는 “약한”속성있는 빈 함수로 정의되어 있습니다. 사용자 코드에서 정의해야합니다.
사용자 콜백 함수입니다.
- 주변 시스템 레벨 초기화 / 비 초기화 콜백 : HAL_PPP_MspInit () 및 HAL_PPP_MspDeInit
- 전체 콜백 처리 : HAL_PPP_ProcessCpltCallback
- 오류 콜백 : HAL_PPP_ErrorCallback.
2.6 HAL 일반 API
일반 API는 모든 STM32 장치에서 일반 일반 기능을 제공합니다. API 4로 API 그룹으로 구성합니다.
- 초기화 및 초기화 해제 기능 : HAL_PPP_Init (), HAL_PPP_DeInit ()
- IO 연산 함수 : HAL_PPP_Read (), HAL_PPP_Write (), HAL_PPP_Transmit (), HAL_PPP_Receive ()
- 제어 기능 : HAL_PPP_Set (), HAL_PPP_Get ().
- 상태 및 오류 함수 : HAL_PPP_GetState (), HAL_PPP_GetError ()
다양한 주변 장치 / 모듈.
예 : 타이머 드라이버에서 API 그룹화는 타이머 기능 (PWM, OC, IC …)을 기반으로합니다.
GPIO, 대체 기능 (AF) 및 DMA 및 우선적으로 해제 할 수 있습니다. HAL_DeInit () 함수 상태 주변 장치 기본 상태 선택 옵션
IO 작동 기능은 쓰기 및 읽기 모드입니다.
제어 기능은 주변 장치 구성을 동적으로 변경하고 다른 작동 모드를 설정하는 데 사용됩니다.
주변 장치 상태 및 오류가 발생했습니다. 아래 예는 ADC 주변 장치를 기반으로합니다. 일반 API 목록은 전체가 아닙니다. 제공 만 제공하십시오.
2.7 HAL 확장 API
2.7.1 HAL 확장 모델 개요
확장 API는 다양한 기능을 제공합니다.
확장 모델은 stm32f7xx_hal_ppp_ex.c 다른 추가 파일로 구성되어 있습니다 (stm32f7xx_hal_ppp_ex.h).
ADC 주변 장치를 기반으로
2.7.2 HAL 확장 모델 사례
솔루션 IP 기능은 5 가지 방법으로 HAL 드라이버에서 처리 할 수 있습니다. 저에 대한 설명이 있습니다.
사례 1 : 부품 번호 별 기능 추가
API가 stm32f7xx_hal_ppp_ex.c 확장 파일에 추가 옵션입니다.
이름은 HAL_PPPEx_Function ()입니다.
사례 2 : 가족 별 기능 추가
추가이 내용은 HAL_PPPEx_Function ()입니다.
사례 3 : 새 주변기기 추가 (특정 기능
API) stm32f7xx_hal_newppp.c에 추가 할 수 있습니다. stm32f7_hal_conf.h에서 매크로가 사용되었습니다.
사례 4 : 그러나 대부분의 API 업데이트가 필요하지 않다 xx_hal_ppp_ex.c 확장 파일이 있습니다.
사례 5 : 효과적인 데이터 구조의 최적화 장치 모듈 번호 (예 : PPP_InitTypeDef).
문으로 나누어서 정의하십시오.
예 :
2.8 파일 포함 모델
공통 HAL 드라이버 파일 (stm32f7xx_hal.h)의 헤더에는 전체 HAL 라이브러리에 대한 공통 구성이 포함됩니다. HAL 리소스를 사용할 수있는 사용자 소스 및 HAL C 소스 파일에 포함 된 유일한 헤더 파일입니다.
PPP 드라이버는 프로젝트에서 사용되는 독립형 모듈입니다. 사용자는 구성 파일에서 해당 USE_HAL_PPP_MODULE 정의 문을 사용해야합니다.
2.9 HAL 공통 자원
공통 정의 열거, 구조 및 매크로와 같은 공통 HAL 자원은 stm32f7xx_hal_def.h에 정의됩니다. 주요 공통 정의 열거는 HAL_StatusTypeDef입니다.
- HAL 상태
HAL 상태는 부울 함수 및 IRQ 핸들러를 제외하고 거의 모든 HAL API에서 사용됩니다. 현재 API 작업의 상태를 반환합니다. 아래에 설명 된 네 가지 가능한 값이 있습니다.
- HAL 잠김
모든 HAL API는 HAL 잠금을 사용하여 우발적 공유 리소스에 의한 액세스를 방지합니다.
- 공통 자원 외에도 stm32f7xx_hal_def.h 파일은 CMSIS 라이브러리에서 stm32f7xx.h 파일을 호출하여 모든 주변 장치의 데이터 구조 및 주소 맵핑을 가져옵니다.
– 주변 장치 레지스터 및 비트 정의 선언
– 주변 장치 레지스터 하드웨어 (쓰기 레지스터, 읽기 레지스터 등)에 액세스하기위한 매크로 - 일반적인 매크로
– HAL_MAX_DELAY를 정의하는 매크로
– PPP 주변 장치를 DMA 구조 포인터에 링크하는 매크로 : __HAL_LINKDMA ();
2.10 HAL 구성
구성 파일 stm32f7xx_hal_conf.h를 사용하면 사용자 응용 프로그램의 드라이버를 사용자 정의 할 수 있습니다. 이 구성을 반드시 수정해야하는 것은 아닙니다. 응용 프로그램은 수정없이 기본 구성을 사용할 수 있습니다.
이러한 매개 변수를 구성하려면 사용자는 아래 표에 설명 된대로 관련 정의 명령문의 값을 주석 해제, 주석 또는 수정하여 일부 옵션을 사용 가능, 사용 불가능 또는 수정해야합니다.
stm32f7xx_hal_conf_template.h 파일은 HAL 드라이버 Inc 폴더에 있습니다. 위에서 설명한대로 사용자 폴더에 복사하고 이름을 바꾸고 수정해야합니다.
기본적으로 stm32f7xx_hal_conf_template.h 파일에 정의 된 값은 예제 및 데모에 사용 된 값과 동일합니다. 모든 HAL 포함 파일은 수정없이 사용자 코드에서 사용될 수 있도록 활성화됩니다.
2.11 HAL 시스템 주변장치 핸들링
이 장에서는 HAL 드라이버가 시스템 주변 장치를 처리하는 방법에 대한 개요를 제공합니다. 전체 API 목록은 각 주변 장치 드라이버 설명 섹션에 제공됩니다.
2.11.1 클럭
시스템 시계를 구성하는 데 두 가지 주요 기능을 사용할 수 있습니다.
- HAL_RCC_OscConfig (RCC_OscInitTypeDef * RCC_OscInitStruct). 이 기능은 여러 클럭 소스 (HSE, HSI, LSE, LSI, PLL)를 구성 / 활성화합니다.
- HAL_RCC_ClockConfig (RCC_ClkInitTypeDef * RCC_ClkInitStruct, uint32_t FLatency). 이 기능
– 시스템 클럭 소스를 선택합니다
– AHB, APB1 및 APB2 클록 분배기 구성
– 플래시 메모리 대기 상태 수를 구성합니다.
– HCLK 시계가 변경 될 때 SysTick 구성을 업데이트합니다.
일부 주변 장치 클록은 시스템 클록 (RTC, USB …)에서 파생되지 않습니다. 이 경우, 시계 구성은 stm32f7xx_hal_rcc_ex.c에 정의 된 확장 API에 의해 수행됩니다. HAL_RCCEx_PeriphCLKConfig (RCC_PeriphCLKInitTypeDef * PeriphClkInit).
추가 RCCHAL 드라이버 기능을 사용할 수 있습니다.
- HAL_RCC_DeInit () 클럭 구성을 리셋 상태로 되 돌리는 클럭 초기화 해제 기능
- 다양한 클록 구성 (시스템 클록, HCLK, PCLK1, PCLK2 등)을 검색 할 수있는 클록 기능을 제공합니다.
- MCO 및 CSS 구성 기능
매크로 세트는 stm32f7xx_hal_rcc.h 및 stm32f7xx_hal_rcc_ex.h에 정의되어 있습니다. 주변 장치 클록 게이팅 / 리셋 제어와 같은 RCC 블록 레지스터에서 기본 작업을 실행할 수 있습니다.
- 주변 장치 클록을 활성화 / 비활성화하는 __PPP_CLK_ENABLE / __ PPP_CLK_DISABLE
- 주변 장치 재설정을 강제 / 해제하기위한 __PPP_FORCE_RESET / __ PPP_RELEASE_RESET
- 저전력 (Sleep) 모드에서 주변 장치 클록을 활성화 / 비활성화하려면 __PPP_CLK_SLEEP_ENABLE / __ PPP_CLK_SLEEP_DISABLE.
2.11.2 GPIOs
GPIO HAL API는 다음과 같습니다.
- HAL_GPIO_Init () / HAL_GPIO_DeInit ()
- HAL_GPIO_ReadPin () / HAL_GPIO_WritePin ()
- HAL_GPIO_TogglePin ().
표준 GPIO 모드 (입력, 출력, 아날로그) 외에도 핀 모드는 인터럽트 또는 이벤트 생성을 통해 EXTI로 구성 할 수 있습니다.
인터럽트 생성으로 EXTI 모드를 선택할 때 사용자는 stm32f7xx_it.c에서 HAL_GPIO_EXTI_IRQHandler ()를 호출하고 HAL_GPIO_EXTI_Callback ()을 구현해야합니다.
아래 표는 GPIO_InitTypeDef 구조 필드를 설명합니다
일반적인 GPIO 구성 예는 다음과 같습니다.
- 외부 LED를 구동하기 위해 GPIO를 출력 푸시 풀로 구성 :
- 하강 에지 감도를 사용하여 PA0을 외부 인터럽트로 구성 :
2.11.3 Cortex NVIC 및 SysTick 타이머
Cortex HAL 드라이버 인 stm32f7xx_hal_cortex.c는 NVIC 및 SysTick을 처리하는 API를 제공합니다. 지원되는 API는 다음과 같습니다.
- HAL_NVIC_SetPriority()/ HAL_NVIC_SetPriorityGrouping()
- HAL_NVIC_GetPriority() / HAL_NVIC_GetPriorityGrouping()
- HAL_NVIC_EnableIRQ()/HAL_NVIC_DisableIRQ()
- HAL_NVIC_SystemReset()
- HAL_SYSTICK_IRQHandler()
- HAL_NVIC_GetPendingIRQ() / HAL_NVIC_SetPendingIRQ () /
- HAL_NVIC_ClearPendingIRQ()
- HAL_NVIC_GetActive(IRQn)
- HAL_SYSTICK_Config()
- HAL_SYSTICK_CLKSourceConfig()
- HAL_SYSTICK_Callback()
2.11.4 파워 컨트롤러
PWR HAL 드라이버는 전원 관리를 처리합니다. 모든 STM32 시리즈가 공유하는 기능은 다음과 같습니다.
- PVD 구성, 활성화 / 비활성화 및 인터럽트 처리
– HAL_PWR_ConfigPVD ()
– HAL_PWR_EnablePVD () / HAL_PWR_DisablePVD ()
– HAL_PWR_PVD_IRQHandler ()
– HAL_PWR_PVDCallback () - 웨이크 업 핀 구성
– HAL_PWR_EnableWakeUpPin () / HAL_PWR_DisableWakeUpPin () - 저전력 모드 진입
– HAL_PWR_EnterSLEEPMode ()
– HAL_PWR_EnterSTOPMode ()
– HAL_PWR_EnterSTANDBYMode ()
2.11.5 EXTI(External interrupt/event controller)
EXTI는 독립형 주변 장치로 간주되지 않고 다른 주변 장치에서 사용되는 서비스로 간주됩니다. 결과적으로 EXTI API는 없지만 각 주변 장치 HAL 드라이버는 연관된 EXTI 구성을 구현하고 EXTI 기능은 헤더 파일에서 매크로로 구현됩니다.
GPIO에 연결된 첫 16 개의 EXTI 라인은 GPIO 드라이버 내에서 관리됩니다. GPIO_InitTypeDef 구조를 사용하면 I / O를 외부 인터럽트 또는 외부 이벤트로 구성 할 수 있습니다.
PVD, RTC, USB 및 이더넷에 내부적으로 연결된 EXTI 라인은 아래 표에 제공된 매크로를 통해 이러한 주변 장치의 HAL 드라이버 내에 구성됩니다. EXTI 내부 연결은 대상 STM32 마이크로 컨트롤러에 따라 다릅니다 (자세한 내용은 제품 데이터 시트 참조).
EXTI 인터럽트 모드가 선택된 경우 사용자 애플리케이션은 stm32f7xx_it.c 파일에서 HAL_PPP_FUNCTION_IRQHandler () (예 : HAL_PWR_PVD_IRQHandler ())를 호출하고 HAL_PPP_FUNCTIONCallback () 콜백 함수 (예 : HAL_PWR_PVDCallback ())를 구현해야합니다.