@@ -0,0 +1,31 @@ | |||
f103c8t6/stm32f1xx.h STM32CubeF1 Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h | |||
f103c8t6/stm32f103xb.h STM32CubeF1 Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h | |||
f103c8t6/stm32f1xx_hal.c STM32CubeF1 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c | |||
f103c8t6/stm32f1xx_hal_cortex.c STM32CubeF1 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.c | |||
f103c8t6/stm32f1xx_hal_gpio.c STM32CubeF1 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.c | |||
f103c8t6/stm32f1xx_hal_pcd.c STM32CubeF1 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pcd.c | |||
f103c8t6/stm32f1xx_hal_pcd_ex.c STM32CubeF1 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pcd_ex.c | |||
f103c8t6/stm32f1xx_ll_usb.c STM32CubeF1 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_usb.c | |||
f103c8t6/startup_stm32f103xb.s STM32CubeF1 Drivers/CMSIS/Device/ST/STM32F1xx/Source/Templates/gcc/startup_stm32f103xb.s | |||
f103c8t6/system_stm32f1xx.h STM32CubeF1 Drivers/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h | |||
f103c8t6/system_stm32f1xx.c STM32CubeF1 Drivers/CMSIS/Device/ST/STM32F1xx/Source/Templates/system_stm32f1xx.c | |||
f103c8t6/stm32f1xx_hal.h STM32CubeF1 Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h | |||
f103c8t6/stm32f1xx_hal_adc.h STM32CubeF1 Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_adc.h | |||
f103c8t6/stm32f1xx_hal_adc_ex.h STM32CubeF1 Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_adc_ex.h | |||
f103c8t6/stm32f1xx_hal_cortex.h STM32CubeF1 Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h | |||
f103c8t6/stm32f1xx_hal_def.h STM32CubeF1 Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h | |||
f103c8t6/stm32f1xx_hal_dma.h STM32CubeF1 Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h | |||
f103c8t6/stm32f1xx_hal_dma_ex.h STM32CubeF1 Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h | |||
f103c8t6/stm32f1xx_hal_flash.h STM32CubeF1 Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h | |||
f103c8t6/stm32f1xx_hal_flash_ex.h STM32CubeF1 Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h | |||
f103c8t6/stm32f1xx_hal_gpio.h STM32CubeF1 Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h | |||
f103c8t6/stm32f1xx_hal_gpio_ex.h STM32CubeF1 Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h | |||
f103c8t6/stm32f1xx_hal_pwr.h STM32CubeF1 Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h | |||
f103c8t6/stm32f1xx_hal_pcd.h STM32CubeF1 Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pcd.h | |||
f103c8t6/stm32f1xx_hal_pcd_ex.h STM32CubeF1 Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pcd_ex.h | |||
f103c8t6/stm32f1xx_hal_rcc.h STM32CubeF1 Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h | |||
f103c8t6/stm32f1xx_hal_rcc_ex.h STM32CubeF1 Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h | |||
f103c8t6/stm32f1xx_hal_rtc.h STM32CubeF1 Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rtc.h | |||
f103c8t6/stm32f1xx_hal_rtc_ex.h STM32CubeF1 Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rtc_ex.h | |||
f103c8t6/stm32f1xx_hal_uart.h STM32CubeF1 Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_uart.h | |||
f103c8t6/stm32f1xx_ll_usb.h STM32CubeF1 Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_ll_usb.h |
@@ -0,0 +1,197 @@ | |||
/* | |||
****************************************************************************** | |||
** | |||
** File : LinkerScript.ld | |||
** | |||
XXXX | |||
** Set heap size, stack size and stack location according | |||
** to application requirements. | |||
** | |||
** Set memory bank area and size if external memory is used. | |||
** | |||
** Target : STMicroelectronics STM32 | |||
** | |||
** Distribution: The file is distributed as is without any warranty | |||
** of any kind. | |||
** | |||
***************************************************************************** | |||
** @attention | |||
** | |||
** <h2><center>© COPYRIGHT(c) 2020 STMicroelectronics</center></h2> | |||
** | |||
** Redistribution and use in source and binary forms, with or without modification, | |||
** are permitted provided that the following conditions are met: | |||
** 1. Redistributions of source code must retain the above copyright notice, | |||
** this list of conditions and the following disclaimer. | |||
** 2. Redistributions in binary form must reproduce the above copyright notice, | |||
** this list of conditions and the following disclaimer in the documentation | |||
** and/or other materials provided with the distribution. | |||
** 3. Neither the name of STMicroelectronics nor the names of its contributors | |||
** may be used to endorse or promote products derived from this software | |||
** without specific prior written permission. | |||
** | |||
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |||
** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |||
** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
** DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE | |||
** FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |||
** DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | |||
** SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
** CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
** OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |||
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
** | |||
***************************************************************************** | |||
*/ | |||
/* Entry Point */ | |||
ENTRY(Reset_Handler) | |||
/* Highest address of the user mode stack */ | |||
_estack = ORIGIN(RAM) + LENGTH(RAM); /* end of "RAM" Ram type memory */ | |||
_Min_Heap_Size = 0x200 ; /* required amount of heap */ | |||
_Min_Stack_Size = 0x400 ; /* required amount of stack */ | |||
/* Memories definition */ | |||
MEMORY | |||
{ | |||
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 20K | |||
FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 64K | |||
} | |||
/* Sections */ | |||
SECTIONS | |||
{ | |||
/* The startup code into "FLASH" Rom type memory */ | |||
.isr_vector : | |||
{ | |||
. = ALIGN(4); | |||
KEEP(*(.isr_vector)) /* Startup code */ | |||
. = ALIGN(4); | |||
} >FLASH | |||
/* The program code and other data into "FLASH" Rom type memory */ | |||
.text : | |||
{ | |||
. = ALIGN(4); | |||
*(.text) /* .text sections (code) */ | |||
*(.text*) /* .text* sections (code) */ | |||
*(.glue_7) /* glue arm to thumb code */ | |||
*(.glue_7t) /* glue thumb to arm code */ | |||
*(.eh_frame) | |||
KEEP (*(.init)) | |||
KEEP (*(.fini)) | |||
. = ALIGN(4); | |||
_etext = .; /* define a global symbols at end of code */ | |||
} >FLASH | |||
/* Constant data into "FLASH" Rom type memory */ | |||
.rodata : | |||
{ | |||
. = ALIGN(4); | |||
*(.rodata) /* .rodata sections (constants, strings, etc.) */ | |||
*(.rodata*) /* .rodata* sections (constants, strings, etc.) */ | |||
. = ALIGN(4); | |||
} >FLASH | |||
.ARM.extab : { | |||
. = ALIGN(4); | |||
*(.ARM.extab* .gnu.linkonce.armextab.*) | |||
. = ALIGN(4); | |||
} >FLASH | |||
.ARM : { | |||
. = ALIGN(4); | |||
__exidx_start = .; | |||
*(.ARM.exidx*) | |||
__exidx_end = .; | |||
. = ALIGN(4); | |||
} >FLASH | |||
.preinit_array : | |||
{ | |||
. = ALIGN(4); | |||
PROVIDE_HIDDEN (__preinit_array_start = .); | |||
KEEP (*(.preinit_array*)) | |||
PROVIDE_HIDDEN (__preinit_array_end = .); | |||
. = ALIGN(4); | |||
} >FLASH | |||
.init_array : | |||
{ | |||
. = ALIGN(4); | |||
PROVIDE_HIDDEN (__init_array_start = .); | |||
KEEP (*(SORT(.init_array.*))) | |||
KEEP (*(.init_array*)) | |||
PROVIDE_HIDDEN (__init_array_end = .); | |||
. = ALIGN(4); | |||
} >FLASH | |||
.fini_array : | |||
{ | |||
. = ALIGN(4); | |||
PROVIDE_HIDDEN (__fini_array_start = .); | |||
KEEP (*(SORT(.fini_array.*))) | |||
KEEP (*(.fini_array*)) | |||
PROVIDE_HIDDEN (__fini_array_end = .); | |||
. = ALIGN(4); | |||
} >FLASH | |||
/* Used by the startup to initialize data */ | |||
_sidata = LOADADDR(.data); | |||
/* Initialized data sections into "RAM" Ram type memory */ | |||
.data : | |||
{ | |||
. = ALIGN(4); | |||
_sdata = .; /* create a global symbol at data start */ | |||
*(.data) /* .data sections */ | |||
*(.data*) /* .data* sections */ | |||
. = ALIGN(4); | |||
_edata = .; /* define a global symbol at data end */ | |||
} >RAM AT> FLASH | |||
/* Uninitialized data section into "RAM" Ram type memory */ | |||
. = ALIGN(4); | |||
.bss : | |||
{ | |||
/* This is used by the startup in order to initialize the .bss section */ | |||
_sbss = .; /* define a global symbol at bss start */ | |||
__bss_start__ = _sbss; | |||
*(.bss) | |||
*(.bss*) | |||
*(COMMON) | |||
. = ALIGN(4); | |||
_ebss = .; /* define a global symbol at bss end */ | |||
__bss_end__ = _ebss; | |||
} >RAM | |||
/* User_heap_stack section, used to check that there is enough "RAM" Ram type memory left */ | |||
._user_heap_stack : | |||
{ | |||
. = ALIGN(8); | |||
PROVIDE ( end = . ); | |||
PROVIDE ( _end = . ); | |||
. = . + _Min_Heap_Size; | |||
. = . + _Min_Stack_Size; | |||
. = ALIGN(8); | |||
} >RAM | |||
/* Remove information from the compiler libraries */ | |||
/DISCARD/ : | |||
{ | |||
libc.a ( * ) | |||
libm.a ( * ) | |||
libgcc.a ( * ) | |||
} | |||
.ARM.attributes 0 : { *(.ARM.attributes) } | |||
} |
@@ -0,0 +1,6 @@ | |||
#ifndef _MAIN_H_ | |||
#define _MAIN_H_ | |||
#include "stm32f1xx_hal.h" | |||
#endif /* _MAIN_H_ */ |
@@ -0,0 +1,365 @@ | |||
/** | |||
*************** (C) COPYRIGHT 2017 STMicroelectronics ************************ | |||
* @file startup_stm32f103xb.s | |||
* @author MCD Application Team | |||
* @brief STM32F103xB Devices vector table for Atollic toolchain. | |||
* This module performs: | |||
* - Set the initial SP | |||
* - Set the initial PC == Reset_Handler, | |||
* - Set the vector table entries with the exceptions ISR address | |||
* - Configure the clock system | |||
* - Branches to main in the C library (which eventually | |||
* calls main()). | |||
* After Reset the Cortex-M3 processor is in Thread mode, | |||
* priority is Privileged, and the Stack is set to Main. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© Copyright (c) 2017 STMicroelectronics. | |||
* All rights reserved.</center></h2> | |||
* | |||
* This software component is licensed by ST under BSD 3-Clause license, | |||
* the "License"; You may not use this file except in compliance with the | |||
* License. You may obtain a copy of the License at: | |||
* opensource.org/licenses/BSD-3-Clause | |||
* | |||
****************************************************************************** | |||
*/ | |||
.syntax unified | |||
.cpu cortex-m3 | |||
.fpu softvfp | |||
.thumb | |||
.global g_pfnVectors | |||
.global Default_Handler | |||
/* start address for the initialization values of the .data section. | |||
defined in linker script */ | |||
.word _sidata | |||
/* start address for the .data section. defined in linker script */ | |||
.word _sdata | |||
/* end address for the .data section. defined in linker script */ | |||
.word _edata | |||
/* start address for the .bss section. defined in linker script */ | |||
.word _sbss | |||
/* end address for the .bss section. defined in linker script */ | |||
.word _ebss | |||
.equ BootRAM, 0xF108F85F | |||
/** | |||
* @brief This is the code that gets called when the processor first | |||
* starts execution following a reset event. Only the absolutely | |||
* necessary set is performed, after which the application | |||
* supplied main() routine is called. | |||
* @param None | |||
* @retval : None | |||
*/ | |||
.section .text.Reset_Handler | |||
.weak Reset_Handler | |||
.type Reset_Handler, %function | |||
Reset_Handler: | |||
/* Copy the data segment initializers from flash to SRAM */ | |||
ldr r0, =_sdata | |||
ldr r1, =_edata | |||
ldr r2, =_sidata | |||
movs r3, #0 | |||
b LoopCopyDataInit | |||
CopyDataInit: | |||
ldr r4, [r2, r3] | |||
str r4, [r0, r3] | |||
adds r3, r3, #4 | |||
LoopCopyDataInit: | |||
adds r4, r0, r3 | |||
cmp r4, r1 | |||
bcc CopyDataInit | |||
/* Zero fill the bss segment. */ | |||
ldr r2, =_sbss | |||
ldr r4, =_ebss | |||
movs r3, #0 | |||
b LoopFillZerobss | |||
FillZerobss: | |||
str r3, [r2] | |||
adds r2, r2, #4 | |||
LoopFillZerobss: | |||
cmp r2, r4 | |||
bcc FillZerobss | |||
/* Call the clock system intitialization function.*/ | |||
bl SystemInit | |||
/* Call static constructors */ | |||
bl __libc_init_array | |||
/* Call the application's entry point.*/ | |||
bl main | |||
bx lr | |||
.size Reset_Handler, .-Reset_Handler | |||
/** | |||
* @brief This is the code that gets called when the processor receives an | |||
* unexpected interrupt. This simply enters an infinite loop, preserving | |||
* the system state for examination by a debugger. | |||
* | |||
* @param None | |||
* @retval : None | |||
*/ | |||
.section .text.Default_Handler,"ax",%progbits | |||
Default_Handler: | |||
Infinite_Loop: | |||
b Infinite_Loop | |||
.size Default_Handler, .-Default_Handler | |||
/****************************************************************************** | |||
* | |||
* The minimal vector table for a Cortex M3. Note that the proper constructs | |||
* must be placed on this to ensure that it ends up at physical address | |||
* 0x0000.0000. | |||
* | |||
******************************************************************************/ | |||
.section .isr_vector,"a",%progbits | |||
.type g_pfnVectors, %object | |||
.size g_pfnVectors, .-g_pfnVectors | |||
g_pfnVectors: | |||
.word _estack | |||
.word Reset_Handler | |||
.word NMI_Handler | |||
.word HardFault_Handler | |||
.word MemManage_Handler | |||
.word BusFault_Handler | |||
.word UsageFault_Handler | |||
.word 0 | |||
.word 0 | |||
.word 0 | |||
.word 0 | |||
.word SVC_Handler | |||
.word DebugMon_Handler | |||
.word 0 | |||
.word PendSV_Handler | |||
.word SysTick_Handler | |||
.word WWDG_IRQHandler | |||
.word PVD_IRQHandler | |||
.word TAMPER_IRQHandler | |||
.word RTC_IRQHandler | |||
.word FLASH_IRQHandler | |||
.word RCC_IRQHandler | |||
.word EXTI0_IRQHandler | |||
.word EXTI1_IRQHandler | |||
.word EXTI2_IRQHandler | |||
.word EXTI3_IRQHandler | |||
.word EXTI4_IRQHandler | |||
.word DMA1_Channel1_IRQHandler | |||
.word DMA1_Channel2_IRQHandler | |||
.word DMA1_Channel3_IRQHandler | |||
.word DMA1_Channel4_IRQHandler | |||
.word DMA1_Channel5_IRQHandler | |||
.word DMA1_Channel6_IRQHandler | |||
.word DMA1_Channel7_IRQHandler | |||
.word ADC1_2_IRQHandler | |||
.word USB_HP_CAN1_TX_IRQHandler | |||
.word USB_LP_CAN1_RX0_IRQHandler | |||
.word CAN1_RX1_IRQHandler | |||
.word CAN1_SCE_IRQHandler | |||
.word EXTI9_5_IRQHandler | |||
.word TIM1_BRK_IRQHandler | |||
.word TIM1_UP_IRQHandler | |||
.word TIM1_TRG_COM_IRQHandler | |||
.word TIM1_CC_IRQHandler | |||
.word TIM2_IRQHandler | |||
.word TIM3_IRQHandler | |||
.word TIM4_IRQHandler | |||
.word I2C1_EV_IRQHandler | |||
.word I2C1_ER_IRQHandler | |||
.word I2C2_EV_IRQHandler | |||
.word I2C2_ER_IRQHandler | |||
.word SPI1_IRQHandler | |||
.word SPI2_IRQHandler | |||
.word USART1_IRQHandler | |||
.word USART2_IRQHandler | |||
.word USART3_IRQHandler | |||
.word EXTI15_10_IRQHandler | |||
.word RTC_Alarm_IRQHandler | |||
.word USBWakeUp_IRQHandler | |||
.word 0 | |||
.word 0 | |||
.word 0 | |||
.word 0 | |||
.word 0 | |||
.word 0 | |||
.word 0 | |||
.word BootRAM /* @0x108. This is for boot in RAM mode for | |||
STM32F10x Medium Density devices. */ | |||
/******************************************************************************* | |||
* | |||
* Provide weak aliases for each Exception handler to the Default_Handler. | |||
* As they are weak aliases, any function with the same name will override | |||
* this definition. | |||
* | |||
*******************************************************************************/ | |||
.weak NMI_Handler | |||
.thumb_set NMI_Handler,Default_Handler | |||
.weak HardFault_Handler | |||
.thumb_set HardFault_Handler,Default_Handler | |||
.weak MemManage_Handler | |||
.thumb_set MemManage_Handler,Default_Handler | |||
.weak BusFault_Handler | |||
.thumb_set BusFault_Handler,Default_Handler | |||
.weak UsageFault_Handler | |||
.thumb_set UsageFault_Handler,Default_Handler | |||
.weak SVC_Handler | |||
.thumb_set SVC_Handler,Default_Handler | |||
.weak DebugMon_Handler | |||
.thumb_set DebugMon_Handler,Default_Handler | |||
.weak PendSV_Handler | |||
.thumb_set PendSV_Handler,Default_Handler | |||
.weak SysTick_Handler | |||
.thumb_set SysTick_Handler,Default_Handler | |||
.weak WWDG_IRQHandler | |||
.thumb_set WWDG_IRQHandler,Default_Handler | |||
.weak PVD_IRQHandler | |||
.thumb_set PVD_IRQHandler,Default_Handler | |||
.weak TAMPER_IRQHandler | |||
.thumb_set TAMPER_IRQHandler,Default_Handler | |||
.weak RTC_IRQHandler | |||
.thumb_set RTC_IRQHandler,Default_Handler | |||
.weak FLASH_IRQHandler | |||
.thumb_set FLASH_IRQHandler,Default_Handler | |||
.weak RCC_IRQHandler | |||
.thumb_set RCC_IRQHandler,Default_Handler | |||
.weak EXTI0_IRQHandler | |||
.thumb_set EXTI0_IRQHandler,Default_Handler | |||
.weak EXTI1_IRQHandler | |||
.thumb_set EXTI1_IRQHandler,Default_Handler | |||
.weak EXTI2_IRQHandler | |||
.thumb_set EXTI2_IRQHandler,Default_Handler | |||
.weak EXTI3_IRQHandler | |||
.thumb_set EXTI3_IRQHandler,Default_Handler | |||
.weak EXTI4_IRQHandler | |||
.thumb_set EXTI4_IRQHandler,Default_Handler | |||
.weak DMA1_Channel1_IRQHandler | |||
.thumb_set DMA1_Channel1_IRQHandler,Default_Handler | |||
.weak DMA1_Channel2_IRQHandler | |||
.thumb_set DMA1_Channel2_IRQHandler,Default_Handler | |||
.weak DMA1_Channel3_IRQHandler | |||
.thumb_set DMA1_Channel3_IRQHandler,Default_Handler | |||
.weak DMA1_Channel4_IRQHandler | |||
.thumb_set DMA1_Channel4_IRQHandler,Default_Handler | |||
.weak DMA1_Channel5_IRQHandler | |||
.thumb_set DMA1_Channel5_IRQHandler,Default_Handler | |||
.weak DMA1_Channel6_IRQHandler | |||
.thumb_set DMA1_Channel6_IRQHandler,Default_Handler | |||
.weak DMA1_Channel7_IRQHandler | |||
.thumb_set DMA1_Channel7_IRQHandler,Default_Handler | |||
.weak ADC1_2_IRQHandler | |||
.thumb_set ADC1_2_IRQHandler,Default_Handler | |||
.weak USB_HP_CAN1_TX_IRQHandler | |||
.thumb_set USB_HP_CAN1_TX_IRQHandler,Default_Handler | |||
.weak USB_LP_CAN1_RX0_IRQHandler | |||
.thumb_set USB_LP_CAN1_RX0_IRQHandler,Default_Handler | |||
.weak CAN1_RX1_IRQHandler | |||
.thumb_set CAN1_RX1_IRQHandler,Default_Handler | |||
.weak CAN1_SCE_IRQHandler | |||
.thumb_set CAN1_SCE_IRQHandler,Default_Handler | |||
.weak EXTI9_5_IRQHandler | |||
.thumb_set EXTI9_5_IRQHandler,Default_Handler | |||
.weak TIM1_BRK_IRQHandler | |||
.thumb_set TIM1_BRK_IRQHandler,Default_Handler | |||
.weak TIM1_UP_IRQHandler | |||
.thumb_set TIM1_UP_IRQHandler,Default_Handler | |||
.weak TIM1_TRG_COM_IRQHandler | |||
.thumb_set TIM1_TRG_COM_IRQHandler,Default_Handler | |||
.weak TIM1_CC_IRQHandler | |||
.thumb_set TIM1_CC_IRQHandler,Default_Handler | |||
.weak TIM2_IRQHandler | |||
.thumb_set TIM2_IRQHandler,Default_Handler | |||
.weak TIM3_IRQHandler | |||
.thumb_set TIM3_IRQHandler,Default_Handler | |||
.weak TIM4_IRQHandler | |||
.thumb_set TIM4_IRQHandler,Default_Handler | |||
.weak I2C1_EV_IRQHandler | |||
.thumb_set I2C1_EV_IRQHandler,Default_Handler | |||
.weak I2C1_ER_IRQHandler | |||
.thumb_set I2C1_ER_IRQHandler,Default_Handler | |||
.weak I2C2_EV_IRQHandler | |||
.thumb_set I2C2_EV_IRQHandler,Default_Handler | |||
.weak I2C2_ER_IRQHandler | |||
.thumb_set I2C2_ER_IRQHandler,Default_Handler | |||
.weak SPI1_IRQHandler | |||
.thumb_set SPI1_IRQHandler,Default_Handler | |||
.weak SPI2_IRQHandler | |||
.thumb_set SPI2_IRQHandler,Default_Handler | |||
.weak USART1_IRQHandler | |||
.thumb_set USART1_IRQHandler,Default_Handler | |||
.weak USART2_IRQHandler | |||
.thumb_set USART2_IRQHandler,Default_Handler | |||
.weak USART3_IRQHandler | |||
.thumb_set USART3_IRQHandler,Default_Handler | |||
.weak EXTI15_10_IRQHandler | |||
.thumb_set EXTI15_10_IRQHandler,Default_Handler | |||
.weak RTC_Alarm_IRQHandler | |||
.thumb_set RTC_Alarm_IRQHandler,Default_Handler | |||
.weak USBWakeUp_IRQHandler | |||
.thumb_set USBWakeUp_IRQHandler,Default_Handler | |||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ | |||
@@ -0,0 +1,275 @@ | |||
/** | |||
****************************************************************************** | |||
* @file stm32f1xx.h | |||
* @author MCD Application Team | |||
* @brief CMSIS STM32F1xx Device Peripheral Access Layer Header File. | |||
* | |||
* The file is the unique include file that the application programmer | |||
* is using in the C source code, usually in main.c. This file contains: | |||
* - Configuration section that allows to select: | |||
* - The STM32F1xx device used in the target application | |||
* - To use or not the peripheral’s drivers in application code(i.e. | |||
* code will be based on direct access to peripheral’s registers | |||
* rather than drivers API), this option is controlled by | |||
* "#define USE_HAL_DRIVER" | |||
* | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© Copyright (c) 2017 STMicroelectronics. | |||
* All rights reserved.</center></h2> | |||
* | |||
* This software component is licensed by ST under BSD 3-Clause license, | |||
* the "License"; You may not use this file except in compliance with the | |||
* License. You may obtain a copy of the License at: | |||
* opensource.org/licenses/BSD-3-Clause | |||
* | |||
****************************************************************************** | |||
*/ | |||
/** @addtogroup CMSIS | |||
* @{ | |||
*/ | |||
/** @addtogroup stm32f1xx | |||
* @{ | |||
*/ | |||
#ifndef __STM32F1XX_H | |||
#define __STM32F1XX_H | |||
#ifdef __cplusplus | |||
extern "C" { | |||
#endif /* __cplusplus */ | |||
/** @addtogroup Library_configuration_section | |||
* @{ | |||
*/ | |||
/** | |||
* @brief STM32 Family | |||
*/ | |||
#if !defined (STM32F1) | |||
#define STM32F1 | |||
#endif /* STM32F1 */ | |||
/* Uncomment the line below according to the target STM32L device used in your | |||
application | |||
*/ | |||
#if !defined (STM32F100xB) && !defined (STM32F100xE) && !defined (STM32F101x6) && \ | |||
!defined (STM32F101xB) && !defined (STM32F101xE) && !defined (STM32F101xG) && !defined (STM32F102x6) && !defined (STM32F102xB) && !defined (STM32F103x6) && \ | |||
!defined (STM32F103xB) && !defined (STM32F103xE) && !defined (STM32F103xG) && !defined (STM32F105xC) && !defined (STM32F107xC) | |||
/* #define STM32F100xB */ /*!< STM32F100C4, STM32F100R4, STM32F100C6, STM32F100R6, STM32F100C8, STM32F100R8, STM32F100V8, STM32F100CB, STM32F100RB and STM32F100VB */ | |||
/* #define STM32F100xE */ /*!< STM32F100RC, STM32F100VC, STM32F100ZC, STM32F100RD, STM32F100VD, STM32F100ZD, STM32F100RE, STM32F100VE and STM32F100ZE */ | |||
/* #define STM32F101x6 */ /*!< STM32F101C4, STM32F101R4, STM32F101T4, STM32F101C6, STM32F101R6 and STM32F101T6 Devices */ | |||
/* #define STM32F101xB */ /*!< STM32F101C8, STM32F101R8, STM32F101T8, STM32F101V8, STM32F101CB, STM32F101RB, STM32F101TB and STM32F101VB */ | |||
/* #define STM32F101xE */ /*!< STM32F101RC, STM32F101VC, STM32F101ZC, STM32F101RD, STM32F101VD, STM32F101ZD, STM32F101RE, STM32F101VE and STM32F101ZE */ | |||
/* #define STM32F101xG */ /*!< STM32F101RF, STM32F101VF, STM32F101ZF, STM32F101RG, STM32F101VG and STM32F101ZG */ | |||
/* #define STM32F102x6 */ /*!< STM32F102C4, STM32F102R4, STM32F102C6 and STM32F102R6 */ | |||
/* #define STM32F102xB */ /*!< STM32F102C8, STM32F102R8, STM32F102CB and STM32F102RB */ | |||
/* #define STM32F103x6 */ /*!< STM32F103C4, STM32F103R4, STM32F103T4, STM32F103C6, STM32F103R6 and STM32F103T6 */ | |||
/* #define STM32F103xB */ /*!< STM32F103C8, STM32F103R8, STM32F103T8, STM32F103V8, STM32F103CB, STM32F103RB, STM32F103TB and STM32F103VB */ | |||
/* #define STM32F103xE */ /*!< STM32F103RC, STM32F103VC, STM32F103ZC, STM32F103RD, STM32F103VD, STM32F103ZD, STM32F103RE, STM32F103VE and STM32F103ZE */ | |||
/* #define STM32F103xG */ /*!< STM32F103RF, STM32F103VF, STM32F103ZF, STM32F103RG, STM32F103VG and STM32F103ZG */ | |||
/* #define STM32F105xC */ /*!< STM32F105R8, STM32F105V8, STM32F105RB, STM32F105VB, STM32F105RC and STM32F105VC */ | |||
/* #define STM32F107xC */ /*!< STM32F107RB, STM32F107VB, STM32F107RC and STM32F107VC */ | |||
#endif | |||
/* Tip: To avoid modifying this file each time you need to switch between these | |||
devices, you can define the device in your toolchain compiler preprocessor. | |||
*/ | |||
#if !defined (USE_HAL_DRIVER) | |||
/** | |||
* @brief Comment the line below if you will not use the peripherals drivers. | |||
In this case, these drivers will not be included and the application code will | |||
be based on direct access to peripherals registers | |||
*/ | |||
/*#define USE_HAL_DRIVER */ | |||
#endif /* USE_HAL_DRIVER */ | |||
/** | |||
* @brief CMSIS Device version number V4.3.3 | |||
*/ | |||
#define __STM32F1_CMSIS_VERSION_MAIN (0x04) /*!< [31:24] main version */ | |||
#define __STM32F1_CMSIS_VERSION_SUB1 (0x03) /*!< [23:16] sub1 version */ | |||
#define __STM32F1_CMSIS_VERSION_SUB2 (0x03) /*!< [15:8] sub2 version */ | |||
#define __STM32F1_CMSIS_VERSION_RC (0x00) /*!< [7:0] release candidate */ | |||
#define __STM32F1_CMSIS_VERSION ((__STM32F1_CMSIS_VERSION_MAIN << 24)\ | |||
|(__STM32F1_CMSIS_VERSION_SUB1 << 16)\ | |||
|(__STM32F1_CMSIS_VERSION_SUB2 << 8 )\ | |||
|(__STM32F1_CMSIS_VERSION_RC)) | |||
/** | |||
* @} | |||
*/ | |||
/** @addtogroup Device_Included | |||
* @{ | |||
*/ | |||
#if defined(STM32F100xB) | |||
#include "stm32f100xb.h" | |||
#elif defined(STM32F100xE) | |||
#include "stm32f100xe.h" | |||
#elif defined(STM32F101x6) | |||
#include "stm32f101x6.h" | |||
#elif defined(STM32F101xB) | |||
#include "stm32f101xb.h" | |||
#elif defined(STM32F101xE) | |||
#include "stm32f101xe.h" | |||
#elif defined(STM32F101xG) | |||
#include "stm32f101xg.h" | |||
#elif defined(STM32F102x6) | |||
#include "stm32f102x6.h" | |||
#elif defined(STM32F102xB) | |||
#include "stm32f102xb.h" | |||
#elif defined(STM32F103x6) | |||
#include "stm32f103x6.h" | |||
#elif defined(STM32F103xB) | |||
#include "stm32f103xb.h" | |||
#elif defined(STM32F103xE) | |||
#include "stm32f103xe.h" | |||
#elif defined(STM32F103xG) | |||
#include "stm32f103xg.h" | |||
#elif defined(STM32F105xC) | |||
#include "stm32f105xc.h" | |||
#elif defined(STM32F107xC) | |||
#include "stm32f107xc.h" | |||
#else | |||
#error "Please select first the target STM32F1xx device used in your application (in stm32f1xx.h file)" | |||
#endif | |||
/** | |||
* @} | |||
*/ | |||
/** @addtogroup Exported_types | |||
* @{ | |||
*/ | |||
typedef enum | |||
{ | |||
RESET = 0, | |||
SET = !RESET | |||
} FlagStatus, ITStatus; | |||
typedef enum | |||
{ | |||
DISABLE = 0, | |||
ENABLE = !DISABLE | |||
} FunctionalState; | |||
#define IS_FUNCTIONAL_STATE(STATE) (((STATE) == DISABLE) || ((STATE) == ENABLE)) | |||
typedef enum | |||
{ | |||
SUCCESS = 0U, | |||
ERROR = !SUCCESS | |||
} ErrorStatus; | |||
/** | |||
* @} | |||
*/ | |||
/** @addtogroup Exported_macros | |||
* @{ | |||
*/ | |||
#define SET_BIT(REG, BIT) ((REG) |= (BIT)) | |||
#define CLEAR_BIT(REG, BIT) ((REG) &= ~(BIT)) | |||
#define READ_BIT(REG, BIT) ((REG) & (BIT)) | |||
#define CLEAR_REG(REG) ((REG) = (0x0)) | |||
#define WRITE_REG(REG, VAL) ((REG) = (VAL)) | |||
#define READ_REG(REG) ((REG)) | |||
#define MODIFY_REG(REG, CLEARMASK, SETMASK) WRITE_REG((REG), (((READ_REG(REG)) & (~(CLEARMASK))) | (SETMASK))) | |||
#define POSITION_VAL(VAL) (__CLZ(__RBIT(VAL))) | |||
/* Use of CMSIS compiler intrinsics for register exclusive access */ | |||
/* Atomic 32-bit register access macro to set one or several bits */ | |||
#define ATOMIC_SET_BIT(REG, BIT) \ | |||
do { \ | |||
uint32_t val; \ | |||
do { \ | |||
val = __LDREXW((__IO uint32_t *)&(REG)) | (BIT); \ | |||
} while ((__STREXW(val,(__IO uint32_t *)&(REG))) != 0U); \ | |||
} while(0) | |||
/* Atomic 32-bit register access macro to clear one or several bits */ | |||
#define ATOMIC_CLEAR_BIT(REG, BIT) \ | |||
do { \ | |||
uint32_t val; \ | |||
do { \ | |||
val = __LDREXW((__IO uint32_t *)&(REG)) & ~(BIT); \ | |||
} while ((__STREXW(val,(__IO uint32_t *)&(REG))) != 0U); \ | |||
} while(0) | |||
/* Atomic 32-bit register access macro to clear and set one or several bits */ | |||
#define ATOMIC_MODIFY_REG(REG, CLEARMSK, SETMASK) \ | |||
do { \ | |||
uint32_t val; \ | |||
do { \ | |||
val = (__LDREXW((__IO uint32_t *)&(REG)) & ~(CLEARMSK)) | (SETMASK); \ | |||
} while ((__STREXW(val,(__IO uint32_t *)&(REG))) != 0U); \ | |||
} while(0) | |||
/* Atomic 16-bit register access macro to set one or several bits */ | |||
#define ATOMIC_SETH_BIT(REG, BIT) \ | |||
do { \ | |||
uint16_t val; \ | |||
do { \ | |||
val = __LDREXH((__IO uint16_t *)&(REG)) | (BIT); \ | |||
} while ((__STREXH(val,(__IO uint16_t *)&(REG))) != 0U); \ | |||
} while(0) | |||
/* Atomic 16-bit register access macro to clear one or several bits */ | |||
#define ATOMIC_CLEARH_BIT(REG, BIT) \ | |||
do { \ | |||
uint16_t val; \ | |||
do { \ | |||
val = __LDREXH((__IO uint16_t *)&(REG)) & ~(BIT); \ | |||
} while ((__STREXH(val,(__IO uint16_t *)&(REG))) != 0U); \ | |||
} while(0) | |||
/* Atomic 16-bit register access macro to clear and set one or several bits */ | |||
#define ATOMIC_MODIFYH_REG(REG, CLEARMSK, SETMASK) \ | |||
do { \ | |||
uint16_t val; \ | |||
do { \ | |||
val = (__LDREXH((__IO uint16_t *)&(REG)) & ~(CLEARMSK)) | (SETMASK); \ | |||
} while ((__STREXH(val,(__IO uint16_t *)&(REG))) != 0U); \ | |||
} while(0) | |||
/** | |||
* @} | |||
*/ | |||
#if defined (USE_HAL_DRIVER) | |||
#include "stm32f1xx_hal.h" | |||
#endif /* USE_HAL_DRIVER */ | |||
#ifdef __cplusplus | |||
} | |||
#endif /* __cplusplus */ | |||
#endif /* __STM32F1xx_H */ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@@ -0,0 +1,606 @@ | |||
/** | |||
****************************************************************************** | |||
* @file stm32f1xx_hal.c | |||
* @author MCD Application Team | |||
* @brief HAL module driver. | |||
* This is the common part of the HAL initialization | |||
* | |||
@verbatim | |||
============================================================================== | |||
##### How to use this driver ##### | |||
============================================================================== | |||
[..] | |||
The common HAL driver contains a set of generic and common APIs that can be | |||
used by the PPP peripheral drivers and the user to start using the HAL. | |||
[..] | |||
The HAL contains two APIs' categories: | |||
(+) Common HAL APIs | |||
(+) Services HAL APIs | |||
@endverbatim | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© Copyright (c) 2016 STMicroelectronics. | |||
* All rights reserved.</center></h2> | |||
* | |||
* This software component is licensed by ST under BSD 3-Clause license, | |||
* the "License"; You may not use this file except in compliance with the | |||
* License. You may obtain a copy of the License at: | |||
* opensource.org/licenses/BSD-3-Clause | |||
* | |||
****************************************************************************** | |||
*/ | |||
/* Includes ------------------------------------------------------------------*/ | |||
#include "stm32f1xx_hal.h" | |||
/** @addtogroup STM32F1xx_HAL_Driver | |||
* @{ | |||
*/ | |||
/** @defgroup HAL HAL | |||
* @brief HAL module driver. | |||
* @{ | |||
*/ | |||
#ifdef HAL_MODULE_ENABLED | |||
/* Private typedef -----------------------------------------------------------*/ | |||
/* Private define ------------------------------------------------------------*/ | |||
/** @defgroup HAL_Private_Constants HAL Private Constants | |||
* @{ | |||
*/ | |||
/** | |||
* @brief STM32F1xx HAL Driver version number V1.1.8 | |||
*/ | |||
#define __STM32F1xx_HAL_VERSION_MAIN (0x01U) /*!< [31:24] main version */ | |||
#define __STM32F1xx_HAL_VERSION_SUB1 (0x01U) /*!< [23:16] sub1 version */ | |||
#define __STM32F1xx_HAL_VERSION_SUB2 (0x08U) /*!< [15:8] sub2 version */ | |||
#define __STM32F1xx_HAL_VERSION_RC (0x00U) /*!< [7:0] release candidate */ | |||
#define __STM32F1xx_HAL_VERSION ((__STM32F1xx_HAL_VERSION_MAIN << 24)\ | |||
|(__STM32F1xx_HAL_VERSION_SUB1 << 16)\ | |||
|(__STM32F1xx_HAL_VERSION_SUB2 << 8 )\ | |||
|(__STM32F1xx_HAL_VERSION_RC)) | |||
#define IDCODE_DEVID_MASK 0x00000FFFU | |||
/** | |||
* @} | |||
*/ | |||
/* Private macro -------------------------------------------------------------*/ | |||
/* Private variables ---------------------------------------------------------*/ | |||
/** @defgroup HAL_Private_Variables HAL Private Variables | |||
* @{ | |||
*/ | |||
__IO uint32_t uwTick; | |||
uint32_t uwTickPrio = (1UL << __NVIC_PRIO_BITS); /* Invalid PRIO */ | |||
HAL_TickFreqTypeDef uwTickFreq = HAL_TICK_FREQ_DEFAULT; /* 1KHz */ | |||
/** | |||
* @} | |||
*/ | |||
/* Private function prototypes -----------------------------------------------*/ | |||
/* Exported functions ---------------------------------------------------------*/ | |||
/** @defgroup HAL_Exported_Functions HAL Exported Functions | |||
* @{ | |||
*/ | |||
/** @defgroup HAL_Exported_Functions_Group1 Initialization and de-initialization Functions | |||
* @brief Initialization and de-initialization functions | |||
* | |||
@verbatim | |||
=============================================================================== | |||
##### Initialization and de-initialization functions ##### | |||
=============================================================================== | |||
[..] This section provides functions allowing to: | |||
(+) Initializes the Flash interface, the NVIC allocation and initial clock | |||
configuration. It initializes the systick also when timeout is needed | |||
and the backup domain when enabled. | |||
(+) de-Initializes common part of the HAL. | |||
(+) Configure The time base source to have 1ms time base with a dedicated | |||
Tick interrupt priority. | |||
(++) SysTick timer is used by default as source of time base, but user | |||
can eventually implement his proper time base source (a general purpose | |||
timer for example or other time source), keeping in mind that Time base | |||
duration should be kept 1ms since PPP_TIMEOUT_VALUEs are defined and | |||
handled in milliseconds basis. | |||
(++) Time base configuration function (HAL_InitTick ()) is called automatically | |||
at the beginning of the program after reset by HAL_Init() or at any time | |||
when clock is configured, by HAL_RCC_ClockConfig(). | |||
(++) Source of time base is configured to generate interrupts at regular | |||
time intervals. Care must be taken if HAL_Delay() is called from a | |||
peripheral ISR process, the Tick interrupt line must have higher priority | |||
(numerically lower) than the peripheral interrupt. Otherwise the caller | |||
ISR process will be blocked. | |||
(++) functions affecting time base configurations are declared as __weak | |||
to make override possible in case of other implementations in user file. | |||
@endverbatim | |||
* @{ | |||
*/ | |||
/** | |||
* @brief This function is used to initialize the HAL Library; it must be the first | |||
* instruction to be executed in the main program (before to call any other | |||
* HAL function), it performs the following: | |||
* Configure the Flash prefetch. | |||
* Configures the SysTick to generate an interrupt each 1 millisecond, | |||
* which is clocked by the HSI (at this stage, the clock is not yet | |||
* configured and thus the system is running from the internal HSI at 16 MHz). | |||
* Set NVIC Group Priority to 4. | |||
* Calls the HAL_MspInit() callback function defined in user file | |||
* "stm32f1xx_hal_msp.c" to do the global low level hardware initialization | |||
* | |||
* @note SysTick is used as time base for the HAL_Delay() function, the application | |||
* need to ensure that the SysTick time base is always set to 1 millisecond | |||
* to have correct HAL operation. | |||
* @retval HAL status | |||
*/ | |||
HAL_StatusTypeDef HAL_Init(void) | |||
{ | |||
/* Configure Flash prefetch */ | |||
#if (PREFETCH_ENABLE != 0) | |||
#if defined(STM32F101x6) || defined(STM32F101xB) || defined(STM32F101xE) || defined(STM32F101xG) || \ | |||
defined(STM32F102x6) || defined(STM32F102xB) || \ | |||
defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) || \ | |||
defined(STM32F105xC) || defined(STM32F107xC) | |||
/* Prefetch buffer is not available on value line devices */ | |||
__HAL_FLASH_PREFETCH_BUFFER_ENABLE(); | |||
#endif | |||
#endif /* PREFETCH_ENABLE */ | |||
/* Set Interrupt Group Priority */ | |||
HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4); | |||
/* Use systick as time base source and configure 1ms tick (default clock after Reset is HSI) */ | |||
HAL_InitTick(TICK_INT_PRIORITY); | |||
/* Init the low level hardware */ | |||
HAL_MspInit(); | |||
/* Return function status */ | |||
return HAL_OK; | |||
} | |||
/** | |||
* @brief This function de-Initializes common part of the HAL and stops the systick. | |||
* of time base. | |||
* @note This function is optional. | |||
* @retval HAL status | |||
*/ | |||
HAL_StatusTypeDef HAL_DeInit(void) | |||
{ | |||
/* Reset of all peripherals */ | |||
__HAL_RCC_APB1_FORCE_RESET(); | |||
__HAL_RCC_APB1_RELEASE_RESET(); | |||
__HAL_RCC_APB2_FORCE_RESET(); | |||
__HAL_RCC_APB2_RELEASE_RESET(); | |||
#if defined(STM32F105xC) || defined(STM32F107xC) | |||
__HAL_RCC_AHB_FORCE_RESET(); | |||
__HAL_RCC_AHB_RELEASE_RESET(); | |||
#endif | |||
/* De-Init the low level hardware */ | |||
HAL_MspDeInit(); | |||
/* Return function status */ | |||
return HAL_OK; | |||
} | |||
/** | |||
* @brief Initialize the MSP. | |||
* @retval None | |||
*/ | |||
__weak void HAL_MspInit(void) | |||
{ | |||
/* NOTE : This function should not be modified, when the callback is needed, | |||
the HAL_MspInit could be implemented in the user file | |||
*/ | |||
} | |||
/** | |||
* @brief DeInitializes the MSP. | |||
* @retval None | |||
*/ | |||
__weak void HAL_MspDeInit(void) | |||
{ | |||
/* NOTE : This function should not be modified, when the callback is needed, | |||
the HAL_MspDeInit could be implemented in the user file | |||
*/ | |||
} | |||
/** | |||
* @brief This function configures the source of the time base. | |||
* The time source is configured to have 1ms time base with a dedicated | |||
* Tick interrupt priority. | |||
* @note This function is called automatically at the beginning of program after | |||
* reset by HAL_Init() or at any time when clock is reconfigured by HAL_RCC_ClockConfig(). | |||
* @note In the default implementation, SysTick timer is the source of time base. | |||
* It is used to generate interrupts at regular time intervals. | |||
* Care must be taken if HAL_Delay() is called from a peripheral ISR process, | |||
* The SysTick interrupt must have higher priority (numerically lower) | |||
* than the peripheral interrupt. Otherwise the caller ISR process will be blocked. | |||
* The function is declared as __weak to be overwritten in case of other | |||
* implementation in user file. | |||
* @param TickPriority Tick interrupt priority. | |||
* @retval HAL status | |||
*/ | |||
__weak HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) | |||
{ | |||
/* Configure the SysTick to have interrupt in 1ms time basis*/ | |||
if (HAL_SYSTICK_Config(SystemCoreClock / (1000U / uwTickFreq)) > 0U) | |||
{ | |||
return HAL_ERROR; | |||
} | |||
/* Configure the SysTick IRQ priority */ | |||
if (TickPriority < (1UL << __NVIC_PRIO_BITS)) | |||
{ | |||
HAL_NVIC_SetPriority(SysTick_IRQn, TickPriority, 0U); | |||
uwTickPrio = TickPriority; | |||
} | |||
else | |||
{ | |||
return HAL_ERROR; | |||
} | |||
/* Return function status */ | |||
return HAL_OK; | |||
} | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup HAL_Exported_Functions_Group2 HAL Control functions | |||
* @brief HAL Control functions | |||
* | |||
@verbatim | |||
=============================================================================== | |||
##### HAL Control functions ##### | |||
=============================================================================== | |||
[..] This section provides functions allowing to: | |||
(+) Provide a tick value in millisecond | |||
(+) Provide a blocking delay in millisecond | |||
(+) Suspend the time base source interrupt | |||
(+) Resume the time base source interrupt | |||
(+) Get the HAL API driver version | |||
(+) Get the device identifier | |||
(+) Get the device revision identifier | |||
(+) Enable/Disable Debug module during SLEEP mode | |||
(+) Enable/Disable Debug module during STOP mode | |||
(+) Enable/Disable Debug module during STANDBY mode | |||
@endverbatim | |||
* @{ | |||
*/ | |||
/** | |||
* @brief This function is called to increment a global variable "uwTick" | |||
* used as application time base. | |||
* @note In the default implementation, this variable is incremented each 1ms | |||
* in SysTick ISR. | |||
* @note This function is declared as __weak to be overwritten in case of other | |||
* implementations in user file. | |||
* @retval None | |||
*/ | |||
__weak void HAL_IncTick(void) | |||
{ | |||
uwTick += uwTickFreq; | |||
} | |||
/** | |||
* @brief Provides a tick value in millisecond. | |||
* @note This function is declared as __weak to be overwritten in case of other | |||
* implementations in user file. | |||
* @retval tick value | |||
*/ | |||
__weak uint32_t HAL_GetTick(void) | |||
{ | |||
return uwTick; | |||
} | |||
/** | |||
* @brief This function returns a tick priority. | |||
* @retval tick priority | |||
*/ | |||
uint32_t HAL_GetTickPrio(void) | |||
{ | |||
return uwTickPrio; | |||
} | |||
/** | |||
* @brief Set new tick Freq. | |||
* @retval status | |||
*/ | |||
HAL_StatusTypeDef HAL_SetTickFreq(HAL_TickFreqTypeDef Freq) | |||
{ | |||
HAL_StatusTypeDef status = HAL_OK; | |||
HAL_TickFreqTypeDef prevTickFreq; | |||
assert_param(IS_TICKFREQ(Freq)); | |||
if (uwTickFreq != Freq) | |||
{ | |||
/* Back up uwTickFreq frequency */ | |||
prevTickFreq = uwTickFreq; | |||
/* Update uwTickFreq global variable used by HAL_InitTick() */ | |||
uwTickFreq = Freq; | |||
/* Apply the new tick Freq */ | |||
status = HAL_InitTick(uwTickPrio); | |||
if (status != HAL_OK) | |||
{ | |||
/* Restore previous tick frequency */ | |||
uwTickFreq = prevTickFreq; | |||
} | |||
} | |||
return status; | |||
} | |||
/** | |||
* @brief Return tick frequency. | |||
* @retval tick period in Hz | |||
*/ | |||
HAL_TickFreqTypeDef HAL_GetTickFreq(void) | |||
{ | |||
return uwTickFreq; | |||
} | |||
/** | |||
* @brief This function provides minimum delay (in milliseconds) based | |||
* on variable incremented. | |||
* @note In the default implementation , SysTick timer is the source of time base. | |||
* It is used to generate interrupts at regular time intervals where uwTick | |||
* is incremented. | |||
* @note This function is declared as __weak to be overwritten in case of other | |||
* implementations in user file. | |||
* @param Delay specifies the delay time length, in milliseconds. | |||
* @retval None | |||
*/ | |||
__weak void HAL_Delay(uint32_t Delay) | |||
{ | |||
uint32_t tickstart = HAL_GetTick(); | |||
uint32_t wait = Delay; | |||
/* Add a freq to guarantee minimum wait */ | |||
if (wait < HAL_MAX_DELAY) | |||
{ | |||
wait += (uint32_t)(uwTickFreq); | |||
} | |||
while ((HAL_GetTick() - tickstart) < wait) | |||
{ | |||
} | |||
} | |||
/** | |||
* @brief Suspend Tick increment. | |||
* @note In the default implementation , SysTick timer is the source of time base. It is | |||
* used to generate interrupts at regular time intervals. Once HAL_SuspendTick() | |||
* is called, the SysTick interrupt will be disabled and so Tick increment | |||
* is suspended. | |||
* @note This function is declared as __weak to be overwritten in case of other | |||
* implementations in user file. | |||
* @retval None | |||
*/ | |||
__weak void HAL_SuspendTick(void) | |||
{ | |||
/* Disable SysTick Interrupt */ | |||
CLEAR_BIT(SysTick->CTRL, SysTick_CTRL_TICKINT_Msk); | |||
} | |||
/** | |||
* @brief Resume Tick increment. | |||
* @note In the default implementation , SysTick timer is the source of time base. It is | |||
* used to generate interrupts at regular time intervals. Once HAL_ResumeTick() | |||
* is called, the SysTick interrupt will be enabled and so Tick increment | |||
* is resumed. | |||
* @note This function is declared as __weak to be overwritten in case of other | |||
* implementations in user file. | |||
* @retval None | |||
*/ | |||
__weak void HAL_ResumeTick(void) | |||
{ | |||
/* Enable SysTick Interrupt */ | |||
SET_BIT(SysTick->CTRL, SysTick_CTRL_TICKINT_Msk); | |||
} | |||
/** | |||
* @brief Returns the HAL revision | |||
* @retval version 0xXYZR (8bits for each decimal, R for RC) | |||
*/ | |||
uint32_t HAL_GetHalVersion(void) | |||
{ | |||
return __STM32F1xx_HAL_VERSION; | |||
} | |||
/** | |||
* @brief Returns the device revision identifier. | |||
* Note: On devices STM32F10xx8 and STM32F10xxB, | |||
* STM32F101xC/D/E and STM32F103xC/D/E, | |||
* STM32F101xF/G and STM32F103xF/G | |||
* STM32F10xx4 and STM32F10xx6 | |||
* Debug registers DBGMCU_IDCODE and DBGMCU_CR are accessible only in | |||
* debug mode (not accessible by the user software in normal mode). | |||
* Refer to errata sheet of these devices for more details. | |||
* @retval Device revision identifier | |||
*/ | |||
uint32_t HAL_GetREVID(void) | |||
{ | |||
return ((DBGMCU->IDCODE) >> DBGMCU_IDCODE_REV_ID_Pos); | |||
} | |||
/** | |||
* @brief Returns the device identifier. | |||
* Note: On devices STM32F10xx8 and STM32F10xxB, | |||
* STM32F101xC/D/E and STM32F103xC/D/E, | |||
* STM32F101xF/G and STM32F103xF/G | |||
* STM32F10xx4 and STM32F10xx6 | |||
* Debug registers DBGMCU_IDCODE and DBGMCU_CR are accessible only in | |||
* debug mode (not accessible by the user software in normal mode). | |||
* Refer to errata sheet of these devices for more details. | |||
* @retval Device identifier | |||
*/ | |||
uint32_t HAL_GetDEVID(void) | |||
{ | |||
return ((DBGMCU->IDCODE) & IDCODE_DEVID_MASK); | |||
} | |||
/** | |||
* @brief Returns first word of the unique device identifier (UID based on 96 bits) | |||
* @retval Device identifier | |||
*/ | |||
uint32_t HAL_GetUIDw0(void) | |||
{ | |||
return(READ_REG(*((uint32_t *)UID_BASE))); | |||
} | |||
/** | |||
* @brief Returns second word of the unique device identifier (UID based on 96 bits) | |||
* @retval Device identifier | |||
*/ | |||
uint32_t HAL_GetUIDw1(void) | |||
{ | |||
return(READ_REG(*((uint32_t *)(UID_BASE + 4U)))); | |||
} | |||
/** | |||
* @brief Returns third word of the unique device identifier (UID based on 96 bits) | |||
* @retval Device identifier | |||
*/ | |||
uint32_t HAL_GetUIDw2(void) | |||
{ | |||
return(READ_REG(*((uint32_t *)(UID_BASE + 8U)))); | |||
} | |||
/** | |||
* @brief Enable the Debug Module during SLEEP mode | |||
* @retval None | |||
*/ | |||
void HAL_DBGMCU_EnableDBGSleepMode(void) | |||
{ | |||
SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_SLEEP); | |||
} | |||
/** | |||
* @brief Disable the Debug Module during SLEEP mode | |||
* Note: On devices STM32F10xx8 and STM32F10xxB, | |||
* STM32F101xC/D/E and STM32F103xC/D/E, | |||
* STM32F101xF/G and STM32F103xF/G | |||
* STM32F10xx4 and STM32F10xx6 | |||
* Debug registers DBGMCU_IDCODE and DBGMCU_CR are accessible only in | |||
* debug mode (not accessible by the user software in normal mode). | |||
* Refer to errata sheet of these devices for more details. | |||
* @retval None | |||
*/ | |||
void HAL_DBGMCU_DisableDBGSleepMode(void) | |||
{ | |||
CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_SLEEP); | |||
} | |||
/** | |||
* @brief Enable the Debug Module during STOP mode | |||
* Note: On devices STM32F10xx8 and STM32F10xxB, | |||
* STM32F101xC/D/E and STM32F103xC/D/E, | |||
* STM32F101xF/G and STM32F103xF/G | |||
* STM32F10xx4 and STM32F10xx6 | |||
* Debug registers DBGMCU_IDCODE and DBGMCU_CR are accessible only in | |||
* debug mode (not accessible by the user software in normal mode). | |||
* Refer to errata sheet of these devices for more details. | |||
* Note: On all STM32F1 devices: | |||
* If the system tick timer interrupt is enabled during the Stop mode | |||
* debug (DBG_STOP bit set in the DBGMCU_CR register ), it will wakeup | |||
* the system from Stop mode. | |||
* Workaround: To debug the Stop mode, disable the system tick timer | |||
* interrupt. | |||
* Refer to errata sheet of these devices for more details. | |||
* Note: On all STM32F1 devices: | |||
* If the system tick timer interrupt is enabled during the Stop mode | |||
* debug (DBG_STOP bit set in the DBGMCU_CR register ), it will wakeup | |||
* the system from Stop mode. | |||
* Workaround: To debug the Stop mode, disable the system tick timer | |||
* interrupt. | |||
* Refer to errata sheet of these devices for more details. | |||
* @retval None | |||
*/ | |||
void HAL_DBGMCU_EnableDBGStopMode(void) | |||
{ | |||
SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STOP); | |||
} | |||
/** | |||
* @brief Disable the Debug Module during STOP mode | |||
* Note: On devices STM32F10xx8 and STM32F10xxB, | |||
* STM32F101xC/D/E and STM32F103xC/D/E, | |||
* STM32F101xF/G and STM32F103xF/G | |||
* STM32F10xx4 and STM32F10xx6 | |||
* Debug registers DBGMCU_IDCODE and DBGMCU_CR are accessible only in | |||
* debug mode (not accessible by the user software in normal mode). | |||
* Refer to errata sheet of these devices for more details. | |||
* @retval None | |||
*/ | |||
void HAL_DBGMCU_DisableDBGStopMode(void) | |||
{ | |||
CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STOP); | |||
} | |||
/** | |||
* @brief Enable the Debug Module during STANDBY mode | |||
* Note: On devices STM32F10xx8 and STM32F10xxB, | |||
* STM32F101xC/D/E and STM32F103xC/D/E, | |||
* STM32F101xF/G and STM32F103xF/G | |||
* STM32F10xx4 and STM32F10xx6 | |||
* Debug registers DBGMCU_IDCODE and DBGMCU_CR are accessible only in | |||
* debug mode (not accessible by the user software in normal mode). | |||
* Refer to errata sheet of these devices for more details. | |||
* @retval None | |||
*/ | |||
void HAL_DBGMCU_EnableDBGStandbyMode(void) | |||
{ | |||
SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STANDBY); | |||
} | |||
/** | |||
* @brief Disable the Debug Module during STANDBY mode | |||
* Note: On devices STM32F10xx8 and STM32F10xxB, | |||
* STM32F101xC/D/E and STM32F103xC/D/E, | |||
* STM32F101xF/G and STM32F103xF/G | |||
* STM32F10xx4 and STM32F10xx6 | |||
* Debug registers DBGMCU_IDCODE and DBGMCU_CR are accessible only in | |||
* debug mode (not accessible by the user software in normal mode). | |||
* Refer to errata sheet of these devices for more details. | |||
* @retval None | |||
*/ | |||
void HAL_DBGMCU_DisableDBGStandbyMode(void) | |||
{ | |||
CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STANDBY); | |||
} | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
#endif /* HAL_MODULE_ENABLED */ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@@ -0,0 +1,358 @@ | |||
/** | |||
****************************************************************************** | |||
* @file stm32f1xx_hal.h | |||
* @author MCD Application Team | |||
* @brief This file contains all the functions prototypes for the HAL | |||
* module driver. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© Copyright (c) 2017 STMicroelectronics. | |||
* All rights reserved.</center></h2> | |||
* | |||
* This software component is licensed by ST under BSD 3-Clause license, | |||
* the "License"; You may not use this file except in compliance with the | |||
* License. You may obtain a copy of the License at: | |||
* opensource.org/licenses/BSD-3-Clause | |||
* | |||
****************************************************************************** | |||
*/ | |||
/* Define to prevent recursive inclusion -------------------------------------*/ | |||
#ifndef __STM32F1xx_HAL_H | |||
#define __STM32F1xx_HAL_H | |||
#ifdef __cplusplus | |||
extern "C" { | |||
#endif | |||
/* Includes ------------------------------------------------------------------*/ | |||
#include "stm32f1xx_hal_conf.h" | |||
/** @addtogroup STM32F1xx_HAL_Driver | |||
* @{ | |||
*/ | |||
/** @addtogroup HAL | |||
* @{ | |||
*/ | |||
/* Exported constants --------------------------------------------------------*/ | |||
/** @defgroup HAL_Exported_Constants HAL Exported Constants | |||
* @{ | |||
*/ | |||
/** @defgroup HAL_TICK_FREQ Tick Frequency | |||
* @{ | |||
*/ | |||
typedef enum | |||
{ | |||
HAL_TICK_FREQ_10HZ = 100U, | |||
HAL_TICK_FREQ_100HZ = 10U, | |||
HAL_TICK_FREQ_1KHZ = 1U, | |||
HAL_TICK_FREQ_DEFAULT = HAL_TICK_FREQ_1KHZ | |||
} HAL_TickFreqTypeDef; | |||
/** | |||
* @} | |||
*/ | |||
/* Exported types ------------------------------------------------------------*/ | |||
extern __IO uint32_t uwTick; | |||
extern uint32_t uwTickPrio; | |||
extern HAL_TickFreqTypeDef uwTickFreq; | |||
/** | |||
* @} | |||
*/ | |||
/* Exported macro ------------------------------------------------------------*/ | |||
/** @defgroup HAL_Exported_Macros HAL Exported Macros | |||
* @{ | |||
*/ | |||
/** @defgroup DBGMCU_Freeze_Unfreeze Freeze Unfreeze Peripherals in Debug mode | |||
* @brief Freeze/Unfreeze Peripherals in Debug mode | |||
* Note: On devices STM32F10xx8 and STM32F10xxB, | |||
* STM32F101xC/D/E and STM32F103xC/D/E, | |||
* STM32F101xF/G and STM32F103xF/G | |||
* STM32F10xx4 and STM32F10xx6 | |||
* Debug registers DBGMCU_IDCODE and DBGMCU_CR are accessible only in | |||
* debug mode (not accessible by the user software in normal mode). | |||
* Refer to errata sheet of these devices for more details. | |||
* @{ | |||
*/ | |||
/* Peripherals on APB1 */ | |||
/** | |||
* @brief TIM2 Peripherals Debug mode | |||
*/ | |||
#define __HAL_DBGMCU_FREEZE_TIM2() SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM2_STOP) | |||
#define __HAL_DBGMCU_UNFREEZE_TIM2() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM2_STOP) | |||
/** | |||
* @brief TIM3 Peripherals Debug mode | |||
*/ | |||
#define __HAL_DBGMCU_FREEZE_TIM3() SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM3_STOP) | |||
#define __HAL_DBGMCU_UNFREEZE_TIM3() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM3_STOP) | |||
#if defined (DBGMCU_CR_DBG_TIM4_STOP) | |||
/** | |||
* @brief TIM4 Peripherals Debug mode | |||
*/ | |||
#define __HAL_DBGMCU_FREEZE_TIM4() SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM4_STOP) | |||
#define __HAL_DBGMCU_UNFREEZE_TIM4() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM4_STOP) | |||
#endif | |||
#if defined (DBGMCU_CR_DBG_TIM5_STOP) | |||
/** | |||
* @brief TIM5 Peripherals Debug mode | |||
*/ | |||
#define __HAL_DBGMCU_FREEZE_TIM5() SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM5_STOP) | |||
#define __HAL_DBGMCU_UNFREEZE_TIM5() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM5_STOP) | |||
#endif | |||
#if defined (DBGMCU_CR_DBG_TIM6_STOP) | |||
/** | |||
* @brief TIM6 Peripherals Debug mode | |||
*/ | |||
#define __HAL_DBGMCU_FREEZE_TIM6() SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM6_STOP) | |||
#define __HAL_DBGMCU_UNFREEZE_TIM6() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM6_STOP) | |||
#endif | |||
#if defined (DBGMCU_CR_DBG_TIM7_STOP) | |||
/** | |||
* @brief TIM7 Peripherals Debug mode | |||
*/ | |||
#define __HAL_DBGMCU_FREEZE_TIM7() SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM7_STOP) | |||
#define __HAL_DBGMCU_UNFREEZE_TIM7() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM7_STOP) | |||
#endif | |||
#if defined (DBGMCU_CR_DBG_TIM12_STOP) | |||
/** | |||
* @brief TIM12 Peripherals Debug mode | |||
*/ | |||
#define __HAL_DBGMCU_FREEZE_TIM12() SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM12_STOP) | |||
#define __HAL_DBGMCU_UNFREEZE_TIM12() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM12_STOP) | |||
#endif | |||
#if defined (DBGMCU_CR_DBG_TIM13_STOP) | |||
/** | |||
* @brief TIM13 Peripherals Debug mode | |||
*/ | |||
#define __HAL_DBGMCU_FREEZE_TIM13() SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM13_STOP) | |||
#define __HAL_DBGMCU_UNFREEZE_TIM13() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM13_STOP) | |||
#endif | |||
#if defined (DBGMCU_CR_DBG_TIM14_STOP) | |||
/** | |||
* @brief TIM14 Peripherals Debug mode | |||
*/ | |||
#define __HAL_DBGMCU_FREEZE_TIM14() SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM14_STOP) | |||
#define __HAL_DBGMCU_UNFREEZE_TIM14() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM14_STOP) | |||
#endif | |||
/** | |||
* @brief WWDG Peripherals Debug mode | |||
*/ | |||
#define __HAL_DBGMCU_FREEZE_WWDG() SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_WWDG_STOP) | |||
#define __HAL_DBGMCU_UNFREEZE_WWDG() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_WWDG_STOP) | |||
/** | |||
* @brief IWDG Peripherals Debug mode | |||
*/ | |||
#define __HAL_DBGMCU_FREEZE_IWDG() SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_IWDG_STOP) | |||
#define __HAL_DBGMCU_UNFREEZE_IWDG() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_IWDG_STOP) | |||
/** | |||
* @brief I2C1 Peripherals Debug mode | |||
*/ | |||
#define __HAL_DBGMCU_FREEZE_I2C1_TIMEOUT() SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_I2C1_SMBUS_TIMEOUT) | |||
#define __HAL_DBGMCU_UNFREEZE_I2C1_TIMEOUT() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_I2C1_SMBUS_TIMEOUT) | |||
#if defined (DBGMCU_CR_DBG_I2C2_SMBUS_TIMEOUT) | |||
/** | |||
* @brief I2C2 Peripherals Debug mode | |||
*/ | |||
#define __HAL_DBGMCU_FREEZE_I2C2_TIMEOUT() SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_I2C2_SMBUS_TIMEOUT) | |||
#define __HAL_DBGMCU_UNFREEZE_I2C2_TIMEOUT() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_I2C2_SMBUS_TIMEOUT) | |||
#endif | |||
#if defined (DBGMCU_CR_DBG_CAN1_STOP) | |||
/** | |||
* @brief CAN1 Peripherals Debug mode | |||
*/ | |||
#define __HAL_DBGMCU_FREEZE_CAN1() SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_CAN1_STOP) | |||
#define __HAL_DBGMCU_UNFREEZE_CAN1() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_CAN1_STOP) | |||
#endif | |||
#if defined (DBGMCU_CR_DBG_CAN2_STOP) | |||
/** | |||
* @brief CAN2 Peripherals Debug mode | |||
*/ | |||
#define __HAL_DBGMCU_FREEZE_CAN2() SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_CAN2_STOP) | |||
#define __HAL_DBGMCU_UNFREEZE_CAN2() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_CAN2_STOP) | |||
#endif | |||
/* Peripherals on APB2 */ | |||
#if defined (DBGMCU_CR_DBG_TIM1_STOP) | |||
/** | |||
* @brief TIM1 Peripherals Debug mode | |||
*/ | |||
#define __HAL_DBGMCU_FREEZE_TIM1() SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM1_STOP) | |||
#define __HAL_DBGMCU_UNFREEZE_TIM1() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM1_STOP) | |||
#endif | |||
#if defined (DBGMCU_CR_DBG_TIM8_STOP) | |||
/** | |||
* @brief TIM8 Peripherals Debug mode | |||
*/ | |||
#define __HAL_DBGMCU_FREEZE_TIM8() SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM8_STOP) | |||
#define __HAL_DBGMCU_UNFREEZE_TIM8() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM8_STOP) | |||
#endif | |||
#if defined (DBGMCU_CR_DBG_TIM9_STOP) | |||
/** | |||
* @brief TIM9 Peripherals Debug mode | |||
*/ | |||
#define __HAL_DBGMCU_FREEZE_TIM9() SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM9_STOP) | |||
#define __HAL_DBGMCU_UNFREEZE_TIM9() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM9_STOP) | |||
#endif | |||
#if defined (DBGMCU_CR_DBG_TIM10_STOP) | |||
/** | |||
* @brief TIM10 Peripherals Debug mode | |||
*/ | |||
#define __HAL_DBGMCU_FREEZE_TIM10() SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM10_STOP) | |||
#define __HAL_DBGMCU_UNFREEZE_TIM10() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM10_STOP) | |||
#endif | |||
#if defined (DBGMCU_CR_DBG_TIM11_STOP) | |||
/** | |||
* @brief TIM11 Peripherals Debug mode | |||
*/ | |||
#define __HAL_DBGMCU_FREEZE_TIM11() SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM11_STOP) | |||
#define __HAL_DBGMCU_UNFREEZE_TIM11() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM11_STOP) | |||
#endif | |||
#if defined (DBGMCU_CR_DBG_TIM15_STOP) | |||
/** | |||
* @brief TIM15 Peripherals Debug mode | |||
*/ | |||
#define __HAL_DBGMCU_FREEZE_TIM15() SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM15_STOP) | |||
#define __HAL_DBGMCU_UNFREEZE_TIM15() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM15_STOP) | |||
#endif | |||
#if defined (DBGMCU_CR_DBG_TIM16_STOP) | |||
/** | |||
* @brief TIM16 Peripherals Debug mode | |||
*/ | |||
#define __HAL_DBGMCU_FREEZE_TIM16() SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM16_STOP) | |||
#define __HAL_DBGMCU_UNFREEZE_TIM16() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM16_STOP) | |||
#endif | |||
#if defined (DBGMCU_CR_DBG_TIM17_STOP) | |||
/** | |||
* @brief TIM17 Peripherals Debug mode | |||
*/ | |||
#define __HAL_DBGMCU_FREEZE_TIM17() SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM17_STOP) | |||
#define __HAL_DBGMCU_UNFREEZE_TIM17() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM17_STOP) | |||
#endif | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup HAL_Private_Macros HAL Private Macros | |||
* @{ | |||
*/ | |||
#define IS_TICKFREQ(FREQ) (((FREQ) == HAL_TICK_FREQ_10HZ) || \ | |||
((FREQ) == HAL_TICK_FREQ_100HZ) || \ | |||
((FREQ) == HAL_TICK_FREQ_1KHZ)) | |||
/** | |||
* @} | |||
*/ | |||
/* Exported functions --------------------------------------------------------*/ | |||
/** @addtogroup HAL_Exported_Functions | |||
* @{ | |||
*/ | |||
/** @addtogroup HAL_Exported_Functions_Group1 | |||
* @{ | |||
*/ | |||
/* Initialization and de-initialization functions ******************************/ | |||
HAL_StatusTypeDef HAL_Init(void); | |||
HAL_StatusTypeDef HAL_DeInit(void); | |||
void HAL_MspInit(void); | |||
void HAL_MspDeInit(void); | |||
HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority); | |||
/** | |||
* @} | |||
*/ | |||
/** @addtogroup HAL_Exported_Functions_Group2 | |||
* @{ | |||
*/ | |||
/* Peripheral Control functions ************************************************/ | |||
void HAL_IncTick(void); | |||
void HAL_Delay(uint32_t Delay); | |||
uint32_t HAL_GetTick(void); | |||
uint32_t HAL_GetTickPrio(void); | |||
HAL_StatusTypeDef HAL_SetTickFreq(HAL_TickFreqTypeDef Freq); | |||
HAL_TickFreqTypeDef HAL_GetTickFreq(void); | |||
void HAL_SuspendTick(void); | |||
void HAL_ResumeTick(void); | |||
uint32_t HAL_GetHalVersion(void); | |||
uint32_t HAL_GetREVID(void); | |||
uint32_t HAL_GetDEVID(void); | |||
uint32_t HAL_GetUIDw0(void); | |||
uint32_t HAL_GetUIDw1(void); | |||
uint32_t HAL_GetUIDw2(void); | |||
void HAL_DBGMCU_EnableDBGSleepMode(void); | |||
void HAL_DBGMCU_DisableDBGSleepMode(void); | |||
void HAL_DBGMCU_EnableDBGStopMode(void); | |||
void HAL_DBGMCU_DisableDBGStopMode(void); | |||
void HAL_DBGMCU_EnableDBGStandbyMode(void); | |||
void HAL_DBGMCU_DisableDBGStandbyMode(void); | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Private types -------------------------------------------------------------*/ | |||
/* Private variables ---------------------------------------------------------*/ | |||
/** @defgroup HAL_Private_Variables HAL Private Variables | |||
* @{ | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Private constants ---------------------------------------------------------*/ | |||
/** @defgroup HAL_Private_Constants HAL Private Constants | |||
* @{ | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Private macros ------------------------------------------------------------*/ | |||
/* Private functions ---------------------------------------------------------*/ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
#ifdef __cplusplus | |||
} | |||
#endif | |||
#endif /* __STM32F1xx_HAL_H */ | |||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@@ -0,0 +1,710 @@ | |||
/** | |||
****************************************************************************** | |||
* @file stm32f1xx_hal_adc_ex.h | |||
* @author MCD Application Team | |||
* @brief Header file of ADC HAL extension module. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© Copyright (c) 2016 STMicroelectronics. | |||
* All rights reserved.</center></h2> | |||
* | |||
* This software component is licensed by ST under BSD 3-Clause license, | |||
* the "License"; You may not use this file except in compliance with the | |||
* License. You may obtain a copy of the License at: | |||
* opensource.org/licenses/BSD-3-Clause | |||
* | |||
****************************************************************************** | |||
*/ | |||
/* Define to prevent recursive inclusion -------------------------------------*/ | |||
#ifndef __STM32F1xx_HAL_ADC_EX_H | |||
#define __STM32F1xx_HAL_ADC_EX_H | |||
#ifdef __cplusplus | |||
extern "C" { | |||
#endif | |||
/* Includes ------------------------------------------------------------------*/ | |||
#include "stm32f1xx_hal_def.h" | |||
/** @addtogroup STM32F1xx_HAL_Driver | |||
* @{ | |||
*/ | |||
/** @addtogroup ADCEx | |||
* @{ | |||
*/ | |||
/* Exported types ------------------------------------------------------------*/ | |||
/** @defgroup ADCEx_Exported_Types ADCEx Exported Types | |||
* @{ | |||
*/ | |||
/** | |||
* @brief ADC Configuration injected Channel structure definition | |||
* @note Parameters of this structure are shared within 2 scopes: | |||
* - Scope channel: InjectedChannel, InjectedRank, InjectedSamplingTime, InjectedOffset | |||
* - Scope injected group (affects all channels of injected group): InjectedNbrOfConversion, InjectedDiscontinuousConvMode, | |||
* AutoInjectedConv, ExternalTrigInjecConvEdge, ExternalTrigInjecConv. | |||
* @note The setting of these parameters with function HAL_ADCEx_InjectedConfigChannel() is conditioned to ADC state. | |||
* ADC state can be either: | |||
* - For all parameters: ADC disabled (this is the only possible ADC state to modify parameter 'ExternalTrigInjecConv') | |||
* - For all except parameters 'ExternalTrigInjecConv': ADC enabled without conversion on going on injected group. | |||
*/ | |||
typedef struct | |||
{ | |||
uint32_t InjectedChannel; /*!< Selection of ADC channel to configure | |||
This parameter can be a value of @ref ADC_channels | |||
Note: Depending on devices, some channels may not be available on package pins. Refer to device datasheet for channels availability. | |||
Note: On STM32F1 devices with several ADC: Only ADC1 can access internal measurement channels (VrefInt/TempSensor) | |||
Note: On STM32F10xx8 and STM32F10xxB devices: A low-amplitude voltage glitch may be generated (on ADC input 0) on the PA0 pin, when the ADC is converting with injection trigger. | |||
It is advised to distribute the analog channels so that Channel 0 is configured as an injected channel. | |||
Refer to errata sheet of these devices for more details. */ | |||
uint32_t InjectedRank; /*!< Rank in the injected group sequencer | |||
This parameter must be a value of @ref ADCEx_injected_rank | |||
Note: In case of need to disable a channel or change order of conversion sequencer, rank containing a previous channel setting can be overwritten by the new channel setting (or parameter number of conversions can be adjusted) */ | |||
uint32_t InjectedSamplingTime; /*!< Sampling time value to be set for the selected channel. | |||
Unit: ADC clock cycles | |||
Conversion time is the addition of sampling time and processing time (12.5 ADC clock cycles at ADC resolution 12 bits). | |||
This parameter can be a value of @ref ADC_sampling_times | |||
Caution: This parameter updates the parameter property of the channel, that can be used into regular and/or injected groups. | |||
If this same channel has been previously configured in the other group (regular/injected), it will be updated to last setting. | |||
Note: In case of usage of internal measurement channels (VrefInt/TempSensor), | |||
sampling time constraints must be respected (sampling time can be adjusted in function of ADC clock frequency and sampling time setting) | |||
Refer to device datasheet for timings values, parameters TS_vrefint, TS_temp (values rough order: 5us to 17.1us min). */ | |||
uint32_t InjectedOffset; /*!< Defines the offset to be subtracted from the raw converted data (for channels set on injected group only). | |||
Offset value must be a positive number. | |||
Depending of ADC resolution selected (12, 10, 8 or 6 bits), | |||
this parameter must be a number between Min_Data = 0x000 and Max_Data = 0xFFF, 0x3FF, 0xFF or 0x3F respectively. */ | |||
uint32_t InjectedNbrOfConversion; /*!< Specifies the number of ranks that will be converted within the injected group sequencer. | |||
To use the injected group sequencer and convert several ranks, parameter 'ScanConvMode' must be enabled. | |||
This parameter must be a number between Min_Data = 1 and Max_Data = 4. | |||
Caution: this setting impacts the entire injected group. Therefore, call of HAL_ADCEx_InjectedConfigChannel() to | |||
configure a channel on injected group can impact the configuration of other channels previously set. */ | |||
FunctionalState InjectedDiscontinuousConvMode; /*!< Specifies whether the conversions sequence of injected group is performed in Complete-sequence/Discontinuous-sequence (main sequence subdivided in successive parts). | |||
Discontinuous mode is used only if sequencer is enabled (parameter 'ScanConvMode'). If sequencer is disabled, this parameter is discarded. | |||
Discontinuous mode can be enabled only if continuous mode is disabled. If continuous mode is enabled, this parameter setting is discarded. | |||
This parameter can be set to ENABLE or DISABLE. | |||
Note: For injected group, number of discontinuous ranks increment is fixed to one-by-one. | |||
Caution: this setting impacts the entire injected group. Therefore, call of HAL_ADCEx_InjectedConfigChannel() to | |||
configure a channel on injected group can impact the configuration of other channels previously set. */ | |||
FunctionalState AutoInjectedConv; /*!< Enables or disables the selected ADC automatic injected group conversion after regular one | |||
This parameter can be set to ENABLE or DISABLE. | |||
Note: To use Automatic injected conversion, discontinuous mode must be disabled ('DiscontinuousConvMode' and 'InjectedDiscontinuousConvMode' set to DISABLE) | |||
Note: To use Automatic injected conversion, injected group external triggers must be disabled ('ExternalTrigInjecConv' set to ADC_SOFTWARE_START) | |||
Note: In case of DMA used with regular group: if DMA configured in normal mode (single shot) JAUTO will be stopped upon DMA transfer complete. | |||
To maintain JAUTO always enabled, DMA must be configured in circular mode. | |||
Caution: this setting impacts the entire injected group. Therefore, call of HAL_ADCEx_InjectedConfigChannel() to | |||
configure a channel on injected group can impact the configuration of other channels previously set. */ | |||
uint32_t ExternalTrigInjecConv; /*!< Selects the external event used to trigger the conversion start of injected group. | |||
If set to ADC_INJECTED_SOFTWARE_START, external triggers are disabled. | |||
If set to external trigger source, triggering is on event rising edge. | |||
This parameter can be a value of @ref ADCEx_External_trigger_source_Injected | |||
Note: This parameter must be modified when ADC is disabled (before ADC start conversion or after ADC stop conversion). | |||
If ADC is enabled, this parameter setting is bypassed without error reporting (as it can be the expected behaviour in case of another parameter update on the fly) | |||
Caution: this setting impacts the entire injected group. Therefore, call of HAL_ADCEx_InjectedConfigChannel() to | |||
configure a channel on injected group can impact the configuration of other channels previously set. */ | |||
}ADC_InjectionConfTypeDef; | |||
#if defined (STM32F103x6) || defined (STM32F103xB) || defined (STM32F105xC) || defined (STM32F107xC) || defined (STM32F103xE) || defined (STM32F103xG) | |||
/** | |||
* @brief Structure definition of ADC multimode | |||
* @note The setting of these parameters with function HAL_ADCEx_MultiModeConfigChannel() is conditioned to ADCs state (both ADCs of the common group). | |||
* State of ADCs of the common group must be: disabled. | |||
*/ | |||
typedef struct | |||
{ | |||
uint32_t Mode; /*!< Configures the ADC to operate in independent or multi mode. | |||
This parameter can be a value of @ref ADCEx_Common_mode | |||
Note: In dual mode, a change of channel configuration generates a restart that can produce a loss of synchronization. It is recommended to disable dual mode before any configuration change. | |||
Note: In case of simultaneous mode used: Exactly the same sampling time should be configured for the 2 channels that will be sampled simultaneously by ACD1 and ADC2. | |||
Note: In case of interleaved mode used: To avoid overlap between conversions, maximum sampling time allowed is 7 ADC clock cycles for fast interleaved mode and 14 ADC clock cycles for slow interleaved mode. | |||
Note: Some multimode parameters are fixed on STM32F1 and can be configured on other STM32 devices with several ADC (multimode configuration structure can have additional parameters). | |||
The equivalences are: | |||
- Parameter 'DMAAccessMode': On STM32F1, this parameter is fixed to 1 DMA channel (one DMA channel for both ADC, DMA of ADC master). On other STM32 devices with several ADC, this is equivalent to parameter 'ADC_DMAACCESSMODE_12_10_BITS'. | |||
- Parameter 'TwoSamplingDelay': On STM32F1, this parameter is fixed to 7 or 14 ADC clock cycles depending on fast or slow interleaved mode selected. On other STM32 devices with several ADC, this is equivalent to parameter 'ADC_TWOSAMPLINGDELAY_7CYCLES' (for fast interleaved mode). */ | |||
}ADC_MultiModeTypeDef; | |||
#endif /* defined STM32F103x6 || defined STM32F103xB || defined STM32F105xC || defined STM32F107xC || defined STM32F103xE || defined STM32F103xG */ | |||
/** | |||
* @} | |||
*/ | |||
/* Exported constants --------------------------------------------------------*/ | |||
/** @defgroup ADCEx_Exported_Constants ADCEx Exported Constants | |||
* @{ | |||
*/ | |||
/** @defgroup ADCEx_injected_rank ADCEx rank into injected group | |||
* @{ | |||
*/ | |||
#define ADC_INJECTED_RANK_1 0x00000001U | |||
#define ADC_INJECTED_RANK_2 0x00000002U | |||
#define ADC_INJECTED_RANK_3 0x00000003U | |||
#define ADC_INJECTED_RANK_4 0x00000004U | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup ADCEx_External_trigger_edge_Injected ADCEx external trigger enable for injected group | |||
* @{ | |||
*/ | |||
#define ADC_EXTERNALTRIGINJECCONV_EDGE_NONE 0x00000000U | |||
#define ADC_EXTERNALTRIGINJECCONV_EDGE_RISING ((uint32_t)ADC_CR2_JEXTTRIG) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup ADC_External_trigger_source_Regular ADC External trigger selection for regular group | |||
* @{ | |||
*/ | |||
/*!< List of external triggers with generic trigger name, independently of */ | |||
/* ADC target, sorted by trigger name: */ | |||
/*!< External triggers of regular group for ADC1&ADC2 only */ | |||
#define ADC_EXTERNALTRIGCONV_T1_CC1 ADC1_2_EXTERNALTRIG_T1_CC1 | |||
#define ADC_EXTERNALTRIGCONV_T1_CC2 ADC1_2_EXTERNALTRIG_T1_CC2 | |||
#define ADC_EXTERNALTRIGCONV_T2_CC2 ADC1_2_EXTERNALTRIG_T2_CC2 | |||
#define ADC_EXTERNALTRIGCONV_T3_TRGO ADC1_2_EXTERNALTRIG_T3_TRGO | |||
#define ADC_EXTERNALTRIGCONV_T4_CC4 ADC1_2_EXTERNALTRIG_T4_CC4 | |||
#define ADC_EXTERNALTRIGCONV_EXT_IT11 ADC1_2_EXTERNALTRIG_EXT_IT11 | |||
#if defined (STM32F103xE) || defined (STM32F103xG) | |||
/*!< External triggers of regular group for ADC3 only */ | |||
#define ADC_EXTERNALTRIGCONV_T2_CC3 ADC3_EXTERNALTRIG_T2_CC3 | |||
#define ADC_EXTERNALTRIGCONV_T3_CC1 ADC3_EXTERNALTRIG_T3_CC1 | |||
#define ADC_EXTERNALTRIGCONV_T5_CC1 ADC3_EXTERNALTRIG_T5_CC1 | |||
#define ADC_EXTERNALTRIGCONV_T5_CC3 ADC3_EXTERNALTRIG_T5_CC3 | |||
#define ADC_EXTERNALTRIGCONV_T8_CC1 ADC3_EXTERNALTRIG_T8_CC1 | |||
#endif /* STM32F103xE || defined STM32F103xG */ | |||
/*!< External triggers of regular group for all ADC instances */ | |||
#define ADC_EXTERNALTRIGCONV_T1_CC3 ADC1_2_3_EXTERNALTRIG_T1_CC3 | |||
#if defined (STM32F101xE) || defined (STM32F103xE) || defined (STM32F103xG) || defined (STM32F105xC) || defined (STM32F107xC) | |||
/*!< Note: TIM8_TRGO is available on ADC1 and ADC2 only in high-density and */ | |||
/* XL-density devices. */ | |||
/* To use it on ADC or ADC2, a remap of trigger must be done from */ | |||
/* EXTI line 11 to TIM8_TRGO with macro: */ | |||
/* __HAL_AFIO_REMAP_ADC1_ETRGREG_ENABLE() */ | |||
/* __HAL_AFIO_REMAP_ADC2_ETRGREG_ENABLE() */ | |||
/* Note for internal constant value management: If TIM8_TRGO is available, */ | |||
/* its definition is set to value for ADC1&ADC2 by default and changed to */ | |||
/* value for ADC3 by HAL ADC driver if ADC3 is selected. */ | |||
#define ADC_EXTERNALTRIGCONV_T8_TRGO ADC1_2_EXTERNALTRIG_T8_TRGO | |||
#endif /* STM32F101xE || STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */ | |||
#define ADC_SOFTWARE_START ADC1_2_3_SWSTART | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup ADCEx_External_trigger_source_Injected ADCEx External trigger selection for injected group | |||
* @{ | |||
*/ | |||
/*!< List of external triggers with generic trigger name, independently of */ | |||
/* ADC target, sorted by trigger name: */ | |||
/*!< External triggers of injected group for ADC1&ADC2 only */ | |||
#define ADC_EXTERNALTRIGINJECCONV_T2_TRGO ADC1_2_EXTERNALTRIGINJEC_T2_TRGO | |||
#define ADC_EXTERNALTRIGINJECCONV_T2_CC1 ADC1_2_EXTERNALTRIGINJEC_T2_CC1 | |||
#define ADC_EXTERNALTRIGINJECCONV_T3_CC4 ADC1_2_EXTERNALTRIGINJEC_T3_CC4 | |||
#define ADC_EXTERNALTRIGINJECCONV_T4_TRGO ADC1_2_EXTERNALTRIGINJEC_T4_TRGO | |||
#define ADC_EXTERNALTRIGINJECCONV_EXT_IT15 ADC1_2_EXTERNALTRIGINJEC_EXT_IT15 | |||
#if defined (STM32F103xE) || defined (STM32F103xG) | |||
/*!< External triggers of injected group for ADC3 only */ | |||
#define ADC_EXTERNALTRIGINJECCONV_T4_CC3 ADC3_EXTERNALTRIGINJEC_T4_CC3 | |||
#define ADC_EXTERNALTRIGINJECCONV_T8_CC2 ADC3_EXTERNALTRIGINJEC_T8_CC2 | |||
#define ADC_EXTERNALTRIGINJECCONV_T5_TRGO ADC3_EXTERNALTRIGINJEC_T5_TRGO | |||
#define ADC_EXTERNALTRIGINJECCONV_T5_CC4 ADC3_EXTERNALTRIGINJEC_T5_CC4 | |||
#endif /* STM32F103xE || defined STM32F103xG */ | |||
/*!< External triggers of injected group for all ADC instances */ | |||
#define ADC_EXTERNALTRIGINJECCONV_T1_CC4 ADC1_2_3_EXTERNALTRIGINJEC_T1_CC4 | |||
#define ADC_EXTERNALTRIGINJECCONV_T1_TRGO ADC1_2_3_EXTERNALTRIGINJEC_T1_TRGO | |||
#if defined (STM32F101xE) || defined (STM32F103xE) || defined (STM32F103xG) || defined (STM32F105xC) || defined (STM32F107xC) | |||
/*!< Note: TIM8_CC4 is available on ADC1 and ADC2 only in high-density and */ | |||
/* XL-density devices. */ | |||
/* To use it on ADC1 or ADC2, a remap of trigger must be done from */ | |||
/* EXTI line 11 to TIM8_CC4 with macro: */ | |||
/* __HAL_AFIO_REMAP_ADC1_ETRGINJ_ENABLE() */ | |||
/* __HAL_AFIO_REMAP_ADC2_ETRGINJ_ENABLE() */ | |||
/* Note for internal constant value management: If TIM8_CC4 is available, */ | |||
/* its definition is set to value for ADC1&ADC2 by default and changed to */ | |||
/* value for ADC3 by HAL ADC driver if ADC3 is selected. */ | |||
#define ADC_EXTERNALTRIGINJECCONV_T8_CC4 ADC1_2_EXTERNALTRIGINJEC_T8_CC4 | |||
#endif /* STM32F101xE || STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */ | |||
#define ADC_INJECTED_SOFTWARE_START ADC1_2_3_JSWSTART | |||
/** | |||
* @} | |||
*/ | |||
#if defined (STM32F103x6) || defined (STM32F103xB) || defined (STM32F105xC) || defined (STM32F107xC) || defined (STM32F103xE) || defined (STM32F103xG) | |||
/** @defgroup ADCEx_Common_mode ADC Extended Dual ADC Mode | |||
* @{ | |||
*/ | |||
#define ADC_MODE_INDEPENDENT 0x00000000U /*!< ADC dual mode disabled (ADC independent mode) */ | |||
#define ADC_DUALMODE_REGSIMULT_INJECSIMULT ((uint32_t)( ADC_CR1_DUALMOD_0)) /*!< ADC dual mode enabled: Combined regular simultaneous + injected simultaneous mode, on groups regular and injected */ | |||
#define ADC_DUALMODE_REGSIMULT_ALTERTRIG ((uint32_t)( ADC_CR1_DUALMOD_1 )) /*!< ADC dual mode enabled: Combined regular simultaneous + alternate trigger mode, on groups regular and injected */ | |||
#define ADC_DUALMODE_INJECSIMULT_INTERLFAST ((uint32_t)( ADC_CR1_DUALMOD_1 | ADC_CR1_DUALMOD_0)) /*!< ADC dual mode enabled: Combined injected simultaneous + fast interleaved mode, on groups regular and injected (delay between ADC sampling phases: 7 ADC clock cycles (equivalent to parameter "TwoSamplingDelay" set to "ADC_TWOSAMPLINGDELAY_7CYCLES" on other STM32 devices)) */ | |||
#define ADC_DUALMODE_INJECSIMULT_INTERLSLOW ((uint32_t)( ADC_CR1_DUALMOD_2 )) /*!< ADC dual mode enabled: Combined injected simultaneous + slow Interleaved mode, on groups regular and injected (delay between ADC sampling phases: 14 ADC clock cycles (equivalent to parameter "TwoSamplingDelay" set to "ADC_TWOSAMPLINGDELAY_7CYCLES" on other STM32 devices)) */ | |||
#define ADC_DUALMODE_INJECSIMULT ((uint32_t)( ADC_CR1_DUALMOD_2 | ADC_CR1_DUALMOD_0)) /*!< ADC dual mode enabled: Injected simultaneous mode, on group injected */ | |||
#define ADC_DUALMODE_REGSIMULT ((uint32_t)( ADC_CR1_DUALMOD_2 | ADC_CR1_DUALMOD_1 )) /*!< ADC dual mode enabled: Regular simultaneous mode, on group regular */ | |||
#define ADC_DUALMODE_INTERLFAST ((uint32_t)( ADC_CR1_DUALMOD_2 | ADC_CR1_DUALMOD_1 | ADC_CR1_DUALMOD_0)) /*!< ADC dual mode enabled: Fast interleaved mode, on group regular (delay between ADC sampling phases: 7 ADC clock cycles (equivalent to parameter "TwoSamplingDelay" set to "ADC_TWOSAMPLINGDELAY_7CYCLES" on other STM32 devices)) */ | |||
#define ADC_DUALMODE_INTERLSLOW ((uint32_t)(ADC_CR1_DUALMOD_3 )) /*!< ADC dual mode enabled: Slow interleaved mode, on group regular (delay between ADC sampling phases: 14 ADC clock cycles (equivalent to parameter "TwoSamplingDelay" set to "ADC_TWOSAMPLINGDELAY_7CYCLES" on other STM32 devices)) */ | |||
#define ADC_DUALMODE_ALTERTRIG ((uint32_t)(ADC_CR1_DUALMOD_3 | ADC_CR1_DUALMOD_0)) /*!< ADC dual mode enabled: Alternate trigger mode, on group injected */ | |||
/** | |||
* @} | |||
*/ | |||
#endif /* defined STM32F103x6 || defined STM32F103xB || defined STM32F105xC || defined STM32F107xC || defined STM32F103xE || defined STM32F103xG */ | |||
/** | |||
* @} | |||
*/ | |||
/* Private constants ---------------------------------------------------------*/ | |||
/** @addtogroup ADCEx_Private_Constants ADCEx Private Constants | |||
* @{ | |||
*/ | |||
/** @defgroup ADCEx_Internal_HAL_driver_Ext_trig_src_Regular ADC Extended Internal HAL driver trigger selection for regular group | |||
* @{ | |||
*/ | |||
/* List of external triggers of regular group for ADC1, ADC2, ADC3 (if ADC */ | |||
/* instance is available on the selected device). */ | |||
/* (used internally by HAL driver. To not use into HAL structure parameters) */ | |||
/* External triggers of regular group for ADC1&ADC2 (if ADCx available) */ | |||
#define ADC1_2_EXTERNALTRIG_T1_CC1 0x00000000U | |||
#define ADC1_2_EXTERNALTRIG_T1_CC2 ((uint32_t)( ADC_CR2_EXTSEL_0)) | |||
#define ADC1_2_EXTERNALTRIG_T2_CC2 ((uint32_t)( ADC_CR2_EXTSEL_1 | ADC_CR2_EXTSEL_0)) | |||
#define ADC1_2_EXTERNALTRIG_T3_TRGO ((uint32_t)(ADC_CR2_EXTSEL_2 )) | |||
#define ADC1_2_EXTERNALTRIG_T4_CC4 ((uint32_t)(ADC_CR2_EXTSEL_2 | ADC_CR2_EXTSEL_0)) | |||
#define ADC1_2_EXTERNALTRIG_EXT_IT11 ((uint32_t)(ADC_CR2_EXTSEL_2 | ADC_CR2_EXTSEL_1 )) | |||
#if defined (STM32F101xE) || defined (STM32F103xE) || defined (STM32F103xG) | |||
/* Note: TIM8_TRGO is available on ADC1 and ADC2 only in high-density and */ | |||
/* XL-density devices. */ | |||
#define ADC1_2_EXTERNALTRIG_T8_TRGO ADC1_2_EXTERNALTRIG_EXT_IT11 | |||
#endif | |||
#if defined (STM32F103xE) || defined (STM32F103xG) | |||
/* External triggers of regular group for ADC3 */ | |||
#define ADC3_EXTERNALTRIG_T3_CC1 ADC1_2_EXTERNALTRIG_T1_CC1 | |||
#define ADC3_EXTERNALTRIG_T2_CC3 ADC1_2_EXTERNALTRIG_T1_CC2 | |||
#define ADC3_EXTERNALTRIG_T8_CC1 ADC1_2_EXTERNALTRIG_T2_CC2 | |||
#define ADC3_EXTERNALTRIG_T8_TRGO ADC1_2_EXTERNALTRIG_T3_TRGO | |||
#define ADC3_EXTERNALTRIG_T5_CC1 ADC1_2_EXTERNALTRIG_T4_CC4 | |||
#define ADC3_EXTERNALTRIG_T5_CC3 ADC1_2_EXTERNALTRIG_EXT_IT11 | |||
#endif | |||
/* External triggers of regular group for ADC1&ADC2&ADC3 (if ADCx available) */ | |||
#define ADC1_2_3_EXTERNALTRIG_T1_CC3 ((uint32_t)( ADC_CR2_EXTSEL_1 )) | |||
#define ADC1_2_3_SWSTART ((uint32_t)(ADC_CR2_EXTSEL_2 | ADC_CR2_EXTSEL_1 | ADC_CR2_EXTSEL_0)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup ADCEx_Internal_HAL_driver_Ext_trig_src_Injected ADC Extended Internal HAL driver trigger selection for injected group | |||
* @{ | |||
*/ | |||
/* List of external triggers of injected group for ADC1, ADC2, ADC3 (if ADC */ | |||
/* instance is available on the selected device). */ | |||
/* (used internally by HAL driver. To not use into HAL structure parameters) */ | |||
/* External triggers of injected group for ADC1&ADC2 (if ADCx available) */ | |||
#define ADC1_2_EXTERNALTRIGINJEC_T2_TRGO ((uint32_t)( ADC_CR2_JEXTSEL_1 )) | |||
#define ADC1_2_EXTERNALTRIGINJEC_T2_CC1 ((uint32_t)( ADC_CR2_JEXTSEL_1 | ADC_CR2_JEXTSEL_0)) | |||
#define ADC1_2_EXTERNALTRIGINJEC_T3_CC4 ((uint32_t)(ADC_CR2_JEXTSEL_2 )) | |||
#define ADC1_2_EXTERNALTRIGINJEC_T4_TRGO ((uint32_t)(ADC_CR2_JEXTSEL_2 | ADC_CR2_JEXTSEL_0)) | |||
#define ADC1_2_EXTERNALTRIGINJEC_EXT_IT15 ((uint32_t)(ADC_CR2_JEXTSEL_2 | ADC_CR2_JEXTSEL_1 )) | |||
#if defined (STM32F101xE) || defined (STM32F103xE) || defined (STM32F103xG) | |||
/* Note: TIM8_CC4 is available on ADC1 and ADC2 only in high-density and */ | |||
/* XL-density devices. */ | |||
#define ADC1_2_EXTERNALTRIGINJEC_T8_CC4 ADC1_2_EXTERNALTRIGINJEC_EXT_IT15 | |||
#endif | |||
#if defined (STM32F103xE) || defined (STM32F103xG) | |||
/* External triggers of injected group for ADC3 */ | |||
#define ADC3_EXTERNALTRIGINJEC_T4_CC3 ADC1_2_EXTERNALTRIGINJEC_T2_TRGO | |||
#define ADC3_EXTERNALTRIGINJEC_T8_CC2 ADC1_2_EXTERNALTRIGINJEC_T2_CC1 | |||
#define ADC3_EXTERNALTRIGINJEC_T8_CC4 ADC1_2_EXTERNALTRIGINJEC_T3_CC4 | |||
#define ADC3_EXTERNALTRIGINJEC_T5_TRGO ADC1_2_EXTERNALTRIGINJEC_T4_TRGO | |||
#define ADC3_EXTERNALTRIGINJEC_T5_CC4 ADC1_2_EXTERNALTRIGINJEC_EXT_IT15 | |||
#endif /* STM32F103xE || defined STM32F103xG */ | |||
/* External triggers of injected group for ADC1&ADC2&ADC3 (if ADCx available) */ | |||
#define ADC1_2_3_EXTERNALTRIGINJEC_T1_TRGO 0x00000000U | |||
#define ADC1_2_3_EXTERNALTRIGINJEC_T1_CC4 ((uint32_t)( ADC_CR2_JEXTSEL_0)) | |||
#define ADC1_2_3_JSWSTART ((uint32_t)(ADC_CR2_JEXTSEL_2 | ADC_CR2_JEXTSEL_1 | ADC_CR2_JEXTSEL_0)) | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Exported macro ------------------------------------------------------------*/ | |||
/* Private macro -------------------------------------------------------------*/ | |||
/** @defgroup ADCEx_Private_Macro ADCEx Private Macro | |||
* @{ | |||
*/ | |||
/* Macro reserved for internal HAL driver usage, not intended to be used in */ | |||
/* code of final user. */ | |||
/** | |||
* @brief For devices with 3 ADCs: Defines the external trigger source | |||
* for regular group according to ADC into common group ADC1&ADC2 or | |||
* ADC3 (some triggers with same source have different value to | |||
* be programmed into ADC EXTSEL bits of CR2 register). | |||
* For devices with 2 ADCs or less: this macro makes no change. | |||
* @param __HANDLE__: ADC handle | |||
* @param __EXT_TRIG_CONV__: External trigger selected for regular group. | |||
* @retval External trigger to be programmed into EXTSEL bits of CR2 register | |||
*/ | |||
#if defined (STM32F103xE) || defined (STM32F103xG) | |||
#define ADC_CFGR_EXTSEL(__HANDLE__, __EXT_TRIG_CONV__) \ | |||
(( (((__HANDLE__)->Instance) == ADC3) \ | |||
)? \ | |||
( ( (__EXT_TRIG_CONV__) == ADC_EXTERNALTRIGCONV_T8_TRGO \ | |||
)? \ | |||
(ADC3_EXTERNALTRIG_T8_TRGO) \ | |||
: \ | |||
(__EXT_TRIG_CONV__) \ | |||
) \ | |||
: \ | |||
(__EXT_TRIG_CONV__) \ | |||
) | |||
#else | |||
#define ADC_CFGR_EXTSEL(__HANDLE__, __EXT_TRIG_CONV__) \ | |||
(__EXT_TRIG_CONV__) | |||
#endif /* STM32F103xE || STM32F103xG */ | |||
/** | |||
* @brief For devices with 3 ADCs: Defines the external trigger source | |||
* for injected group according to ADC into common group ADC1&ADC2 or | |||
* ADC3 (some triggers with same source have different value to | |||
* be programmed into ADC JEXTSEL bits of CR2 register). | |||
* For devices with 2 ADCs or less: this macro makes no change. | |||
* @param __HANDLE__: ADC handle | |||
* @param __EXT_TRIG_INJECTCONV__: External trigger selected for injected group. | |||
* @retval External trigger to be programmed into JEXTSEL bits of CR2 register | |||
*/ | |||
#if defined (STM32F103xE) || defined (STM32F103xG) | |||
#define ADC_CFGR_JEXTSEL(__HANDLE__, __EXT_TRIG_INJECTCONV__) \ | |||
(( (((__HANDLE__)->Instance) == ADC3) \ | |||
)? \ | |||
( ( (__EXT_TRIG_INJECTCONV__) == ADC_EXTERNALTRIGINJECCONV_T8_CC4 \ | |||
)? \ | |||
(ADC3_EXTERNALTRIGINJEC_T8_CC4) \ | |||
: \ | |||
(__EXT_TRIG_INJECTCONV__) \ | |||
) \ | |||
: \ | |||
(__EXT_TRIG_INJECTCONV__) \ | |||
) | |||
#else | |||
#define ADC_CFGR_JEXTSEL(__HANDLE__, __EXT_TRIG_INJECTCONV__) \ | |||
(__EXT_TRIG_INJECTCONV__) | |||
#endif /* STM32F103xE || STM32F103xG */ | |||
/** | |||
* @brief Verification if multimode is enabled for the selected ADC (multimode ADC master or ADC slave) (applicable for devices with several ADCs) | |||
* @param __HANDLE__: ADC handle | |||
* @retval Multimode state: RESET if multimode is disabled, other value if multimode is enabled | |||
*/ | |||
#if defined (STM32F103x6) || defined (STM32F103xB) || defined (STM32F105xC) || defined (STM32F107xC) || defined (STM32F103xE) || defined (STM32F103xG) | |||
#define ADC_MULTIMODE_IS_ENABLE(__HANDLE__) \ | |||
(( (((__HANDLE__)->Instance) == ADC1) || (((__HANDLE__)->Instance) == ADC2) \ | |||
)? \ | |||
(ADC1->CR1 & ADC_CR1_DUALMOD) \ | |||
: \ | |||
(RESET) \ | |||
) | |||
#else | |||
#define ADC_MULTIMODE_IS_ENABLE(__HANDLE__) \ | |||
(RESET) | |||
#endif /* defined STM32F103x6 || defined STM32F103xB || defined STM32F105xC || defined STM32F107xC || defined STM32F103xE || defined STM32F103xG */ | |||
/** | |||
* @brief Verification of condition for ADC start conversion: ADC must be in non-multimode, or multimode with handle of ADC master (applicable for devices with several ADCs) | |||
* @param __HANDLE__: ADC handle | |||
* @retval None | |||
*/ | |||
#if defined (STM32F103x6) || defined (STM32F103xB) || defined (STM32F105xC) || defined (STM32F107xC) || defined (STM32F103xE) || defined (STM32F103xG) | |||
#define ADC_NONMULTIMODE_OR_MULTIMODEMASTER(__HANDLE__) \ | |||
(( (((__HANDLE__)->Instance) == ADC2) \ | |||
)? \ | |||
((ADC1->CR1 & ADC_CR1_DUALMOD) == RESET) \ | |||
: \ | |||
(!RESET) \ | |||
) | |||
#else | |||
#define ADC_NONMULTIMODE_OR_MULTIMODEMASTER(__HANDLE__) \ | |||
(!RESET) | |||
#endif /* defined STM32F103x6 || defined STM32F103xB || defined STM32F105xC || defined STM32F107xC || defined STM32F103xE || defined STM32F103xG */ | |||
/** | |||
* @brief Check ADC multimode setting: In case of multimode, check whether ADC master of the selected ADC has feature auto-injection enabled (applicable for devices with several ADCs) | |||
* @param __HANDLE__: ADC handle | |||
* @retval None | |||
*/ | |||
#if defined (STM32F103x6) || defined (STM32F103xB) || defined (STM32F105xC) || defined (STM32F107xC) || defined (STM32F103xE) || defined (STM32F103xG) | |||
#define ADC_MULTIMODE_AUTO_INJECTED(__HANDLE__) \ | |||
(( (((__HANDLE__)->Instance) == ADC1) || (((__HANDLE__)->Instance) == ADC2) \ | |||
)? \ | |||
(ADC1->CR1 & ADC_CR1_JAUTO) \ | |||
: \ | |||
(RESET) \ | |||
) | |||
#else | |||
#define ADC_MULTIMODE_AUTO_INJECTED(__HANDLE__) \ | |||
(RESET) | |||
#endif /* defined STM32F103x6 || defined STM32F103xB || defined STM32F105xC || defined STM32F107xC || defined STM32F103xE || defined STM32F103xG */ | |||
#if defined (STM32F103x6) || defined (STM32F103xB) || defined (STM32F105xC) || defined (STM32F107xC) || defined (STM32F103xE) || defined (STM32F103xG) | |||
/** | |||
* @brief Set handle of the other ADC sharing the common multimode settings | |||
* @param __HANDLE__: ADC handle | |||
* @param __HANDLE_OTHER_ADC__: other ADC handle | |||
* @retval None | |||
*/ | |||
#define ADC_COMMON_ADC_OTHER(__HANDLE__, __HANDLE_OTHER_ADC__) \ | |||
((__HANDLE_OTHER_ADC__)->Instance = ADC2) | |||
/** | |||
* @brief Set handle of the ADC slave associated to the ADC master | |||
* On STM32F1 devices, ADC slave is always ADC2 (this can be different | |||
* on other STM32 devices) | |||
* @param __HANDLE_MASTER__: ADC master handle | |||
* @param __HANDLE_SLAVE__: ADC slave handle | |||
* @retval None | |||
*/ | |||
#define ADC_MULTI_SLAVE(__HANDLE_MASTER__, __HANDLE_SLAVE__) \ | |||
((__HANDLE_SLAVE__)->Instance = ADC2) | |||
#endif /* defined STM32F103x6 || defined STM32F103xB || defined STM32F105xC || defined STM32F107xC || defined STM32F103xE || defined STM32F103xG */ | |||
#define IS_ADC_INJECTED_RANK(CHANNEL) (((CHANNEL) == ADC_INJECTED_RANK_1) || \ | |||
((CHANNEL) == ADC_INJECTED_RANK_2) || \ | |||
((CHANNEL) == ADC_INJECTED_RANK_3) || \ | |||
((CHANNEL) == ADC_INJECTED_RANK_4)) | |||
#define IS_ADC_EXTTRIGINJEC_EDGE(EDGE) (((EDGE) == ADC_EXTERNALTRIGINJECCONV_EDGE_NONE) || \ | |||
((EDGE) == ADC_EXTERNALTRIGINJECCONV_EDGE_RISING)) | |||
/** @defgroup ADCEx_injected_nb_conv_verification ADCEx injected nb conv verification | |||
* @{ | |||
*/ | |||
#define IS_ADC_INJECTED_NB_CONV(LENGTH) (((LENGTH) >= 1U) && ((LENGTH) <= 4U)) | |||
/** | |||
* @} | |||
*/ | |||
#if defined (STM32F100xB) || defined (STM32F100xE) || defined (STM32F101x6) || defined (STM32F101xB) || defined (STM32F102x6) || defined (STM32F102xB) || defined (STM32F103x6) || defined (STM32F103xB) || defined (STM32F105xC) || defined (STM32F107xC) | |||
#define IS_ADC_EXTTRIG(REGTRIG) (((REGTRIG) == ADC_EXTERNALTRIGCONV_T1_CC1) || \ | |||
((REGTRIG) == ADC_EXTERNALTRIGCONV_T1_CC2) || \ | |||
((REGTRIG) == ADC_EXTERNALTRIGCONV_T2_CC2) || \ | |||
((REGTRIG) == ADC_EXTERNALTRIGCONV_T3_TRGO) || \ | |||
((REGTRIG) == ADC_EXTERNALTRIGCONV_T4_CC4) || \ | |||
((REGTRIG) == ADC_EXTERNALTRIGCONV_EXT_IT11) || \ | |||
((REGTRIG) == ADC_SOFTWARE_START)) | |||
#endif | |||
#if defined (STM32F101xE) | |||
#define IS_ADC_EXTTRIG(REGTRIG) (((REGTRIG) == ADC_EXTERNALTRIGCONV_T1_CC1) || \ | |||
((REGTRIG) == ADC_EXTERNALTRIGCONV_T1_CC2) || \ | |||
((REGTRIG) == ADC_EXTERNALTRIGCONV_T2_CC2) || \ | |||
((REGTRIG) == ADC_EXTERNALTRIGCONV_T3_TRGO) || \ | |||
((REGTRIG) == ADC_EXTERNALTRIGCONV_T4_CC4) || \ | |||
((REGTRIG) == ADC_EXTERNALTRIGCONV_EXT_IT11) || \ | |||
((REGTRIG) == ADC_EXTERNALTRIGCONV_T8_TRGO) || \ | |||
((REGTRIG) == ADC_SOFTWARE_START)) | |||
#endif | |||
#if defined (STM32F101xG) | |||
#define IS_ADC_EXTTRIG(REGTRIG) (((REGTRIG) == ADC_EXTERNALTRIGCONV_T1_CC1) || \ | |||
((REGTRIG) == ADC_EXTERNALTRIGCONV_T1_CC2) || \ | |||
((REGTRIG) == ADC_EXTERNALTRIGCONV_T2_CC2) || \ | |||
((REGTRIG) == ADC_EXTERNALTRIGCONV_T3_TRGO) || \ | |||
((REGTRIG) == ADC_EXTERNALTRIGCONV_T4_CC4) || \ | |||
((REGTRIG) == ADC_EXTERNALTRIGCONV_EXT_IT11) || \ | |||
((REGTRIG) == ADC_SOFTWARE_START)) | |||
#endif | |||
#if defined (STM32F103xE) || defined (STM32F103xG) | |||
#define IS_ADC_EXTTRIG(REGTRIG) (((REGTRIG) == ADC_EXTERNALTRIGCONV_T1_CC1) || \ | |||
((REGTRIG) == ADC_EXTERNALTRIGCONV_T1_CC2) || \ | |||
((REGTRIG) == ADC_EXTERNALTRIGCONV_T2_CC2) || \ | |||
((REGTRIG) == ADC_EXTERNALTRIGCONV_T3_TRGO) || \ | |||
((REGTRIG) == ADC_EXTERNALTRIGCONV_T4_CC4) || \ | |||
((REGTRIG) == ADC_EXTERNALTRIGCONV_EXT_IT11) || \ | |||
((REGTRIG) == ADC_EXTERNALTRIGCONV_T3_CC1) || \ | |||
((REGTRIG) == ADC_EXTERNALTRIGCONV_T2_CC3) || \ | |||
((REGTRIG) == ADC_EXTERNALTRIGCONV_T8_CC1) || \ | |||
((REGTRIG) == ADC_EXTERNALTRIGCONV_T5_CC1) || \ | |||
((REGTRIG) == ADC_EXTERNALTRIGCONV_T5_CC3) || \ | |||
((REGTRIG) == ADC_EXTERNALTRIGCONV_T1_CC3) || \ | |||
((REGTRIG) == ADC_EXTERNALTRIGCONV_T8_TRGO) || \ | |||
((REGTRIG) == ADC_SOFTWARE_START)) | |||
#endif | |||
#if defined (STM32F100xB) || defined (STM32F100xE) || defined (STM32F101x6) || defined (STM32F101xB) || defined (STM32F102x6) || defined (STM32F102xB) || defined (STM32F103x6) || defined (STM32F103xB) || defined (STM32F105xC) || defined (STM32F107xC) | |||
#define IS_ADC_EXTTRIGINJEC(REGTRIG) (((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T2_TRGO) || \ | |||
((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T2_CC1) || \ | |||
((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T3_CC4) || \ | |||
((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T4_TRGO) || \ | |||
((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_EXT_IT15) || \ | |||
((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T1_CC4) || \ | |||
((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T1_TRGO) || \ | |||
((REGTRIG) == ADC_INJECTED_SOFTWARE_START)) | |||
#endif | |||
#if defined (STM32F101xE) | |||
#define IS_ADC_EXTTRIGINJEC(REGTRIG) (((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T2_TRGO) || \ | |||
((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T2_CC1) || \ | |||
((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T3_CC4) || \ | |||
((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T4_TRGO) || \ | |||
((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_EXT_IT15) || \ | |||
((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T1_CC4) || \ | |||
((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T1_TRGO) || \ | |||
((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T8_CC4) || \ | |||
((REGTRIG) == ADC_INJECTED_SOFTWARE_START)) | |||
#endif | |||
#if defined (STM32F101xG) | |||
#define IS_ADC_EXTTRIGINJEC(REGTRIG) (((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T2_TRGO) || \ | |||
((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T2_CC1) || \ | |||
((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T3_CC4) || \ | |||
((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T4_TRGO) || \ | |||
((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_EXT_IT15) || \ | |||
((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T1_CC4) || \ | |||
((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T1_TRGO) || \ | |||
((REGTRIG) == ADC_INJECTED_SOFTWARE_START)) | |||
#endif | |||
#if defined (STM32F103xE) || defined (STM32F103xG) | |||
#define IS_ADC_EXTTRIGINJEC(REGTRIG) (((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T2_TRGO) || \ | |||
((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T2_CC1) || \ | |||
((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T3_CC4) || \ | |||
((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T4_TRGO) || \ | |||
((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T5_CC4) || \ | |||
((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_EXT_IT15) || \ | |||
((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T4_CC3) || \ | |||
((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T8_CC2) || \ | |||
((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T5_TRGO) || \ | |||
((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T5_CC4) || \ | |||
((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T1_CC4) || \ | |||
((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T1_TRGO) || \ | |||
((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T8_CC4) || \ | |||
((REGTRIG) == ADC_INJECTED_SOFTWARE_START)) | |||
#endif | |||
#if defined (STM32F103x6) || defined (STM32F103xB) || defined (STM32F105xC) || defined (STM32F107xC) || defined (STM32F103xE) || defined (STM32F103xG) | |||
#define IS_ADC_MODE(MODE) (((MODE) == ADC_MODE_INDEPENDENT) || \ | |||
((MODE) == ADC_DUALMODE_REGSIMULT_INJECSIMULT) || \ | |||
((MODE) == ADC_DUALMODE_REGSIMULT_ALTERTRIG) || \ | |||
((MODE) == ADC_DUALMODE_INJECSIMULT_INTERLFAST) || \ | |||
((MODE) == ADC_DUALMODE_INJECSIMULT_INTERLSLOW) || \ | |||
((MODE) == ADC_DUALMODE_INJECSIMULT) || \ | |||
((MODE) == ADC_DUALMODE_REGSIMULT) || \ | |||
((MODE) == ADC_DUALMODE_INTERLFAST) || \ | |||
((MODE) == ADC_DUALMODE_INTERLSLOW) || \ | |||
((MODE) == ADC_DUALMODE_ALTERTRIG) ) | |||
#endif /* defined STM32F103x6 || defined STM32F103xB || defined STM32F105xC || defined STM32F107xC || defined STM32F103xE || defined STM32F103xG */ | |||
/** | |||
* @} | |||
*/ | |||
/* Exported functions --------------------------------------------------------*/ | |||
/** @addtogroup ADCEx_Exported_Functions | |||
* @{ | |||
*/ | |||
/* IO operation functions *****************************************************/ | |||
/** @addtogroup ADCEx_Exported_Functions_Group1 | |||
* @{ | |||
*/ | |||
/* ADC calibration */ | |||
HAL_StatusTypeDef HAL_ADCEx_Calibration_Start(ADC_HandleTypeDef* hadc); | |||
/* Blocking mode: Polling */ | |||
HAL_StatusTypeDef HAL_ADCEx_InjectedStart(ADC_HandleTypeDef* hadc); | |||
HAL_StatusTypeDef HAL_ADCEx_InjectedStop(ADC_HandleTypeDef* hadc); | |||
HAL_StatusTypeDef HAL_ADCEx_InjectedPollForConversion(ADC_HandleTypeDef* hadc, uint32_t Timeout); | |||
/* Non-blocking mode: Interruption */ | |||
HAL_StatusTypeDef HAL_ADCEx_InjectedStart_IT(ADC_HandleTypeDef* hadc); | |||
HAL_StatusTypeDef HAL_ADCEx_InjectedStop_IT(ADC_HandleTypeDef* hadc); | |||
#if defined (STM32F103x6) || defined (STM32F103xB) || defined (STM32F105xC) || defined (STM32F107xC) || defined (STM32F103xE) || defined (STM32F103xG) | |||
/* ADC multimode */ | |||
HAL_StatusTypeDef HAL_ADCEx_MultiModeStart_DMA(ADC_HandleTypeDef *hadc, uint32_t *pData, uint32_t Length); | |||
HAL_StatusTypeDef HAL_ADCEx_MultiModeStop_DMA(ADC_HandleTypeDef *hadc); | |||
#endif /* defined STM32F103x6 || defined STM32F103xB || defined STM32F105xC || defined STM32F107xC || defined STM32F103xE || defined STM32F103xG */ | |||
/* ADC retrieve conversion value intended to be used with polling or interruption */ | |||
uint32_t HAL_ADCEx_InjectedGetValue(ADC_HandleTypeDef* hadc, uint32_t InjectedRank); | |||
#if defined (STM32F103x6) || defined (STM32F103xB) || defined (STM32F105xC) || defined (STM32F107xC) || defined (STM32F103xE) || defined (STM32F103xG) | |||
uint32_t HAL_ADCEx_MultiModeGetValue(ADC_HandleTypeDef *hadc); | |||
#endif /* defined STM32F103x6 || defined STM32F103xB || defined STM32F105xC || defined STM32F107xC || defined STM32F103xE || defined STM32F103xG */ | |||
/* ADC IRQHandler and Callbacks used in non-blocking modes (Interruption) */ | |||
void HAL_ADCEx_InjectedConvCpltCallback(ADC_HandleTypeDef* hadc); | |||
/** | |||
* @} | |||
*/ | |||
/* Peripheral Control functions ***********************************************/ | |||
/** @addtogroup ADCEx_Exported_Functions_Group2 | |||
* @{ | |||
*/ | |||
HAL_StatusTypeDef HAL_ADCEx_InjectedConfigChannel(ADC_HandleTypeDef* hadc,ADC_InjectionConfTypeDef* sConfigInjected); | |||
#if defined (STM32F103x6) || defined (STM32F103xB) || defined (STM32F105xC) || defined (STM32F107xC) || defined (STM32F103xE) || defined (STM32F103xG) | |||
HAL_StatusTypeDef HAL_ADCEx_MultiModeConfigChannel(ADC_HandleTypeDef *hadc, ADC_MultiModeTypeDef *multimode); | |||
#endif /* defined STM32F103x6 || defined STM32F103xB || defined STM32F105xC || defined STM32F107xC || defined STM32F103xE || defined STM32F103xG */ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
#ifdef __cplusplus | |||
} | |||
#endif | |||
#endif /* __STM32F1xx_HAL_ADC_EX_H */ | |||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@@ -0,0 +1,399 @@ | |||
/** | |||
****************************************************************************** | |||
* @file stm32f1xx_hal_conf.h | |||
* @author MCD Application Team | |||
* @brief HAL configuration template file. | |||
* This file should be copied to the application folder and renamed | |||
* to stm32f1xx_hal_conf.h. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© Copyright (c) 2017 STMicroelectronics. | |||
* All rights reserved.</center></h2> | |||
* | |||
* This software component is licensed by ST under BSD 3-Clause license, | |||
* the "License"; You may not use this file except in compliance with the | |||
* License. You may obtain a copy of the License at: | |||
* opensource.org/licenses/BSD-3-Clause | |||
* | |||
****************************************************************************** | |||
*/ | |||
/* Define to prevent recursive inclusion -------------------------------------*/ | |||
#ifndef __STM32F1xx_HAL_CONF_H | |||
#define __STM32F1xx_HAL_CONF_H | |||
#ifdef __cplusplus | |||
extern "C" { | |||
#endif | |||
/* Exported types ------------------------------------------------------------*/ | |||
/* Exported constants --------------------------------------------------------*/ | |||
/* ########################## Module Selection ############################## */ | |||
/** | |||
* @brief This is the list of modules to be used in the HAL driver | |||
*/ | |||
#define HAL_MODULE_ENABLED | |||
#define HAL_ADC_MODULE_ENABLED | |||
//#define HAL_CAN_MODULE_ENABLED | |||
/* #define HAL_CAN_LEGACY_MODULE_ENABLED */ | |||
//#define HAL_CEC_MODULE_ENABLED | |||
#define HAL_CORTEX_MODULE_ENABLED | |||
//#define HAL_CRC_MODULE_ENABLED | |||
//#define HAL_DAC_MODULE_ENABLED | |||
#define HAL_DMA_MODULE_ENABLED | |||
//#define HAL_ETH_MODULE_ENABLED | |||
//#define HAL_EXTI_MODULE_ENABLED | |||
#define HAL_FLASH_MODULE_ENABLED | |||
#define HAL_GPIO_MODULE_ENABLED | |||
//#define HAL_HCD_MODULE_ENABLED | |||
//#define HAL_I2C_MODULE_ENABLED | |||
//#define HAL_I2S_MODULE_ENABLED | |||
//#define HAL_IRDA_MODULE_ENABLED | |||
//#define HAL_IWDG_MODULE_ENABLED | |||
//#define HAL_NAND_MODULE_ENABLED | |||
//#define HAL_NOR_MODULE_ENABLED | |||
//#define HAL_PCCARD_MODULE_ENABLED | |||
#define HAL_PCD_MODULE_ENABLED | |||
#define HAL_PWR_MODULE_ENABLED | |||
#define HAL_RCC_MODULE_ENABLED | |||
#define HAL_RTC_MODULE_ENABLED | |||
//#define HAL_SD_MODULE_ENABLED | |||
//#define HAL_SMARTCARD_MODULE_ENABLED | |||
//#define HAL_SPI_MODULE_ENABLED | |||
//#define HAL_SRAM_MODULE_ENABLED | |||
//#define HAL_TIM_MODULE_ENABLED | |||
#define HAL_UART_MODULE_ENABLED | |||
//#define HAL_USART_MODULE_ENABLED | |||
//#define HAL_WWDG_MODULE_ENABLED | |||
//#define HAL_MMC_MODULE_ENABLED | |||
/* ########################## Oscillator Values adaptation ####################*/ | |||
/** | |||
* @brief Adjust the value of External High Speed oscillator (HSE) used in your application. | |||
* This value is used by the RCC HAL module to compute the system frequency | |||
* (when HSE is used as system clock source, directly or through the PLL). | |||
*/ | |||
#if !defined (HSE_VALUE) | |||
#if defined(USE_STM3210C_EVAL) | |||
#define HSE_VALUE 25000000U /*!< Value of the External oscillator in Hz */ | |||
#else | |||
#define HSE_VALUE 8000000U /*!< Value of the External oscillator in Hz */ | |||
#endif | |||
#endif /* HSE_VALUE */ | |||
#if !defined (HSE_STARTUP_TIMEOUT) | |||
#define HSE_STARTUP_TIMEOUT 100U /*!< Time out for HSE start up, in ms */ | |||
#endif /* HSE_STARTUP_TIMEOUT */ | |||
/** | |||
* @brief Internal High Speed oscillator (HSI) value. | |||
* This value is used by the RCC HAL module to compute the system frequency | |||
* (when HSI is used as system clock source, directly or through the PLL). | |||
*/ | |||
#if !defined (HSI_VALUE) | |||
#define HSI_VALUE 8000000U /*!< Value of the Internal oscillator in Hz */ | |||
#endif /* HSI_VALUE */ | |||
/** | |||
* @brief Internal Low Speed oscillator (LSI) value. | |||
*/ | |||
#if !defined (LSI_VALUE) | |||
#define LSI_VALUE 40000U /*!< LSI Typical Value in Hz */ | |||
#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz | |||
The real value may vary depending on the variations | |||
in voltage and temperature. */ | |||
/** | |||
* @brief External Low Speed oscillator (LSE) value. | |||
* This value is used by the UART, RTC HAL module to compute the system frequency | |||
*/ | |||
#if !defined (LSE_VALUE) | |||
#define LSE_VALUE 32768U /*!< Value of the External Low Speed oscillator in Hz */ | |||
#endif /* LSE_VALUE */ | |||
#if !defined (LSE_STARTUP_TIMEOUT) | |||
#define LSE_STARTUP_TIMEOUT 5000U /*!< Time out for LSE start up, in ms */ | |||
#endif /* LSE_STARTUP_TIMEOUT */ | |||
/* Tip: To avoid modifying this file each time you need to use different HSE, | |||
=== you can define the HSE value in your toolchain compiler preprocessor. */ | |||
/* ########################### System Configuration ######################### */ | |||
/** | |||
* @brief This is the HAL system configuration section | |||
*/ | |||
#define VDD_VALUE 3300U /*!< Value of VDD in mv */ | |||
#define TICK_INT_PRIORITY 0x0FU /*!< tick interrupt priority */ | |||
#define USE_RTOS 0U | |||
#define PREFETCH_ENABLE 1U | |||
#define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */ | |||
#define USE_HAL_CAN_REGISTER_CALLBACKS 0U /* CAN register callback disabled */ | |||
#define USE_HAL_CEC_REGISTER_CALLBACKS 0U /* CEC register callback disabled */ | |||
#define USE_HAL_DAC_REGISTER_CALLBACKS 0U /* DAC register callback disabled */ | |||
#define USE_HAL_ETH_REGISTER_CALLBACKS 0U /* ETH register callback disabled */ | |||
#define USE_HAL_HCD_REGISTER_CALLBACKS 0U /* HCD register callback disabled */ | |||
#define USE_HAL_I2C_REGISTER_CALLBACKS 0U /* I2C register callback disabled */ | |||
#define USE_HAL_I2S_REGISTER_CALLBACKS 0U /* I2S register callback disabled */ | |||
#define USE_HAL_MMC_REGISTER_CALLBACKS 0U /* MMC register callback disabled */ | |||
#define USE_HAL_NAND_REGISTER_CALLBACKS 0U /* NAND register callback disabled */ | |||
#define USE_HAL_NOR_REGISTER_CALLBACKS 0U /* NOR register callback disabled */ | |||
#define USE_HAL_PCCARD_REGISTER_CALLBACKS 0U /* PCCARD register callback disabled */ | |||
#define USE_HAL_PCD_REGISTER_CALLBACKS 0U /* PCD register callback disabled */ | |||
#define USE_HAL_RTC_REGISTER_CALLBACKS 0U /* RTC register callback disabled */ | |||
#define USE_HAL_SD_REGISTER_CALLBACKS 0U /* SD register callback disabled */ | |||
#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U /* SMARTCARD register callback disabled */ | |||
#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */ | |||
#define USE_HAL_SRAM_REGISTER_CALLBACKS 0U /* SRAM register callback disabled */ | |||
#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */ | |||
#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */ | |||
#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */ | |||
#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */ | |||
#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */ | |||
/* ########################## Assert Selection ############################## */ | |||
/** | |||
* @brief Uncomment the line below to expanse the "assert_param" macro in the | |||
* HAL drivers code | |||
*/ | |||
/* #define USE_FULL_ASSERT 1U */ | |||
/* ################## Ethernet peripheral configuration ##################### */ | |||
/* Section 1 : Ethernet peripheral configuration */ | |||
/* MAC ADDRESS: MAC_ADDR0:MAC_ADDR1:MAC_ADDR2:MAC_ADDR3:MAC_ADDR4:MAC_ADDR5 */ | |||
#define MAC_ADDR0 2U | |||
#define MAC_ADDR1 0U | |||
#define MAC_ADDR2 0U | |||
#define MAC_ADDR3 0U | |||
#define MAC_ADDR4 0U | |||
#define MAC_ADDR5 0U | |||
/* Definition of the Ethernet driver buffers size and count */ | |||
#define ETH_RX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for receive */ | |||
#define ETH_TX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for transmit */ | |||
#define ETH_RXBUFNB 8U /* 8 Rx buffers of size ETH_RX_BUF_SIZE */ | |||
#define ETH_TXBUFNB 4U /* 4 Tx buffers of size ETH_TX_BUF_SIZE */ | |||
/* Section 2: PHY configuration section */ | |||
/* DP83848 PHY Address*/ | |||
#define DP83848_PHY_ADDRESS 0x01U | |||
/* PHY Reset delay these values are based on a 1 ms Systick interrupt*/ | |||
#define PHY_RESET_DELAY 0x000000FFU | |||
/* PHY Configuration delay */ | |||
#define PHY_CONFIG_DELAY 0x00000FFFU | |||
#define PHY_READ_TO 0x0000FFFFU | |||
#define PHY_WRITE_TO 0x0000FFFFU | |||
/* Section 3: Common PHY Registers */ | |||
#define PHY_BCR ((uint16_t)0x0000) /*!< Transceiver Basic Control Register */ | |||
#define PHY_BSR ((uint16_t)0x0001) /*!< Transceiver Basic Status Register */ | |||
#define PHY_RESET ((uint16_t)0x8000) /*!< PHY Reset */ | |||
#define PHY_LOOPBACK ((uint16_t)0x4000) /*!< Select loop-back mode */ | |||
#define PHY_FULLDUPLEX_100M ((uint16_t)0x2100) /*!< Set the full-duplex mode at 100 Mb/s */ | |||
#define PHY_HALFDUPLEX_100M ((uint16_t)0x2000) /*!< Set the half-duplex mode at 100 Mb/s */ | |||
#define PHY_FULLDUPLEX_10M ((uint16_t)0x0100) /*!< Set the full-duplex mode at 10 Mb/s */ | |||
#define PHY_HALFDUPLEX_10M ((uint16_t)0x0000) /*!< Set the half-duplex mode at 10 Mb/s */ | |||
#define PHY_AUTONEGOTIATION ((uint16_t)0x1000) /*!< Enable auto-negotiation function */ | |||
#define PHY_RESTART_AUTONEGOTIATION ((uint16_t)0x0200) /*!< Restart auto-negotiation function */ | |||
#define PHY_POWERDOWN ((uint16_t)0x0800) /*!< Select the power down mode */ | |||
#define PHY_ISOLATE ((uint16_t)0x0400) /*!< Isolate PHY from MII */ | |||
#define PHY_AUTONEGO_COMPLETE ((uint16_t)0x0020) /*!< Auto-Negotiation process completed */ | |||
#define PHY_LINKED_STATUS ((uint16_t)0x0004) /*!< Valid link established */ | |||
#define PHY_JABBER_DETECTION ((uint16_t)0x0002) /*!< Jabber condition detected */ | |||
/* Section 4: Extended PHY Registers */ | |||
#define PHY_SR ((uint16_t)0x0010) /*!< PHY status register Offset */ | |||
#define PHY_MICR ((uint16_t)0x0011) /*!< MII Interrupt Control Register */ | |||
#define PHY_MISR ((uint16_t)0x0012) /*!< MII Interrupt Status and Misc. Control Register */ | |||
#define PHY_LINK_STATUS ((uint16_t)0x0001) /*!< PHY Link mask */ | |||
#define PHY_SPEED_STATUS ((uint16_t)0x0002) /*!< PHY Speed mask */ | |||
#define PHY_DUPLEX_STATUS ((uint16_t)0x0004) /*!< PHY Duplex mask */ | |||
#define PHY_MICR_INT_EN ((uint16_t)0x0002) /*!< PHY Enable interrupts */ | |||
#define PHY_MICR_INT_OE ((uint16_t)0x0001) /*!< PHY Enable output interrupt events */ | |||
#define PHY_MISR_LINK_INT_EN ((uint16_t)0x0020) /*!< Enable Interrupt on change of link status */ | |||
#define PHY_LINK_INTERRUPT ((uint16_t)0x2000) /*!< PHY link status interrupt mask */ | |||
/* ################## SPI peripheral configuration ########################## */ | |||
/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver | |||
* Activated: CRC code is present inside driver | |||
* Deactivated: CRC code cleaned from driver | |||
*/ | |||
#define USE_SPI_CRC 1U | |||
/* Includes ------------------------------------------------------------------*/ | |||
/** | |||
* @brief Include module's header file | |||
*/ | |||
#ifdef HAL_RCC_MODULE_ENABLED | |||
#include "stm32f1xx_hal_rcc.h" | |||
#endif /* HAL_RCC_MODULE_ENABLED */ | |||
#ifdef HAL_GPIO_MODULE_ENABLED | |||
#include "stm32f1xx_hal_gpio.h" | |||
#endif /* HAL_GPIO_MODULE_ENABLED */ | |||
#ifdef HAL_EXTI_MODULE_ENABLED | |||
#include "stm32f1xx_hal_exti.h" | |||
#endif /* HAL_EXTI_MODULE_ENABLED */ | |||
#ifdef HAL_DMA_MODULE_ENABLED | |||
#include "stm32f1xx_hal_dma.h" | |||
#endif /* HAL_DMA_MODULE_ENABLED */ | |||
#ifdef HAL_ETH_MODULE_ENABLED | |||
#include "stm32f1xx_hal_eth.h" | |||
#endif /* HAL_ETH_MODULE_ENABLED */ | |||
#ifdef HAL_CAN_MODULE_ENABLED | |||
#include "stm32f1xx_hal_can.h" | |||
#endif /* HAL_CAN_MODULE_ENABLED */ | |||
#ifdef HAL_CAN_LEGACY_MODULE_ENABLED | |||
#include "Legacy/stm32f1xx_hal_can_legacy.h" | |||
#endif /* HAL_CAN_LEGACY_MODULE_ENABLED */ | |||
#ifdef HAL_CEC_MODULE_ENABLED | |||
#include "stm32f1xx_hal_cec.h" | |||
#endif /* HAL_CEC_MODULE_ENABLED */ | |||
#ifdef HAL_CORTEX_MODULE_ENABLED | |||
#include "stm32f1xx_hal_cortex.h" | |||
#endif /* HAL_CORTEX_MODULE_ENABLED */ | |||
#ifdef HAL_ADC_MODULE_ENABLED | |||
#include "stm32f1xx_hal_adc.h" | |||
#endif /* HAL_ADC_MODULE_ENABLED */ | |||
#ifdef HAL_CRC_MODULE_ENABLED | |||
#include "stm32f1xx_hal_crc.h" | |||
#endif /* HAL_CRC_MODULE_ENABLED */ | |||
#ifdef HAL_DAC_MODULE_ENABLED | |||
#include "stm32f1xx_hal_dac.h" | |||
#endif /* HAL_DAC_MODULE_ENABLED */ | |||
#ifdef HAL_FLASH_MODULE_ENABLED | |||
#include "stm32f1xx_hal_flash.h" | |||
#endif /* HAL_FLASH_MODULE_ENABLED */ | |||
#ifdef HAL_SRAM_MODULE_ENABLED | |||
#include "stm32f1xx_hal_sram.h" | |||
#endif /* HAL_SRAM_MODULE_ENABLED */ | |||
#ifdef HAL_NOR_MODULE_ENABLED | |||
#include "stm32f1xx_hal_nor.h" | |||
#endif /* HAL_NOR_MODULE_ENABLED */ | |||
#ifdef HAL_I2C_MODULE_ENABLED | |||
#include "stm32f1xx_hal_i2c.h" | |||
#endif /* HAL_I2C_MODULE_ENABLED */ | |||
#ifdef HAL_I2S_MODULE_ENABLED | |||
#include "stm32f1xx_hal_i2s.h" | |||
#endif /* HAL_I2S_MODULE_ENABLED */ | |||
#ifdef HAL_IWDG_MODULE_ENABLED | |||
#include "stm32f1xx_hal_iwdg.h" | |||
#endif /* HAL_IWDG_MODULE_ENABLED */ | |||
#ifdef HAL_PWR_MODULE_ENABLED | |||
#include "stm32f1xx_hal_pwr.h" | |||
#endif /* HAL_PWR_MODULE_ENABLED */ | |||
#ifdef HAL_RTC_MODULE_ENABLED | |||
#include "stm32f1xx_hal_rtc.h" | |||
#endif /* HAL_RTC_MODULE_ENABLED */ | |||
#ifdef HAL_PCCARD_MODULE_ENABLED | |||
#include "stm32f1xx_hal_pccard.h" | |||
#endif /* HAL_PCCARD_MODULE_ENABLED */ | |||
#ifdef HAL_SD_MODULE_ENABLED | |||
#include "stm32f1xx_hal_sd.h" | |||
#endif /* HAL_SD_MODULE_ENABLED */ | |||
#ifdef HAL_NAND_MODULE_ENABLED | |||
#include "stm32f1xx_hal_nand.h" | |||
#endif /* HAL_NAND_MODULE_ENABLED */ | |||
#ifdef HAL_SPI_MODULE_ENABLED | |||
#include "stm32f1xx_hal_spi.h" | |||
#endif /* HAL_SPI_MODULE_ENABLED */ | |||
#ifdef HAL_TIM_MODULE_ENABLED | |||
#include "stm32f1xx_hal_tim.h" | |||
#endif /* HAL_TIM_MODULE_ENABLED */ | |||
#ifdef HAL_UART_MODULE_ENABLED | |||
#include "stm32f1xx_hal_uart.h" | |||
#endif /* HAL_UART_MODULE_ENABLED */ | |||
#ifdef HAL_USART_MODULE_ENABLED | |||
#include "stm32f1xx_hal_usart.h" | |||
#endif /* HAL_USART_MODULE_ENABLED */ | |||
#ifdef HAL_IRDA_MODULE_ENABLED | |||
#include "stm32f1xx_hal_irda.h" | |||
#endif /* HAL_IRDA_MODULE_ENABLED */ | |||
#ifdef HAL_SMARTCARD_MODULE_ENABLED | |||
#include "stm32f1xx_hal_smartcard.h" | |||
#endif /* HAL_SMARTCARD_MODULE_ENABLED */ | |||
#ifdef HAL_WWDG_MODULE_ENABLED | |||
#include "stm32f1xx_hal_wwdg.h" | |||
#endif /* HAL_WWDG_MODULE_ENABLED */ | |||
#ifdef HAL_PCD_MODULE_ENABLED | |||
#include "stm32f1xx_hal_pcd.h" | |||
#endif /* HAL_PCD_MODULE_ENABLED */ | |||
#ifdef HAL_HCD_MODULE_ENABLED | |||
#include "stm32f1xx_hal_hcd.h" | |||
#endif /* HAL_HCD_MODULE_ENABLED */ | |||
#ifdef HAL_MMC_MODULE_ENABLED | |||
#include "stm32f1xx_hal_mmc.h" | |||
#endif /* HAL_MMC_MODULE_ENABLED */ | |||
/* Exported macro ------------------------------------------------------------*/ | |||
#ifdef USE_FULL_ASSERT | |||
/** | |||
* @brief The assert_param macro is used for function's parameters check. | |||
* @param expr If expr is false, it calls assert_failed function | |||
* which reports the name of the source file and the source | |||
* line number of the call that failed. | |||
* If expr is true, it returns no value. | |||
* @retval None | |||
*/ | |||
#define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) | |||
/* Exported functions ------------------------------------------------------- */ | |||
void assert_failed(uint8_t* file, uint32_t line); | |||
#else | |||
#define assert_param(expr) ((void)0U) | |||
#endif /* USE_FULL_ASSERT */ | |||
#ifdef __cplusplus | |||
} | |||
#endif | |||
#endif /* __STM32F1xx_HAL_CONF_H */ | |||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@@ -0,0 +1,505 @@ | |||
/** | |||
****************************************************************************** | |||
* @file stm32f1xx_hal_cortex.c | |||
* @author MCD Application Team | |||
* @brief CORTEX HAL module driver. | |||
* This file provides firmware functions to manage the following | |||
* functionalities of the CORTEX: | |||
* + Initialization and de-initialization functions | |||
* + Peripheral Control functions | |||
* | |||
@verbatim | |||
============================================================================== | |||
##### How to use this driver ##### | |||
============================================================================== | |||
[..] | |||
*** How to configure Interrupts using CORTEX HAL driver *** | |||
=========================================================== | |||
[..] | |||
This section provides functions allowing to configure the NVIC interrupts (IRQ). | |||
The Cortex-M3 exceptions are managed by CMSIS functions. | |||
(#) Configure the NVIC Priority Grouping using HAL_NVIC_SetPriorityGrouping() | |||
function according to the following table. | |||
(#) Configure the priority of the selected IRQ Channels using HAL_NVIC_SetPriority(). | |||
(#) Enable the selected IRQ Channels using HAL_NVIC_EnableIRQ(). | |||
(#) please refer to programming manual for details in how to configure priority. | |||
-@- When the NVIC_PRIORITYGROUP_0 is selected, IRQ preemption is no more possible. | |||
The pending IRQ priority will be managed only by the sub priority. | |||
-@- IRQ priority order (sorted by highest to lowest priority): | |||
(+@) Lowest preemption priority | |||
(+@) Lowest sub priority | |||
(+@) Lowest hardware priority (IRQ number) | |||
[..] | |||
*** How to configure Systick using CORTEX HAL driver *** | |||
======================================================== | |||
[..] | |||
Setup SysTick Timer for time base. | |||
(+) The HAL_SYSTICK_Config()function calls the SysTick_Config() function which | |||
is a CMSIS function that: | |||
(++) Configures the SysTick Reload register with value passed as function parameter. | |||
(++) Configures the SysTick IRQ priority to the lowest value 0x0F. | |||
(++) Resets the SysTick Counter register. | |||
(++) Configures the SysTick Counter clock source to be Core Clock Source (HCLK). | |||
(++) Enables the SysTick Interrupt. | |||
(++) Starts the SysTick Counter. | |||
(+) You can change the SysTick Clock source to be HCLK_Div8 by calling the macro | |||
__HAL_CORTEX_SYSTICKCLK_CONFIG(SYSTICK_CLKSOURCE_HCLK_DIV8) just after the | |||
HAL_SYSTICK_Config() function call. The __HAL_CORTEX_SYSTICKCLK_CONFIG() macro is defined | |||
inside the stm32f1xx_hal_cortex.h file. | |||
(+) You can change the SysTick IRQ priority by calling the | |||
HAL_NVIC_SetPriority(SysTick_IRQn,...) function just after the HAL_SYSTICK_Config() function | |||
call. The HAL_NVIC_SetPriority() call the NVIC_SetPriority() function which is a CMSIS function. | |||
(+) To adjust the SysTick time base, use the following formula: | |||
Reload Value = SysTick Counter Clock (Hz) x Desired Time base (s) | |||
(++) Reload Value is the parameter to be passed for HAL_SYSTICK_Config() function | |||
(++) Reload Value should not exceed 0xFFFFFF | |||
@endverbatim | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© Copyright (c) 2017 STMicroelectronics. | |||
* All rights reserved.</center></h2> | |||
* | |||
* This software component is licensed by ST under BSD 3-Clause license, | |||
* the "License"; You may not use this file except in compliance with the | |||
* License. You may obtain a copy of the License at: | |||
* opensource.org/licenses/BSD-3-Clause | |||
* | |||
****************************************************************************** | |||
*/ | |||
/* Includes ------------------------------------------------------------------*/ | |||
#include "stm32f1xx_hal.h" | |||
/** @addtogroup STM32F1xx_HAL_Driver | |||
* @{ | |||
*/ | |||
/** @defgroup CORTEX CORTEX | |||
* @brief CORTEX HAL module driver | |||
* @{ | |||
*/ | |||
#ifdef HAL_CORTEX_MODULE_ENABLED | |||
/* Private types -------------------------------------------------------------*/ | |||
/* Private variables ---------------------------------------------------------*/ | |||
/* Private constants ---------------------------------------------------------*/ | |||
/* Private macros ------------------------------------------------------------*/ | |||
/* Private functions ---------------------------------------------------------*/ | |||
/* Exported functions --------------------------------------------------------*/ | |||
/** @defgroup CORTEX_Exported_Functions CORTEX Exported Functions | |||
* @{ | |||
*/ | |||
/** @defgroup CORTEX_Exported_Functions_Group1 Initialization and de-initialization functions | |||
* @brief Initialization and Configuration functions | |||
* | |||
@verbatim | |||
============================================================================== | |||
##### Initialization and de-initialization functions ##### | |||
============================================================================== | |||
[..] | |||
This section provides the CORTEX HAL driver functions allowing to configure Interrupts | |||
Systick functionalities | |||
@endverbatim | |||
* @{ | |||
*/ | |||
/** | |||
* @brief Sets the priority grouping field (preemption priority and subpriority) | |||
* using the required unlock sequence. | |||
* @param PriorityGroup: The priority grouping bits length. | |||
* This parameter can be one of the following values: | |||
* @arg NVIC_PRIORITYGROUP_0: 0 bits for preemption priority | |||
* 4 bits for subpriority | |||
* @arg NVIC_PRIORITYGROUP_1: 1 bits for preemption priority | |||
* 3 bits for subpriority | |||
* @arg NVIC_PRIORITYGROUP_2: 2 bits for preemption priority | |||
* 2 bits for subpriority | |||
* @arg NVIC_PRIORITYGROUP_3: 3 bits for preemption priority | |||
* 1 bits for subpriority | |||
* @arg NVIC_PRIORITYGROUP_4: 4 bits for preemption priority | |||
* 0 bits for subpriority | |||
* @note When the NVIC_PriorityGroup_0 is selected, IRQ preemption is no more possible. | |||
* The pending IRQ priority will be managed only by the subpriority. | |||
* @retval None | |||
*/ | |||
void HAL_NVIC_SetPriorityGrouping(uint32_t PriorityGroup) | |||
{ | |||
/* Check the parameters */ | |||
assert_param(IS_NVIC_PRIORITY_GROUP(PriorityGroup)); | |||
/* Set the PRIGROUP[10:8] bits according to the PriorityGroup parameter value */ | |||
NVIC_SetPriorityGrouping(PriorityGroup); | |||
} | |||
/** | |||
* @brief Sets the priority of an interrupt. | |||
* @param IRQn: External interrupt number. | |||
* This parameter can be an enumerator of IRQn_Type enumeration | |||
* (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f10xx.h)) | |||
* @param PreemptPriority: The preemption priority for the IRQn channel. | |||
* This parameter can be a value between 0 and 15 | |||
* A lower priority value indicates a higher priority | |||
* @param SubPriority: the subpriority level for the IRQ channel. | |||
* This parameter can be a value between 0 and 15 | |||
* A lower priority value indicates a higher priority. | |||
* @retval None | |||
*/ | |||
void HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority) | |||
{ | |||
uint32_t prioritygroup = 0x00U; | |||
/* Check the parameters */ | |||
assert_param(IS_NVIC_SUB_PRIORITY(SubPriority)); | |||
assert_param(IS_NVIC_PREEMPTION_PRIORITY(PreemptPriority)); | |||
prioritygroup = NVIC_GetPriorityGrouping(); | |||
NVIC_SetPriority(IRQn, NVIC_EncodePriority(prioritygroup, PreemptPriority, SubPriority)); | |||
} | |||
/** | |||
* @brief Enables a device specific interrupt in the NVIC interrupt controller. | |||
* @note To configure interrupts priority correctly, the NVIC_PriorityGroupConfig() | |||
* function should be called before. | |||
* @param IRQn External interrupt number. | |||
* This parameter can be an enumerator of IRQn_Type enumeration | |||
* (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f10xxx.h)) | |||
* @retval None | |||
*/ | |||
void HAL_NVIC_EnableIRQ(IRQn_Type IRQn) | |||
{ | |||
/* Check the parameters */ | |||
assert_param(IS_NVIC_DEVICE_IRQ(IRQn)); | |||
/* Enable interrupt */ | |||
NVIC_EnableIRQ(IRQn); | |||
} | |||
/** | |||
* @brief Disables a device specific interrupt in the NVIC interrupt controller. | |||
* @param IRQn External interrupt number. | |||
* This parameter can be an enumerator of IRQn_Type enumeration | |||
* (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f10xxx.h)) | |||
* @retval None | |||
*/ | |||
void HAL_NVIC_DisableIRQ(IRQn_Type IRQn) | |||
{ | |||
/* Check the parameters */ | |||
assert_param(IS_NVIC_DEVICE_IRQ(IRQn)); | |||
/* Disable interrupt */ | |||
NVIC_DisableIRQ(IRQn); | |||
} | |||
/** | |||
* @brief Initiates a system reset request to reset the MCU. | |||
* @retval None | |||
*/ | |||
void HAL_NVIC_SystemReset(void) | |||
{ | |||
/* System Reset */ | |||
NVIC_SystemReset(); | |||
} | |||
/** | |||
* @brief Initializes the System Timer and its interrupt, and starts the System Tick Timer. | |||
* Counter is in free running mode to generate periodic interrupts. | |||
* @param TicksNumb: Specifies the ticks Number of ticks between two interrupts. | |||
* @retval status: - 0 Function succeeded. | |||
* - 1 Function failed. | |||
*/ | |||
uint32_t HAL_SYSTICK_Config(uint32_t TicksNumb) | |||
{ | |||
return SysTick_Config(TicksNumb); | |||
} | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup CORTEX_Exported_Functions_Group2 Peripheral Control functions | |||
* @brief Cortex control functions | |||
* | |||
@verbatim | |||
============================================================================== | |||
##### Peripheral Control functions ##### | |||
============================================================================== | |||
[..] | |||
This subsection provides a set of functions allowing to control the CORTEX | |||
(NVIC, SYSTICK, MPU) functionalities. | |||
@endverbatim | |||
* @{ | |||
*/ | |||
#if (__MPU_PRESENT == 1U) | |||
/** | |||
* @brief Disables the MPU | |||
* @retval None | |||
*/ | |||
void HAL_MPU_Disable(void) | |||
{ | |||
/* Make sure outstanding transfers are done */ | |||
__DMB(); | |||
/* Disable fault exceptions */ | |||
SCB->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk; | |||
/* Disable the MPU and clear the control register*/ | |||
MPU->CTRL = 0U; | |||
} | |||
/** | |||
* @brief Enable the MPU. | |||
* @param MPU_Control: Specifies the control mode of the MPU during hard fault, | |||
* NMI, FAULTMASK and privileged access to the default memory | |||
* This parameter can be one of the following values: | |||
* @arg MPU_HFNMI_PRIVDEF_NONE | |||
* @arg MPU_HARDFAULT_NMI | |||
* @arg MPU_PRIVILEGED_DEFAULT | |||
* @arg MPU_HFNMI_PRIVDEF | |||
* @retval None | |||
*/ | |||
void HAL_MPU_Enable(uint32_t MPU_Control) | |||
{ | |||
/* Enable the MPU */ | |||
MPU->CTRL = MPU_Control | MPU_CTRL_ENABLE_Msk; | |||
/* Enable fault exceptions */ | |||
SCB->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk; | |||
/* Ensure MPU setting take effects */ | |||
__DSB(); | |||
__ISB(); | |||
} | |||
/** | |||
* @brief Initializes and configures the Region and the memory to be protected. | |||
* @param MPU_Init: Pointer to a MPU_Region_InitTypeDef structure that contains | |||
* the initialization and configuration information. | |||
* @retval None | |||
*/ | |||
void HAL_MPU_ConfigRegion(MPU_Region_InitTypeDef *MPU_Init) | |||
{ | |||
/* Check the parameters */ | |||
assert_param(IS_MPU_REGION_NUMBER(MPU_Init->Number)); | |||
assert_param(IS_MPU_REGION_ENABLE(MPU_Init->Enable)); | |||
/* Set the Region number */ | |||
MPU->RNR = MPU_Init->Number; | |||
if ((MPU_Init->Enable) != RESET) | |||
{ | |||
/* Check the parameters */ | |||
assert_param(IS_MPU_INSTRUCTION_ACCESS(MPU_Init->DisableExec)); | |||
assert_param(IS_MPU_REGION_PERMISSION_ATTRIBUTE(MPU_Init->AccessPermission)); | |||
assert_param(IS_MPU_TEX_LEVEL(MPU_Init->TypeExtField)); | |||
assert_param(IS_MPU_ACCESS_SHAREABLE(MPU_Init->IsShareable)); | |||
assert_param(IS_MPU_ACCESS_CACHEABLE(MPU_Init->IsCacheable)); | |||
assert_param(IS_MPU_ACCESS_BUFFERABLE(MPU_Init->IsBufferable)); | |||
assert_param(IS_MPU_SUB_REGION_DISABLE(MPU_Init->SubRegionDisable)); | |||
assert_param(IS_MPU_REGION_SIZE(MPU_Init->Size)); | |||
MPU->RBAR = MPU_Init->BaseAddress; | |||
MPU->RASR = ((uint32_t)MPU_Init->DisableExec << MPU_RASR_XN_Pos) | | |||
((uint32_t)MPU_Init->AccessPermission << MPU_RASR_AP_Pos) | | |||
((uint32_t)MPU_Init->TypeExtField << MPU_RASR_TEX_Pos) | | |||
((uint32_t)MPU_Init->IsShareable << MPU_RASR_S_Pos) | | |||
((uint32_t)MPU_Init->IsCacheable << MPU_RASR_C_Pos) | | |||
((uint32_t)MPU_Init->IsBufferable << MPU_RASR_B_Pos) | | |||
((uint32_t)MPU_Init->SubRegionDisable << MPU_RASR_SRD_Pos) | | |||
((uint32_t)MPU_Init->Size << MPU_RASR_SIZE_Pos) | | |||
((uint32_t)MPU_Init->Enable << MPU_RASR_ENABLE_Pos); | |||
} | |||
else | |||
{ | |||
MPU->RBAR = 0x00U; | |||
MPU->RASR = 0x00U; | |||
} | |||
} | |||
#endif /* __MPU_PRESENT */ | |||
/** | |||
* @brief Gets the priority grouping field from the NVIC Interrupt Controller. | |||
* @retval Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field) | |||
*/ | |||
uint32_t HAL_NVIC_GetPriorityGrouping(void) | |||
{ | |||
/* Get the PRIGROUP[10:8] field value */ | |||
return NVIC_GetPriorityGrouping(); | |||
} | |||
/** | |||
* @brief Gets the priority of an interrupt. | |||
* @param IRQn: External interrupt number. | |||
* This parameter can be an enumerator of IRQn_Type enumeration | |||
* (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f10xxx.h)) | |||
* @param PriorityGroup: the priority grouping bits length. | |||
* This parameter can be one of the following values: | |||
* @arg NVIC_PRIORITYGROUP_0: 0 bits for preemption priority | |||
* 4 bits for subpriority | |||
* @arg NVIC_PRIORITYGROUP_1: 1 bits for preemption priority | |||
* 3 bits for subpriority | |||
* @arg NVIC_PRIORITYGROUP_2: 2 bits for preemption priority | |||
* 2 bits for subpriority | |||
* @arg NVIC_PRIORITYGROUP_3: 3 bits for preemption priority | |||
* 1 bits for subpriority | |||
* @arg NVIC_PRIORITYGROUP_4: 4 bits for preemption priority | |||
* 0 bits for subpriority | |||
* @param pPreemptPriority: Pointer on the Preemptive priority value (starting from 0). | |||
* @param pSubPriority: Pointer on the Subpriority value (starting from 0). | |||
* @retval None | |||
*/ | |||
void HAL_NVIC_GetPriority(IRQn_Type IRQn, uint32_t PriorityGroup, uint32_t *pPreemptPriority, uint32_t *pSubPriority) | |||
{ | |||
/* Check the parameters */ | |||
assert_param(IS_NVIC_PRIORITY_GROUP(PriorityGroup)); | |||
/* Get priority for Cortex-M system or device specific interrupts */ | |||
NVIC_DecodePriority(NVIC_GetPriority(IRQn), PriorityGroup, pPreemptPriority, pSubPriority); | |||
} | |||
/** | |||
* @brief Sets Pending bit of an external interrupt. | |||
* @param IRQn External interrupt number | |||
* This parameter can be an enumerator of IRQn_Type enumeration | |||
* (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f10xxx.h)) | |||
* @retval None | |||
*/ | |||
void HAL_NVIC_SetPendingIRQ(IRQn_Type IRQn) | |||
{ | |||
/* Check the parameters */ | |||
assert_param(IS_NVIC_DEVICE_IRQ(IRQn)); | |||
/* Set interrupt pending */ | |||
NVIC_SetPendingIRQ(IRQn); | |||
} | |||
/** | |||
* @brief Gets Pending Interrupt (reads the pending register in the NVIC | |||
* and returns the pending bit for the specified interrupt). | |||
* @param IRQn External interrupt number. | |||
* This parameter can be an enumerator of IRQn_Type enumeration | |||
* (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f10xxx.h)) | |||
* @retval status: - 0 Interrupt status is not pending. | |||
* - 1 Interrupt status is pending. | |||
*/ | |||
uint32_t HAL_NVIC_GetPendingIRQ(IRQn_Type IRQn) | |||
{ | |||
/* Check the parameters */ | |||
assert_param(IS_NVIC_DEVICE_IRQ(IRQn)); | |||
/* Return 1 if pending else 0 */ | |||
return NVIC_GetPendingIRQ(IRQn); | |||
} | |||
/** | |||
* @brief Clears the pending bit of an external interrupt. | |||
* @param IRQn External interrupt number. | |||
* This parameter can be an enumerator of IRQn_Type enumeration | |||
* (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f10xxx.h)) | |||
* @retval None | |||
*/ | |||
void HAL_NVIC_ClearPendingIRQ(IRQn_Type IRQn) | |||
{ | |||
/* Check the parameters */ | |||
assert_param(IS_NVIC_DEVICE_IRQ(IRQn)); | |||
/* Clear pending interrupt */ | |||
NVIC_ClearPendingIRQ(IRQn); | |||
} | |||
/** | |||
* @brief Gets active interrupt ( reads the active register in NVIC and returns the active bit). | |||
* @param IRQn External interrupt number | |||
* This parameter can be an enumerator of IRQn_Type enumeration | |||
* (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f10xxx.h)) | |||
* @retval status: - 0 Interrupt status is not pending. | |||
* - 1 Interrupt status is pending. | |||
*/ | |||
uint32_t HAL_NVIC_GetActive(IRQn_Type IRQn) | |||
{ | |||
/* Check the parameters */ | |||
assert_param(IS_NVIC_DEVICE_IRQ(IRQn)); | |||
/* Return 1 if active else 0 */ | |||
return NVIC_GetActive(IRQn); | |||
} | |||
/** | |||
* @brief Configures the SysTick clock source. | |||
* @param CLKSource: specifies the SysTick clock source. | |||
* This parameter can be one of the following values: | |||
* @arg SYSTICK_CLKSOURCE_HCLK_DIV8: AHB clock divided by 8 selected as SysTick clock source. | |||
* @arg SYSTICK_CLKSOURCE_HCLK: AHB clock selected as SysTick clock source. | |||
* @retval None | |||
*/ | |||
void HAL_SYSTICK_CLKSourceConfig(uint32_t CLKSource) | |||
{ | |||
/* Check the parameters */ | |||
assert_param(IS_SYSTICK_CLK_SOURCE(CLKSource)); | |||
if (CLKSource == SYSTICK_CLKSOURCE_HCLK) | |||
{ | |||
SysTick->CTRL |= SYSTICK_CLKSOURCE_HCLK; | |||
} | |||
else | |||
{ | |||
SysTick->CTRL &= ~SYSTICK_CLKSOURCE_HCLK; | |||
} | |||
} | |||
/** | |||
* @brief This function handles SYSTICK interrupt request. | |||
* @retval None | |||
*/ | |||
void HAL_SYSTICK_IRQHandler(void) | |||
{ | |||
HAL_SYSTICK_Callback(); | |||
} | |||
/** | |||
* @brief SYSTICK callback. | |||
* @retval None | |||
*/ | |||
__weak void HAL_SYSTICK_Callback(void) | |||
{ | |||
/* NOTE : This function Should not be modified, when the callback is needed, | |||
the HAL_SYSTICK_Callback could be implemented in the user file | |||
*/ | |||
} | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
#endif /* HAL_CORTEX_MODULE_ENABLED */ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@@ -0,0 +1,410 @@ | |||
/** | |||
****************************************************************************** | |||
* @file stm32f1xx_hal_cortex.h | |||
* @author MCD Application Team | |||
* @brief Header file of CORTEX HAL module. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© Copyright (c) 2017 STMicroelectronics. | |||
* All rights reserved.</center></h2> | |||
* | |||
* This software component is licensed by ST under BSD 3-Clause license, | |||
* the "License"; You may not use this file except in compliance with the | |||
* License. You may obtain a copy of the License at: | |||
* opensource.org/licenses/BSD-3-Clause | |||
* | |||
****************************************************************************** | |||
*/ | |||
/* Define to prevent recursive inclusion -------------------------------------*/ | |||
#ifndef __STM32F1xx_HAL_CORTEX_H | |||
#define __STM32F1xx_HAL_CORTEX_H | |||
#ifdef __cplusplus | |||
extern "C" { | |||
#endif | |||
/* Includes ------------------------------------------------------------------*/ | |||
#include "stm32f1xx_hal_def.h" | |||
/** @addtogroup STM32F1xx_HAL_Driver | |||
* @{ | |||
*/ | |||
/** @addtogroup CORTEX | |||
* @{ | |||
*/ | |||
/* Exported types ------------------------------------------------------------*/ | |||
/** @defgroup CORTEX_Exported_Types Cortex Exported Types | |||
* @{ | |||
*/ | |||
#if (__MPU_PRESENT == 1U) | |||
/** @defgroup CORTEX_MPU_Region_Initialization_Structure_definition MPU Region Initialization Structure Definition | |||
* @brief MPU Region initialization structure | |||
* @{ | |||
*/ | |||
typedef struct | |||
{ | |||
uint8_t Enable; /*!< Specifies the status of the region. | |||
This parameter can be a value of @ref CORTEX_MPU_Region_Enable */ | |||
uint8_t Number; /*!< Specifies the number of the region to protect. | |||
This parameter can be a value of @ref CORTEX_MPU_Region_Number */ | |||
uint32_t BaseAddress; /*!< Specifies the base address of the region to protect. */ | |||
uint8_t Size; /*!< Specifies the size of the region to protect. | |||
This parameter can be a value of @ref CORTEX_MPU_Region_Size */ | |||
uint8_t SubRegionDisable; /*!< Specifies the number of the subregion protection to disable. | |||
This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFF */ | |||
uint8_t TypeExtField; /*!< Specifies the TEX field level. | |||
This parameter can be a value of @ref CORTEX_MPU_TEX_Levels */ | |||
uint8_t AccessPermission; /*!< Specifies the region access permission type. | |||
This parameter can be a value of @ref CORTEX_MPU_Region_Permission_Attributes */ | |||
uint8_t DisableExec; /*!< Specifies the instruction access status. | |||
This parameter can be a value of @ref CORTEX_MPU_Instruction_Access */ | |||
uint8_t IsShareable; /*!< Specifies the shareability status of the protected region. | |||
This parameter can be a value of @ref CORTEX_MPU_Access_Shareable */ | |||
uint8_t IsCacheable; /*!< Specifies the cacheable status of the region protected. | |||
This parameter can be a value of @ref CORTEX_MPU_Access_Cacheable */ | |||
uint8_t IsBufferable; /*!< Specifies the bufferable status of the protected region. | |||
This parameter can be a value of @ref CORTEX_MPU_Access_Bufferable */ | |||
}MPU_Region_InitTypeDef; | |||
/** | |||
* @} | |||
*/ | |||
#endif /* __MPU_PRESENT */ | |||
/** | |||
* @} | |||
*/ | |||
/* Exported constants --------------------------------------------------------*/ | |||
/** @defgroup CORTEX_Exported_Constants CORTEX Exported Constants | |||
* @{ | |||
*/ | |||
/** @defgroup CORTEX_Preemption_Priority_Group CORTEX Preemption Priority Group | |||
* @{ | |||
*/ | |||
#define NVIC_PRIORITYGROUP_0 0x00000007U /*!< 0 bits for pre-emption priority | |||
4 bits for subpriority */ | |||
#define NVIC_PRIORITYGROUP_1 0x00000006U /*!< 1 bits for pre-emption priority | |||
3 bits for subpriority */ | |||
#define NVIC_PRIORITYGROUP_2 0x00000005U /*!< 2 bits for pre-emption priority | |||
2 bits for subpriority */ | |||
#define NVIC_PRIORITYGROUP_3 0x00000004U /*!< 3 bits for pre-emption priority | |||
1 bits for subpriority */ | |||
#define NVIC_PRIORITYGROUP_4 0x00000003U /*!< 4 bits for pre-emption priority | |||
0 bits for subpriority */ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup CORTEX_SysTick_clock_source CORTEX _SysTick clock source | |||
* @{ | |||
*/ | |||
#define SYSTICK_CLKSOURCE_HCLK_DIV8 0x00000000U | |||
#define SYSTICK_CLKSOURCE_HCLK 0x00000004U | |||
/** | |||
* @} | |||
*/ | |||
#if (__MPU_PRESENT == 1) | |||
/** @defgroup CORTEX_MPU_HFNMI_PRIVDEF_Control MPU HFNMI and PRIVILEGED Access control | |||
* @{ | |||
*/ | |||
#define MPU_HFNMI_PRIVDEF_NONE 0x00000000U | |||
#define MPU_HARDFAULT_NMI MPU_CTRL_HFNMIENA_Msk | |||
#define MPU_PRIVILEGED_DEFAULT MPU_CTRL_PRIVDEFENA_Msk | |||
#define MPU_HFNMI_PRIVDEF (MPU_CTRL_HFNMIENA_Msk | MPU_CTRL_PRIVDEFENA_Msk) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup CORTEX_MPU_Region_Enable CORTEX MPU Region Enable | |||
* @{ | |||
*/ | |||
#define MPU_REGION_ENABLE ((uint8_t)0x01) | |||
#define MPU_REGION_DISABLE ((uint8_t)0x00) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup CORTEX_MPU_Instruction_Access CORTEX MPU Instruction Access | |||
* @{ | |||
*/ | |||
#define MPU_INSTRUCTION_ACCESS_ENABLE ((uint8_t)0x00) | |||
#define MPU_INSTRUCTION_ACCESS_DISABLE ((uint8_t)0x01) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup CORTEX_MPU_Access_Shareable CORTEX MPU Instruction Access Shareable | |||
* @{ | |||
*/ | |||
#define MPU_ACCESS_SHAREABLE ((uint8_t)0x01) | |||
#define MPU_ACCESS_NOT_SHAREABLE ((uint8_t)0x00) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup CORTEX_MPU_Access_Cacheable CORTEX MPU Instruction Access Cacheable | |||
* @{ | |||
*/ | |||
#define MPU_ACCESS_CACHEABLE ((uint8_t)0x01) | |||
#define MPU_ACCESS_NOT_CACHEABLE ((uint8_t)0x00) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup CORTEX_MPU_Access_Bufferable CORTEX MPU Instruction Access Bufferable | |||
* @{ | |||
*/ | |||
#define MPU_ACCESS_BUFFERABLE ((uint8_t)0x01) | |||
#define MPU_ACCESS_NOT_BUFFERABLE ((uint8_t)0x00) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup CORTEX_MPU_TEX_Levels MPU TEX Levels | |||
* @{ | |||
*/ | |||
#define MPU_TEX_LEVEL0 ((uint8_t)0x00) | |||
#define MPU_TEX_LEVEL1 ((uint8_t)0x01) | |||
#define MPU_TEX_LEVEL2 ((uint8_t)0x02) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup CORTEX_MPU_Region_Size CORTEX MPU Region Size | |||
* @{ | |||
*/ | |||
#define MPU_REGION_SIZE_32B ((uint8_t)0x04) | |||
#define MPU_REGION_SIZE_64B ((uint8_t)0x05) | |||
#define MPU_REGION_SIZE_128B ((uint8_t)0x06) | |||
#define MPU_REGION_SIZE_256B ((uint8_t)0x07) | |||
#define MPU_REGION_SIZE_512B ((uint8_t)0x08) | |||
#define MPU_REGION_SIZE_1KB ((uint8_t)0x09) | |||
#define MPU_REGION_SIZE_2KB ((uint8_t)0x0A) | |||
#define MPU_REGION_SIZE_4KB ((uint8_t)0x0B) | |||
#define MPU_REGION_SIZE_8KB ((uint8_t)0x0C) | |||
#define MPU_REGION_SIZE_16KB ((uint8_t)0x0D) | |||
#define MPU_REGION_SIZE_32KB ((uint8_t)0x0E) | |||
#define MPU_REGION_SIZE_64KB ((uint8_t)0x0F) | |||
#define MPU_REGION_SIZE_128KB ((uint8_t)0x10) | |||
#define MPU_REGION_SIZE_256KB ((uint8_t)0x11) | |||
#define MPU_REGION_SIZE_512KB ((uint8_t)0x12) | |||
#define MPU_REGION_SIZE_1MB ((uint8_t)0x13) | |||
#define MPU_REGION_SIZE_2MB ((uint8_t)0x14) | |||
#define MPU_REGION_SIZE_4MB ((uint8_t)0x15) | |||
#define MPU_REGION_SIZE_8MB ((uint8_t)0x16) | |||
#define MPU_REGION_SIZE_16MB ((uint8_t)0x17) | |||
#define MPU_REGION_SIZE_32MB ((uint8_t)0x18) | |||
#define MPU_REGION_SIZE_64MB ((uint8_t)0x19) | |||
#define MPU_REGION_SIZE_128MB ((uint8_t)0x1A) | |||
#define MPU_REGION_SIZE_256MB ((uint8_t)0x1B) | |||
#define MPU_REGION_SIZE_512MB ((uint8_t)0x1C) | |||
#define MPU_REGION_SIZE_1GB ((uint8_t)0x1D) | |||
#define MPU_REGION_SIZE_2GB ((uint8_t)0x1E) | |||
#define MPU_REGION_SIZE_4GB ((uint8_t)0x1F) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup CORTEX_MPU_Region_Permission_Attributes CORTEX MPU Region Permission Attributes | |||
* @{ | |||
*/ | |||
#define MPU_REGION_NO_ACCESS ((uint8_t)0x00) | |||
#define MPU_REGION_PRIV_RW ((uint8_t)0x01) | |||
#define MPU_REGION_PRIV_RW_URO ((uint8_t)0x02) | |||
#define MPU_REGION_FULL_ACCESS ((uint8_t)0x03) | |||
#define MPU_REGION_PRIV_RO ((uint8_t)0x05) | |||
#define MPU_REGION_PRIV_RO_URO ((uint8_t)0x06) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup CORTEX_MPU_Region_Number CORTEX MPU Region Number | |||
* @{ | |||
*/ | |||
#define MPU_REGION_NUMBER0 ((uint8_t)0x00) | |||
#define MPU_REGION_NUMBER1 ((uint8_t)0x01) | |||
#define MPU_REGION_NUMBER2 ((uint8_t)0x02) | |||
#define MPU_REGION_NUMBER3 ((uint8_t)0x03) | |||
#define MPU_REGION_NUMBER4 ((uint8_t)0x04) | |||
#define MPU_REGION_NUMBER5 ((uint8_t)0x05) | |||
#define MPU_REGION_NUMBER6 ((uint8_t)0x06) | |||
#define MPU_REGION_NUMBER7 ((uint8_t)0x07) | |||
/** | |||
* @} | |||
*/ | |||
#endif /* __MPU_PRESENT */ | |||
/** | |||
* @} | |||
*/ | |||
/* Exported Macros -----------------------------------------------------------*/ | |||
/* Exported functions --------------------------------------------------------*/ | |||
/** @addtogroup CORTEX_Exported_Functions | |||
* @{ | |||
*/ | |||
/** @addtogroup CORTEX_Exported_Functions_Group1 | |||
* @{ | |||
*/ | |||
/* Initialization and de-initialization functions *****************************/ | |||
void HAL_NVIC_SetPriorityGrouping(uint32_t PriorityGroup); | |||
void HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority); | |||
void HAL_NVIC_EnableIRQ(IRQn_Type IRQn); | |||
void HAL_NVIC_DisableIRQ(IRQn_Type IRQn); | |||
void HAL_NVIC_SystemReset(void); | |||
uint32_t HAL_SYSTICK_Config(uint32_t TicksNumb); | |||
/** | |||
* @} | |||
*/ | |||
/** @addtogroup CORTEX_Exported_Functions_Group2 | |||
* @{ | |||
*/ | |||
/* Peripheral Control functions ***********************************************/ | |||
uint32_t HAL_NVIC_GetPriorityGrouping(void); | |||
void HAL_NVIC_GetPriority(IRQn_Type IRQn, uint32_t PriorityGroup, uint32_t* pPreemptPriority, uint32_t* pSubPriority); | |||
uint32_t HAL_NVIC_GetPendingIRQ(IRQn_Type IRQn); | |||
void HAL_NVIC_SetPendingIRQ(IRQn_Type IRQn); | |||
void HAL_NVIC_ClearPendingIRQ(IRQn_Type IRQn); | |||
uint32_t HAL_NVIC_GetActive(IRQn_Type IRQn); | |||
void HAL_SYSTICK_CLKSourceConfig(uint32_t CLKSource); | |||
void HAL_SYSTICK_IRQHandler(void); | |||
void HAL_SYSTICK_Callback(void); | |||
#if (__MPU_PRESENT == 1U) | |||
void HAL_MPU_Enable(uint32_t MPU_Control); | |||
void HAL_MPU_Disable(void); | |||
void HAL_MPU_ConfigRegion(MPU_Region_InitTypeDef *MPU_Init); | |||
#endif /* __MPU_PRESENT */ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Private types -------------------------------------------------------------*/ | |||
/* Private variables ---------------------------------------------------------*/ | |||
/* Private constants ---------------------------------------------------------*/ | |||
/* Private macros ------------------------------------------------------------*/ | |||
/** @defgroup CORTEX_Private_Macros CORTEX Private Macros | |||
* @{ | |||
*/ | |||
#define IS_NVIC_PRIORITY_GROUP(GROUP) (((GROUP) == NVIC_PRIORITYGROUP_0) || \ | |||
((GROUP) == NVIC_PRIORITYGROUP_1) || \ | |||
((GROUP) == NVIC_PRIORITYGROUP_2) || \ | |||
((GROUP) == NVIC_PRIORITYGROUP_3) || \ | |||
((GROUP) == NVIC_PRIORITYGROUP_4)) | |||
#define IS_NVIC_PREEMPTION_PRIORITY(PRIORITY) ((PRIORITY) < 0x10U) | |||
#define IS_NVIC_SUB_PRIORITY(PRIORITY) ((PRIORITY) < 0x10U) | |||
#define IS_NVIC_DEVICE_IRQ(IRQ) ((IRQ) >= (IRQn_Type)0x00U) | |||
#define IS_SYSTICK_CLK_SOURCE(SOURCE) (((SOURCE) == SYSTICK_CLKSOURCE_HCLK) || \ | |||
((SOURCE) == SYSTICK_CLKSOURCE_HCLK_DIV8)) | |||
#if (__MPU_PRESENT == 1U) | |||
#define IS_MPU_REGION_ENABLE(STATE) (((STATE) == MPU_REGION_ENABLE) || \ | |||
((STATE) == MPU_REGION_DISABLE)) | |||
#define IS_MPU_INSTRUCTION_ACCESS(STATE) (((STATE) == MPU_INSTRUCTION_ACCESS_ENABLE) || \ | |||
((STATE) == MPU_INSTRUCTION_ACCESS_DISABLE)) | |||
#define IS_MPU_ACCESS_SHAREABLE(STATE) (((STATE) == MPU_ACCESS_SHAREABLE) || \ | |||
((STATE) == MPU_ACCESS_NOT_SHAREABLE)) | |||
#define IS_MPU_ACCESS_CACHEABLE(STATE) (((STATE) == MPU_ACCESS_CACHEABLE) || \ | |||
((STATE) == MPU_ACCESS_NOT_CACHEABLE)) | |||
#define IS_MPU_ACCESS_BUFFERABLE(STATE) (((STATE) == MPU_ACCESS_BUFFERABLE) || \ | |||
((STATE) == MPU_ACCESS_NOT_BUFFERABLE)) | |||
#define IS_MPU_TEX_LEVEL(TYPE) (((TYPE) == MPU_TEX_LEVEL0) || \ | |||
((TYPE) == MPU_TEX_LEVEL1) || \ | |||
((TYPE) == MPU_TEX_LEVEL2)) | |||
#define IS_MPU_REGION_PERMISSION_ATTRIBUTE(TYPE) (((TYPE) == MPU_REGION_NO_ACCESS) || \ | |||
((TYPE) == MPU_REGION_PRIV_RW) || \ | |||
((TYPE) == MPU_REGION_PRIV_RW_URO) || \ | |||
((TYPE) == MPU_REGION_FULL_ACCESS) || \ | |||
((TYPE) == MPU_REGION_PRIV_RO) || \ | |||
((TYPE) == MPU_REGION_PRIV_RO_URO)) | |||
#define IS_MPU_REGION_NUMBER(NUMBER) (((NUMBER) == MPU_REGION_NUMBER0) || \ | |||
((NUMBER) == MPU_REGION_NUMBER1) || \ | |||
((NUMBER) == MPU_REGION_NUMBER2) || \ | |||
((NUMBER) == MPU_REGION_NUMBER3) || \ | |||
((NUMBER) == MPU_REGION_NUMBER4) || \ | |||
((NUMBER) == MPU_REGION_NUMBER5) || \ | |||
((NUMBER) == MPU_REGION_NUMBER6) || \ | |||
((NUMBER) == MPU_REGION_NUMBER7)) | |||
#define IS_MPU_REGION_SIZE(SIZE) (((SIZE) == MPU_REGION_SIZE_32B) || \ | |||
((SIZE) == MPU_REGION_SIZE_64B) || \ | |||
((SIZE) == MPU_REGION_SIZE_128B) || \ | |||
((SIZE) == MPU_REGION_SIZE_256B) || \ | |||
((SIZE) == MPU_REGION_SIZE_512B) || \ | |||
((SIZE) == MPU_REGION_SIZE_1KB) || \ | |||
((SIZE) == MPU_REGION_SIZE_2KB) || \ | |||
((SIZE) == MPU_REGION_SIZE_4KB) || \ | |||
((SIZE) == MPU_REGION_SIZE_8KB) || \ | |||
((SIZE) == MPU_REGION_SIZE_16KB) || \ | |||
((SIZE) == MPU_REGION_SIZE_32KB) || \ | |||
((SIZE) == MPU_REGION_SIZE_64KB) || \ | |||
((SIZE) == MPU_REGION_SIZE_128KB) || \ | |||
((SIZE) == MPU_REGION_SIZE_256KB) || \ | |||
((SIZE) == MPU_REGION_SIZE_512KB) || \ | |||
((SIZE) == MPU_REGION_SIZE_1MB) || \ | |||
((SIZE) == MPU_REGION_SIZE_2MB) || \ | |||
((SIZE) == MPU_REGION_SIZE_4MB) || \ | |||
((SIZE) == MPU_REGION_SIZE_8MB) || \ | |||
((SIZE) == MPU_REGION_SIZE_16MB) || \ | |||
((SIZE) == MPU_REGION_SIZE_32MB) || \ | |||
((SIZE) == MPU_REGION_SIZE_64MB) || \ | |||
((SIZE) == MPU_REGION_SIZE_128MB) || \ | |||
((SIZE) == MPU_REGION_SIZE_256MB) || \ | |||
((SIZE) == MPU_REGION_SIZE_512MB) || \ | |||
((SIZE) == MPU_REGION_SIZE_1GB) || \ | |||
((SIZE) == MPU_REGION_SIZE_2GB) || \ | |||
((SIZE) == MPU_REGION_SIZE_4GB)) | |||
#define IS_MPU_SUB_REGION_DISABLE(SUBREGION) ((SUBREGION) < (uint16_t)0x00FF) | |||
#endif /* __MPU_PRESENT */ | |||
/** | |||
* @} | |||
*/ | |||
/* Private functions ---------------------------------------------------------*/ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
#ifdef __cplusplus | |||
} | |||
#endif | |||
#endif /* __STM32F1xx_HAL_CORTEX_H */ | |||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@@ -0,0 +1,210 @@ | |||
/** | |||
****************************************************************************** | |||
* @file stm32f1xx_hal_def.h | |||
* @author MCD Application Team | |||
* @brief This file contains HAL common defines, enumeration, macros and | |||
* structures definitions. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© Copyright (c) 2017 STMicroelectronics. | |||
* All rights reserved.</center></h2> | |||
* | |||
* This software component is licensed by ST under BSD 3-Clause license, | |||
* the "License"; You may not use this file except in compliance with the | |||
* License. You may obtain a copy of the License at: | |||
* opensource.org/licenses/BSD-3-Clause | |||
* | |||
****************************************************************************** | |||
*/ | |||
/* Define to prevent recursive inclusion -------------------------------------*/ | |||
#ifndef __STM32F1xx_HAL_DEF | |||
#define __STM32F1xx_HAL_DEF | |||
#ifdef __cplusplus | |||
extern "C" { | |||
#endif | |||
/* Includes ------------------------------------------------------------------*/ | |||
#include "stm32f1xx.h" | |||
#include "Legacy/stm32_hal_legacy.h" | |||
#include <stddef.h> | |||
/* Exported types ------------------------------------------------------------*/ | |||
/** | |||
* @brief HAL Status structures definition | |||
*/ | |||
typedef enum | |||
{ | |||
HAL_OK = 0x00U, | |||
HAL_ERROR = 0x01U, | |||
HAL_BUSY = 0x02U, | |||
HAL_TIMEOUT = 0x03U | |||
} HAL_StatusTypeDef; | |||
/** | |||
* @brief HAL Lock structures definition | |||
*/ | |||
typedef enum | |||
{ | |||
HAL_UNLOCKED = 0x00U, | |||
HAL_LOCKED = 0x01U | |||
} HAL_LockTypeDef; | |||
/* Exported macro ------------------------------------------------------------*/ | |||
#define HAL_MAX_DELAY 0xFFFFFFFFU | |||
#define HAL_IS_BIT_SET(REG, BIT) (((REG) & (BIT)) != 0U) | |||
#define HAL_IS_BIT_CLR(REG, BIT) (((REG) & (BIT)) == 0U) | |||
#define __HAL_LINKDMA(__HANDLE__, __PPP_DMA_FIELD__, __DMA_HANDLE__) \ | |||
do{ \ | |||
(__HANDLE__)->__PPP_DMA_FIELD__ = &(__DMA_HANDLE__); \ | |||
(__DMA_HANDLE__).Parent = (__HANDLE__); \ | |||
} while(0U) | |||
#define UNUSED(X) (void)X /* To avoid gcc/g++ warnings */ | |||
/** @brief Reset the Handle's State field. | |||
* @param __HANDLE__ specifies the Peripheral Handle. | |||
* @note This macro can be used for the following purpose: | |||
* - When the Handle is declared as local variable; before passing it as parameter | |||
* to HAL_PPP_Init() for the first time, it is mandatory to use this macro | |||
* to set to 0 the Handle's "State" field. | |||
* Otherwise, "State" field may have any random value and the first time the function | |||
* HAL_PPP_Init() is called, the low level hardware initialization will be missed | |||
* (i.e. HAL_PPP_MspInit() will not be executed). | |||
* - When there is a need to reconfigure the low level hardware: instead of calling | |||
* HAL_PPP_DeInit() then HAL_PPP_Init(), user can make a call to this macro then HAL_PPP_Init(). | |||
* In this later function, when the Handle's "State" field is set to 0, it will execute the function | |||
* HAL_PPP_MspInit() which will reconfigure the low level hardware. | |||
* @retval None | |||
*/ | |||
#define __HAL_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = 0U) | |||
#if (USE_RTOS == 1U) | |||
/* Reserved for future use */ | |||
#error "USE_RTOS should be 0 in the current HAL release" | |||
#else | |||
#define __HAL_LOCK(__HANDLE__) \ | |||
do{ \ | |||
if((__HANDLE__)->Lock == HAL_LOCKED) \ | |||
{ \ | |||
return HAL_BUSY; \ | |||
} \ | |||
else \ | |||
{ \ | |||
(__HANDLE__)->Lock = HAL_LOCKED; \ | |||
} \ | |||
}while (0U) | |||
#define __HAL_UNLOCK(__HANDLE__) \ | |||
do{ \ | |||
(__HANDLE__)->Lock = HAL_UNLOCKED; \ | |||
}while (0U) | |||
#endif /* USE_RTOS */ | |||
#if defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) /* ARM Compiler V6 */ | |||
#ifndef __weak | |||
#define __weak __attribute__((weak)) | |||
#endif | |||
#ifndef __packed | |||
#define __packed __attribute__((packed)) | |||
#endif | |||
#elif defined ( __GNUC__ ) && !defined (__CC_ARM) /* GNU Compiler */ | |||
#ifndef __weak | |||
#define __weak __attribute__((weak)) | |||
#endif /* __weak */ | |||
#ifndef __packed | |||
#define __packed __attribute__((__packed__)) | |||
#endif /* __packed */ | |||
#endif /* __GNUC__ */ | |||
/* Macro to get variable aligned on 4-bytes, for __ICCARM__ the directive "#pragma data_alignment=4" must be used instead */ | |||
#if defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) /* ARM Compiler V6 */ | |||
#ifndef __ALIGN_BEGIN | |||
#define __ALIGN_BEGIN | |||
#endif | |||
#ifndef __ALIGN_END | |||
#define __ALIGN_END __attribute__ ((aligned (4))) | |||
#endif | |||
#elif defined ( __GNUC__ ) && !defined (__CC_ARM) /* GNU Compiler */ | |||
#ifndef __ALIGN_END | |||
#define __ALIGN_END __attribute__ ((aligned (4))) | |||
#endif /* __ALIGN_END */ | |||
#ifndef __ALIGN_BEGIN | |||
#define __ALIGN_BEGIN | |||
#endif /* __ALIGN_BEGIN */ | |||
#else | |||
#ifndef __ALIGN_END | |||
#define __ALIGN_END | |||
#endif /* __ALIGN_END */ | |||
#ifndef __ALIGN_BEGIN | |||
#if defined (__CC_ARM) /* ARM Compiler V5*/ | |||
#define __ALIGN_BEGIN __align(4) | |||
#elif defined (__ICCARM__) /* IAR Compiler */ | |||
#define __ALIGN_BEGIN | |||
#endif /* __CC_ARM */ | |||
#endif /* __ALIGN_BEGIN */ | |||
#endif /* __GNUC__ */ | |||
/** | |||
* @brief __RAM_FUNC definition | |||
*/ | |||
#if defined ( __CC_ARM ) || (defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)) | |||
/* ARM Compiler V4/V5 and V6 | |||
-------------------------- | |||
RAM functions are defined using the toolchain options. | |||
Functions that are executed in RAM should reside in a separate source module. | |||
Using the 'Options for File' dialog you can simply change the 'Code / Const' | |||
area of a module to a memory space in physical RAM. | |||
Available memory areas are declared in the 'Target' tab of the 'Options for Target' | |||
dialog. | |||
*/ | |||
#define __RAM_FUNC | |||
#elif defined ( __ICCARM__ ) | |||
/* ICCARM Compiler | |||
--------------- | |||
RAM functions are defined using a specific toolchain keyword "__ramfunc". | |||
*/ | |||
#define __RAM_FUNC __ramfunc | |||
#elif defined ( __GNUC__ ) | |||
/* GNU Compiler | |||
------------ | |||
RAM functions are defined using a specific toolchain attribute | |||
"__attribute__((section(".RamFunc")))". | |||
*/ | |||
#define __RAM_FUNC __attribute__((section(".RamFunc"))) | |||
#endif | |||
/** | |||
* @brief __NOINLINE definition | |||
*/ | |||
#if defined ( __CC_ARM ) || (defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)) || defined ( __GNUC__ ) | |||
/* ARM V4/V5 and V6 & GNU Compiler | |||
------------------------------- | |||
*/ | |||
#define __NOINLINE __attribute__ ( (noinline) ) | |||
#elif defined ( __ICCARM__ ) | |||
/* ICCARM Compiler | |||
--------------- | |||
*/ | |||
#define __NOINLINE _Pragma("optimize = no_inline") | |||
#endif | |||
#ifdef __cplusplus | |||
} | |||
#endif | |||
#endif /* ___STM32F1xx_HAL_DEF */ | |||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@@ -0,0 +1,457 @@ | |||
/** | |||
****************************************************************************** | |||
* @file stm32f1xx_hal_dma.h | |||
* @author MCD Application Team | |||
* @brief Header file of DMA HAL module. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© Copyright (c) 2016 STMicroelectronics. | |||
* All rights reserved.</center></h2> | |||
* | |||
* This software component is licensed by ST under BSD 3-Clause license, | |||
* the "License"; You may not use this file except in compliance with the | |||
* License. You may obtain a copy of the License at: | |||
* opensource.org/licenses/BSD-3-Clause | |||
* | |||
****************************************************************************** | |||
*/ | |||
/* Define to prevent recursive inclusion -------------------------------------*/ | |||
#ifndef __STM32F1xx_HAL_DMA_H | |||
#define __STM32F1xx_HAL_DMA_H | |||
#ifdef __cplusplus | |||
extern "C" { | |||
#endif | |||
/* Includes ------------------------------------------------------------------*/ | |||
#include "stm32f1xx_hal_def.h" | |||
/** @addtogroup STM32F1xx_HAL_Driver | |||
* @{ | |||
*/ | |||
/** @addtogroup DMA | |||
* @{ | |||
*/ | |||
/* Exported types ------------------------------------------------------------*/ | |||
/** @defgroup DMA_Exported_Types DMA Exported Types | |||
* @{ | |||
*/ | |||
/** | |||
* @brief DMA Configuration Structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
uint32_t Direction; /*!< Specifies if the data will be transferred from memory to peripheral, | |||
from memory to memory or from peripheral to memory. | |||
This parameter can be a value of @ref DMA_Data_transfer_direction */ | |||
uint32_t PeriphInc; /*!< Specifies whether the Peripheral address register should be incremented or not. | |||
This parameter can be a value of @ref DMA_Peripheral_incremented_mode */ | |||
uint32_t MemInc; /*!< Specifies whether the memory address register should be incremented or not. | |||
This parameter can be a value of @ref DMA_Memory_incremented_mode */ | |||
uint32_t PeriphDataAlignment; /*!< Specifies the Peripheral data width. | |||
This parameter can be a value of @ref DMA_Peripheral_data_size */ | |||
uint32_t MemDataAlignment; /*!< Specifies the Memory data width. | |||
This parameter can be a value of @ref DMA_Memory_data_size */ | |||
uint32_t Mode; /*!< Specifies the operation mode of the DMAy Channelx. | |||
This parameter can be a value of @ref DMA_mode | |||
@note The circular buffer mode cannot be used if the memory-to-memory | |||
data transfer is configured on the selected Channel */ | |||
uint32_t Priority; /*!< Specifies the software priority for the DMAy Channelx. | |||
This parameter can be a value of @ref DMA_Priority_level */ | |||
} DMA_InitTypeDef; | |||
/** | |||
* @brief HAL DMA State structures definition | |||
*/ | |||
typedef enum | |||
{ | |||
HAL_DMA_STATE_RESET = 0x00U, /*!< DMA not yet initialized or disabled */ | |||
HAL_DMA_STATE_READY = 0x01U, /*!< DMA initialized and ready for use */ | |||
HAL_DMA_STATE_BUSY = 0x02U, /*!< DMA process is ongoing */ | |||
HAL_DMA_STATE_TIMEOUT = 0x03U /*!< DMA timeout state */ | |||
}HAL_DMA_StateTypeDef; | |||
/** | |||
* @brief HAL DMA Error Code structure definition | |||
*/ | |||
typedef enum | |||
{ | |||
HAL_DMA_FULL_TRANSFER = 0x00U, /*!< Full transfer */ | |||
HAL_DMA_HALF_TRANSFER = 0x01U /*!< Half Transfer */ | |||
}HAL_DMA_LevelCompleteTypeDef; | |||
/** | |||
* @brief HAL DMA Callback ID structure definition | |||
*/ | |||
typedef enum | |||
{ | |||
HAL_DMA_XFER_CPLT_CB_ID = 0x00U, /*!< Full transfer */ | |||
HAL_DMA_XFER_HALFCPLT_CB_ID = 0x01U, /*!< Half transfer */ | |||
HAL_DMA_XFER_ERROR_CB_ID = 0x02U, /*!< Error */ | |||
HAL_DMA_XFER_ABORT_CB_ID = 0x03U, /*!< Abort */ | |||
HAL_DMA_XFER_ALL_CB_ID = 0x04U /*!< All */ | |||
}HAL_DMA_CallbackIDTypeDef; | |||
/** | |||
* @brief DMA handle Structure definition | |||
*/ | |||
typedef struct __DMA_HandleTypeDef | |||
{ | |||
DMA_Channel_TypeDef *Instance; /*!< Register base address */ | |||
DMA_InitTypeDef Init; /*!< DMA communication parameters */ | |||
HAL_LockTypeDef Lock; /*!< DMA locking object */ | |||
HAL_DMA_StateTypeDef State; /*!< DMA transfer state */ | |||
void *Parent; /*!< Parent object state */ | |||
void (* XferCpltCallback)( struct __DMA_HandleTypeDef * hdma); /*!< DMA transfer complete callback */ | |||
void (* XferHalfCpltCallback)( struct __DMA_HandleTypeDef * hdma); /*!< DMA Half transfer complete callback */ | |||
void (* XferErrorCallback)( struct __DMA_HandleTypeDef * hdma); /*!< DMA transfer error callback */ | |||
void (* XferAbortCallback)( struct __DMA_HandleTypeDef * hdma); /*!< DMA transfer abort callback */ | |||
__IO uint32_t ErrorCode; /*!< DMA Error code */ | |||
DMA_TypeDef *DmaBaseAddress; /*!< DMA Channel Base Address */ | |||
uint32_t ChannelIndex; /*!< DMA Channel Index */ | |||
} DMA_HandleTypeDef; | |||
/** | |||
* @} | |||
*/ | |||
/* Exported constants --------------------------------------------------------*/ | |||
/** @defgroup DMA_Exported_Constants DMA Exported Constants | |||
* @{ | |||
*/ | |||
/** @defgroup DMA_Error_Code DMA Error Code | |||
* @{ | |||
*/ | |||
#define HAL_DMA_ERROR_NONE 0x00000000U /*!< No error */ | |||
#define HAL_DMA_ERROR_TE 0x00000001U /*!< Transfer error */ | |||
#define HAL_DMA_ERROR_NO_XFER 0x00000004U /*!< no ongoing transfer */ | |||
#define HAL_DMA_ERROR_TIMEOUT 0x00000020U /*!< Timeout error */ | |||
#define HAL_DMA_ERROR_NOT_SUPPORTED 0x00000100U /*!< Not supported mode */ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup DMA_Data_transfer_direction DMA Data transfer direction | |||
* @{ | |||
*/ | |||
#define DMA_PERIPH_TO_MEMORY 0x00000000U /*!< Peripheral to memory direction */ | |||
#define DMA_MEMORY_TO_PERIPH ((uint32_t)DMA_CCR_DIR) /*!< Memory to peripheral direction */ | |||
#define DMA_MEMORY_TO_MEMORY ((uint32_t)DMA_CCR_MEM2MEM) /*!< Memory to memory direction */ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup DMA_Peripheral_incremented_mode DMA Peripheral incremented mode | |||
* @{ | |||
*/ | |||
#define DMA_PINC_ENABLE ((uint32_t)DMA_CCR_PINC) /*!< Peripheral increment mode Enable */ | |||
#define DMA_PINC_DISABLE 0x00000000U /*!< Peripheral increment mode Disable */ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup DMA_Memory_incremented_mode DMA Memory incremented mode | |||
* @{ | |||
*/ | |||
#define DMA_MINC_ENABLE ((uint32_t)DMA_CCR_MINC) /*!< Memory increment mode Enable */ | |||
#define DMA_MINC_DISABLE 0x00000000U /*!< Memory increment mode Disable */ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup DMA_Peripheral_data_size DMA Peripheral data size | |||
* @{ | |||
*/ | |||
#define DMA_PDATAALIGN_BYTE 0x00000000U /*!< Peripheral data alignment: Byte */ | |||
#define DMA_PDATAALIGN_HALFWORD ((uint32_t)DMA_CCR_PSIZE_0) /*!< Peripheral data alignment: HalfWord */ | |||
#define DMA_PDATAALIGN_WORD ((uint32_t)DMA_CCR_PSIZE_1) /*!< Peripheral data alignment: Word */ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup DMA_Memory_data_size DMA Memory data size | |||
* @{ | |||
*/ | |||
#define DMA_MDATAALIGN_BYTE 0x00000000U /*!< Memory data alignment: Byte */ | |||
#define DMA_MDATAALIGN_HALFWORD ((uint32_t)DMA_CCR_MSIZE_0) /*!< Memory data alignment: HalfWord */ | |||
#define DMA_MDATAALIGN_WORD ((uint32_t)DMA_CCR_MSIZE_1) /*!< Memory data alignment: Word */ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup DMA_mode DMA mode | |||
* @{ | |||
*/ | |||
#define DMA_NORMAL 0x00000000U /*!< Normal mode */ | |||
#define DMA_CIRCULAR ((uint32_t)DMA_CCR_CIRC) /*!< Circular mode */ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup DMA_Priority_level DMA Priority level | |||
* @{ | |||
*/ | |||
#define DMA_PRIORITY_LOW 0x00000000U /*!< Priority level : Low */ | |||
#define DMA_PRIORITY_MEDIUM ((uint32_t)DMA_CCR_PL_0) /*!< Priority level : Medium */ | |||
#define DMA_PRIORITY_HIGH ((uint32_t)DMA_CCR_PL_1) /*!< Priority level : High */ | |||
#define DMA_PRIORITY_VERY_HIGH ((uint32_t)DMA_CCR_PL) /*!< Priority level : Very_High */ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup DMA_interrupt_enable_definitions DMA interrupt enable definitions | |||
* @{ | |||
*/ | |||
#define DMA_IT_TC ((uint32_t)DMA_CCR_TCIE) | |||
#define DMA_IT_HT ((uint32_t)DMA_CCR_HTIE) | |||
#define DMA_IT_TE ((uint32_t)DMA_CCR_TEIE) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup DMA_flag_definitions DMA flag definitions | |||
* @{ | |||
*/ | |||
#define DMA_FLAG_GL1 0x00000001U | |||
#define DMA_FLAG_TC1 0x00000002U | |||
#define DMA_FLAG_HT1 0x00000004U | |||
#define DMA_FLAG_TE1 0x00000008U | |||
#define DMA_FLAG_GL2 0x00000010U | |||
#define DMA_FLAG_TC2 0x00000020U | |||
#define DMA_FLAG_HT2 0x00000040U | |||
#define DMA_FLAG_TE2 0x00000080U | |||
#define DMA_FLAG_GL3 0x00000100U | |||
#define DMA_FLAG_TC3 0x00000200U | |||
#define DMA_FLAG_HT3 0x00000400U | |||
#define DMA_FLAG_TE3 0x00000800U | |||
#define DMA_FLAG_GL4 0x00001000U | |||
#define DMA_FLAG_TC4 0x00002000U | |||
#define DMA_FLAG_HT4 0x00004000U | |||
#define DMA_FLAG_TE4 0x00008000U | |||
#define DMA_FLAG_GL5 0x00010000U | |||
#define DMA_FLAG_TC5 0x00020000U | |||
#define DMA_FLAG_HT5 0x00040000U | |||
#define DMA_FLAG_TE5 0x00080000U | |||
#define DMA_FLAG_GL6 0x00100000U | |||
#define DMA_FLAG_TC6 0x00200000U | |||
#define DMA_FLAG_HT6 0x00400000U | |||
#define DMA_FLAG_TE6 0x00800000U | |||
#define DMA_FLAG_GL7 0x01000000U | |||
#define DMA_FLAG_TC7 0x02000000U | |||
#define DMA_FLAG_HT7 0x04000000U | |||
#define DMA_FLAG_TE7 0x08000000U | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Exported macros -----------------------------------------------------------*/ | |||
/** @defgroup DMA_Exported_Macros DMA Exported Macros | |||
* @{ | |||
*/ | |||
/** @brief Reset DMA handle state. | |||
* @param __HANDLE__: DMA handle | |||
* @retval None | |||
*/ | |||
#define __HAL_DMA_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_DMA_STATE_RESET) | |||
/** | |||
* @brief Enable the specified DMA Channel. | |||
* @param __HANDLE__: DMA handle | |||
* @retval None | |||
*/ | |||
#define __HAL_DMA_ENABLE(__HANDLE__) (SET_BIT((__HANDLE__)->Instance->CCR, DMA_CCR_EN)) | |||
/** | |||
* @brief Disable the specified DMA Channel. | |||
* @param __HANDLE__: DMA handle | |||
* @retval None | |||
*/ | |||
#define __HAL_DMA_DISABLE(__HANDLE__) (CLEAR_BIT((__HANDLE__)->Instance->CCR, DMA_CCR_EN)) | |||
/* Interrupt & Flag management */ | |||
/** | |||
* @brief Enables the specified DMA Channel interrupts. | |||
* @param __HANDLE__: DMA handle | |||
* @param __INTERRUPT__: specifies the DMA interrupt sources to be enabled or disabled. | |||
* This parameter can be any combination of the following values: | |||
* @arg DMA_IT_TC: Transfer complete interrupt mask | |||
* @arg DMA_IT_HT: Half transfer complete interrupt mask | |||
* @arg DMA_IT_TE: Transfer error interrupt mask | |||
* @retval None | |||
*/ | |||
#define __HAL_DMA_ENABLE_IT(__HANDLE__, __INTERRUPT__) (SET_BIT((__HANDLE__)->Instance->CCR, (__INTERRUPT__))) | |||
/** | |||
* @brief Disable the specified DMA Channel interrupts. | |||
* @param __HANDLE__: DMA handle | |||
* @param __INTERRUPT__: specifies the DMA interrupt sources to be enabled or disabled. | |||
* This parameter can be any combination of the following values: | |||
* @arg DMA_IT_TC: Transfer complete interrupt mask | |||
* @arg DMA_IT_HT: Half transfer complete interrupt mask | |||
* @arg DMA_IT_TE: Transfer error interrupt mask | |||
* @retval None | |||
*/ | |||
#define __HAL_DMA_DISABLE_IT(__HANDLE__, __INTERRUPT__) (CLEAR_BIT((__HANDLE__)->Instance->CCR , (__INTERRUPT__))) | |||
/** | |||
* @brief Check whether the specified DMA Channel interrupt is enabled or not. | |||
* @param __HANDLE__: DMA handle | |||
* @param __INTERRUPT__: specifies the DMA interrupt source to check. | |||
* This parameter can be one of the following values: | |||
* @arg DMA_IT_TC: Transfer complete interrupt mask | |||
* @arg DMA_IT_HT: Half transfer complete interrupt mask | |||
* @arg DMA_IT_TE: Transfer error interrupt mask | |||
* @retval The state of DMA_IT (SET or RESET). | |||
*/ | |||
#define __HAL_DMA_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->CCR & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET) | |||
/** | |||
* @brief Return the number of remaining data units in the current DMA Channel transfer. | |||
* @param __HANDLE__: DMA handle | |||
* @retval The number of remaining data units in the current DMA Channel transfer. | |||
*/ | |||
#define __HAL_DMA_GET_COUNTER(__HANDLE__) ((__HANDLE__)->Instance->CNDTR) | |||
/** | |||
* @} | |||
*/ | |||
/* Include DMA HAL Extension module */ | |||
#include "stm32f1xx_hal_dma_ex.h" | |||
/* Exported functions --------------------------------------------------------*/ | |||
/** @addtogroup DMA_Exported_Functions | |||
* @{ | |||
*/ | |||
/** @addtogroup DMA_Exported_Functions_Group1 | |||
* @{ | |||
*/ | |||
/* Initialization and de-initialization functions *****************************/ | |||
HAL_StatusTypeDef HAL_DMA_Init(DMA_HandleTypeDef *hdma); | |||
HAL_StatusTypeDef HAL_DMA_DeInit (DMA_HandleTypeDef *hdma); | |||
/** | |||
* @} | |||
*/ | |||
/** @addtogroup DMA_Exported_Functions_Group2 | |||
* @{ | |||
*/ | |||
/* IO operation functions *****************************************************/ | |||
HAL_StatusTypeDef HAL_DMA_Start (DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength); | |||
HAL_StatusTypeDef HAL_DMA_Start_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength); | |||
HAL_StatusTypeDef HAL_DMA_Abort(DMA_HandleTypeDef *hdma); | |||
HAL_StatusTypeDef HAL_DMA_Abort_IT(DMA_HandleTypeDef *hdma); | |||
HAL_StatusTypeDef HAL_DMA_PollForTransfer(DMA_HandleTypeDef *hdma, uint32_t CompleteLevel, uint32_t Timeout); | |||
void HAL_DMA_IRQHandler(DMA_HandleTypeDef *hdma); | |||
HAL_StatusTypeDef HAL_DMA_RegisterCallback(DMA_HandleTypeDef *hdma, HAL_DMA_CallbackIDTypeDef CallbackID, void (* pCallback)( DMA_HandleTypeDef * _hdma)); | |||
HAL_StatusTypeDef HAL_DMA_UnRegisterCallback(DMA_HandleTypeDef *hdma, HAL_DMA_CallbackIDTypeDef CallbackID); | |||
/** | |||
* @} | |||
*/ | |||
/** @addtogroup DMA_Exported_Functions_Group3 | |||
* @{ | |||
*/ | |||
/* Peripheral State and Error functions ***************************************/ | |||
HAL_DMA_StateTypeDef HAL_DMA_GetState(DMA_HandleTypeDef *hdma); | |||
uint32_t HAL_DMA_GetError(DMA_HandleTypeDef *hdma); | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Private macros ------------------------------------------------------------*/ | |||
/** @defgroup DMA_Private_Macros DMA Private Macros | |||
* @{ | |||
*/ | |||
#define IS_DMA_DIRECTION(DIRECTION) (((DIRECTION) == DMA_PERIPH_TO_MEMORY ) || \ | |||
((DIRECTION) == DMA_MEMORY_TO_PERIPH) || \ | |||
((DIRECTION) == DMA_MEMORY_TO_MEMORY)) | |||
#define IS_DMA_BUFFER_SIZE(SIZE) (((SIZE) >= 0x1U) && ((SIZE) < 0x10000U)) | |||
#define IS_DMA_PERIPHERAL_INC_STATE(STATE) (((STATE) == DMA_PINC_ENABLE) || \ | |||
((STATE) == DMA_PINC_DISABLE)) | |||
#define IS_DMA_MEMORY_INC_STATE(STATE) (((STATE) == DMA_MINC_ENABLE) || \ | |||
((STATE) == DMA_MINC_DISABLE)) | |||
#define IS_DMA_PERIPHERAL_DATA_SIZE(SIZE) (((SIZE) == DMA_PDATAALIGN_BYTE) || \ | |||
((SIZE) == DMA_PDATAALIGN_HALFWORD) || \ | |||
((SIZE) == DMA_PDATAALIGN_WORD)) | |||
#define IS_DMA_MEMORY_DATA_SIZE(SIZE) (((SIZE) == DMA_MDATAALIGN_BYTE) || \ | |||
((SIZE) == DMA_MDATAALIGN_HALFWORD) || \ | |||
((SIZE) == DMA_MDATAALIGN_WORD )) | |||
#define IS_DMA_MODE(MODE) (((MODE) == DMA_NORMAL ) || \ | |||
((MODE) == DMA_CIRCULAR)) | |||
#define IS_DMA_PRIORITY(PRIORITY) (((PRIORITY) == DMA_PRIORITY_LOW ) || \ | |||
((PRIORITY) == DMA_PRIORITY_MEDIUM) || \ | |||
((PRIORITY) == DMA_PRIORITY_HIGH) || \ | |||
((PRIORITY) == DMA_PRIORITY_VERY_HIGH)) | |||
/** | |||
* @} | |||
*/ | |||
/* Private functions ---------------------------------------------------------*/ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
#ifdef __cplusplus | |||
} | |||
#endif | |||
#endif /* __STM32F1xx_HAL_DMA_H */ | |||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@@ -0,0 +1,277 @@ | |||
/** | |||
****************************************************************************** | |||
* @file stm32f1xx_hal_dma_ex.h | |||
* @author MCD Application Team | |||
* @brief Header file of DMA HAL extension module. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© Copyright (c) 2016 STMicroelectronics. | |||
* All rights reserved.</center></h2> | |||
* | |||
* This software component is licensed by ST under BSD 3-Clause license, | |||
* the "License"; You may not use this file except in compliance with the | |||
* License. You may obtain a copy of the License at: | |||
* opensource.org/licenses/BSD-3-Clause | |||
* | |||
****************************************************************************** | |||
*/ | |||
/* Define to prevent recursive inclusion -------------------------------------*/ | |||
#ifndef __STM32F1xx_HAL_DMA_EX_H | |||
#define __STM32F1xx_HAL_DMA_EX_H | |||
#ifdef __cplusplus | |||
extern "C" { | |||
#endif | |||
/* Includes ------------------------------------------------------------------*/ | |||
#include "stm32f1xx_hal_def.h" | |||
/** @addtogroup STM32F1xx_HAL_Driver | |||
* @{ | |||
*/ | |||
/** @defgroup DMAEx DMAEx | |||
* @{ | |||
*/ | |||
/* Exported types ------------------------------------------------------------*/ | |||
/* Exported constants --------------------------------------------------------*/ | |||
/* Exported macro ------------------------------------------------------------*/ | |||
/** @defgroup DMAEx_Exported_Macros DMA Extended Exported Macros | |||
* @{ | |||
*/ | |||
/* Interrupt & Flag management */ | |||
#if defined (STM32F100xE) || defined (STM32F101xE) || defined (STM32F101xG) || defined (STM32F103xE) || \ | |||
defined (STM32F103xG) || defined (STM32F105xC) || defined (STM32F107xC) | |||
/** @defgroup DMAEx_High_density_XL_density_Product_devices DMAEx High density and XL density product devices | |||
* @{ | |||
*/ | |||
/** | |||
* @brief Returns the current DMA Channel transfer complete flag. | |||
* @param __HANDLE__: DMA handle | |||
* @retval The specified transfer complete flag index. | |||
*/ | |||
#define __HAL_DMA_GET_TC_FLAG_INDEX(__HANDLE__) \ | |||
(((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))? DMA_FLAG_TC1 :\ | |||
((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2))? DMA_FLAG_TC2 :\ | |||
((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3))? DMA_FLAG_TC3 :\ | |||
((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4))? DMA_FLAG_TC4 :\ | |||
((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5))? DMA_FLAG_TC5 :\ | |||
((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6))? DMA_FLAG_TC6 :\ | |||
((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel7))? DMA_FLAG_TC7 :\ | |||
((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel1))? DMA_FLAG_TC1 :\ | |||
((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel2))? DMA_FLAG_TC2 :\ | |||
((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel3))? DMA_FLAG_TC3 :\ | |||
((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel4))? DMA_FLAG_TC4 :\ | |||
DMA_FLAG_TC5) | |||
/** | |||
* @brief Returns the current DMA Channel half transfer complete flag. | |||
* @param __HANDLE__: DMA handle | |||
* @retval The specified half transfer complete flag index. | |||
*/ | |||
#define __HAL_DMA_GET_HT_FLAG_INDEX(__HANDLE__)\ | |||
(((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))? DMA_FLAG_HT1 :\ | |||
((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2))? DMA_FLAG_HT2 :\ | |||
((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3))? DMA_FLAG_HT3 :\ | |||
((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4))? DMA_FLAG_HT4 :\ | |||
((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5))? DMA_FLAG_HT5 :\ | |||
((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6))? DMA_FLAG_HT6 :\ | |||
((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel7))? DMA_FLAG_HT7 :\ | |||
((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel1))? DMA_FLAG_HT1 :\ | |||
((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel2))? DMA_FLAG_HT2 :\ | |||
((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel3))? DMA_FLAG_HT3 :\ | |||
((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel4))? DMA_FLAG_HT4 :\ | |||
DMA_FLAG_HT5) | |||
/** | |||
* @brief Returns the current DMA Channel transfer error flag. | |||
* @param __HANDLE__: DMA handle | |||
* @retval The specified transfer error flag index. | |||
*/ | |||
#define __HAL_DMA_GET_TE_FLAG_INDEX(__HANDLE__)\ | |||
(((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))? DMA_FLAG_TE1 :\ | |||
((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2))? DMA_FLAG_TE2 :\ | |||
((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3))? DMA_FLAG_TE3 :\ | |||
((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4))? DMA_FLAG_TE4 :\ | |||
((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5))? DMA_FLAG_TE5 :\ | |||
((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6))? DMA_FLAG_TE6 :\ | |||
((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel7))? DMA_FLAG_TE7 :\ | |||
((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel1))? DMA_FLAG_TE1 :\ | |||
((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel2))? DMA_FLAG_TE2 :\ | |||
((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel3))? DMA_FLAG_TE3 :\ | |||
((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel4))? DMA_FLAG_TE4 :\ | |||
DMA_FLAG_TE5) | |||
/** | |||
* @brief Return the current DMA Channel Global interrupt flag. | |||
* @param __HANDLE__: DMA handle | |||
* @retval The specified transfer error flag index. | |||
*/ | |||
#define __HAL_DMA_GET_GI_FLAG_INDEX(__HANDLE__)\ | |||
(((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))? DMA_FLAG_GL1 :\ | |||
((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2))? DMA_FLAG_GL2 :\ | |||
((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3))? DMA_FLAG_GL3 :\ | |||
((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4))? DMA_FLAG_GL4 :\ | |||
((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5))? DMA_FLAG_GL5 :\ | |||
((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6))? DMA_FLAG_GL6 :\ | |||
((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel7))? DMA_FLAG_GL7 :\ | |||
((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel1))? DMA_FLAG_GL1 :\ | |||
((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel2))? DMA_FLAG_GL2 :\ | |||
((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel3))? DMA_FLAG_GL3 :\ | |||
((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel4))? DMA_FLAG_GL4 :\ | |||
DMA_FLAG_GL5) | |||
/** | |||
* @brief Get the DMA Channel pending flags. | |||
* @param __HANDLE__: DMA handle | |||
* @param __FLAG__: Get the specified flag. | |||
* This parameter can be any combination of the following values: | |||
* @arg DMA_FLAG_TCx: Transfer complete flag | |||
* @arg DMA_FLAG_HTx: Half transfer complete flag | |||
* @arg DMA_FLAG_TEx: Transfer error flag | |||
* Where x can be 1_7 or 1_5 (depending on DMA1 or DMA2) to select the DMA Channel flag. | |||
* @retval The state of FLAG (SET or RESET). | |||
*/ | |||
#define __HAL_DMA_GET_FLAG(__HANDLE__, __FLAG__)\ | |||
(((uint32_t)((__HANDLE__)->Instance) > (uint32_t)DMA1_Channel7)? (DMA2->ISR & (__FLAG__)) :\ | |||
(DMA1->ISR & (__FLAG__))) | |||
/** | |||
* @brief Clears the DMA Channel pending flags. | |||
* @param __HANDLE__: DMA handle | |||
* @param __FLAG__: specifies the flag to clear. | |||
* This parameter can be any combination of the following values: | |||
* @arg DMA_FLAG_TCx: Transfer complete flag | |||
* @arg DMA_FLAG_HTx: Half transfer complete flag | |||
* @arg DMA_FLAG_TEx: Transfer error flag | |||
* Where x can be 1_7 or 1_5 (depending on DMA1 or DMA2) to select the DMA Channel flag. | |||
* @retval None | |||
*/ | |||
#define __HAL_DMA_CLEAR_FLAG(__HANDLE__, __FLAG__) \ | |||
(((uint32_t)((__HANDLE__)->Instance) > (uint32_t)DMA1_Channel7)? (DMA2->IFCR = (__FLAG__)) :\ | |||
(DMA1->IFCR = (__FLAG__))) | |||
/** | |||
* @} | |||
*/ | |||
#else | |||
/** @defgroup DMA_Low_density_Medium_density_Product_devices DMA Low density and Medium density product devices | |||
* @{ | |||
*/ | |||
/** | |||
* @brief Returns the current DMA Channel transfer complete flag. | |||
* @param __HANDLE__: DMA handle | |||
* @retval The specified transfer complete flag index. | |||
*/ | |||
#define __HAL_DMA_GET_TC_FLAG_INDEX(__HANDLE__) \ | |||
(((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))? DMA_FLAG_TC1 :\ | |||
((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2))? DMA_FLAG_TC2 :\ | |||
((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3))? DMA_FLAG_TC3 :\ | |||
((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4))? DMA_FLAG_TC4 :\ | |||
((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5))? DMA_FLAG_TC5 :\ | |||
((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6))? DMA_FLAG_TC6 :\ | |||
DMA_FLAG_TC7) | |||
/** | |||
* @brief Return the current DMA Channel half transfer complete flag. | |||
* @param __HANDLE__: DMA handle | |||
* @retval The specified half transfer complete flag index. | |||
*/ | |||
#define __HAL_DMA_GET_HT_FLAG_INDEX(__HANDLE__)\ | |||
(((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))? DMA_FLAG_HT1 :\ | |||
((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2))? DMA_FLAG_HT2 :\ | |||
((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3))? DMA_FLAG_HT3 :\ | |||
((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4))? DMA_FLAG_HT4 :\ | |||
((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5))? DMA_FLAG_HT5 :\ | |||
((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6))? DMA_FLAG_HT6 :\ | |||
DMA_FLAG_HT7) | |||
/** | |||
* @brief Return the current DMA Channel transfer error flag. | |||
* @param __HANDLE__: DMA handle | |||
* @retval The specified transfer error flag index. | |||
*/ | |||
#define __HAL_DMA_GET_TE_FLAG_INDEX(__HANDLE__)\ | |||
(((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))? DMA_FLAG_TE1 :\ | |||
((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2))? DMA_FLAG_TE2 :\ | |||
((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3))? DMA_FLAG_TE3 :\ | |||
((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4))? DMA_FLAG_TE4 :\ | |||
((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5))? DMA_FLAG_TE5 :\ | |||
((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6))? DMA_FLAG_TE6 :\ | |||
DMA_FLAG_TE7) | |||
/** | |||
* @brief Return the current DMA Channel Global interrupt flag. | |||
* @param __HANDLE__: DMA handle | |||
* @retval The specified transfer error flag index. | |||
*/ | |||
#define __HAL_DMA_GET_GI_FLAG_INDEX(__HANDLE__)\ | |||
(((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))? DMA_FLAG_GL1 :\ | |||
((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2))? DMA_FLAG_GL2 :\ | |||
((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3))? DMA_FLAG_GL3 :\ | |||
((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4))? DMA_FLAG_GL4 :\ | |||
((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5))? DMA_FLAG_GL5 :\ | |||
((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6))? DMA_FLAG_GL6 :\ | |||
DMA_FLAG_GL7) | |||
/** | |||
* @brief Get the DMA Channel pending flags. | |||
* @param __HANDLE__: DMA handle | |||
* @param __FLAG__: Get the specified flag. | |||
* This parameter can be any combination of the following values: | |||
* @arg DMA_FLAG_TCx: Transfer complete flag | |||
* @arg DMA_FLAG_HTx: Half transfer complete flag | |||
* @arg DMA_FLAG_TEx: Transfer error flag | |||
* @arg DMA_FLAG_GLx: Global interrupt flag | |||
* Where x can be 1_7 to select the DMA Channel flag. | |||
* @retval The state of FLAG (SET or RESET). | |||
*/ | |||
#define __HAL_DMA_GET_FLAG(__HANDLE__, __FLAG__) (DMA1->ISR & (__FLAG__)) | |||
/** | |||
* @brief Clear the DMA Channel pending flags. | |||
* @param __HANDLE__: DMA handle | |||
* @param __FLAG__: specifies the flag to clear. | |||
* This parameter can be any combination of the following values: | |||
* @arg DMA_FLAG_TCx: Transfer complete flag | |||
* @arg DMA_FLAG_HTx: Half transfer complete flag | |||
* @arg DMA_FLAG_TEx: Transfer error flag | |||
* @arg DMA_FLAG_GLx: Global interrupt flag | |||
* Where x can be 1_7 to select the DMA Channel flag. | |||
* @retval None | |||
*/ | |||
#define __HAL_DMA_CLEAR_FLAG(__HANDLE__, __FLAG__) (DMA1->IFCR = (__FLAG__)) | |||
/** | |||
* @} | |||
*/ | |||
#endif | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
#ifdef __cplusplus | |||
} | |||
#endif /* STM32F100xE || STM32F101xE || STM32F101xG || STM32F103xE || */ | |||
/* STM32F103xG || STM32F105xC || STM32F107xC */ | |||
#endif /* __STM32F1xx_HAL_DMA_H */ | |||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@@ -0,0 +1,328 @@ | |||
/** | |||
****************************************************************************** | |||
* @file stm32f1xx_hal_flash.h | |||
* @author MCD Application Team | |||
* @brief Header file of Flash HAL module. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© Copyright (c) 2016 STMicroelectronics. | |||
* All rights reserved.</center></h2> | |||
* | |||
* This software component is licensed by ST under BSD 3-Clause license, | |||
* the "License"; You may not use this file except in compliance with the | |||
* License. You may obtain a copy of the License at: | |||
* opensource.org/licenses/BSD-3-Clause | |||
* | |||
****************************************************************************** | |||
*/ | |||
/* Define to prevent recursive inclusion -------------------------------------*/ | |||
#ifndef __STM32F1xx_HAL_FLASH_H | |||
#define __STM32F1xx_HAL_FLASH_H | |||
#ifdef __cplusplus | |||
extern "C" { | |||
#endif | |||
/* Includes ------------------------------------------------------------------*/ | |||
#include "stm32f1xx_hal_def.h" | |||
/** @addtogroup STM32F1xx_HAL_Driver | |||
* @{ | |||
*/ | |||
/** @addtogroup FLASH | |||
* @{ | |||
*/ | |||
/** @addtogroup FLASH_Private_Constants | |||
* @{ | |||
*/ | |||
#define FLASH_TIMEOUT_VALUE 50000U /* 50 s */ | |||
/** | |||
* @} | |||
*/ | |||
/** @addtogroup FLASH_Private_Macros | |||
* @{ | |||
*/ | |||
#define IS_FLASH_TYPEPROGRAM(VALUE) (((VALUE) == FLASH_TYPEPROGRAM_HALFWORD) || \ | |||
((VALUE) == FLASH_TYPEPROGRAM_WORD) || \ | |||
((VALUE) == FLASH_TYPEPROGRAM_DOUBLEWORD)) | |||
#if defined(FLASH_ACR_LATENCY) | |||
#define IS_FLASH_LATENCY(__LATENCY__) (((__LATENCY__) == FLASH_LATENCY_0) || \ | |||
((__LATENCY__) == FLASH_LATENCY_1) || \ | |||
((__LATENCY__) == FLASH_LATENCY_2)) | |||
#else | |||
#define IS_FLASH_LATENCY(__LATENCY__) ((__LATENCY__) == FLASH_LATENCY_0) | |||
#endif /* FLASH_ACR_LATENCY */ | |||
/** | |||
* @} | |||
*/ | |||
/* Exported types ------------------------------------------------------------*/ | |||
/** @defgroup FLASH_Exported_Types FLASH Exported Types | |||
* @{ | |||
*/ | |||
/** | |||
* @brief FLASH Procedure structure definition | |||
*/ | |||
typedef enum | |||
{ | |||
FLASH_PROC_NONE = 0U, | |||
FLASH_PROC_PAGEERASE = 1U, | |||
FLASH_PROC_MASSERASE = 2U, | |||
FLASH_PROC_PROGRAMHALFWORD = 3U, | |||
FLASH_PROC_PROGRAMWORD = 4U, | |||
FLASH_PROC_PROGRAMDOUBLEWORD = 5U | |||
} FLASH_ProcedureTypeDef; | |||
/** | |||
* @brief FLASH handle Structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
__IO FLASH_ProcedureTypeDef ProcedureOnGoing; /*!< Internal variable to indicate which procedure is ongoing or not in IT context */ | |||
__IO uint32_t DataRemaining; /*!< Internal variable to save the remaining pages to erase or half-word to program in IT context */ | |||
__IO uint32_t Address; /*!< Internal variable to save address selected for program or erase */ | |||
__IO uint64_t Data; /*!< Internal variable to save data to be programmed */ | |||
HAL_LockTypeDef Lock; /*!< FLASH locking object */ | |||
__IO uint32_t ErrorCode; /*!< FLASH error code | |||
This parameter can be a value of @ref FLASH_Error_Codes */ | |||
} FLASH_ProcessTypeDef; | |||
/** | |||
* @} | |||
*/ | |||
/* Exported constants --------------------------------------------------------*/ | |||
/** @defgroup FLASH_Exported_Constants FLASH Exported Constants | |||
* @{ | |||
*/ | |||
/** @defgroup FLASH_Error_Codes FLASH Error Codes | |||
* @{ | |||
*/ | |||
#define HAL_FLASH_ERROR_NONE 0x00U /*!< No error */ | |||
#define HAL_FLASH_ERROR_PROG 0x01U /*!< Programming error */ | |||
#define HAL_FLASH_ERROR_WRP 0x02U /*!< Write protection error */ | |||
#define HAL_FLASH_ERROR_OPTV 0x04U /*!< Option validity error */ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup FLASH_Type_Program FLASH Type Program | |||
* @{ | |||
*/ | |||
#define FLASH_TYPEPROGRAM_HALFWORD 0x01U /*!<Program a half-word (16-bit) at a specified address.*/ | |||
#define FLASH_TYPEPROGRAM_WORD 0x02U /*!<Program a word (32-bit) at a specified address.*/ | |||
#define FLASH_TYPEPROGRAM_DOUBLEWORD 0x03U /*!<Program a double word (64-bit) at a specified address*/ | |||
/** | |||
* @} | |||
*/ | |||
#if defined(FLASH_ACR_LATENCY) | |||
/** @defgroup FLASH_Latency FLASH Latency | |||
* @{ | |||
*/ | |||
#define FLASH_LATENCY_0 0x00000000U /*!< FLASH Zero Latency cycle */ | |||
#define FLASH_LATENCY_1 FLASH_ACR_LATENCY_0 /*!< FLASH One Latency cycle */ | |||
#define FLASH_LATENCY_2 FLASH_ACR_LATENCY_1 /*!< FLASH Two Latency cycles */ | |||
/** | |||
* @} | |||
*/ | |||
#else | |||
/** @defgroup FLASH_Latency FLASH Latency | |||
* @{ | |||
*/ | |||
#define FLASH_LATENCY_0 0x00000000U /*!< FLASH Zero Latency cycle */ | |||
/** | |||
* @} | |||
*/ | |||
#endif /* FLASH_ACR_LATENCY */ | |||
/** | |||
* @} | |||
*/ | |||
/* Exported macro ------------------------------------------------------------*/ | |||
/** @defgroup FLASH_Exported_Macros FLASH Exported Macros | |||
* @brief macros to control FLASH features | |||
* @{ | |||
*/ | |||
/** @defgroup FLASH_Half_Cycle FLASH Half Cycle | |||
* @brief macros to handle FLASH half cycle | |||
* @{ | |||
*/ | |||
/** | |||
* @brief Enable the FLASH half cycle access. | |||
* @note half cycle access can only be used with a low-frequency clock of less than | |||
8 MHz that can be obtained with the use of HSI or HSE but not of PLL. | |||
* @retval None | |||
*/ | |||
#define __HAL_FLASH_HALF_CYCLE_ACCESS_ENABLE() (FLASH->ACR |= FLASH_ACR_HLFCYA) | |||
/** | |||
* @brief Disable the FLASH half cycle access. | |||
* @note half cycle access can only be used with a low-frequency clock of less than | |||
8 MHz that can be obtained with the use of HSI or HSE but not of PLL. | |||
* @retval None | |||
*/ | |||
#define __HAL_FLASH_HALF_CYCLE_ACCESS_DISABLE() (FLASH->ACR &= (~FLASH_ACR_HLFCYA)) | |||
/** | |||
* @} | |||
*/ | |||
#if defined(FLASH_ACR_LATENCY) | |||
/** @defgroup FLASH_EM_Latency FLASH Latency | |||
* @brief macros to handle FLASH Latency | |||
* @{ | |||
*/ | |||
/** | |||
* @brief Set the FLASH Latency. | |||
* @param __LATENCY__ FLASH Latency | |||
* The value of this parameter depend on device used within the same series | |||
* @retval None | |||
*/ | |||
#define __HAL_FLASH_SET_LATENCY(__LATENCY__) (FLASH->ACR = (FLASH->ACR&(~FLASH_ACR_LATENCY)) | (__LATENCY__)) | |||
/** | |||
* @brief Get the FLASH Latency. | |||
* @retval FLASH Latency | |||
* The value of this parameter depend on device used within the same series | |||
*/ | |||
#define __HAL_FLASH_GET_LATENCY() (READ_BIT((FLASH->ACR), FLASH_ACR_LATENCY)) | |||
/** | |||
* @} | |||
*/ | |||
#endif /* FLASH_ACR_LATENCY */ | |||
/** @defgroup FLASH_Prefetch FLASH Prefetch | |||
* @brief macros to handle FLASH Prefetch buffer | |||
* @{ | |||
*/ | |||
/** | |||
* @brief Enable the FLASH prefetch buffer. | |||
* @retval None | |||
*/ | |||
#define __HAL_FLASH_PREFETCH_BUFFER_ENABLE() (FLASH->ACR |= FLASH_ACR_PRFTBE) | |||
/** | |||
* @brief Disable the FLASH prefetch buffer. | |||
* @retval None | |||
*/ | |||
#define __HAL_FLASH_PREFETCH_BUFFER_DISABLE() (FLASH->ACR &= (~FLASH_ACR_PRFTBE)) | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Include FLASH HAL Extended module */ | |||
#include "stm32f1xx_hal_flash_ex.h" | |||
/* Exported functions --------------------------------------------------------*/ | |||
/** @addtogroup FLASH_Exported_Functions | |||
* @{ | |||
*/ | |||
/** @addtogroup FLASH_Exported_Functions_Group1 | |||
* @{ | |||
*/ | |||
/* IO operation functions *****************************************************/ | |||
HAL_StatusTypeDef HAL_FLASH_Program(uint32_t TypeProgram, uint32_t Address, uint64_t Data); | |||
HAL_StatusTypeDef HAL_FLASH_Program_IT(uint32_t TypeProgram, uint32_t Address, uint64_t Data); | |||
/* FLASH IRQ handler function */ | |||
void HAL_FLASH_IRQHandler(void); | |||
/* Callbacks in non blocking modes */ | |||
void HAL_FLASH_EndOfOperationCallback(uint32_t ReturnValue); | |||
void HAL_FLASH_OperationErrorCallback(uint32_t ReturnValue); | |||
/** | |||
* @} | |||
*/ | |||
/** @addtogroup FLASH_Exported_Functions_Group2 | |||
* @{ | |||
*/ | |||
/* Peripheral Control functions ***********************************************/ | |||
HAL_StatusTypeDef HAL_FLASH_Unlock(void); | |||
HAL_StatusTypeDef HAL_FLASH_Lock(void); | |||
HAL_StatusTypeDef HAL_FLASH_OB_Unlock(void); | |||
HAL_StatusTypeDef HAL_FLASH_OB_Lock(void); | |||
void HAL_FLASH_OB_Launch(void); | |||
/** | |||
* @} | |||
*/ | |||
/** @addtogroup FLASH_Exported_Functions_Group3 | |||
* @{ | |||
*/ | |||
/* Peripheral State and Error functions ***************************************/ | |||
uint32_t HAL_FLASH_GetError(void); | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Private function -------------------------------------------------*/ | |||
/** @addtogroup FLASH_Private_Functions | |||
* @{ | |||
*/ | |||
HAL_StatusTypeDef FLASH_WaitForLastOperation(uint32_t Timeout); | |||
#if defined(FLASH_BANK2_END) | |||
HAL_StatusTypeDef FLASH_WaitForLastOperationBank2(uint32_t Timeout); | |||
#endif /* FLASH_BANK2_END */ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
#ifdef __cplusplus | |||
} | |||
#endif | |||
#endif /* __STM32F1xx_HAL_FLASH_H */ | |||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ | |||
@@ -0,0 +1,786 @@ | |||
/** | |||
****************************************************************************** | |||
* @file stm32f1xx_hal_flash_ex.h | |||
* @author MCD Application Team | |||
* @brief Header file of Flash HAL Extended module. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© Copyright (c) 2016 STMicroelectronics. | |||
* All rights reserved.</center></h2> | |||
* | |||
* This software component is licensed by ST under BSD 3-Clause license, | |||
* the "License"; You may not use this file except in compliance with the | |||
* License. You may obtain a copy of the License at: | |||
* opensource.org/licenses/BSD-3-Clause | |||
* | |||
****************************************************************************** | |||
*/ | |||
/* Define to prevent recursive inclusion -------------------------------------*/ | |||
#ifndef __STM32F1xx_HAL_FLASH_EX_H | |||
#define __STM32F1xx_HAL_FLASH_EX_H | |||
#ifdef __cplusplus | |||
extern "C" { | |||
#endif | |||
/* Includes ------------------------------------------------------------------*/ | |||
#include "stm32f1xx_hal_def.h" | |||
/** @addtogroup STM32F1xx_HAL_Driver | |||
* @{ | |||
*/ | |||
/** @addtogroup FLASHEx | |||
* @{ | |||
*/ | |||
/** @addtogroup FLASHEx_Private_Constants | |||
* @{ | |||
*/ | |||
#define FLASH_SIZE_DATA_REGISTER 0x1FFFF7E0U | |||
#define OBR_REG_INDEX 1U | |||
#define SR_FLAG_MASK ((uint32_t)(FLASH_SR_BSY | FLASH_SR_PGERR | FLASH_SR_WRPRTERR | FLASH_SR_EOP)) | |||
/** | |||
* @} | |||
*/ | |||
/** @addtogroup FLASHEx_Private_Macros | |||
* @{ | |||
*/ | |||
#define IS_FLASH_TYPEERASE(VALUE) (((VALUE) == FLASH_TYPEERASE_PAGES) || ((VALUE) == FLASH_TYPEERASE_MASSERASE)) | |||
#define IS_OPTIONBYTE(VALUE) (((VALUE) <= (OPTIONBYTE_WRP | OPTIONBYTE_RDP | OPTIONBYTE_USER | OPTIONBYTE_DATA))) | |||
#define IS_WRPSTATE(VALUE) (((VALUE) == OB_WRPSTATE_DISABLE) || ((VALUE) == OB_WRPSTATE_ENABLE)) | |||
#define IS_OB_RDP_LEVEL(LEVEL) (((LEVEL) == OB_RDP_LEVEL_0) || ((LEVEL) == OB_RDP_LEVEL_1)) | |||
#define IS_OB_DATA_ADDRESS(ADDRESS) (((ADDRESS) == OB_DATA_ADDRESS_DATA0) || ((ADDRESS) == OB_DATA_ADDRESS_DATA1)) | |||
#define IS_OB_IWDG_SOURCE(SOURCE) (((SOURCE) == OB_IWDG_SW) || ((SOURCE) == OB_IWDG_HW)) | |||
#define IS_OB_STOP_SOURCE(SOURCE) (((SOURCE) == OB_STOP_NO_RST) || ((SOURCE) == OB_STOP_RST)) | |||
#define IS_OB_STDBY_SOURCE(SOURCE) (((SOURCE) == OB_STDBY_NO_RST) || ((SOURCE) == OB_STDBY_RST)) | |||
#if defined(FLASH_BANK2_END) | |||
#define IS_OB_BOOT1(BOOT1) (((BOOT1) == OB_BOOT1_RESET) || ((BOOT1) == OB_BOOT1_SET)) | |||
#endif /* FLASH_BANK2_END */ | |||
/* Low Density */ | |||
#if (defined(STM32F101x6) || defined(STM32F102x6) || defined(STM32F103x6)) | |||
#define IS_FLASH_NB_PAGES(ADDRESS,NBPAGES) (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x20U) ? ((ADDRESS)+((NBPAGES)*FLASH_PAGE_SIZE)- 1 <= 0x08007FFFU) : \ | |||
((ADDRESS)+((NBPAGES)*FLASH_PAGE_SIZE)- 1 <= 0x08003FFFU)) | |||
#endif /* STM32F101x6 || STM32F102x6 || STM32F103x6 */ | |||
/* Medium Density */ | |||
#if (defined(STM32F100xB) || defined(STM32F101xB) || defined(STM32F102xB) || defined(STM32F103xB)) | |||
#define IS_FLASH_NB_PAGES(ADDRESS,NBPAGES) (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x80U) ? ((ADDRESS)+((NBPAGES)*FLASH_PAGE_SIZE)-1 <= 0x0801FFFFU) : \ | |||
(((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x40U) ? ((ADDRESS)+((NBPAGES)*FLASH_PAGE_SIZE)-1 <= 0x0800FFFFU) : \ | |||
(((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x20U) ? ((ADDRESS)+((NBPAGES)*FLASH_PAGE_SIZE)-1 <= 0x08007FFFU) : \ | |||
((ADDRESS)+((NBPAGES)*FLASH_PAGE_SIZE)-1 <= 0x08003FFFU)))) | |||
#endif /* STM32F100xB || STM32F101xB || STM32F102xB || STM32F103xB*/ | |||
/* High Density */ | |||
#if (defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F103xE)) | |||
#define IS_FLASH_NB_PAGES(ADDRESS,NBPAGES) (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x200U) ? ((ADDRESS)+((NBPAGES)*FLASH_PAGE_SIZE)-1 <= 0x0807FFFFU) : \ | |||
(((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x180U) ? ((ADDRESS)+((NBPAGES)*FLASH_PAGE_SIZE)-1 <= 0x0805FFFFU) : \ | |||
((ADDRESS)+((NBPAGES)*FLASH_PAGE_SIZE)-1 <= 0x0803FFFFU))) | |||
#endif /* STM32F100xE || STM32F101xE || STM32F103xE */ | |||
/* XL Density */ | |||
#if defined(FLASH_BANK2_END) | |||
#define IS_FLASH_NB_PAGES(ADDRESS,NBPAGES) (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x400U) ? ((ADDRESS)+((NBPAGES)*FLASH_PAGE_SIZE)-1 <= 0x080FFFFFU) : \ | |||
((ADDRESS)+((NBPAGES)*FLASH_PAGE_SIZE)-1 <= 0x080BFFFFU)) | |||
#endif /* FLASH_BANK2_END */ | |||
/* Connectivity Line */ | |||
#if (defined(STM32F105xC) || defined(STM32F107xC)) | |||
#define IS_FLASH_NB_PAGES(ADDRESS,NBPAGES) (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x100U) ? ((ADDRESS)+((NBPAGES)*FLASH_PAGE_SIZE)-1 <= 0x0803FFFFU) : \ | |||
(((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x80U) ? ((ADDRESS)+((NBPAGES)*FLASH_PAGE_SIZE)-1 <= 0x0801FFFFU) : \ | |||
((ADDRESS)+((NBPAGES)*FLASH_PAGE_SIZE)-1 <= 0x0800FFFFU))) | |||
#endif /* STM32F105xC || STM32F107xC */ | |||
#define IS_OB_WRP(PAGE) (((PAGE) != 0x0000000U)) | |||
#if defined(FLASH_BANK2_END) | |||
#define IS_FLASH_BANK(BANK) (((BANK) == FLASH_BANK_1) || \ | |||
((BANK) == FLASH_BANK_2) || \ | |||
((BANK) == FLASH_BANK_BOTH)) | |||
#else | |||
#define IS_FLASH_BANK(BANK) (((BANK) == FLASH_BANK_1)) | |||
#endif /* FLASH_BANK2_END */ | |||
/* Low Density */ | |||
#if (defined(STM32F101x6) || defined(STM32F102x6) || defined(STM32F103x6)) | |||
#define IS_FLASH_PROGRAM_ADDRESS(ADDRESS) (((ADDRESS) >= FLASH_BASE) && (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x20U) ? \ | |||
((ADDRESS) <= FLASH_BANK1_END) : ((ADDRESS) <= 0x08003FFFU))) | |||
#endif /* STM32F101x6 || STM32F102x6 || STM32F103x6 */ | |||
/* Medium Density */ | |||
#if (defined(STM32F100xB) || defined(STM32F101xB) || defined(STM32F102xB) || defined(STM32F103xB)) | |||
#define IS_FLASH_PROGRAM_ADDRESS(ADDRESS) (((ADDRESS) >= FLASH_BASE) && (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x80U) ? \ | |||
((ADDRESS) <= FLASH_BANK1_END) : (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x40U) ? \ | |||
((ADDRESS) <= 0x0800FFFF) : (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x20U) ? \ | |||
((ADDRESS) <= 0x08007FFF) : ((ADDRESS) <= 0x08003FFFU))))) | |||
#endif /* STM32F100xB || STM32F101xB || STM32F102xB || STM32F103xB*/ | |||
/* High Density */ | |||
#if (defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F103xE)) | |||
#define IS_FLASH_PROGRAM_ADDRESS(ADDRESS) (((ADDRESS) >= FLASH_BASE) && (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x200U) ? \ | |||
((ADDRESS) <= FLASH_BANK1_END) : (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x180U) ? \ | |||
((ADDRESS) <= 0x0805FFFFU) : ((ADDRESS) <= 0x0803FFFFU)))) | |||
#endif /* STM32F100xE || STM32F101xE || STM32F103xE */ | |||
/* XL Density */ | |||
#if defined(FLASH_BANK2_END) | |||
#define IS_FLASH_PROGRAM_ADDRESS(ADDRESS) (((ADDRESS) >= FLASH_BASE) && (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x400U) ? \ | |||
((ADDRESS) <= FLASH_BANK2_END) : ((ADDRESS) <= 0x080BFFFFU))) | |||
#endif /* FLASH_BANK2_END */ | |||
/* Connectivity Line */ | |||
#if (defined(STM32F105xC) || defined(STM32F107xC)) | |||
#define IS_FLASH_PROGRAM_ADDRESS(ADDRESS) (((ADDRESS) >= FLASH_BASE) && (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x100U) ? \ | |||
((ADDRESS) <= FLASH_BANK1_END) : (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x80U) ? \ | |||
((ADDRESS) <= 0x0801FFFFU) : ((ADDRESS) <= 0x0800FFFFU)))) | |||
#endif /* STM32F105xC || STM32F107xC */ | |||
/** | |||
* @} | |||
*/ | |||
/* Exported types ------------------------------------------------------------*/ | |||
/** @defgroup FLASHEx_Exported_Types FLASHEx Exported Types | |||
* @{ | |||
*/ | |||
/** | |||
* @brief FLASH Erase structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
uint32_t TypeErase; /*!< TypeErase: Mass erase or page erase. | |||
This parameter can be a value of @ref FLASHEx_Type_Erase */ | |||
uint32_t Banks; /*!< Select banks to erase when Mass erase is enabled. | |||
This parameter must be a value of @ref FLASHEx_Banks */ | |||
uint32_t PageAddress; /*!< PageAdress: Initial FLASH page address to erase when mass erase is disabled | |||
This parameter must be a number between Min_Data = 0x08000000 and Max_Data = FLASH_BANKx_END | |||
(x = 1 or 2 depending on devices)*/ | |||
uint32_t NbPages; /*!< NbPages: Number of pagess to be erased. | |||
This parameter must be a value between Min_Data = 1 and Max_Data = (max number of pages - value of initial page)*/ | |||
} FLASH_EraseInitTypeDef; | |||
/** | |||
* @brief FLASH Options bytes program structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
uint32_t OptionType; /*!< OptionType: Option byte to be configured. | |||
This parameter can be a value of @ref FLASHEx_OB_Type */ | |||
uint32_t WRPState; /*!< WRPState: Write protection activation or deactivation. | |||
This parameter can be a value of @ref FLASHEx_OB_WRP_State */ | |||
uint32_t WRPPage; /*!< WRPPage: specifies the page(s) to be write protected | |||
This parameter can be a value of @ref FLASHEx_OB_Write_Protection */ | |||
uint32_t Banks; /*!< Select banks for WRP activation/deactivation of all sectors. | |||
This parameter must be a value of @ref FLASHEx_Banks */ | |||
uint8_t RDPLevel; /*!< RDPLevel: Set the read protection level.. | |||
This parameter can be a value of @ref FLASHEx_OB_Read_Protection */ | |||
#if defined(FLASH_BANK2_END) | |||
uint8_t USERConfig; /*!< USERConfig: Program the FLASH User Option Byte: | |||
IWDG / STOP / STDBY / BOOT1 | |||
This parameter can be a combination of @ref FLASHEx_OB_IWatchdog, @ref FLASHEx_OB_nRST_STOP, | |||
@ref FLASHEx_OB_nRST_STDBY, @ref FLASHEx_OB_BOOT1 */ | |||
#else | |||
uint8_t USERConfig; /*!< USERConfig: Program the FLASH User Option Byte: | |||
IWDG / STOP / STDBY | |||
This parameter can be a combination of @ref FLASHEx_OB_IWatchdog, @ref FLASHEx_OB_nRST_STOP, | |||
@ref FLASHEx_OB_nRST_STDBY */ | |||
#endif /* FLASH_BANK2_END */ | |||
uint32_t DATAAddress; /*!< DATAAddress: Address of the option byte DATA to be programmed | |||
This parameter can be a value of @ref FLASHEx_OB_Data_Address */ | |||
uint8_t DATAData; /*!< DATAData: Data to be stored in the option byte DATA | |||
This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFF */ | |||
} FLASH_OBProgramInitTypeDef; | |||
/** | |||
* @} | |||
*/ | |||
/* Exported constants --------------------------------------------------------*/ | |||
/** @defgroup FLASHEx_Exported_Constants FLASHEx Exported Constants | |||
* @{ | |||
*/ | |||
/** @defgroup FLASHEx_Constants FLASH Constants | |||
* @{ | |||
*/ | |||
/** @defgroup FLASHEx_Page_Size Page Size | |||
* @{ | |||
*/ | |||
#if (defined(STM32F101x6) || defined(STM32F102x6) || defined(STM32F103x6) || defined(STM32F100xB) || defined(STM32F101xB) || defined(STM32F102xB) || defined(STM32F103xB)) | |||
#define FLASH_PAGE_SIZE 0x400U | |||
#endif /* STM32F101x6 || STM32F102x6 || STM32F103x6 */ | |||
/* STM32F100xB || STM32F101xB || STM32F102xB || STM32F103xB */ | |||
#if (defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)) | |||
#define FLASH_PAGE_SIZE 0x800U | |||
#endif /* STM32F100xB || STM32F101xB || STM32F102xB || STM32F103xB */ | |||
/* STM32F101xG || STM32F103xG */ | |||
/* STM32F105xC || STM32F107xC */ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup FLASHEx_Type_Erase Type Erase | |||
* @{ | |||
*/ | |||
#define FLASH_TYPEERASE_PAGES 0x00U /*!<Pages erase only*/ | |||
#define FLASH_TYPEERASE_MASSERASE 0x02U /*!<Flash mass erase activation*/ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup FLASHEx_Banks Banks | |||
* @{ | |||
*/ | |||
#if defined(FLASH_BANK2_END) | |||
#define FLASH_BANK_1 1U /*!< Bank 1 */ | |||
#define FLASH_BANK_2 2U /*!< Bank 2 */ | |||
#define FLASH_BANK_BOTH ((uint32_t)FLASH_BANK_1 | FLASH_BANK_2) /*!< Bank1 and Bank2 */ | |||
#else | |||
#define FLASH_BANK_1 1U /*!< Bank 1 */ | |||
#endif | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup FLASHEx_OptionByte_Constants Option Byte Constants | |||
* @{ | |||
*/ | |||
/** @defgroup FLASHEx_OB_Type Option Bytes Type | |||
* @{ | |||
*/ | |||
#define OPTIONBYTE_WRP 0x01U /*!<WRP option byte configuration*/ | |||
#define OPTIONBYTE_RDP 0x02U /*!<RDP option byte configuration*/ | |||
#define OPTIONBYTE_USER 0x04U /*!<USER option byte configuration*/ | |||
#define OPTIONBYTE_DATA 0x08U /*!<DATA option byte configuration*/ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup FLASHEx_OB_WRP_State Option Byte WRP State | |||
* @{ | |||
*/ | |||
#define OB_WRPSTATE_DISABLE 0x00U /*!<Disable the write protection of the desired pages*/ | |||
#define OB_WRPSTATE_ENABLE 0x01U /*!<Enable the write protection of the desired pagess*/ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup FLASHEx_OB_Write_Protection Option Bytes Write Protection | |||
* @{ | |||
*/ | |||
/* STM32 Low and Medium density devices */ | |||
#if defined(STM32F101x6) || defined(STM32F102x6) || defined(STM32F103x6) \ | |||
|| defined(STM32F100xB) || defined(STM32F101xB) || defined(STM32F102xB) \ | |||
|| defined(STM32F103xB) | |||
#define OB_WRP_PAGES0TO3 0x00000001U /*!< Write protection of page 0 to 3 */ | |||
#define OB_WRP_PAGES4TO7 0x00000002U /*!< Write protection of page 4 to 7 */ | |||
#define OB_WRP_PAGES8TO11 0x00000004U /*!< Write protection of page 8 to 11 */ | |||
#define OB_WRP_PAGES12TO15 0x00000008U /*!< Write protection of page 12 to 15 */ | |||
#define OB_WRP_PAGES16TO19 0x00000010U /*!< Write protection of page 16 to 19 */ | |||
#define OB_WRP_PAGES20TO23 0x00000020U /*!< Write protection of page 20 to 23 */ | |||
#define OB_WRP_PAGES24TO27 0x00000040U /*!< Write protection of page 24 to 27 */ | |||
#define OB_WRP_PAGES28TO31 0x00000080U /*!< Write protection of page 28 to 31 */ | |||
#endif /* STM32F101x6 || STM32F102x6 || STM32F103x6 */ | |||
/* STM32F100xB || STM32F101xB || STM32F102xB || STM32F103xB */ | |||
/* STM32 Medium-density devices */ | |||
#if defined(STM32F100xB) || defined(STM32F101xB) || defined(STM32F102xB) || defined(STM32F103xB) | |||
#define OB_WRP_PAGES32TO35 0x00000100U /*!< Write protection of page 32 to 35 */ | |||
#define OB_WRP_PAGES36TO39 0x00000200U /*!< Write protection of page 36 to 39 */ | |||
#define OB_WRP_PAGES40TO43 0x00000400U /*!< Write protection of page 40 to 43 */ | |||
#define OB_WRP_PAGES44TO47 0x00000800U /*!< Write protection of page 44 to 47 */ | |||
#define OB_WRP_PAGES48TO51 0x00001000U /*!< Write protection of page 48 to 51 */ | |||
#define OB_WRP_PAGES52TO55 0x00002000U /*!< Write protection of page 52 to 55 */ | |||
#define OB_WRP_PAGES56TO59 0x00004000U /*!< Write protection of page 56 to 59 */ | |||
#define OB_WRP_PAGES60TO63 0x00008000U /*!< Write protection of page 60 to 63 */ | |||
#define OB_WRP_PAGES64TO67 0x00010000U /*!< Write protection of page 64 to 67 */ | |||
#define OB_WRP_PAGES68TO71 0x00020000U /*!< Write protection of page 68 to 71 */ | |||
#define OB_WRP_PAGES72TO75 0x00040000U /*!< Write protection of page 72 to 75 */ | |||
#define OB_WRP_PAGES76TO79 0x00080000U /*!< Write protection of page 76 to 79 */ | |||
#define OB_WRP_PAGES80TO83 0x00100000U /*!< Write protection of page 80 to 83 */ | |||
#define OB_WRP_PAGES84TO87 0x00200000U /*!< Write protection of page 84 to 87 */ | |||
#define OB_WRP_PAGES88TO91 0x00400000U /*!< Write protection of page 88 to 91 */ | |||
#define OB_WRP_PAGES92TO95 0x00800000U /*!< Write protection of page 92 to 95 */ | |||
#define OB_WRP_PAGES96TO99 0x01000000U /*!< Write protection of page 96 to 99 */ | |||
#define OB_WRP_PAGES100TO103 0x02000000U /*!< Write protection of page 100 to 103 */ | |||
#define OB_WRP_PAGES104TO107 0x04000000U /*!< Write protection of page 104 to 107 */ | |||
#define OB_WRP_PAGES108TO111 0x08000000U /*!< Write protection of page 108 to 111 */ | |||
#define OB_WRP_PAGES112TO115 0x10000000U /*!< Write protection of page 112 to 115 */ | |||
#define OB_WRP_PAGES116TO119 0x20000000U /*!< Write protection of page 115 to 119 */ | |||
#define OB_WRP_PAGES120TO123 0x40000000U /*!< Write protection of page 120 to 123 */ | |||
#define OB_WRP_PAGES124TO127 0x80000000U /*!< Write protection of page 124 to 127 */ | |||
#endif /* STM32F100xB || STM32F101xB || STM32F102xB || STM32F103xB */ | |||
/* STM32 High-density, XL-density and Connectivity line devices */ | |||
#if defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F103xE) \ | |||
|| defined(STM32F101xG) || defined(STM32F103xG) \ | |||
|| defined(STM32F105xC) || defined(STM32F107xC) | |||
#define OB_WRP_PAGES0TO1 0x00000001U /*!< Write protection of page 0 TO 1 */ | |||
#define OB_WRP_PAGES2TO3 0x00000002U /*!< Write protection of page 2 TO 3 */ | |||
#define OB_WRP_PAGES4TO5 0x00000004U /*!< Write protection of page 4 TO 5 */ | |||
#define OB_WRP_PAGES6TO7 0x00000008U /*!< Write protection of page 6 TO 7 */ | |||
#define OB_WRP_PAGES8TO9 0x00000010U /*!< Write protection of page 8 TO 9 */ | |||
#define OB_WRP_PAGES10TO11 0x00000020U /*!< Write protection of page 10 TO 11 */ | |||
#define OB_WRP_PAGES12TO13 0x00000040U /*!< Write protection of page 12 TO 13 */ | |||
#define OB_WRP_PAGES14TO15 0x00000080U /*!< Write protection of page 14 TO 15 */ | |||
#define OB_WRP_PAGES16TO17 0x00000100U /*!< Write protection of page 16 TO 17 */ | |||
#define OB_WRP_PAGES18TO19 0x00000200U /*!< Write protection of page 18 TO 19 */ | |||
#define OB_WRP_PAGES20TO21 0x00000400U /*!< Write protection of page 20 TO 21 */ | |||
#define OB_WRP_PAGES22TO23 0x00000800U /*!< Write protection of page 22 TO 23 */ | |||
#define OB_WRP_PAGES24TO25 0x00001000U /*!< Write protection of page 24 TO 25 */ | |||
#define OB_WRP_PAGES26TO27 0x00002000U /*!< Write protection of page 26 TO 27 */ | |||
#define OB_WRP_PAGES28TO29 0x00004000U /*!< Write protection of page 28 TO 29 */ | |||
#define OB_WRP_PAGES30TO31 0x00008000U /*!< Write protection of page 30 TO 31 */ | |||
#define OB_WRP_PAGES32TO33 0x00010000U /*!< Write protection of page 32 TO 33 */ | |||
#define OB_WRP_PAGES34TO35 0x00020000U /*!< Write protection of page 34 TO 35 */ | |||
#define OB_WRP_PAGES36TO37 0x00040000U /*!< Write protection of page 36 TO 37 */ | |||
#define OB_WRP_PAGES38TO39 0x00080000U /*!< Write protection of page 38 TO 39 */ | |||
#define OB_WRP_PAGES40TO41 0x00100000U /*!< Write protection of page 40 TO 41 */ | |||
#define OB_WRP_PAGES42TO43 0x00200000U /*!< Write protection of page 42 TO 43 */ | |||
#define OB_WRP_PAGES44TO45 0x00400000U /*!< Write protection of page 44 TO 45 */ | |||
#define OB_WRP_PAGES46TO47 0x00800000U /*!< Write protection of page 46 TO 47 */ | |||
#define OB_WRP_PAGES48TO49 0x01000000U /*!< Write protection of page 48 TO 49 */ | |||
#define OB_WRP_PAGES50TO51 0x02000000U /*!< Write protection of page 50 TO 51 */ | |||
#define OB_WRP_PAGES52TO53 0x04000000U /*!< Write protection of page 52 TO 53 */ | |||
#define OB_WRP_PAGES54TO55 0x08000000U /*!< Write protection of page 54 TO 55 */ | |||
#define OB_WRP_PAGES56TO57 0x10000000U /*!< Write protection of page 56 TO 57 */ | |||
#define OB_WRP_PAGES58TO59 0x20000000U /*!< Write protection of page 58 TO 59 */ | |||
#define OB_WRP_PAGES60TO61 0x40000000U /*!< Write protection of page 60 TO 61 */ | |||
#define OB_WRP_PAGES62TO127 0x80000000U /*!< Write protection of page 62 TO 127 */ | |||
#define OB_WRP_PAGES62TO255 0x80000000U /*!< Write protection of page 62 TO 255 */ | |||
#define OB_WRP_PAGES62TO511 0x80000000U /*!< Write protection of page 62 TO 511 */ | |||
#endif /* STM32F100xB || STM32F101xB || STM32F102xB || STM32F103xB */ | |||
/* STM32F101xG || STM32F103xG */ | |||
/* STM32F105xC || STM32F107xC */ | |||
#define OB_WRP_ALLPAGES 0xFFFFFFFFU /*!< Write protection of all Pages */ | |||
/* Low Density */ | |||
#if defined(STM32F101x6) || defined(STM32F102x6) || defined(STM32F103x6) | |||
#define OB_WRP_PAGES0TO31MASK 0x000000FFU | |||
#endif /* STM32F101x6 || STM32F102x6 || STM32F103x6 */ | |||
/* Medium Density */ | |||
#if defined(STM32F100xB) || defined(STM32F101xB) || defined(STM32F102xB) || defined(STM32F103xB) | |||
#define OB_WRP_PAGES0TO31MASK 0x000000FFU | |||
#define OB_WRP_PAGES32TO63MASK 0x0000FF00U | |||
#define OB_WRP_PAGES64TO95MASK 0x00FF0000U | |||
#define OB_WRP_PAGES96TO127MASK 0xFF000000U | |||
#endif /* STM32F100xB || STM32F101xB || STM32F102xB || STM32F103xB*/ | |||
/* High Density */ | |||
#if defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F103xE) | |||
#define OB_WRP_PAGES0TO15MASK 0x000000FFU | |||
#define OB_WRP_PAGES16TO31MASK 0x0000FF00U | |||
#define OB_WRP_PAGES32TO47MASK 0x00FF0000U | |||
#define OB_WRP_PAGES48TO255MASK 0xFF000000U | |||
#endif /* STM32F100xE || STM32F101xE || STM32F103xE */ | |||
/* XL Density */ | |||
#if defined(STM32F101xG) || defined(STM32F103xG) | |||
#define OB_WRP_PAGES0TO15MASK 0x000000FFU | |||
#define OB_WRP_PAGES16TO31MASK 0x0000FF00U | |||
#define OB_WRP_PAGES32TO47MASK 0x00FF0000U | |||
#define OB_WRP_PAGES48TO511MASK 0xFF000000U | |||
#endif /* STM32F101xG || STM32F103xG */ | |||
/* Connectivity line devices */ | |||
#if defined(STM32F105xC) || defined(STM32F107xC) | |||
#define OB_WRP_PAGES0TO15MASK 0x000000FFU | |||
#define OB_WRP_PAGES16TO31MASK 0x0000FF00U | |||
#define OB_WRP_PAGES32TO47MASK 0x00FF0000U | |||
#define OB_WRP_PAGES48TO127MASK 0xFF000000U | |||
#endif /* STM32F105xC || STM32F107xC */ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup FLASHEx_OB_Read_Protection Option Byte Read Protection | |||
* @{ | |||
*/ | |||
#define OB_RDP_LEVEL_0 ((uint8_t)0xA5) | |||
#define OB_RDP_LEVEL_1 ((uint8_t)0x00) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup FLASHEx_OB_IWatchdog Option Byte IWatchdog | |||
* @{ | |||
*/ | |||
#define OB_IWDG_SW ((uint16_t)0x0001) /*!< Software IWDG selected */ | |||
#define OB_IWDG_HW ((uint16_t)0x0000) /*!< Hardware IWDG selected */ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup FLASHEx_OB_nRST_STOP Option Byte nRST STOP | |||
* @{ | |||
*/ | |||
#define OB_STOP_NO_RST ((uint16_t)0x0002) /*!< No reset generated when entering in STOP */ | |||
#define OB_STOP_RST ((uint16_t)0x0000) /*!< Reset generated when entering in STOP */ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup FLASHEx_OB_nRST_STDBY Option Byte nRST STDBY | |||
* @{ | |||
*/ | |||
#define OB_STDBY_NO_RST ((uint16_t)0x0004) /*!< No reset generated when entering in STANDBY */ | |||
#define OB_STDBY_RST ((uint16_t)0x0000) /*!< Reset generated when entering in STANDBY */ | |||
/** | |||
* @} | |||
*/ | |||
#if defined(FLASH_BANK2_END) | |||
/** @defgroup FLASHEx_OB_BOOT1 Option Byte BOOT1 | |||
* @{ | |||
*/ | |||
#define OB_BOOT1_RESET ((uint16_t)0x0000) /*!< BOOT1 Reset */ | |||
#define OB_BOOT1_SET ((uint16_t)0x0008) /*!< BOOT1 Set */ | |||
/** | |||
* @} | |||
*/ | |||
#endif /* FLASH_BANK2_END */ | |||
/** @defgroup FLASHEx_OB_Data_Address Option Byte Data Address | |||
* @{ | |||
*/ | |||
#define OB_DATA_ADDRESS_DATA0 0x1FFFF804U | |||
#define OB_DATA_ADDRESS_DATA1 0x1FFFF806U | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/** @addtogroup FLASHEx_Constants | |||
* @{ | |||
*/ | |||
/** @defgroup FLASH_Flag_definition Flag definition | |||
* @brief Flag definition | |||
* @{ | |||
*/ | |||
#if defined(FLASH_BANK2_END) | |||
#define FLASH_FLAG_BSY FLASH_FLAG_BSY_BANK1 /*!< FLASH Bank1 Busy flag */ | |||
#define FLASH_FLAG_PGERR FLASH_FLAG_PGERR_BANK1 /*!< FLASH Bank1 Programming error flag */ | |||
#define FLASH_FLAG_WRPERR FLASH_FLAG_WRPERR_BANK1 /*!< FLASH Bank1 Write protected error flag */ | |||
#define FLASH_FLAG_EOP FLASH_FLAG_EOP_BANK1 /*!< FLASH Bank1 End of Operation flag */ | |||
#define FLASH_FLAG_BSY_BANK1 FLASH_SR_BSY /*!< FLASH Bank1 Busy flag */ | |||
#define FLASH_FLAG_PGERR_BANK1 FLASH_SR_PGERR /*!< FLASH Bank1 Programming error flag */ | |||
#define FLASH_FLAG_WRPERR_BANK1 FLASH_SR_WRPRTERR /*!< FLASH Bank1 Write protected error flag */ | |||
#define FLASH_FLAG_EOP_BANK1 FLASH_SR_EOP /*!< FLASH Bank1 End of Operation flag */ | |||
#define FLASH_FLAG_BSY_BANK2 (FLASH_SR2_BSY << 16U) /*!< FLASH Bank2 Busy flag */ | |||
#define FLASH_FLAG_PGERR_BANK2 (FLASH_SR2_PGERR << 16U) /*!< FLASH Bank2 Programming error flag */ | |||
#define FLASH_FLAG_WRPERR_BANK2 (FLASH_SR2_WRPRTERR << 16U) /*!< FLASH Bank2 Write protected error flag */ | |||
#define FLASH_FLAG_EOP_BANK2 (FLASH_SR2_EOP << 16U) /*!< FLASH Bank2 End of Operation flag */ | |||
#else | |||
#define FLASH_FLAG_BSY FLASH_SR_BSY /*!< FLASH Busy flag */ | |||
#define FLASH_FLAG_PGERR FLASH_SR_PGERR /*!< FLASH Programming error flag */ | |||
#define FLASH_FLAG_WRPERR FLASH_SR_WRPRTERR /*!< FLASH Write protected error flag */ | |||
#define FLASH_FLAG_EOP FLASH_SR_EOP /*!< FLASH End of Operation flag */ | |||
#endif | |||
#define FLASH_FLAG_OPTVERR ((OBR_REG_INDEX << 8U | FLASH_OBR_OPTERR)) /*!< Option Byte Error */ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup FLASH_Interrupt_definition Interrupt definition | |||
* @brief FLASH Interrupt definition | |||
* @{ | |||
*/ | |||
#if defined(FLASH_BANK2_END) | |||
#define FLASH_IT_EOP FLASH_IT_EOP_BANK1 /*!< End of FLASH Operation Interrupt source Bank1 */ | |||
#define FLASH_IT_ERR FLASH_IT_ERR_BANK1 /*!< Error Interrupt source Bank1 */ | |||
#define FLASH_IT_EOP_BANK1 FLASH_CR_EOPIE /*!< End of FLASH Operation Interrupt source Bank1 */ | |||
#define FLASH_IT_ERR_BANK1 FLASH_CR_ERRIE /*!< Error Interrupt source Bank1 */ | |||
#define FLASH_IT_EOP_BANK2 (FLASH_CR2_EOPIE << 16U) /*!< End of FLASH Operation Interrupt source Bank2 */ | |||
#define FLASH_IT_ERR_BANK2 (FLASH_CR2_ERRIE << 16U) /*!< Error Interrupt source Bank2 */ | |||
#else | |||
#define FLASH_IT_EOP FLASH_CR_EOPIE /*!< End of FLASH Operation Interrupt source */ | |||
#define FLASH_IT_ERR FLASH_CR_ERRIE /*!< Error Interrupt source */ | |||
#endif | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Exported macro ------------------------------------------------------------*/ | |||
/** @defgroup FLASHEx_Exported_Macros FLASHEx Exported Macros | |||
* @{ | |||
*/ | |||
/** @defgroup FLASH_Interrupt Interrupt | |||
* @brief macros to handle FLASH interrupts | |||
* @{ | |||
*/ | |||
#if defined(FLASH_BANK2_END) | |||
/** | |||
* @brief Enable the specified FLASH interrupt. | |||
* @param __INTERRUPT__ FLASH interrupt | |||
* This parameter can be any combination of the following values: | |||
* @arg @ref FLASH_IT_EOP_BANK1 End of FLASH Operation Interrupt on bank1 | |||
* @arg @ref FLASH_IT_ERR_BANK1 Error Interrupt on bank1 | |||
* @arg @ref FLASH_IT_EOP_BANK2 End of FLASH Operation Interrupt on bank2 | |||
* @arg @ref FLASH_IT_ERR_BANK2 Error Interrupt on bank2 | |||
* @retval none | |||
*/ | |||
#define __HAL_FLASH_ENABLE_IT(__INTERRUPT__) do { \ | |||
/* Enable Bank1 IT */ \ | |||
SET_BIT(FLASH->CR, ((__INTERRUPT__) & 0x0000FFFFU)); \ | |||
/* Enable Bank2 IT */ \ | |||
SET_BIT(FLASH->CR2, ((__INTERRUPT__) >> 16U)); \ | |||
} while(0U) | |||
/** | |||
* @brief Disable the specified FLASH interrupt. | |||
* @param __INTERRUPT__ FLASH interrupt | |||
* This parameter can be any combination of the following values: | |||
* @arg @ref FLASH_IT_EOP_BANK1 End of FLASH Operation Interrupt on bank1 | |||
* @arg @ref FLASH_IT_ERR_BANK1 Error Interrupt on bank1 | |||
* @arg @ref FLASH_IT_EOP_BANK2 End of FLASH Operation Interrupt on bank2 | |||
* @arg @ref FLASH_IT_ERR_BANK2 Error Interrupt on bank2 | |||
* @retval none | |||
*/ | |||
#define __HAL_FLASH_DISABLE_IT(__INTERRUPT__) do { \ | |||
/* Disable Bank1 IT */ \ | |||
CLEAR_BIT(FLASH->CR, ((__INTERRUPT__) & 0x0000FFFFU)); \ | |||
/* Disable Bank2 IT */ \ | |||
CLEAR_BIT(FLASH->CR2, ((__INTERRUPT__) >> 16U)); \ | |||
} while(0U) | |||
/** | |||
* @brief Get the specified FLASH flag status. | |||
* @param __FLAG__ specifies the FLASH flag to check. | |||
* This parameter can be one of the following values: | |||
* @arg @ref FLASH_FLAG_EOP_BANK1 FLASH End of Operation flag on bank1 | |||
* @arg @ref FLASH_FLAG_WRPERR_BANK1 FLASH Write protected error flag on bank1 | |||
* @arg @ref FLASH_FLAG_PGERR_BANK1 FLASH Programming error flag on bank1 | |||
* @arg @ref FLASH_FLAG_BSY_BANK1 FLASH Busy flag on bank1 | |||
* @arg @ref FLASH_FLAG_EOP_BANK2 FLASH End of Operation flag on bank2 | |||
* @arg @ref FLASH_FLAG_WRPERR_BANK2 FLASH Write protected error flag on bank2 | |||
* @arg @ref FLASH_FLAG_PGERR_BANK2 FLASH Programming error flag on bank2 | |||
* @arg @ref FLASH_FLAG_BSY_BANK2 FLASH Busy flag on bank2 | |||
* @arg @ref FLASH_FLAG_OPTVERR Loaded OB and its complement do not match | |||
* @retval The new state of __FLAG__ (SET or RESET). | |||
*/ | |||
#define __HAL_FLASH_GET_FLAG(__FLAG__) (((__FLAG__) == FLASH_FLAG_OPTVERR) ? \ | |||
(FLASH->OBR & FLASH_OBR_OPTERR) : \ | |||
((((__FLAG__) & SR_FLAG_MASK) != RESET)? \ | |||
(FLASH->SR & ((__FLAG__) & SR_FLAG_MASK)) : \ | |||
(FLASH->SR2 & ((__FLAG__) >> 16U)))) | |||
/** | |||
* @brief Clear the specified FLASH flag. | |||
* @param __FLAG__ specifies the FLASH flags to clear. | |||
* This parameter can be any combination of the following values: | |||
* @arg @ref FLASH_FLAG_EOP_BANK1 FLASH End of Operation flag on bank1 | |||
* @arg @ref FLASH_FLAG_WRPERR_BANK1 FLASH Write protected error flag on bank1 | |||
* @arg @ref FLASH_FLAG_PGERR_BANK1 FLASH Programming error flag on bank1 | |||
* @arg @ref FLASH_FLAG_BSY_BANK1 FLASH Busy flag on bank1 | |||
* @arg @ref FLASH_FLAG_EOP_BANK2 FLASH End of Operation flag on bank2 | |||
* @arg @ref FLASH_FLAG_WRPERR_BANK2 FLASH Write protected error flag on bank2 | |||
* @arg @ref FLASH_FLAG_PGERR_BANK2 FLASH Programming error flag on bank2 | |||
* @arg @ref FLASH_FLAG_BSY_BANK2 FLASH Busy flag on bank2 | |||
* @arg @ref FLASH_FLAG_OPTVERR Loaded OB and its complement do not match | |||
* @retval none | |||
*/ | |||
#define __HAL_FLASH_CLEAR_FLAG(__FLAG__) do { \ | |||
/* Clear FLASH_FLAG_OPTVERR flag */ \ | |||
if ((__FLAG__) == FLASH_FLAG_OPTVERR) \ | |||
{ \ | |||
CLEAR_BIT(FLASH->OBR, FLASH_OBR_OPTERR); \ | |||
} \ | |||
else { \ | |||
/* Clear Flag in Bank1 */ \ | |||
if (((__FLAG__) & SR_FLAG_MASK) != RESET) \ | |||
{ \ | |||
FLASH->SR = ((__FLAG__) & SR_FLAG_MASK); \ | |||
} \ | |||
/* Clear Flag in Bank2 */ \ | |||
if (((__FLAG__) >> 16U) != RESET) \ | |||
{ \ | |||
FLASH->SR2 = ((__FLAG__) >> 16U); \ | |||
} \ | |||
} \ | |||
} while(0U) | |||
#else | |||
/** | |||
* @brief Enable the specified FLASH interrupt. | |||
* @param __INTERRUPT__ FLASH interrupt | |||
* This parameter can be any combination of the following values: | |||
* @arg @ref FLASH_IT_EOP End of FLASH Operation Interrupt | |||
* @arg @ref FLASH_IT_ERR Error Interrupt | |||
* @retval none | |||
*/ | |||
#define __HAL_FLASH_ENABLE_IT(__INTERRUPT__) (FLASH->CR |= (__INTERRUPT__)) | |||
/** | |||
* @brief Disable the specified FLASH interrupt. | |||
* @param __INTERRUPT__ FLASH interrupt | |||
* This parameter can be any combination of the following values: | |||
* @arg @ref FLASH_IT_EOP End of FLASH Operation Interrupt | |||
* @arg @ref FLASH_IT_ERR Error Interrupt | |||
* @retval none | |||
*/ | |||
#define __HAL_FLASH_DISABLE_IT(__INTERRUPT__) (FLASH->CR &= ~(__INTERRUPT__)) | |||
/** | |||
* @brief Get the specified FLASH flag status. | |||
* @param __FLAG__ specifies the FLASH flag to check. | |||
* This parameter can be one of the following values: | |||
* @arg @ref FLASH_FLAG_EOP FLASH End of Operation flag | |||
* @arg @ref FLASH_FLAG_WRPERR FLASH Write protected error flag | |||
* @arg @ref FLASH_FLAG_PGERR FLASH Programming error flag | |||
* @arg @ref FLASH_FLAG_BSY FLASH Busy flag | |||
* @arg @ref FLASH_FLAG_OPTVERR Loaded OB and its complement do not match | |||
* @retval The new state of __FLAG__ (SET or RESET). | |||
*/ | |||
#define __HAL_FLASH_GET_FLAG(__FLAG__) (((__FLAG__) == FLASH_FLAG_OPTVERR) ? \ | |||
(FLASH->OBR & FLASH_OBR_OPTERR) : \ | |||
(FLASH->SR & (__FLAG__))) | |||
/** | |||
* @brief Clear the specified FLASH flag. | |||
* @param __FLAG__ specifies the FLASH flags to clear. | |||
* This parameter can be any combination of the following values: | |||
* @arg @ref FLASH_FLAG_EOP FLASH End of Operation flag | |||
* @arg @ref FLASH_FLAG_WRPERR FLASH Write protected error flag | |||
* @arg @ref FLASH_FLAG_PGERR FLASH Programming error flag | |||
* @arg @ref FLASH_FLAG_OPTVERR Loaded OB and its complement do not match | |||
* @retval none | |||
*/ | |||
#define __HAL_FLASH_CLEAR_FLAG(__FLAG__) do { \ | |||
/* Clear FLASH_FLAG_OPTVERR flag */ \ | |||
if ((__FLAG__) == FLASH_FLAG_OPTVERR) \ | |||
{ \ | |||
CLEAR_BIT(FLASH->OBR, FLASH_OBR_OPTERR); \ | |||
} \ | |||
else { \ | |||
/* Clear Flag in Bank1 */ \ | |||
FLASH->SR = (__FLAG__); \ | |||
} \ | |||
} while(0U) | |||
#endif | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Exported functions --------------------------------------------------------*/ | |||
/** @addtogroup FLASHEx_Exported_Functions | |||
* @{ | |||
*/ | |||
/** @addtogroup FLASHEx_Exported_Functions_Group1 | |||
* @{ | |||
*/ | |||
/* IO operation functions *****************************************************/ | |||
HAL_StatusTypeDef HAL_FLASHEx_Erase(FLASH_EraseInitTypeDef *pEraseInit, uint32_t *PageError); | |||
HAL_StatusTypeDef HAL_FLASHEx_Erase_IT(FLASH_EraseInitTypeDef *pEraseInit); | |||
/** | |||
* @} | |||
*/ | |||
/** @addtogroup FLASHEx_Exported_Functions_Group2 | |||
* @{ | |||
*/ | |||
/* Peripheral Control functions ***********************************************/ | |||
HAL_StatusTypeDef HAL_FLASHEx_OBErase(void); | |||
HAL_StatusTypeDef HAL_FLASHEx_OBProgram(FLASH_OBProgramInitTypeDef *pOBInit); | |||
void HAL_FLASHEx_OBGetConfig(FLASH_OBProgramInitTypeDef *pOBInit); | |||
uint32_t HAL_FLASHEx_OBGetUserData(uint32_t DATAAdress); | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
#ifdef __cplusplus | |||
} | |||
#endif | |||
#endif /* __STM32F1xx_HAL_FLASH_EX_H */ | |||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@@ -0,0 +1,587 @@ | |||
/** | |||
****************************************************************************** | |||
* @file stm32f1xx_hal_gpio.c | |||
* @author MCD Application Team | |||
* @brief GPIO HAL module driver. | |||
* This file provides firmware functions to manage the following | |||
* functionalities of the General Purpose Input/Output (GPIO) peripheral: | |||
* + Initialization and de-initialization functions | |||
* + IO operation functions | |||
* | |||
@verbatim | |||
============================================================================== | |||
##### GPIO Peripheral features ##### | |||
============================================================================== | |||
[..] | |||
Subject to the specific hardware characteristics of each I/O port listed in the datasheet, each | |||
port bit of the General Purpose IO (GPIO) Ports, can be individually configured by software | |||
in several modes: | |||
(+) Input mode | |||
(+) Analog mode | |||
(+) Output mode | |||
(+) Alternate function mode | |||
(+) External interrupt/event lines | |||
[..] | |||
During and just after reset, the alternate functions and external interrupt | |||
lines are not active and the I/O ports are configured in input floating mode. | |||
[..] | |||
All GPIO pins have weak internal pull-up and pull-down resistors, which can be | |||
activated or not. | |||
[..] | |||
In Output or Alternate mode, each IO can be configured on open-drain or push-pull | |||
type and the IO speed can be selected depending on the VDD value. | |||
[..] | |||
All ports have external interrupt/event capability. To use external interrupt | |||
lines, the port must be configured in input mode. All available GPIO pins are | |||
connected to the 16 external interrupt/event lines from EXTI0 to EXTI15. | |||
[..] | |||
The external interrupt/event controller consists of up to 20 edge detectors in connectivity | |||
line devices, or 19 edge detectors in other devices for generating event/interrupt requests. | |||
Each input line can be independently configured to select the type (event or interrupt) and | |||
the corresponding trigger event (rising or falling or both). Each line can also masked | |||
independently. A pending register maintains the status line of the interrupt requests | |||
##### How to use this driver ##### | |||
============================================================================== | |||
[..] | |||
(#) Enable the GPIO APB2 clock using the following function : __HAL_RCC_GPIOx_CLK_ENABLE(). | |||
(#) Configure the GPIO pin(s) using HAL_GPIO_Init(). | |||
(++) Configure the IO mode using "Mode" member from GPIO_InitTypeDef structure | |||
(++) Activate Pull-up, Pull-down resistor using "Pull" member from GPIO_InitTypeDef | |||
structure. | |||
(++) In case of Output or alternate function mode selection: the speed is | |||
configured through "Speed" member from GPIO_InitTypeDef structure | |||
(++) Analog mode is required when a pin is to be used as ADC channel | |||
or DAC output. | |||
(++) In case of external interrupt/event selection the "Mode" member from | |||
GPIO_InitTypeDef structure select the type (interrupt or event) and | |||
the corresponding trigger event (rising or falling or both). | |||
(#) In case of external interrupt/event mode selection, configure NVIC IRQ priority | |||
mapped to the EXTI line using HAL_NVIC_SetPriority() and enable it using | |||
HAL_NVIC_EnableIRQ(). | |||
(#) To get the level of a pin configured in input mode use HAL_GPIO_ReadPin(). | |||
(#) To set/reset the level of a pin configured in output mode use | |||
HAL_GPIO_WritePin()/HAL_GPIO_TogglePin(). | |||
(#) To lock pin configuration until next reset use HAL_GPIO_LockPin(). | |||
(#) During and just after reset, the alternate functions are not | |||
active and the GPIO pins are configured in input floating mode (except JTAG | |||
pins). | |||
(#) The LSE oscillator pins OSC32_IN and OSC32_OUT can be used as general purpose | |||
(PC14 and PC15, respectively) when the LSE oscillator is off. The LSE has | |||
priority over the GPIO function. | |||
(#) The HSE oscillator pins OSC_IN/OSC_OUT can be used as | |||
general purpose PD0 and PD1, respectively, when the HSE oscillator is off. | |||
The HSE has priority over the GPIO function. | |||
@endverbatim | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© Copyright (c) 2016 STMicroelectronics. | |||
* All rights reserved.</center></h2> | |||
* | |||
* This software component is licensed by ST under BSD 3-Clause license, | |||
* the "License"; You may not use this file except in compliance with the | |||
* License. You may obtain a copy of the License at: | |||
* opensource.org/licenses/BSD-3-Clause | |||
* | |||
****************************************************************************** | |||
*/ | |||
/* Includes ------------------------------------------------------------------*/ | |||
#include "stm32f1xx_hal.h" | |||
/** @addtogroup STM32F1xx_HAL_Driver | |||
* @{ | |||
*/ | |||
/** @defgroup GPIO GPIO | |||
* @brief GPIO HAL module driver | |||
* @{ | |||
*/ | |||
#ifdef HAL_GPIO_MODULE_ENABLED | |||
/* Private typedef -----------------------------------------------------------*/ | |||
/* Private define ------------------------------------------------------------*/ | |||
/** @addtogroup GPIO_Private_Constants GPIO Private Constants | |||
* @{ | |||
*/ | |||
#define GPIO_MODE 0x00000003u | |||
#define EXTI_MODE 0x10000000u | |||
#define GPIO_MODE_IT 0x00010000u | |||
#define GPIO_MODE_EVT 0x00020000u | |||
#define RISING_EDGE 0x00100000u | |||
#define FALLING_EDGE 0x00200000u | |||
#define GPIO_OUTPUT_TYPE 0x00000010u | |||
#define GPIO_NUMBER 16u | |||
/* Definitions for bit manipulation of CRL and CRH register */ | |||
#define GPIO_CR_MODE_INPUT 0x00000000u /*!< 00: Input mode (reset state) */ | |||
#define GPIO_CR_CNF_ANALOG 0x00000000u /*!< 00: Analog mode */ | |||
#define GPIO_CR_CNF_INPUT_FLOATING 0x00000004u /*!< 01: Floating input (reset state) */ | |||
#define GPIO_CR_CNF_INPUT_PU_PD 0x00000008u /*!< 10: Input with pull-up / pull-down */ | |||
#define GPIO_CR_CNF_GP_OUTPUT_PP 0x00000000u /*!< 00: General purpose output push-pull */ | |||
#define GPIO_CR_CNF_GP_OUTPUT_OD 0x00000004u /*!< 01: General purpose output Open-drain */ | |||
#define GPIO_CR_CNF_AF_OUTPUT_PP 0x00000008u /*!< 10: Alternate function output Push-pull */ | |||
#define GPIO_CR_CNF_AF_OUTPUT_OD 0x0000000Cu /*!< 11: Alternate function output Open-drain */ | |||
/** | |||
* @} | |||
*/ | |||
/* Private macro -------------------------------------------------------------*/ | |||
/* Private variables ---------------------------------------------------------*/ | |||
/* Private function prototypes -----------------------------------------------*/ | |||
/* Private functions ---------------------------------------------------------*/ | |||
/* Exported functions --------------------------------------------------------*/ | |||
/** @defgroup GPIO_Exported_Functions GPIO Exported Functions | |||
* @{ | |||
*/ | |||
/** @defgroup GPIO_Exported_Functions_Group1 Initialization and de-initialization functions | |||
* @brief Initialization and Configuration functions | |||
* | |||
@verbatim | |||
=============================================================================== | |||
##### Initialization and de-initialization functions ##### | |||
=============================================================================== | |||
[..] | |||
This section provides functions allowing to initialize and de-initialize the GPIOs | |||
to be ready for use. | |||
@endverbatim | |||
* @{ | |||
*/ | |||
/** | |||
* @brief Initializes the GPIOx peripheral according to the specified parameters in the GPIO_Init. | |||
* @param GPIOx: where x can be (A..G depending on device used) to select the GPIO peripheral | |||
* @param GPIO_Init: pointer to a GPIO_InitTypeDef structure that contains | |||
* the configuration information for the specified GPIO peripheral. | |||
* @retval None | |||
*/ | |||
void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init) | |||
{ | |||
uint32_t position = 0x00u; | |||
uint32_t ioposition; | |||
uint32_t iocurrent; | |||
uint32_t temp; | |||
uint32_t config = 0x00u; | |||
__IO uint32_t *configregister; /* Store the address of CRL or CRH register based on pin number */ | |||
uint32_t registeroffset; /* offset used during computation of CNF and MODE bits placement inside CRL or CRH register */ | |||
/* Check the parameters */ | |||
assert_param(IS_GPIO_ALL_INSTANCE(GPIOx)); | |||
assert_param(IS_GPIO_PIN(GPIO_Init->Pin)); | |||
assert_param(IS_GPIO_MODE(GPIO_Init->Mode)); | |||
/* Configure the port pins */ | |||
while (((GPIO_Init->Pin) >> position) != 0x00u) | |||
{ | |||
/* Get the IO position */ | |||
ioposition = (0x01uL << position); | |||
/* Get the current IO position */ | |||
iocurrent = (uint32_t)(GPIO_Init->Pin) & ioposition; | |||
if (iocurrent == ioposition) | |||
{ | |||
/* Check the Alternate function parameters */ | |||
assert_param(IS_GPIO_AF_INSTANCE(GPIOx)); | |||
/* Based on the required mode, filling config variable with MODEy[1:0] and CNFy[3:2] corresponding bits */ | |||
switch (GPIO_Init->Mode) | |||
{ | |||
/* If we are configuring the pin in OUTPUT push-pull mode */ | |||
case GPIO_MODE_OUTPUT_PP: | |||
/* Check the GPIO speed parameter */ | |||
assert_param(IS_GPIO_SPEED(GPIO_Init->Speed)); | |||
config = GPIO_Init->Speed + GPIO_CR_CNF_GP_OUTPUT_PP; | |||
break; | |||
/* If we are configuring the pin in OUTPUT open-drain mode */ | |||
case GPIO_MODE_OUTPUT_OD: | |||
/* Check the GPIO speed parameter */ | |||
assert_param(IS_GPIO_SPEED(GPIO_Init->Speed)); | |||
config = GPIO_Init->Speed + GPIO_CR_CNF_GP_OUTPUT_OD; | |||
break; | |||
/* If we are configuring the pin in ALTERNATE FUNCTION push-pull mode */ | |||
case GPIO_MODE_AF_PP: | |||
/* Check the GPIO speed parameter */ | |||
assert_param(IS_GPIO_SPEED(GPIO_Init->Speed)); | |||
config = GPIO_Init->Speed + GPIO_CR_CNF_AF_OUTPUT_PP; | |||
break; | |||
/* If we are configuring the pin in ALTERNATE FUNCTION open-drain mode */ | |||
case GPIO_MODE_AF_OD: | |||
/* Check the GPIO speed parameter */ | |||
assert_param(IS_GPIO_SPEED(GPIO_Init->Speed)); | |||
config = GPIO_Init->Speed + GPIO_CR_CNF_AF_OUTPUT_OD; | |||
break; | |||
/* If we are configuring the pin in INPUT (also applicable to EVENT and IT mode) */ | |||
case GPIO_MODE_INPUT: | |||
case GPIO_MODE_IT_RISING: | |||
case GPIO_MODE_IT_FALLING: | |||
case GPIO_MODE_IT_RISING_FALLING: | |||
case GPIO_MODE_EVT_RISING: | |||
case GPIO_MODE_EVT_FALLING: | |||
case GPIO_MODE_EVT_RISING_FALLING: | |||
/* Check the GPIO pull parameter */ | |||
assert_param(IS_GPIO_PULL(GPIO_Init->Pull)); | |||
if (GPIO_Init->Pull == GPIO_NOPULL) | |||
{ | |||
config = GPIO_CR_MODE_INPUT + GPIO_CR_CNF_INPUT_FLOATING; | |||
} | |||
else if (GPIO_Init->Pull == GPIO_PULLUP) | |||
{ | |||
config = GPIO_CR_MODE_INPUT + GPIO_CR_CNF_INPUT_PU_PD; | |||
/* Set the corresponding ODR bit */ | |||
GPIOx->BSRR = ioposition; | |||
} | |||
else /* GPIO_PULLDOWN */ | |||
{ | |||
config = GPIO_CR_MODE_INPUT + GPIO_CR_CNF_INPUT_PU_PD; | |||
/* Reset the corresponding ODR bit */ | |||
GPIOx->BRR = ioposition; | |||
} | |||
break; | |||
/* If we are configuring the pin in INPUT analog mode */ | |||
case GPIO_MODE_ANALOG: | |||
config = GPIO_CR_MODE_INPUT + GPIO_CR_CNF_ANALOG; | |||
break; | |||
/* Parameters are checked with assert_param */ | |||
default: | |||
break; | |||
} | |||
/* Check if the current bit belongs to first half or last half of the pin count number | |||
in order to address CRH or CRL register*/ | |||
configregister = (iocurrent < GPIO_PIN_8) ? &GPIOx->CRL : &GPIOx->CRH; | |||
registeroffset = (iocurrent < GPIO_PIN_8) ? (position << 2u) : ((position - 8u) << 2u); | |||
/* Apply the new configuration of the pin to the register */ | |||
MODIFY_REG((*configregister), ((GPIO_CRL_MODE0 | GPIO_CRL_CNF0) << registeroffset), (config << registeroffset)); | |||
/*--------------------- EXTI Mode Configuration ------------------------*/ | |||
/* Configure the External Interrupt or event for the current IO */ | |||
if ((GPIO_Init->Mode & EXTI_MODE) == EXTI_MODE) | |||
{ | |||
/* Enable AFIO Clock */ | |||
__HAL_RCC_AFIO_CLK_ENABLE(); | |||
temp = AFIO->EXTICR[position >> 2u]; | |||
CLEAR_BIT(temp, (0x0Fu) << (4u * (position & 0x03u))); | |||
SET_BIT(temp, (GPIO_GET_INDEX(GPIOx)) << (4u * (position & 0x03u))); | |||
AFIO->EXTICR[position >> 2u] = temp; | |||
/* Configure the interrupt mask */ | |||
if ((GPIO_Init->Mode & GPIO_MODE_IT) == GPIO_MODE_IT) | |||
{ | |||
SET_BIT(EXTI->IMR, iocurrent); | |||
} | |||
else | |||
{ | |||
CLEAR_BIT(EXTI->IMR, iocurrent); | |||
} | |||
/* Configure the event mask */ | |||
if ((GPIO_Init->Mode & GPIO_MODE_EVT) == GPIO_MODE_EVT) | |||
{ | |||
SET_BIT(EXTI->EMR, iocurrent); | |||
} | |||
else | |||
{ | |||
CLEAR_BIT(EXTI->EMR, iocurrent); | |||
} | |||
/* Enable or disable the rising trigger */ | |||
if ((GPIO_Init->Mode & RISING_EDGE) == RISING_EDGE) | |||
{ | |||
SET_BIT(EXTI->RTSR, iocurrent); | |||
} | |||
else | |||
{ | |||
CLEAR_BIT(EXTI->RTSR, iocurrent); | |||
} | |||
/* Enable or disable the falling trigger */ | |||
if ((GPIO_Init->Mode & FALLING_EDGE) == FALLING_EDGE) | |||
{ | |||
SET_BIT(EXTI->FTSR, iocurrent); | |||
} | |||
else | |||
{ | |||
CLEAR_BIT(EXTI->FTSR, iocurrent); | |||
} | |||
} | |||
} | |||
position++; | |||
} | |||
} | |||
/** | |||
* @brief De-initializes the GPIOx peripheral registers to their default reset values. | |||
* @param GPIOx: where x can be (A..G depending on device used) to select the GPIO peripheral | |||
* @param GPIO_Pin: specifies the port bit to be written. | |||
* This parameter can be one of GPIO_PIN_x where x can be (0..15). | |||
* @retval None | |||
*/ | |||
void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin) | |||
{ | |||
uint32_t position = 0x00u; | |||
uint32_t iocurrent; | |||
uint32_t tmp; | |||
__IO uint32_t *configregister; /* Store the address of CRL or CRH register based on pin number */ | |||
uint32_t registeroffset; | |||
/* Check the parameters */ | |||
assert_param(IS_GPIO_ALL_INSTANCE(GPIOx)); | |||
assert_param(IS_GPIO_PIN(GPIO_Pin)); | |||
/* Configure the port pins */ | |||
while ((GPIO_Pin >> position) != 0u) | |||
{ | |||
/* Get current io position */ | |||
iocurrent = (GPIO_Pin) & (1uL << position); | |||
if (iocurrent) | |||
{ | |||
/*------------------------- EXTI Mode Configuration --------------------*/ | |||
/* Clear the External Interrupt or Event for the current IO */ | |||
tmp = AFIO->EXTICR[position >> 2u]; | |||
tmp &= 0x0FuL << (4u * (position & 0x03u)); | |||
if (tmp == (GPIO_GET_INDEX(GPIOx) << (4u * (position & 0x03u)))) | |||
{ | |||
tmp = 0x0FuL << (4u * (position & 0x03u)); | |||
CLEAR_BIT(AFIO->EXTICR[position >> 2u], tmp); | |||
/* Clear EXTI line configuration */ | |||
CLEAR_BIT(EXTI->IMR, (uint32_t)iocurrent); | |||
CLEAR_BIT(EXTI->EMR, (uint32_t)iocurrent); | |||
/* Clear Rising Falling edge configuration */ | |||
CLEAR_BIT(EXTI->RTSR, (uint32_t)iocurrent); | |||
CLEAR_BIT(EXTI->FTSR, (uint32_t)iocurrent); | |||
} | |||
/*------------------------- GPIO Mode Configuration --------------------*/ | |||
/* Check if the current bit belongs to first half or last half of the pin count number | |||
in order to address CRH or CRL register */ | |||
configregister = (iocurrent < GPIO_PIN_8) ? &GPIOx->CRL : &GPIOx->CRH; | |||
registeroffset = (iocurrent < GPIO_PIN_8) ? (position << 2u) : ((position - 8u) << 2u); | |||
/* CRL/CRH default value is floating input(0x04) shifted to correct position */ | |||
MODIFY_REG(*configregister, ((GPIO_CRL_MODE0 | GPIO_CRL_CNF0) << registeroffset), GPIO_CRL_CNF0_0 << registeroffset); | |||
/* ODR default value is 0 */ | |||
CLEAR_BIT(GPIOx->ODR, iocurrent); | |||
} | |||
position++; | |||
} | |||
} | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup GPIO_Exported_Functions_Group2 IO operation functions | |||
* @brief GPIO Read and Write | |||
* | |||
@verbatim | |||
=============================================================================== | |||
##### IO operation functions ##### | |||
=============================================================================== | |||
[..] | |||
This subsection provides a set of functions allowing to manage the GPIOs. | |||
@endverbatim | |||
* @{ | |||
*/ | |||
/** | |||
* @brief Reads the specified input port pin. | |||
* @param GPIOx: where x can be (A..G depending on device used) to select the GPIO peripheral | |||
* @param GPIO_Pin: specifies the port bit to read. | |||
* This parameter can be GPIO_PIN_x where x can be (0..15). | |||
* @retval The input port pin value. | |||
*/ | |||
GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin) | |||
{ | |||
GPIO_PinState bitstatus; | |||
/* Check the parameters */ | |||
assert_param(IS_GPIO_PIN(GPIO_Pin)); | |||
if ((GPIOx->IDR & GPIO_Pin) != (uint32_t)GPIO_PIN_RESET) | |||
{ | |||
bitstatus = GPIO_PIN_SET; | |||
} | |||
else | |||
{ | |||
bitstatus = GPIO_PIN_RESET; | |||
} | |||
return bitstatus; | |||
} | |||
/** | |||
* @brief Sets or clears the selected data port bit. | |||
* | |||
* @note This function uses GPIOx_BSRR register to allow atomic read/modify | |||
* accesses. In this way, there is no risk of an IRQ occurring between | |||
* the read and the modify access. | |||
* | |||
* @param GPIOx: where x can be (A..G depending on device used) to select the GPIO peripheral | |||
* @param GPIO_Pin: specifies the port bit to be written. | |||
* This parameter can be one of GPIO_PIN_x where x can be (0..15). | |||
* @param PinState: specifies the value to be written to the selected bit. | |||
* This parameter can be one of the GPIO_PinState enum values: | |||
* @arg GPIO_PIN_RESET: to clear the port pin | |||
* @arg GPIO_PIN_SET: to set the port pin | |||
* @retval None | |||
*/ | |||
void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState) | |||
{ | |||
/* Check the parameters */ | |||
assert_param(IS_GPIO_PIN(GPIO_Pin)); | |||
assert_param(IS_GPIO_PIN_ACTION(PinState)); | |||
if (PinState != GPIO_PIN_RESET) | |||
{ | |||
GPIOx->BSRR = GPIO_Pin; | |||
} | |||
else | |||
{ | |||
GPIOx->BSRR = (uint32_t)GPIO_Pin << 16u; | |||
} | |||
} | |||
/** | |||
* @brief Toggles the specified GPIO pin | |||
* @param GPIOx: where x can be (A..G depending on device used) to select the GPIO peripheral | |||
* @param GPIO_Pin: Specifies the pins to be toggled. | |||
* @retval None | |||
*/ | |||
void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin) | |||
{ | |||
uint32_t odr; | |||
/* Check the parameters */ | |||
assert_param(IS_GPIO_PIN(GPIO_Pin)); | |||
/* get current Ouput Data Register value */ | |||
odr = GPIOx->ODR; | |||
/* Set selected pins that were at low level, and reset ones that were high */ | |||
GPIOx->BSRR = ((odr & GPIO_Pin) << GPIO_NUMBER) | (~odr & GPIO_Pin); | |||
} | |||
/** | |||
* @brief Locks GPIO Pins configuration registers. | |||
* @note The locking mechanism allows the IO configuration to be frozen. When the LOCK sequence | |||
* has been applied on a port bit, it is no longer possible to modify the value of the port bit until | |||
* the next reset. | |||
* @param GPIOx: where x can be (A..G depending on device used) to select the GPIO peripheral | |||
* @param GPIO_Pin: specifies the port bit to be locked. | |||
* This parameter can be any combination of GPIO_Pin_x where x can be (0..15). | |||
* @retval None | |||
*/ | |||
HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin) | |||
{ | |||
__IO uint32_t tmp = GPIO_LCKR_LCKK; | |||
/* Check the parameters */ | |||
assert_param(IS_GPIO_LOCK_INSTANCE(GPIOx)); | |||
assert_param(IS_GPIO_PIN(GPIO_Pin)); | |||
/* Apply lock key write sequence */ | |||
SET_BIT(tmp, GPIO_Pin); | |||
/* Set LCKx bit(s): LCKK='1' + LCK[15-0] */ | |||
GPIOx->LCKR = tmp; | |||
/* Reset LCKx bit(s): LCKK='0' + LCK[15-0] */ | |||
GPIOx->LCKR = GPIO_Pin; | |||
/* Set LCKx bit(s): LCKK='1' + LCK[15-0] */ | |||
GPIOx->LCKR = tmp; | |||
/* Read LCKK register. This read is mandatory to complete key lock sequence */ | |||
tmp = GPIOx->LCKR; | |||
/* read again in order to confirm lock is active */ | |||
if ((uint32_t)(GPIOx->LCKR & GPIO_LCKR_LCKK)) | |||
{ | |||
return HAL_OK; | |||
} | |||
else | |||
{ | |||
return HAL_ERROR; | |||
} | |||
} | |||
/** | |||
* @brief This function handles EXTI interrupt request. | |||
* @param GPIO_Pin: Specifies the pins connected EXTI line | |||
* @retval None | |||
*/ | |||
void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin) | |||
{ | |||
/* EXTI line interrupt detected */ | |||
if (__HAL_GPIO_EXTI_GET_IT(GPIO_Pin) != 0x00u) | |||
{ | |||
__HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin); | |||
HAL_GPIO_EXTI_Callback(GPIO_Pin); | |||
} | |||
} | |||
/** | |||
* @brief EXTI line detection callbacks. | |||
* @param GPIO_Pin: Specifies the pins connected EXTI line | |||
* @retval None | |||
*/ | |||
__weak void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) | |||
{ | |||
/* Prevent unused argument(s) compilation warning */ | |||
UNUSED(GPIO_Pin); | |||
/* NOTE: This function Should not be modified, when the callback is needed, | |||
the HAL_GPIO_EXTI_Callback could be implemented in the user file | |||
*/ | |||
} | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
#endif /* HAL_GPIO_MODULE_ENABLED */ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@@ -0,0 +1,308 @@ | |||
/** | |||
****************************************************************************** | |||
* @file stm32f1xx_hal_gpio.h | |||
* @author MCD Application Team | |||
* @brief Header file of GPIO HAL module. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© Copyright (c) 2016 STMicroelectronics. | |||
* All rights reserved.</center></h2> | |||
* | |||
* This software component is licensed by ST under BSD 3-Clause license, | |||
* the "License"; You may not use this file except in compliance with the | |||
* License. You may obtain a copy of the License at: | |||
* opensource.org/licenses/BSD-3-Clause | |||
* | |||
****************************************************************************** | |||
*/ | |||
/* Define to prevent recursive inclusion -------------------------------------*/ | |||
#ifndef STM32F1xx_HAL_GPIO_H | |||
#define STM32F1xx_HAL_GPIO_H | |||
#ifdef __cplusplus | |||
extern "C" { | |||
#endif | |||
/* Includes ------------------------------------------------------------------*/ | |||
#include "stm32f1xx_hal_def.h" | |||
/** @addtogroup STM32F1xx_HAL_Driver | |||
* @{ | |||
*/ | |||
/** @addtogroup GPIO | |||
* @{ | |||
*/ | |||
/* Exported types ------------------------------------------------------------*/ | |||
/** @defgroup GPIO_Exported_Types GPIO Exported Types | |||
* @{ | |||
*/ | |||
/** | |||
* @brief GPIO Init structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
uint32_t Pin; /*!< Specifies the GPIO pins to be configured. | |||
This parameter can be any value of @ref GPIO_pins_define */ | |||
uint32_t Mode; /*!< Specifies the operating mode for the selected pins. | |||
This parameter can be a value of @ref GPIO_mode_define */ | |||
uint32_t Pull; /*!< Specifies the Pull-up or Pull-Down activation for the selected pins. | |||
This parameter can be a value of @ref GPIO_pull_define */ | |||
uint32_t Speed; /*!< Specifies the speed for the selected pins. | |||
This parameter can be a value of @ref GPIO_speed_define */ | |||
} GPIO_InitTypeDef; | |||
/** | |||
* @brief GPIO Bit SET and Bit RESET enumeration | |||
*/ | |||
typedef enum | |||
{ | |||
GPIO_PIN_RESET = 0u, | |||
GPIO_PIN_SET | |||
} GPIO_PinState; | |||
/** | |||
* @} | |||
*/ | |||
/* Exported constants --------------------------------------------------------*/ | |||
/** @defgroup GPIO_Exported_Constants GPIO Exported Constants | |||
* @{ | |||
*/ | |||
/** @defgroup GPIO_pins_define GPIO pins define | |||
* @{ | |||
*/ | |||
#define GPIO_PIN_0 ((uint16_t)0x0001) /* Pin 0 selected */ | |||
#define GPIO_PIN_1 ((uint16_t)0x0002) /* Pin 1 selected */ | |||
#define GPIO_PIN_2 ((uint16_t)0x0004) /* Pin 2 selected */ | |||
#define GPIO_PIN_3 ((uint16_t)0x0008) /* Pin 3 selected */ | |||
#define GPIO_PIN_4 ((uint16_t)0x0010) /* Pin 4 selected */ | |||
#define GPIO_PIN_5 ((uint16_t)0x0020) /* Pin 5 selected */ | |||
#define GPIO_PIN_6 ((uint16_t)0x0040) /* Pin 6 selected */ | |||
#define GPIO_PIN_7 ((uint16_t)0x0080) /* Pin 7 selected */ | |||
#define GPIO_PIN_8 ((uint16_t)0x0100) /* Pin 8 selected */ | |||
#define GPIO_PIN_9 ((uint16_t)0x0200) /* Pin 9 selected */ | |||
#define GPIO_PIN_10 ((uint16_t)0x0400) /* Pin 10 selected */ | |||
#define GPIO_PIN_11 ((uint16_t)0x0800) /* Pin 11 selected */ | |||
#define GPIO_PIN_12 ((uint16_t)0x1000) /* Pin 12 selected */ | |||
#define GPIO_PIN_13 ((uint16_t)0x2000) /* Pin 13 selected */ | |||
#define GPIO_PIN_14 ((uint16_t)0x4000) /* Pin 14 selected */ | |||
#define GPIO_PIN_15 ((uint16_t)0x8000) /* Pin 15 selected */ | |||
#define GPIO_PIN_All ((uint16_t)0xFFFF) /* All pins selected */ | |||
#define GPIO_PIN_MASK 0x0000FFFFu /* PIN mask for assert test */ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup GPIO_mode_define GPIO mode define | |||
* @brief GPIO Configuration Mode | |||
* Elements values convention: 0xX0yz00YZ | |||
* - X : GPIO mode or EXTI Mode | |||
* - y : External IT or Event trigger detection | |||
* - z : IO configuration on External IT or Event | |||
* - Y : Output type (Push Pull or Open Drain) | |||
* - Z : IO Direction mode (Input, Output, Alternate or Analog) | |||
* @{ | |||
*/ | |||
#define GPIO_MODE_INPUT 0x00000000u /*!< Input Floating Mode */ | |||
#define GPIO_MODE_OUTPUT_PP 0x00000001u /*!< Output Push Pull Mode */ | |||
#define GPIO_MODE_OUTPUT_OD 0x00000011u /*!< Output Open Drain Mode */ | |||
#define GPIO_MODE_AF_PP 0x00000002u /*!< Alternate Function Push Pull Mode */ | |||
#define GPIO_MODE_AF_OD 0x00000012u /*!< Alternate Function Open Drain Mode */ | |||
#define GPIO_MODE_AF_INPUT GPIO_MODE_INPUT /*!< Alternate Function Input Mode */ | |||
#define GPIO_MODE_ANALOG 0x00000003u /*!< Analog Mode */ | |||
#define GPIO_MODE_IT_RISING 0x10110000u /*!< External Interrupt Mode with Rising edge trigger detection */ | |||
#define GPIO_MODE_IT_FALLING 0x10210000u /*!< External Interrupt Mode with Falling edge trigger detection */ | |||
#define GPIO_MODE_IT_RISING_FALLING 0x10310000u /*!< External Interrupt Mode with Rising/Falling edge trigger detection */ | |||
#define GPIO_MODE_EVT_RISING 0x10120000u /*!< External Event Mode with Rising edge trigger detection */ | |||
#define GPIO_MODE_EVT_FALLING 0x10220000u /*!< External Event Mode with Falling edge trigger detection */ | |||
#define GPIO_MODE_EVT_RISING_FALLING 0x10320000u /*!< External Event Mode with Rising/Falling edge trigger detection */ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup GPIO_speed_define GPIO speed define | |||
* @brief GPIO Output Maximum frequency | |||
* @{ | |||
*/ | |||
#define GPIO_SPEED_FREQ_LOW (GPIO_CRL_MODE0_1) /*!< Low speed */ | |||
#define GPIO_SPEED_FREQ_MEDIUM (GPIO_CRL_MODE0_0) /*!< Medium speed */ | |||
#define GPIO_SPEED_FREQ_HIGH (GPIO_CRL_MODE0) /*!< High speed */ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup GPIO_pull_define GPIO pull define | |||
* @brief GPIO Pull-Up or Pull-Down Activation | |||
* @{ | |||
*/ | |||
#define GPIO_NOPULL 0x00000000u /*!< No Pull-up or Pull-down activation */ | |||
#define GPIO_PULLUP 0x00000001u /*!< Pull-up activation */ | |||
#define GPIO_PULLDOWN 0x00000002u /*!< Pull-down activation */ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Exported macro ------------------------------------------------------------*/ | |||
/** @defgroup GPIO_Exported_Macros GPIO Exported Macros | |||
* @{ | |||
*/ | |||
/** | |||
* @brief Checks whether the specified EXTI line flag is set or not. | |||
* @param __EXTI_LINE__: specifies the EXTI line flag to check. | |||
* This parameter can be GPIO_PIN_x where x can be(0..15) | |||
* @retval The new state of __EXTI_LINE__ (SET or RESET). | |||
*/ | |||
#define __HAL_GPIO_EXTI_GET_FLAG(__EXTI_LINE__) (EXTI->PR & (__EXTI_LINE__)) | |||
/** | |||
* @brief Clears the EXTI's line pending flags. | |||
* @param __EXTI_LINE__: specifies the EXTI lines flags to clear. | |||
* This parameter can be any combination of GPIO_PIN_x where x can be (0..15) | |||
* @retval None | |||
*/ | |||
#define __HAL_GPIO_EXTI_CLEAR_FLAG(__EXTI_LINE__) (EXTI->PR = (__EXTI_LINE__)) | |||
/** | |||
* @brief Checks whether the specified EXTI line is asserted or not. | |||
* @param __EXTI_LINE__: specifies the EXTI line to check. | |||
* This parameter can be GPIO_PIN_x where x can be(0..15) | |||
* @retval The new state of __EXTI_LINE__ (SET or RESET). | |||
*/ | |||
#define __HAL_GPIO_EXTI_GET_IT(__EXTI_LINE__) (EXTI->PR & (__EXTI_LINE__)) | |||
/** | |||
* @brief Clears the EXTI's line pending bits. | |||
* @param __EXTI_LINE__: specifies the EXTI lines to clear. | |||
* This parameter can be any combination of GPIO_PIN_x where x can be (0..15) | |||
* @retval None | |||
*/ | |||
#define __HAL_GPIO_EXTI_CLEAR_IT(__EXTI_LINE__) (EXTI->PR = (__EXTI_LINE__)) | |||
/** | |||
* @brief Generates a Software interrupt on selected EXTI line. | |||
* @param __EXTI_LINE__: specifies the EXTI line to check. | |||
* This parameter can be GPIO_PIN_x where x can be(0..15) | |||
* @retval None | |||
*/ | |||
#define __HAL_GPIO_EXTI_GENERATE_SWIT(__EXTI_LINE__) (EXTI->SWIER |= (__EXTI_LINE__)) | |||
/** | |||
* @} | |||
*/ | |||
/* Include GPIO HAL Extension module */ | |||
#include "stm32f1xx_hal_gpio_ex.h" | |||
/* Exported functions --------------------------------------------------------*/ | |||
/** @addtogroup GPIO_Exported_Functions | |||
* @{ | |||
*/ | |||
/** @addtogroup GPIO_Exported_Functions_Group1 | |||
* @{ | |||
*/ | |||
/* Initialization and de-initialization functions *****************************/ | |||
void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init); | |||
void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin); | |||
/** | |||
* @} | |||
*/ | |||
/** @addtogroup GPIO_Exported_Functions_Group2 | |||
* @{ | |||
*/ | |||
/* IO operation functions *****************************************************/ | |||
GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); | |||
void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState); | |||
void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); | |||
HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); | |||
void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin); | |||
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin); | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Private types -------------------------------------------------------------*/ | |||
/* Private variables ---------------------------------------------------------*/ | |||
/* Private constants ---------------------------------------------------------*/ | |||
/** @defgroup GPIO_Private_Constants GPIO Private Constants | |||
* @{ | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Private macros ------------------------------------------------------------*/ | |||
/** @defgroup GPIO_Private_Macros GPIO Private Macros | |||
* @{ | |||
*/ | |||
#define IS_GPIO_PIN_ACTION(ACTION) (((ACTION) == GPIO_PIN_RESET) || ((ACTION) == GPIO_PIN_SET)) | |||
#define IS_GPIO_PIN(PIN) (((((uint32_t)PIN) & GPIO_PIN_MASK ) != 0x00u) && ((((uint32_t)PIN) & ~GPIO_PIN_MASK) == 0x00u)) | |||
#define IS_GPIO_MODE(MODE) (((MODE) == GPIO_MODE_INPUT) ||\ | |||
((MODE) == GPIO_MODE_OUTPUT_PP) ||\ | |||
((MODE) == GPIO_MODE_OUTPUT_OD) ||\ | |||
((MODE) == GPIO_MODE_AF_PP) ||\ | |||
((MODE) == GPIO_MODE_AF_OD) ||\ | |||
((MODE) == GPIO_MODE_IT_RISING) ||\ | |||
((MODE) == GPIO_MODE_IT_FALLING) ||\ | |||
((MODE) == GPIO_MODE_IT_RISING_FALLING) ||\ | |||
((MODE) == GPIO_MODE_EVT_RISING) ||\ | |||
((MODE) == GPIO_MODE_EVT_FALLING) ||\ | |||
((MODE) == GPIO_MODE_EVT_RISING_FALLING) ||\ | |||
((MODE) == GPIO_MODE_ANALOG)) | |||
#define IS_GPIO_SPEED(SPEED) (((SPEED) == GPIO_SPEED_FREQ_LOW) || \ | |||
((SPEED) == GPIO_SPEED_FREQ_MEDIUM) || ((SPEED) == GPIO_SPEED_FREQ_HIGH)) | |||
#define IS_GPIO_PULL(PULL) (((PULL) == GPIO_NOPULL) || ((PULL) == GPIO_PULLUP) || \ | |||
((PULL) == GPIO_PULLDOWN)) | |||
/** | |||
* @} | |||
*/ | |||
/* Private functions ---------------------------------------------------------*/ | |||
/** @defgroup GPIO_Private_Functions GPIO Private Functions | |||
* @{ | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
#ifdef __cplusplus | |||
} | |||
#endif | |||
#endif /* STM32F1xx_HAL_GPIO_H */ | |||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@@ -0,0 +1,894 @@ | |||
/** | |||
****************************************************************************** | |||
* @file stm32f1xx_hal_gpio_ex.h | |||
* @author MCD Application Team | |||
* @brief Header file of GPIO HAL Extension module. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© Copyright (c) 2016 STMicroelectronics. | |||
* All rights reserved.</center></h2> | |||
* | |||
* This software component is licensed by ST under BSD 3-Clause license, | |||
* the "License"; You may not use this file except in compliance with the | |||
* License. You may obtain a copy of the License at: | |||
* opensource.org/licenses/BSD-3-Clause | |||
* | |||
****************************************************************************** | |||
*/ | |||
/* Define to prevent recursive inclusion -------------------------------------*/ | |||
#ifndef STM32F1xx_HAL_GPIO_EX_H | |||
#define STM32F1xx_HAL_GPIO_EX_H | |||
#ifdef __cplusplus | |||
extern "C" { | |||
#endif | |||
/* Includes ------------------------------------------------------------------*/ | |||
#include "stm32f1xx_hal_def.h" | |||
/** @addtogroup STM32F1xx_HAL_Driver | |||
* @{ | |||
*/ | |||
/** @defgroup GPIOEx GPIOEx | |||
* @{ | |||
*/ | |||
/* Exported types ------------------------------------------------------------*/ | |||
/* Exported constants --------------------------------------------------------*/ | |||
/** @defgroup GPIOEx_Exported_Constants GPIOEx Exported Constants | |||
* @{ | |||
*/ | |||
/** @defgroup GPIOEx_EVENTOUT EVENTOUT Cortex Configuration | |||
* @brief This section propose definition to use the Cortex EVENTOUT signal. | |||
* @{ | |||
*/ | |||
/** @defgroup GPIOEx_EVENTOUT_PIN EVENTOUT Pin | |||
* @{ | |||
*/ | |||
#define AFIO_EVENTOUT_PIN_0 AFIO_EVCR_PIN_PX0 /*!< EVENTOUT on pin 0 */ | |||
#define AFIO_EVENTOUT_PIN_1 AFIO_EVCR_PIN_PX1 /*!< EVENTOUT on pin 1 */ | |||
#define AFIO_EVENTOUT_PIN_2 AFIO_EVCR_PIN_PX2 /*!< EVENTOUT on pin 2 */ | |||
#define AFIO_EVENTOUT_PIN_3 AFIO_EVCR_PIN_PX3 /*!< EVENTOUT on pin 3 */ | |||
#define AFIO_EVENTOUT_PIN_4 AFIO_EVCR_PIN_PX4 /*!< EVENTOUT on pin 4 */ | |||
#define AFIO_EVENTOUT_PIN_5 AFIO_EVCR_PIN_PX5 /*!< EVENTOUT on pin 5 */ | |||
#define AFIO_EVENTOUT_PIN_6 AFIO_EVCR_PIN_PX6 /*!< EVENTOUT on pin 6 */ | |||
#define AFIO_EVENTOUT_PIN_7 AFIO_EVCR_PIN_PX7 /*!< EVENTOUT on pin 7 */ | |||
#define AFIO_EVENTOUT_PIN_8 AFIO_EVCR_PIN_PX8 /*!< EVENTOUT on pin 8 */ | |||
#define AFIO_EVENTOUT_PIN_9 AFIO_EVCR_PIN_PX9 /*!< EVENTOUT on pin 9 */ | |||
#define AFIO_EVENTOUT_PIN_10 AFIO_EVCR_PIN_PX10 /*!< EVENTOUT on pin 10 */ | |||
#define AFIO_EVENTOUT_PIN_11 AFIO_EVCR_PIN_PX11 /*!< EVENTOUT on pin 11 */ | |||
#define AFIO_EVENTOUT_PIN_12 AFIO_EVCR_PIN_PX12 /*!< EVENTOUT on pin 12 */ | |||
#define AFIO_EVENTOUT_PIN_13 AFIO_EVCR_PIN_PX13 /*!< EVENTOUT on pin 13 */ | |||
#define AFIO_EVENTOUT_PIN_14 AFIO_EVCR_PIN_PX14 /*!< EVENTOUT on pin 14 */ | |||
#define AFIO_EVENTOUT_PIN_15 AFIO_EVCR_PIN_PX15 /*!< EVENTOUT on pin 15 */ | |||
#define IS_AFIO_EVENTOUT_PIN(__PIN__) (((__PIN__) == AFIO_EVENTOUT_PIN_0) || \ | |||
((__PIN__) == AFIO_EVENTOUT_PIN_1) || \ | |||
((__PIN__) == AFIO_EVENTOUT_PIN_2) || \ | |||
((__PIN__) == AFIO_EVENTOUT_PIN_3) || \ | |||
((__PIN__) == AFIO_EVENTOUT_PIN_4) || \ | |||
((__PIN__) == AFIO_EVENTOUT_PIN_5) || \ | |||
((__PIN__) == AFIO_EVENTOUT_PIN_6) || \ | |||
((__PIN__) == AFIO_EVENTOUT_PIN_7) || \ | |||
((__PIN__) == AFIO_EVENTOUT_PIN_8) || \ | |||
((__PIN__) == AFIO_EVENTOUT_PIN_9) || \ | |||
((__PIN__) == AFIO_EVENTOUT_PIN_10) || \ | |||
((__PIN__) == AFIO_EVENTOUT_PIN_11) || \ | |||
((__PIN__) == AFIO_EVENTOUT_PIN_12) || \ | |||
((__PIN__) == AFIO_EVENTOUT_PIN_13) || \ | |||
((__PIN__) == AFIO_EVENTOUT_PIN_14) || \ | |||
((__PIN__) == AFIO_EVENTOUT_PIN_15)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup GPIOEx_EVENTOUT_PORT EVENTOUT Port | |||
* @{ | |||
*/ | |||
#define AFIO_EVENTOUT_PORT_A AFIO_EVCR_PORT_PA /*!< EVENTOUT on port A */ | |||
#define AFIO_EVENTOUT_PORT_B AFIO_EVCR_PORT_PB /*!< EVENTOUT on port B */ | |||
#define AFIO_EVENTOUT_PORT_C AFIO_EVCR_PORT_PC /*!< EVENTOUT on port C */ | |||
#define AFIO_EVENTOUT_PORT_D AFIO_EVCR_PORT_PD /*!< EVENTOUT on port D */ | |||
#define AFIO_EVENTOUT_PORT_E AFIO_EVCR_PORT_PE /*!< EVENTOUT on port E */ | |||
#define IS_AFIO_EVENTOUT_PORT(__PORT__) (((__PORT__) == AFIO_EVENTOUT_PORT_A) || \ | |||
((__PORT__) == AFIO_EVENTOUT_PORT_B) || \ | |||
((__PORT__) == AFIO_EVENTOUT_PORT_C) || \ | |||
((__PORT__) == AFIO_EVENTOUT_PORT_D) || \ | |||
((__PORT__) == AFIO_EVENTOUT_PORT_E)) | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup GPIOEx_AFIO_AF_REMAPPING Alternate Function Remapping | |||
* @brief This section propose definition to remap the alternate function to some other port/pins. | |||
* @{ | |||
*/ | |||
/** | |||
* @brief Enable the remapping of SPI1 alternate function NSS, SCK, MISO and MOSI. | |||
* @note ENABLE: Remap (NSS/PA15, SCK/PB3, MISO/PB4, MOSI/PB5) | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_SPI1_ENABLE() AFIO_REMAP_ENABLE(AFIO_MAPR_SPI1_REMAP) | |||
/** | |||
* @brief Disable the remapping of SPI1 alternate function NSS, SCK, MISO and MOSI. | |||
* @note DISABLE: No remap (NSS/PA4, SCK/PA5, MISO/PA6, MOSI/PA7) | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_SPI1_DISABLE() AFIO_REMAP_DISABLE(AFIO_MAPR_SPI1_REMAP) | |||
/** | |||
* @brief Enable the remapping of I2C1 alternate function SCL and SDA. | |||
* @note ENABLE: Remap (SCL/PB8, SDA/PB9) | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_I2C1_ENABLE() AFIO_REMAP_ENABLE(AFIO_MAPR_I2C1_REMAP) | |||
/** | |||
* @brief Disable the remapping of I2C1 alternate function SCL and SDA. | |||
* @note DISABLE: No remap (SCL/PB6, SDA/PB7) | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_I2C1_DISABLE() AFIO_REMAP_DISABLE(AFIO_MAPR_I2C1_REMAP) | |||
/** | |||
* @brief Enable the remapping of USART1 alternate function TX and RX. | |||
* @note ENABLE: Remap (TX/PB6, RX/PB7) | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_USART1_ENABLE() AFIO_REMAP_ENABLE(AFIO_MAPR_USART1_REMAP) | |||
/** | |||
* @brief Disable the remapping of USART1 alternate function TX and RX. | |||
* @note DISABLE: No remap (TX/PA9, RX/PA10) | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_USART1_DISABLE() AFIO_REMAP_DISABLE(AFIO_MAPR_USART1_REMAP) | |||
/** | |||
* @brief Enable the remapping of USART2 alternate function CTS, RTS, CK, TX and RX. | |||
* @note ENABLE: Remap (CTS/PD3, RTS/PD4, TX/PD5, RX/PD6, CK/PD7) | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_USART2_ENABLE() AFIO_REMAP_ENABLE(AFIO_MAPR_USART2_REMAP) | |||
/** | |||
* @brief Disable the remapping of USART2 alternate function CTS, RTS, CK, TX and RX. | |||
* @note DISABLE: No remap (CTS/PA0, RTS/PA1, TX/PA2, RX/PA3, CK/PA4) | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_USART2_DISABLE() AFIO_REMAP_DISABLE(AFIO_MAPR_USART2_REMAP) | |||
/** | |||
* @brief Enable the remapping of USART3 alternate function CTS, RTS, CK, TX and RX. | |||
* @note ENABLE: Full remap (TX/PD8, RX/PD9, CK/PD10, CTS/PD11, RTS/PD12) | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_USART3_ENABLE() AFIO_REMAP_PARTIAL(AFIO_MAPR_USART3_REMAP_FULLREMAP, AFIO_MAPR_USART3_REMAP_FULLREMAP) | |||
/** | |||
* @brief Enable the remapping of USART3 alternate function CTS, RTS, CK, TX and RX. | |||
* @note PARTIAL: Partial remap (TX/PC10, RX/PC11, CK/PC12, CTS/PB13, RTS/PB14) | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_USART3_PARTIAL() AFIO_REMAP_PARTIAL(AFIO_MAPR_USART3_REMAP_PARTIALREMAP, AFIO_MAPR_USART3_REMAP_FULLREMAP) | |||
/** | |||
* @brief Disable the remapping of USART3 alternate function CTS, RTS, CK, TX and RX. | |||
* @note DISABLE: No remap (TX/PB10, RX/PB11, CK/PB12, CTS/PB13, RTS/PB14) | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_USART3_DISABLE() AFIO_REMAP_PARTIAL(AFIO_MAPR_USART3_REMAP_NOREMAP, AFIO_MAPR_USART3_REMAP_FULLREMAP) | |||
/** | |||
* @brief Enable the remapping of TIM1 alternate function channels 1 to 4, 1N to 3N, external trigger (ETR) and Break input (BKIN) | |||
* @note ENABLE: Full remap (ETR/PE7, CH1/PE9, CH2/PE11, CH3/PE13, CH4/PE14, BKIN/PE15, CH1N/PE8, CH2N/PE10, CH3N/PE12) | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_TIM1_ENABLE() AFIO_REMAP_PARTIAL(AFIO_MAPR_TIM1_REMAP_FULLREMAP, AFIO_MAPR_TIM1_REMAP_FULLREMAP) | |||
/** | |||
* @brief Enable the remapping of TIM1 alternate function channels 1 to 4, 1N to 3N, external trigger (ETR) and Break input (BKIN) | |||
* @note PARTIAL: Partial remap (ETR/PA12, CH1/PA8, CH2/PA9, CH3/PA10, CH4/PA11, BKIN/PA6, CH1N/PA7, CH2N/PB0, CH3N/PB1) | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_TIM1_PARTIAL() AFIO_REMAP_PARTIAL(AFIO_MAPR_TIM1_REMAP_PARTIALREMAP, AFIO_MAPR_TIM1_REMAP_FULLREMAP) | |||
/** | |||
* @brief Disable the remapping of TIM1 alternate function channels 1 to 4, 1N to 3N, external trigger (ETR) and Break input (BKIN) | |||
* @note DISABLE: No remap (ETR/PA12, CH1/PA8, CH2/PA9, CH3/PA10, CH4/PA11, BKIN/PB12, CH1N/PB13, CH2N/PB14, CH3N/PB15) | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_TIM1_DISABLE() AFIO_REMAP_PARTIAL(AFIO_MAPR_TIM1_REMAP_NOREMAP, AFIO_MAPR_TIM1_REMAP_FULLREMAP) | |||
/** | |||
* @brief Enable the remapping of TIM2 alternate function channels 1 to 4 and external trigger (ETR) | |||
* @note ENABLE: Full remap (CH1/ETR/PA15, CH2/PB3, CH3/PB10, CH4/PB11) | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_TIM2_ENABLE() AFIO_REMAP_PARTIAL(AFIO_MAPR_TIM2_REMAP_FULLREMAP, AFIO_MAPR_TIM2_REMAP_FULLREMAP) | |||
/** | |||
* @brief Enable the remapping of TIM2 alternate function channels 1 to 4 and external trigger (ETR) | |||
* @note PARTIAL_2: Partial remap (CH1/ETR/PA0, CH2/PA1, CH3/PB10, CH4/PB11) | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_TIM2_PARTIAL_2() AFIO_REMAP_PARTIAL(AFIO_MAPR_TIM2_REMAP_PARTIALREMAP2, AFIO_MAPR_TIM2_REMAP_FULLREMAP) | |||
/** | |||
* @brief Enable the remapping of TIM2 alternate function channels 1 to 4 and external trigger (ETR) | |||
* @note PARTIAL_1: Partial remap (CH1/ETR/PA15, CH2/PB3, CH3/PA2, CH4/PA3) | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_TIM2_PARTIAL_1() AFIO_REMAP_PARTIAL(AFIO_MAPR_TIM2_REMAP_PARTIALREMAP1, AFIO_MAPR_TIM2_REMAP_FULLREMAP) | |||
/** | |||
* @brief Disable the remapping of TIM2 alternate function channels 1 to 4 and external trigger (ETR) | |||
* @note DISABLE: No remap (CH1/ETR/PA0, CH2/PA1, CH3/PA2, CH4/PA3) | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_TIM2_DISABLE() AFIO_REMAP_PARTIAL(AFIO_MAPR_TIM2_REMAP_NOREMAP, AFIO_MAPR_TIM2_REMAP_FULLREMAP) | |||
/** | |||
* @brief Enable the remapping of TIM3 alternate function channels 1 to 4 | |||
* @note ENABLE: Full remap (CH1/PC6, CH2/PC7, CH3/PC8, CH4/PC9) | |||
* @note TIM3_ETR on PE0 is not re-mapped. | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_TIM3_ENABLE() AFIO_REMAP_PARTIAL(AFIO_MAPR_TIM3_REMAP_FULLREMAP, AFIO_MAPR_TIM3_REMAP_FULLREMAP) | |||
/** | |||
* @brief Enable the remapping of TIM3 alternate function channels 1 to 4 | |||
* @note PARTIAL: Partial remap (CH1/PB4, CH2/PB5, CH3/PB0, CH4/PB1) | |||
* @note TIM3_ETR on PE0 is not re-mapped. | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_TIM3_PARTIAL() AFIO_REMAP_PARTIAL(AFIO_MAPR_TIM3_REMAP_PARTIALREMAP, AFIO_MAPR_TIM3_REMAP_FULLREMAP) | |||
/** | |||
* @brief Disable the remapping of TIM3 alternate function channels 1 to 4 | |||
* @note DISABLE: No remap (CH1/PA6, CH2/PA7, CH3/PB0, CH4/PB1) | |||
* @note TIM3_ETR on PE0 is not re-mapped. | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_TIM3_DISABLE() AFIO_REMAP_PARTIAL(AFIO_MAPR_TIM3_REMAP_NOREMAP, AFIO_MAPR_TIM3_REMAP_FULLREMAP) | |||
/** | |||
* @brief Enable the remapping of TIM4 alternate function channels 1 to 4. | |||
* @note ENABLE: Full remap (TIM4_CH1/PD12, TIM4_CH2/PD13, TIM4_CH3/PD14, TIM4_CH4/PD15) | |||
* @note TIM4_ETR on PE0 is not re-mapped. | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_TIM4_ENABLE() AFIO_REMAP_ENABLE(AFIO_MAPR_TIM4_REMAP) | |||
/** | |||
* @brief Disable the remapping of TIM4 alternate function channels 1 to 4. | |||
* @note DISABLE: No remap (TIM4_CH1/PB6, TIM4_CH2/PB7, TIM4_CH3/PB8, TIM4_CH4/PB9) | |||
* @note TIM4_ETR on PE0 is not re-mapped. | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_TIM4_DISABLE() AFIO_REMAP_DISABLE(AFIO_MAPR_TIM4_REMAP) | |||
#if defined(AFIO_MAPR_CAN_REMAP_REMAP1) | |||
/** | |||
* @brief Enable or disable the remapping of CAN alternate function CAN_RX and CAN_TX in devices with a single CAN interface. | |||
* @note CASE 1: CAN_RX mapped to PA11, CAN_TX mapped to PA12 | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_CAN1_1() AFIO_REMAP_PARTIAL(AFIO_MAPR_CAN_REMAP_REMAP1, AFIO_MAPR_CAN_REMAP) | |||
/** | |||
* @brief Enable or disable the remapping of CAN alternate function CAN_RX and CAN_TX in devices with a single CAN interface. | |||
* @note CASE 2: CAN_RX mapped to PB8, CAN_TX mapped to PB9 (not available on 36-pin package) | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_CAN1_2() AFIO_REMAP_PARTIAL(AFIO_MAPR_CAN_REMAP_REMAP2, AFIO_MAPR_CAN_REMAP) | |||
/** | |||
* @brief Enable or disable the remapping of CAN alternate function CAN_RX and CAN_TX in devices with a single CAN interface. | |||
* @note CASE 3: CAN_RX mapped to PD0, CAN_TX mapped to PD1 | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_CAN1_3() AFIO_REMAP_PARTIAL(AFIO_MAPR_CAN_REMAP_REMAP3, AFIO_MAPR_CAN_REMAP) | |||
#endif | |||
/** | |||
* @brief Enable the remapping of PD0 and PD1. When the HSE oscillator is not used | |||
* (application running on internal 8 MHz RC) PD0 and PD1 can be mapped on OSC_IN and | |||
* OSC_OUT. This is available only on 36, 48 and 64 pins packages (PD0 and PD1 are available | |||
* on 100-pin and 144-pin packages, no need for remapping). | |||
* @note ENABLE: PD0 remapped on OSC_IN, PD1 remapped on OSC_OUT. | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_PD01_ENABLE() AFIO_REMAP_ENABLE(AFIO_MAPR_PD01_REMAP) | |||
/** | |||
* @brief Disable the remapping of PD0 and PD1. When the HSE oscillator is not used | |||
* (application running on internal 8 MHz RC) PD0 and PD1 can be mapped on OSC_IN and | |||
* OSC_OUT. This is available only on 36, 48 and 64 pins packages (PD0 and PD1 are available | |||
* on 100-pin and 144-pin packages, no need for remapping). | |||
* @note DISABLE: No remapping of PD0 and PD1 | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_PD01_DISABLE() AFIO_REMAP_DISABLE(AFIO_MAPR_PD01_REMAP) | |||
#if defined(AFIO_MAPR_TIM5CH4_IREMAP) | |||
/** | |||
* @brief Enable the remapping of TIM5CH4. | |||
* @note ENABLE: LSI internal clock is connected to TIM5_CH4 input for calibration purpose. | |||
* @note This function is available only in high density value line devices. | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_TIM5CH4_ENABLE() AFIO_REMAP_ENABLE(AFIO_MAPR_TIM5CH4_IREMAP) | |||
/** | |||
* @brief Disable the remapping of TIM5CH4. | |||
* @note DISABLE: TIM5_CH4 is connected to PA3 | |||
* @note This function is available only in high density value line devices. | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_TIM5CH4_DISABLE() AFIO_REMAP_DISABLE(AFIO_MAPR_TIM5CH4_IREMAP) | |||
#endif | |||
#if defined(AFIO_MAPR_ETH_REMAP) | |||
/** | |||
* @brief Enable the remapping of Ethernet MAC connections with the PHY. | |||
* @note ENABLE: Remap (RX_DV-CRS_DV/PD8, RXD0/PD9, RXD1/PD10, RXD2/PD11, RXD3/PD12) | |||
* @note This bit is available only in connectivity line devices and is reserved otherwise. | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_ETH_ENABLE() AFIO_REMAP_ENABLE(AFIO_MAPR_ETH_REMAP) | |||
/** | |||
* @brief Disable the remapping of Ethernet MAC connections with the PHY. | |||
* @note DISABLE: No remap (RX_DV-CRS_DV/PA7, RXD0/PC4, RXD1/PC5, RXD2/PB0, RXD3/PB1) | |||
* @note This bit is available only in connectivity line devices and is reserved otherwise. | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_ETH_DISABLE() AFIO_REMAP_DISABLE(AFIO_MAPR_ETH_REMAP) | |||
#endif | |||
#if defined(AFIO_MAPR_CAN2_REMAP) | |||
/** | |||
* @brief Enable the remapping of CAN2 alternate function CAN2_RX and CAN2_TX. | |||
* @note ENABLE: Remap (CAN2_RX/PB5, CAN2_TX/PB6) | |||
* @note This bit is available only in connectivity line devices and is reserved otherwise. | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_CAN2_ENABLE() AFIO_REMAP_ENABLE(AFIO_MAPR_CAN2_REMAP) | |||
/** | |||
* @brief Disable the remapping of CAN2 alternate function CAN2_RX and CAN2_TX. | |||
* @note DISABLE: No remap (CAN2_RX/PB12, CAN2_TX/PB13) | |||
* @note This bit is available only in connectivity line devices and is reserved otherwise. | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_CAN2_DISABLE() AFIO_REMAP_DISABLE(AFIO_MAPR_CAN2_REMAP) | |||
#endif | |||
#if defined(AFIO_MAPR_MII_RMII_SEL) | |||
/** | |||
* @brief Configures the Ethernet MAC internally for use with an external MII or RMII PHY. | |||
* @note ETH_RMII: Configure Ethernet MAC for connection with an RMII PHY | |||
* @note This bit is available only in connectivity line devices and is reserved otherwise. | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_ETH_RMII() AFIO_REMAP_ENABLE(AFIO_MAPR_MII_RMII_SEL) | |||
/** | |||
* @brief Configures the Ethernet MAC internally for use with an external MII or RMII PHY. | |||
* @note ETH_MII: Configure Ethernet MAC for connection with an MII PHY | |||
* @note This bit is available only in connectivity line devices and is reserved otherwise. | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_ETH_MII() AFIO_REMAP_DISABLE(AFIO_MAPR_MII_RMII_SEL) | |||
#endif | |||
/** | |||
* @brief Enable the remapping of ADC1_ETRGINJ (ADC 1 External trigger injected conversion). | |||
* @note ENABLE: ADC1 External Event injected conversion is connected to TIM8 Channel4. | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_ADC1_ETRGINJ_ENABLE() AFIO_REMAP_ENABLE(AFIO_MAPR_ADC1_ETRGINJ_REMAP) | |||
/** | |||
* @brief Disable the remapping of ADC1_ETRGINJ (ADC 1 External trigger injected conversion). | |||
* @note DISABLE: ADC1 External trigger injected conversion is connected to EXTI15 | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_ADC1_ETRGINJ_DISABLE() AFIO_REMAP_DISABLE(AFIO_MAPR_ADC1_ETRGINJ_REMAP) | |||
/** | |||
* @brief Enable the remapping of ADC1_ETRGREG (ADC 1 External trigger regular conversion). | |||
* @note ENABLE: ADC1 External Event regular conversion is connected to TIM8 TRG0. | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_ADC1_ETRGREG_ENABLE() AFIO_REMAP_ENABLE(AFIO_MAPR_ADC1_ETRGREG_REMAP) | |||
/** | |||
* @brief Disable the remapping of ADC1_ETRGREG (ADC 1 External trigger regular conversion). | |||
* @note DISABLE: ADC1 External trigger regular conversion is connected to EXTI11 | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_ADC1_ETRGREG_DISABLE() AFIO_REMAP_DISABLE(AFIO_MAPR_ADC1_ETRGREG_REMAP) | |||
#if defined(AFIO_MAPR_ADC2_ETRGINJ_REMAP) | |||
/** | |||
* @brief Enable the remapping of ADC2_ETRGREG (ADC 2 External trigger injected conversion). | |||
* @note ENABLE: ADC2 External Event injected conversion is connected to TIM8 Channel4. | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_ADC2_ETRGINJ_ENABLE() AFIO_REMAP_ENABLE(AFIO_MAPR_ADC2_ETRGINJ_REMAP) | |||
/** | |||
* @brief Disable the remapping of ADC2_ETRGREG (ADC 2 External trigger injected conversion). | |||
* @note DISABLE: ADC2 External trigger injected conversion is connected to EXTI15 | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_ADC2_ETRGINJ_DISABLE() AFIO_REMAP_DISABLE(AFIO_MAPR_ADC2_ETRGINJ_REMAP) | |||
#endif | |||
#if defined (AFIO_MAPR_ADC2_ETRGREG_REMAP) | |||
/** | |||
* @brief Enable the remapping of ADC2_ETRGREG (ADC 2 External trigger regular conversion). | |||
* @note ENABLE: ADC2 External Event regular conversion is connected to TIM8 TRG0. | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_ADC2_ETRGREG_ENABLE() AFIO_REMAP_ENABLE(AFIO_MAPR_ADC2_ETRGREG_REMAP) | |||
/** | |||
* @brief Disable the remapping of ADC2_ETRGREG (ADC 2 External trigger regular conversion). | |||
* @note DISABLE: ADC2 External trigger regular conversion is connected to EXTI11 | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_ADC2_ETRGREG_DISABLE() AFIO_REMAP_DISABLE(AFIO_MAPR_ADC2_ETRGREG_REMAP) | |||
#endif | |||
/** | |||
* @brief Enable the Serial wire JTAG configuration | |||
* @note ENABLE: Full SWJ (JTAG-DP + SW-DP): Reset State | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_SWJ_ENABLE() AFIO_DBGAFR_CONFIG(AFIO_MAPR_SWJ_CFG_RESET) | |||
/** | |||
* @brief Enable the Serial wire JTAG configuration | |||
* @note NONJTRST: Full SWJ (JTAG-DP + SW-DP) but without NJTRST | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_SWJ_NONJTRST() AFIO_DBGAFR_CONFIG(AFIO_MAPR_SWJ_CFG_NOJNTRST) | |||
/** | |||
* @brief Enable the Serial wire JTAG configuration | |||
* @note NOJTAG: JTAG-DP Disabled and SW-DP Enabled | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_SWJ_NOJTAG() AFIO_DBGAFR_CONFIG(AFIO_MAPR_SWJ_CFG_JTAGDISABLE) | |||
/** | |||
* @brief Disable the Serial wire JTAG configuration | |||
* @note DISABLE: JTAG-DP Disabled and SW-DP Disabled | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_SWJ_DISABLE() AFIO_DBGAFR_CONFIG(AFIO_MAPR_SWJ_CFG_DISABLE) | |||
#if defined(AFIO_MAPR_SPI3_REMAP) | |||
/** | |||
* @brief Enable the remapping of SPI3 alternate functions SPI3_NSS/I2S3_WS, SPI3_SCK/I2S3_CK, SPI3_MISO, SPI3_MOSI/I2S3_SD. | |||
* @note ENABLE: Remap (SPI3_NSS-I2S3_WS/PA4, SPI3_SCK-I2S3_CK/PC10, SPI3_MISO/PC11, SPI3_MOSI-I2S3_SD/PC12) | |||
* @note This bit is available only in connectivity line devices and is reserved otherwise. | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_SPI3_ENABLE() AFIO_REMAP_ENABLE(AFIO_MAPR_SPI3_REMAP) | |||
/** | |||
* @brief Disable the remapping of SPI3 alternate functions SPI3_NSS/I2S3_WS, SPI3_SCK/I2S3_CK, SPI3_MISO, SPI3_MOSI/I2S3_SD. | |||
* @note DISABLE: No remap (SPI3_NSS-I2S3_WS/PA15, SPI3_SCK-I2S3_CK/PB3, SPI3_MISO/PB4, SPI3_MOSI-I2S3_SD/PB5). | |||
* @note This bit is available only in connectivity line devices and is reserved otherwise. | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_SPI3_DISABLE() AFIO_REMAP_DISABLE(AFIO_MAPR_SPI3_REMAP) | |||
#endif | |||
#if defined(AFIO_MAPR_TIM2ITR1_IREMAP) | |||
/** | |||
* @brief Control of TIM2_ITR1 internal mapping. | |||
* @note TO_USB: Connect USB OTG SOF (Start of Frame) output to TIM2_ITR1 for calibration purposes. | |||
* @note This bit is available only in connectivity line devices and is reserved otherwise. | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_TIM2ITR1_TO_USB() AFIO_REMAP_ENABLE(AFIO_MAPR_TIM2ITR1_IREMAP) | |||
/** | |||
* @brief Control of TIM2_ITR1 internal mapping. | |||
* @note TO_ETH: Connect TIM2_ITR1 internally to the Ethernet PTP output for calibration purposes. | |||
* @note This bit is available only in connectivity line devices and is reserved otherwise. | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_TIM2ITR1_TO_ETH() AFIO_REMAP_DISABLE(AFIO_MAPR_TIM2ITR1_IREMAP) | |||
#endif | |||
#if defined(AFIO_MAPR_PTP_PPS_REMAP) | |||
/** | |||
* @brief Enable the remapping of ADC2_ETRGREG (ADC 2 External trigger regular conversion). | |||
* @note ENABLE: PTP_PPS is output on PB5 pin. | |||
* @note This bit is available only in connectivity line devices and is reserved otherwise. | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_ETH_PTP_PPS_ENABLE() AFIO_REMAP_ENABLE(AFIO_MAPR_PTP_PPS_REMAP) | |||
/** | |||
* @brief Disable the remapping of ADC2_ETRGREG (ADC 2 External trigger regular conversion). | |||
* @note DISABLE: PTP_PPS not output on PB5 pin. | |||
* @note This bit is available only in connectivity line devices and is reserved otherwise. | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_ETH_PTP_PPS_DISABLE() AFIO_REMAP_DISABLE(AFIO_MAPR_PTP_PPS_REMAP) | |||
#endif | |||
#if defined(AFIO_MAPR2_TIM9_REMAP) | |||
/** | |||
* @brief Enable the remapping of TIM9_CH1 and TIM9_CH2. | |||
* @note ENABLE: Remap (TIM9_CH1 on PE5 and TIM9_CH2 on PE6). | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_TIM9_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM9_REMAP) | |||
/** | |||
* @brief Disable the remapping of TIM9_CH1 and TIM9_CH2. | |||
* @note DISABLE: No remap (TIM9_CH1 on PA2 and TIM9_CH2 on PA3). | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_TIM9_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM9_REMAP) | |||
#endif | |||
#if defined(AFIO_MAPR2_TIM10_REMAP) | |||
/** | |||
* @brief Enable the remapping of TIM10_CH1. | |||
* @note ENABLE: Remap (TIM10_CH1 on PF6). | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_TIM10_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM10_REMAP) | |||
/** | |||
* @brief Disable the remapping of TIM10_CH1. | |||
* @note DISABLE: No remap (TIM10_CH1 on PB8). | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_TIM10_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM10_REMAP) | |||
#endif | |||
#if defined(AFIO_MAPR2_TIM11_REMAP) | |||
/** | |||
* @brief Enable the remapping of TIM11_CH1. | |||
* @note ENABLE: Remap (TIM11_CH1 on PF7). | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_TIM11_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM11_REMAP) | |||
/** | |||
* @brief Disable the remapping of TIM11_CH1. | |||
* @note DISABLE: No remap (TIM11_CH1 on PB9). | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_TIM11_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM11_REMAP) | |||
#endif | |||
#if defined(AFIO_MAPR2_TIM13_REMAP) | |||
/** | |||
* @brief Enable the remapping of TIM13_CH1. | |||
* @note ENABLE: Remap STM32F100:(TIM13_CH1 on PF8). Others:(TIM13_CH1 on PB0). | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_TIM13_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM13_REMAP) | |||
/** | |||
* @brief Disable the remapping of TIM13_CH1. | |||
* @note DISABLE: No remap STM32F100:(TIM13_CH1 on PA6). Others:(TIM13_CH1 on PC8). | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_TIM13_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM13_REMAP) | |||
#endif | |||
#if defined(AFIO_MAPR2_TIM14_REMAP) | |||
/** | |||
* @brief Enable the remapping of TIM14_CH1. | |||
* @note ENABLE: Remap STM32F100:(TIM14_CH1 on PB1). Others:(TIM14_CH1 on PF9). | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_TIM14_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM14_REMAP) | |||
/** | |||
* @brief Disable the remapping of TIM14_CH1. | |||
* @note DISABLE: No remap STM32F100:(TIM14_CH1 on PC9). Others:(TIM14_CH1 on PA7). | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_TIM14_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM14_REMAP) | |||
#endif | |||
#if defined(AFIO_MAPR2_FSMC_NADV_REMAP) | |||
/** | |||
* @brief Controls the use of the optional FSMC_NADV signal. | |||
* @note DISCONNECTED: The NADV signal is not connected. The I/O pin can be used by another peripheral. | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_FSMCNADV_DISCONNECTED() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_FSMC_NADV_REMAP) | |||
/** | |||
* @brief Controls the use of the optional FSMC_NADV signal. | |||
* @note CONNECTED: The NADV signal is connected to the output (default). | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_FSMCNADV_CONNECTED() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_FSMC_NADV_REMAP) | |||
#endif | |||
#if defined(AFIO_MAPR2_TIM15_REMAP) | |||
/** | |||
* @brief Enable the remapping of TIM15_CH1 and TIM15_CH2. | |||
* @note ENABLE: Remap (TIM15_CH1 on PB14 and TIM15_CH2 on PB15). | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_TIM15_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM15_REMAP) | |||
/** | |||
* @brief Disable the remapping of TIM15_CH1 and TIM15_CH2. | |||
* @note DISABLE: No remap (TIM15_CH1 on PA2 and TIM15_CH2 on PA3). | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_TIM15_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM15_REMAP) | |||
#endif | |||
#if defined(AFIO_MAPR2_TIM16_REMAP) | |||
/** | |||
* @brief Enable the remapping of TIM16_CH1. | |||
* @note ENABLE: Remap (TIM16_CH1 on PA6). | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_TIM16_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM16_REMAP) | |||
/** | |||
* @brief Disable the remapping of TIM16_CH1. | |||
* @note DISABLE: No remap (TIM16_CH1 on PB8). | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_TIM16_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM16_REMAP) | |||
#endif | |||
#if defined(AFIO_MAPR2_TIM17_REMAP) | |||
/** | |||
* @brief Enable the remapping of TIM17_CH1. | |||
* @note ENABLE: Remap (TIM17_CH1 on PA7). | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_TIM17_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM17_REMAP) | |||
/** | |||
* @brief Disable the remapping of TIM17_CH1. | |||
* @note DISABLE: No remap (TIM17_CH1 on PB9). | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_TIM17_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM17_REMAP) | |||
#endif | |||
#if defined(AFIO_MAPR2_CEC_REMAP) | |||
/** | |||
* @brief Enable the remapping of CEC. | |||
* @note ENABLE: Remap (CEC on PB10). | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_CEC_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_CEC_REMAP) | |||
/** | |||
* @brief Disable the remapping of CEC. | |||
* @note DISABLE: No remap (CEC on PB8). | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_CEC_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_CEC_REMAP) | |||
#endif | |||
#if defined(AFIO_MAPR2_TIM1_DMA_REMAP) | |||
/** | |||
* @brief Controls the mapping of the TIM1_CH1 TIM1_CH2 DMA requests onto the DMA1 channels. | |||
* @note ENABLE: Remap (TIM1_CH1 DMA request/DMA1 Channel6, TIM1_CH2 DMA request/DMA1 Channel6) | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_TIM1DMA_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM1_DMA_REMAP) | |||
/** | |||
* @brief Controls the mapping of the TIM1_CH1 TIM1_CH2 DMA requests onto the DMA1 channels. | |||
* @note DISABLE: No remap (TIM1_CH1 DMA request/DMA1 Channel2, TIM1_CH2 DMA request/DMA1 Channel3). | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_TIM1DMA_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM1_DMA_REMAP) | |||
#endif | |||
#if defined(AFIO_MAPR2_TIM67_DAC_DMA_REMAP) | |||
/** | |||
* @brief Controls the mapping of the TIM6_DAC1 and TIM7_DAC2 DMA requests onto the DMA1 channels. | |||
* @note ENABLE: Remap (TIM6_DAC1 DMA request/DMA1 Channel3, TIM7_DAC2 DMA request/DMA1 Channel4) | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_TIM67DACDMA_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM67_DAC_DMA_REMAP) | |||
/** | |||
* @brief Controls the mapping of the TIM6_DAC1 and TIM7_DAC2 DMA requests onto the DMA1 channels. | |||
* @note DISABLE: No remap (TIM6_DAC1 DMA request/DMA2 Channel3, TIM7_DAC2 DMA request/DMA2 Channel4) | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_TIM67DACDMA_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM67_DAC_DMA_REMAP) | |||
#endif | |||
#if defined(AFIO_MAPR2_TIM12_REMAP) | |||
/** | |||
* @brief Enable the remapping of TIM12_CH1 and TIM12_CH2. | |||
* @note ENABLE: Remap (TIM12_CH1 on PB12 and TIM12_CH2 on PB13). | |||
* @note This bit is available only in high density value line devices. | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_TIM12_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM12_REMAP) | |||
/** | |||
* @brief Disable the remapping of TIM12_CH1 and TIM12_CH2. | |||
* @note DISABLE: No remap (TIM12_CH1 on PC4 and TIM12_CH2 on PC5). | |||
* @note This bit is available only in high density value line devices. | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_TIM12_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM12_REMAP) | |||
#endif | |||
#if defined(AFIO_MAPR2_MISC_REMAP) | |||
/** | |||
* @brief Miscellaneous features remapping. | |||
* This bit is set and cleared by software. It controls miscellaneous features. | |||
* The DMA2 channel 5 interrupt position in the vector table. | |||
* The timer selection for DAC trigger 3 (TSEL[2:0] = 011, for more details refer to the DAC_CR register). | |||
* @note ENABLE: DMA2 channel 5 interrupt is mapped separately at position 60 and TIM15 TRGO event is | |||
* selected as DAC Trigger 3, TIM15 triggers TIM1/3. | |||
* @note This bit is available only in high density value line devices. | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_MISC_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_MISC_REMAP) | |||
/** | |||
* @brief Miscellaneous features remapping. | |||
* This bit is set and cleared by software. It controls miscellaneous features. | |||
* The DMA2 channel 5 interrupt position in the vector table. | |||
* The timer selection for DAC trigger 3 (TSEL[2:0] = 011, for more details refer to the DAC_CR register). | |||
* @note DISABLE: DMA2 channel 5 interrupt is mapped with DMA2 channel 4 at position 59, TIM5 TRGO | |||
* event is selected as DAC Trigger 3, TIM5 triggers TIM1/3. | |||
* @note This bit is available only in high density value line devices. | |||
* @retval None | |||
*/ | |||
#define __HAL_AFIO_REMAP_MISC_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_MISC_REMAP) | |||
#endif | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup GPIOEx_Private_Macros GPIOEx Private Macros | |||
* @{ | |||
*/ | |||
#if defined(STM32F101x6) || defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6) | |||
#define GPIO_GET_INDEX(__GPIOx__) (((__GPIOx__) == (GPIOA))? 0uL :\ | |||
((__GPIOx__) == (GPIOB))? 1uL :\ | |||
((__GPIOx__) == (GPIOC))? 2uL :3uL) | |||
#elif defined(STM32F100xB) || defined(STM32F101xB) || defined(STM32F103xB) || defined(STM32F105xC) || defined(STM32F107xC) | |||
#define GPIO_GET_INDEX(__GPIOx__) (((__GPIOx__) == (GPIOA))? 0uL :\ | |||
((__GPIOx__) == (GPIOB))? 1uL :\ | |||
((__GPIOx__) == (GPIOC))? 2uL :\ | |||
((__GPIOx__) == (GPIOD))? 3uL :4uL) | |||
#elif defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F103xE) || defined(STM32F103xG) | |||
#define GPIO_GET_INDEX(__GPIOx__) (((__GPIOx__) == (GPIOA))? 0uL :\ | |||
((__GPIOx__) == (GPIOB))? 1uL :\ | |||
((__GPIOx__) == (GPIOC))? 2uL :\ | |||
((__GPIOx__) == (GPIOD))? 3uL :\ | |||
((__GPIOx__) == (GPIOE))? 4uL :\ | |||
((__GPIOx__) == (GPIOF))? 5uL :6uL) | |||
#endif | |||
#define AFIO_REMAP_ENABLE(REMAP_PIN) do{ uint32_t tmpreg = AFIO->MAPR; \ | |||
tmpreg |= AFIO_MAPR_SWJ_CFG; \ | |||
tmpreg |= REMAP_PIN; \ | |||
AFIO->MAPR = tmpreg; \ | |||
}while(0u) | |||
#define AFIO_REMAP_DISABLE(REMAP_PIN) do{ uint32_t tmpreg = AFIO->MAPR; \ | |||
tmpreg |= AFIO_MAPR_SWJ_CFG; \ | |||
tmpreg &= ~REMAP_PIN; \ | |||
AFIO->MAPR = tmpreg; \ | |||
}while(0u) | |||
#define AFIO_REMAP_PARTIAL(REMAP_PIN, REMAP_PIN_MASK) do{ uint32_t tmpreg = AFIO->MAPR; \ | |||
tmpreg &= ~REMAP_PIN_MASK; \ | |||
tmpreg |= AFIO_MAPR_SWJ_CFG; \ | |||
tmpreg |= REMAP_PIN; \ | |||
AFIO->MAPR = tmpreg; \ | |||
}while(0u) | |||
#define AFIO_DBGAFR_CONFIG(DBGAFR_SWJCFG) do{ uint32_t tmpreg = AFIO->MAPR; \ | |||
tmpreg &= ~AFIO_MAPR_SWJ_CFG_Msk; \ | |||
tmpreg |= DBGAFR_SWJCFG; \ | |||
AFIO->MAPR = tmpreg; \ | |||
}while(0u) | |||
/** | |||
* @} | |||
*/ | |||
/* Exported macro ------------------------------------------------------------*/ | |||
/* Exported functions --------------------------------------------------------*/ | |||
/** @addtogroup GPIOEx_Exported_Functions | |||
* @{ | |||
*/ | |||
/** @addtogroup GPIOEx_Exported_Functions_Group1 | |||
* @{ | |||
*/ | |||
void HAL_GPIOEx_ConfigEventout(uint32_t GPIO_PortSource, uint32_t GPIO_PinSource); | |||
void HAL_GPIOEx_EnableEventout(void); | |||
void HAL_GPIOEx_DisableEventout(void); | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
#ifdef __cplusplus | |||
} | |||
#endif | |||
#endif /* STM32F1xx_HAL_GPIO_EX_H */ | |||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@@ -0,0 +1,244 @@ | |||
/** | |||
****************************************************************************** | |||
* @file stm32f1xx_hal_pcd_ex.c | |||
* @author MCD Application Team | |||
* @brief PCD Extended HAL module driver. | |||
* This file provides firmware functions to manage the following | |||
* functionalities of the USB Peripheral Controller: | |||
* + Extended features functions | |||
* | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© Copyright (c) 2016 STMicroelectronics. | |||
* All rights reserved.</center></h2> | |||
* | |||
* This software component is licensed by ST under BSD 3-Clause license, | |||
* the "License"; You may not use this file except in compliance with the | |||
* License. You may obtain a copy of the License at: | |||
* opensource.org/licenses/BSD-3-Clause | |||
* | |||
****************************************************************************** | |||
*/ | |||
/* Includes ------------------------------------------------------------------*/ | |||
#include "stm32f1xx_hal.h" | |||
/** @addtogroup STM32F1xx_HAL_Driver | |||
* @{ | |||
*/ | |||
/** @defgroup PCDEx PCDEx | |||
* @brief PCD Extended HAL module driver | |||
* @{ | |||
*/ | |||
#ifdef HAL_PCD_MODULE_ENABLED | |||
#if defined (USB) || defined (USB_OTG_FS) | |||
/* Private types -------------------------------------------------------------*/ | |||
/* Private variables ---------------------------------------------------------*/ | |||
/* Private constants ---------------------------------------------------------*/ | |||
/* Private macros ------------------------------------------------------------*/ | |||
/* Private functions ---------------------------------------------------------*/ | |||
/* Exported functions --------------------------------------------------------*/ | |||
/** @defgroup PCDEx_Exported_Functions PCDEx Exported Functions | |||
* @{ | |||
*/ | |||
/** @defgroup PCDEx_Exported_Functions_Group1 Peripheral Control functions | |||
* @brief PCDEx control functions | |||
* | |||
@verbatim | |||
=============================================================================== | |||
##### Extended features functions ##### | |||
=============================================================================== | |||
[..] This section provides functions allowing to: | |||
(+) Update FIFO configuration | |||
@endverbatim | |||
* @{ | |||
*/ | |||
#if defined (USB_OTG_FS) | |||
/** | |||
* @brief Set Tx FIFO | |||
* @param hpcd PCD handle | |||
* @param fifo The number of Tx fifo | |||
* @param size Fifo size | |||
* @retval HAL status | |||
*/ | |||
HAL_StatusTypeDef HAL_PCDEx_SetTxFiFo(PCD_HandleTypeDef *hpcd, uint8_t fifo, uint16_t size) | |||
{ | |||
uint8_t i; | |||
uint32_t Tx_Offset; | |||
/* TXn min size = 16 words. (n : Transmit FIFO index) | |||
When a TxFIFO is not used, the Configuration should be as follows: | |||
case 1 : n > m and Txn is not used (n,m : Transmit FIFO indexes) | |||
--> Txm can use the space allocated for Txn. | |||
case2 : n < m and Txn is not used (n,m : Transmit FIFO indexes) | |||
--> Txn should be configured with the minimum space of 16 words | |||
The FIFO is used optimally when used TxFIFOs are allocated in the top | |||
of the FIFO.Ex: use EP1 and EP2 as IN instead of EP1 and EP3 as IN ones. | |||
When DMA is used 3n * FIFO locations should be reserved for internal DMA registers */ | |||
Tx_Offset = hpcd->Instance->GRXFSIZ; | |||
if (fifo == 0U) | |||
{ | |||
hpcd->Instance->DIEPTXF0_HNPTXFSIZ = ((uint32_t)size << 16) | Tx_Offset; | |||
} | |||
else | |||
{ | |||
Tx_Offset += (hpcd->Instance->DIEPTXF0_HNPTXFSIZ) >> 16; | |||
for (i = 0U; i < (fifo - 1U); i++) | |||
{ | |||
Tx_Offset += (hpcd->Instance->DIEPTXF[i] >> 16); | |||
} | |||
/* Multiply Tx_Size by 2 to get higher performance */ | |||
hpcd->Instance->DIEPTXF[fifo - 1U] = ((uint32_t)size << 16) | Tx_Offset; | |||
} | |||
return HAL_OK; | |||
} | |||
/** | |||
* @brief Set Rx FIFO | |||
* @param hpcd PCD handle | |||
* @param size Size of Rx fifo | |||
* @retval HAL status | |||
*/ | |||
HAL_StatusTypeDef HAL_PCDEx_SetRxFiFo(PCD_HandleTypeDef *hpcd, uint16_t size) | |||
{ | |||
hpcd->Instance->GRXFSIZ = size; | |||
return HAL_OK; | |||
} | |||
#endif /* defined (USB_OTG_FS) */ | |||
#if defined (USB) | |||
/** | |||
* @brief Configure PMA for EP | |||
* @param hpcd Device instance | |||
* @param ep_addr endpoint address | |||
* @param ep_kind endpoint Kind | |||
* USB_SNG_BUF: Single Buffer used | |||
* USB_DBL_BUF: Double Buffer used | |||
* @param pmaadress: EP address in The PMA: In case of single buffer endpoint | |||
* this parameter is 16-bit value providing the address | |||
* in PMA allocated to endpoint. | |||
* In case of double buffer endpoint this parameter | |||
* is a 32-bit value providing the endpoint buffer 0 address | |||
* in the LSB part of 32-bit value and endpoint buffer 1 address | |||
* in the MSB part of 32-bit value. | |||
* @retval HAL status | |||
*/ | |||
HAL_StatusTypeDef HAL_PCDEx_PMAConfig(PCD_HandleTypeDef *hpcd, uint16_t ep_addr, | |||
uint16_t ep_kind, uint32_t pmaadress) | |||
{ | |||
PCD_EPTypeDef *ep; | |||
/* initialize ep structure*/ | |||
if ((0x80U & ep_addr) == 0x80U) | |||
{ | |||
ep = &hpcd->IN_ep[ep_addr & EP_ADDR_MSK]; | |||
} | |||
else | |||
{ | |||
ep = &hpcd->OUT_ep[ep_addr]; | |||
} | |||
/* Here we check if the endpoint is single or double Buffer*/ | |||
if (ep_kind == PCD_SNG_BUF) | |||
{ | |||
/* Single Buffer */ | |||
ep->doublebuffer = 0U; | |||
/* Configure the PMA */ | |||
ep->pmaadress = (uint16_t)pmaadress; | |||
} | |||
else /* USB_DBL_BUF */ | |||
{ | |||
/* Double Buffer Endpoint */ | |||
ep->doublebuffer = 1U; | |||
/* Configure the PMA */ | |||
ep->pmaaddr0 = (uint16_t)(pmaadress & 0xFFFFU); | |||
ep->pmaaddr1 = (uint16_t)((pmaadress & 0xFFFF0000U) >> 16); | |||
} | |||
return HAL_OK; | |||
} | |||
/** | |||
* @brief Software Device Connection, | |||
* this function is not required by USB OTG FS peripheral, it is used | |||
* only by USB Device FS peripheral. | |||
* @param hpcd PCD handle | |||
* @param state connection state (0 : disconnected / 1: connected) | |||
* @retval None | |||
*/ | |||
__weak void HAL_PCDEx_SetConnectionState(PCD_HandleTypeDef *hpcd, uint8_t state) | |||
{ | |||
/* Prevent unused argument(s) compilation warning */ | |||
UNUSED(hpcd); | |||
UNUSED(state); | |||
/* NOTE : This function Should not be modified, when the callback is needed, | |||
the HAL_PCDEx_SetConnectionState could be implemented in the user file | |||
*/ | |||
} | |||
#endif /* defined (USB) */ | |||
/** | |||
* @brief Send LPM message to user layer callback. | |||
* @param hpcd PCD handle | |||
* @param msg LPM message | |||
* @retval HAL status | |||
*/ | |||
__weak void HAL_PCDEx_LPM_Callback(PCD_HandleTypeDef *hpcd, PCD_LPM_MsgTypeDef msg) | |||
{ | |||
/* Prevent unused argument(s) compilation warning */ | |||
UNUSED(hpcd); | |||
UNUSED(msg); | |||
/* NOTE : This function should not be modified, when the callback is needed, | |||
the HAL_PCDEx_LPM_Callback could be implemented in the user file | |||
*/ | |||
} | |||
/** | |||
* @brief Send BatteryCharging message to user layer callback. | |||
* @param hpcd PCD handle | |||
* @param msg LPM message | |||
* @retval HAL status | |||
*/ | |||
__weak void HAL_PCDEx_BCD_Callback(PCD_HandleTypeDef *hpcd, PCD_BCD_MsgTypeDef msg) | |||
{ | |||
/* Prevent unused argument(s) compilation warning */ | |||
UNUSED(hpcd); | |||
UNUSED(msg); | |||
/* NOTE : This function should not be modified, when the callback is needed, | |||
the HAL_PCDEx_BCD_Callback could be implemented in the user file | |||
*/ | |||
} | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
#endif /* defined (USB) || defined (USB_OTG_FS) */ | |||
#endif /* HAL_PCD_MODULE_ENABLED */ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@@ -0,0 +1,88 @@ | |||
/** | |||
****************************************************************************** | |||
* @file stm32f1xx_hal_pcd_ex.h | |||
* @author MCD Application Team | |||
* @brief Header file of PCD HAL Extension module. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© Copyright (c) 2016 STMicroelectronics. | |||
* All rights reserved.</center></h2> | |||
* | |||
* This software component is licensed by ST under BSD 3-Clause license, | |||
* the "License"; You may not use this file except in compliance with the | |||
* License. You may obtain a copy of the License at: | |||
* opensource.org/licenses/BSD-3-Clause | |||
* | |||
****************************************************************************** | |||
*/ | |||
/* Define to prevent recursive inclusion -------------------------------------*/ | |||
#ifndef STM32F1xx_HAL_PCD_EX_H | |||
#define STM32F1xx_HAL_PCD_EX_H | |||
#ifdef __cplusplus | |||
extern "C" { | |||
#endif | |||
/* Includes ------------------------------------------------------------------*/ | |||
#include "stm32f1xx_hal_def.h" | |||
#if defined (USB) || defined (USB_OTG_FS) | |||
/** @addtogroup STM32F1xx_HAL_Driver | |||
* @{ | |||
*/ | |||
/** @addtogroup PCDEx | |||
* @{ | |||
*/ | |||
/* Exported types ------------------------------------------------------------*/ | |||
/* Exported constants --------------------------------------------------------*/ | |||
/* Exported macros -----------------------------------------------------------*/ | |||
/* Exported functions --------------------------------------------------------*/ | |||
/** @addtogroup PCDEx_Exported_Functions PCDEx Exported Functions | |||
* @{ | |||
*/ | |||
/** @addtogroup PCDEx_Exported_Functions_Group1 Peripheral Control functions | |||
* @{ | |||
*/ | |||
#if defined (USB_OTG_FS) | |||
HAL_StatusTypeDef HAL_PCDEx_SetTxFiFo(PCD_HandleTypeDef *hpcd, uint8_t fifo, uint16_t size); | |||
HAL_StatusTypeDef HAL_PCDEx_SetRxFiFo(PCD_HandleTypeDef *hpcd, uint16_t size); | |||
#endif /* defined (USB_OTG_FS) */ | |||
#if defined (USB) | |||
HAL_StatusTypeDef HAL_PCDEx_PMAConfig(PCD_HandleTypeDef *hpcd, uint16_t ep_addr, | |||
uint16_t ep_kind, uint32_t pmaadress); | |||
void HAL_PCDEx_SetConnectionState(PCD_HandleTypeDef *hpcd, uint8_t state); | |||
#endif /* defined (USB) */ | |||
void HAL_PCDEx_LPM_Callback(PCD_HandleTypeDef *hpcd, PCD_LPM_MsgTypeDef msg); | |||
void HAL_PCDEx_BCD_Callback(PCD_HandleTypeDef *hpcd, PCD_BCD_MsgTypeDef msg); | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
#endif /* defined (USB) || defined (USB_OTG_FS) */ | |||
#ifdef __cplusplus | |||
} | |||
#endif | |||
#endif /* STM32F1xx_HAL_PCD_EX_H */ | |||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@@ -0,0 +1,388 @@ | |||
/** | |||
****************************************************************************** | |||
* @file stm32f1xx_hal_pwr.h | |||
* @author MCD Application Team | |||
* @brief Header file of PWR HAL module. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© Copyright (c) 2016 STMicroelectronics. | |||
* All rights reserved.</center></h2> | |||
* | |||
* This software component is licensed by ST under BSD 3-Clause license, | |||
* the "License"; You may not use this file except in compliance with the | |||
* License. You may obtain a copy of the License at: | |||
* opensource.org/licenses/BSD-3-Clause | |||
* | |||
****************************************************************************** | |||
*/ | |||
/* Define to prevent recursive inclusion -------------------------------------*/ | |||
#ifndef __STM32F1xx_HAL_PWR_H | |||
#define __STM32F1xx_HAL_PWR_H | |||
#ifdef __cplusplus | |||
extern "C" { | |||
#endif | |||
/* Includes ------------------------------------------------------------------*/ | |||
#include "stm32f1xx_hal_def.h" | |||
/** @addtogroup STM32F1xx_HAL_Driver | |||
* @{ | |||
*/ | |||
/** @addtogroup PWR | |||
* @{ | |||
*/ | |||
/* Exported types ------------------------------------------------------------*/ | |||
/** @defgroup PWR_Exported_Types PWR Exported Types | |||
* @{ | |||
*/ | |||
/** | |||
* @brief PWR PVD configuration structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
uint32_t PVDLevel; /*!< PVDLevel: Specifies the PVD detection level. | |||
This parameter can be a value of @ref PWR_PVD_detection_level */ | |||
uint32_t Mode; /*!< Mode: Specifies the operating mode for the selected pins. | |||
This parameter can be a value of @ref PWR_PVD_Mode */ | |||
}PWR_PVDTypeDef; | |||
/** | |||
* @} | |||
*/ | |||
/* Internal constants --------------------------------------------------------*/ | |||
/** @addtogroup PWR_Private_Constants | |||
* @{ | |||
*/ | |||
#define PWR_EXTI_LINE_PVD ((uint32_t)0x00010000) /*!< External interrupt line 16 Connected to the PVD EXTI Line */ | |||
/** | |||
* @} | |||
*/ | |||
/* Exported constants --------------------------------------------------------*/ | |||
/** @defgroup PWR_Exported_Constants PWR Exported Constants | |||
* @{ | |||
*/ | |||
/** @defgroup PWR_PVD_detection_level PWR PVD detection level | |||
* @{ | |||
*/ | |||
#define PWR_PVDLEVEL_0 PWR_CR_PLS_2V2 | |||
#define PWR_PVDLEVEL_1 PWR_CR_PLS_2V3 | |||
#define PWR_PVDLEVEL_2 PWR_CR_PLS_2V4 | |||
#define PWR_PVDLEVEL_3 PWR_CR_PLS_2V5 | |||
#define PWR_PVDLEVEL_4 PWR_CR_PLS_2V6 | |||
#define PWR_PVDLEVEL_5 PWR_CR_PLS_2V7 | |||
#define PWR_PVDLEVEL_6 PWR_CR_PLS_2V8 | |||
#define PWR_PVDLEVEL_7 PWR_CR_PLS_2V9 | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup PWR_PVD_Mode PWR PVD Mode | |||
* @{ | |||
*/ | |||
#define PWR_PVD_MODE_NORMAL 0x00000000U /*!< basic mode is used */ | |||
#define PWR_PVD_MODE_IT_RISING 0x00010001U /*!< External Interrupt Mode with Rising edge trigger detection */ | |||
#define PWR_PVD_MODE_IT_FALLING 0x00010002U /*!< External Interrupt Mode with Falling edge trigger detection */ | |||
#define PWR_PVD_MODE_IT_RISING_FALLING 0x00010003U /*!< External Interrupt Mode with Rising/Falling edge trigger detection */ | |||
#define PWR_PVD_MODE_EVENT_RISING 0x00020001U /*!< Event Mode with Rising edge trigger detection */ | |||
#define PWR_PVD_MODE_EVENT_FALLING 0x00020002U /*!< Event Mode with Falling edge trigger detection */ | |||
#define PWR_PVD_MODE_EVENT_RISING_FALLING 0x00020003U /*!< Event Mode with Rising/Falling edge trigger detection */ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup PWR_WakeUp_Pins PWR WakeUp Pins | |||
* @{ | |||
*/ | |||
#define PWR_WAKEUP_PIN1 PWR_CSR_EWUP | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup PWR_Regulator_state_in_SLEEP_STOP_mode PWR Regulator state in SLEEP/STOP mode | |||
* @{ | |||
*/ | |||
#define PWR_MAINREGULATOR_ON 0x00000000U | |||
#define PWR_LOWPOWERREGULATOR_ON PWR_CR_LPDS | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup PWR_SLEEP_mode_entry PWR SLEEP mode entry | |||
* @{ | |||
*/ | |||
#define PWR_SLEEPENTRY_WFI ((uint8_t)0x01) | |||
#define PWR_SLEEPENTRY_WFE ((uint8_t)0x02) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup PWR_STOP_mode_entry PWR STOP mode entry | |||
* @{ | |||
*/ | |||
#define PWR_STOPENTRY_WFI ((uint8_t)0x01) | |||
#define PWR_STOPENTRY_WFE ((uint8_t)0x02) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup PWR_Flag PWR Flag | |||
* @{ | |||
*/ | |||
#define PWR_FLAG_WU PWR_CSR_WUF | |||
#define PWR_FLAG_SB PWR_CSR_SBF | |||
#define PWR_FLAG_PVDO PWR_CSR_PVDO | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Exported macro ------------------------------------------------------------*/ | |||
/** @defgroup PWR_Exported_Macros PWR Exported Macros | |||
* @{ | |||
*/ | |||
/** @brief Check PWR flag is set or not. | |||
* @param __FLAG__: specifies the flag to check. | |||
* This parameter can be one of the following values: | |||
* @arg PWR_FLAG_WU: Wake Up flag. This flag indicates that a wakeup event | |||
* was received from the WKUP pin or from the RTC alarm | |||
* An additional wakeup event is detected if the WKUP pin is enabled | |||
* (by setting the EWUP bit) when the WKUP pin level is already high. | |||
* @arg PWR_FLAG_SB: StandBy flag. This flag indicates that the system was | |||
* resumed from StandBy mode. | |||
* @arg PWR_FLAG_PVDO: PVD Output. This flag is valid only if PVD is enabled | |||
* by the HAL_PWR_EnablePVD() function. The PVD is stopped by Standby mode | |||
* For this reason, this bit is equal to 0 after Standby or reset | |||
* until the PVDE bit is set. | |||
* @retval The new state of __FLAG__ (TRUE or FALSE). | |||
*/ | |||
#define __HAL_PWR_GET_FLAG(__FLAG__) ((PWR->CSR & (__FLAG__)) == (__FLAG__)) | |||
/** @brief Clear the PWR's pending flags. | |||
* @param __FLAG__: specifies the flag to clear. | |||
* This parameter can be one of the following values: | |||
* @arg PWR_FLAG_WU: Wake Up flag | |||
* @arg PWR_FLAG_SB: StandBy flag | |||
*/ | |||
#define __HAL_PWR_CLEAR_FLAG(__FLAG__) SET_BIT(PWR->CR, ((__FLAG__) << 2)) | |||
/** | |||
* @brief Enable interrupt on PVD Exti Line 16. | |||
* @retval None. | |||
*/ | |||
#define __HAL_PWR_PVD_EXTI_ENABLE_IT() SET_BIT(EXTI->IMR, PWR_EXTI_LINE_PVD) | |||
/** | |||
* @brief Disable interrupt on PVD Exti Line 16. | |||
* @retval None. | |||
*/ | |||
#define __HAL_PWR_PVD_EXTI_DISABLE_IT() CLEAR_BIT(EXTI->IMR, PWR_EXTI_LINE_PVD) | |||
/** | |||
* @brief Enable event on PVD Exti Line 16. | |||
* @retval None. | |||
*/ | |||
#define __HAL_PWR_PVD_EXTI_ENABLE_EVENT() SET_BIT(EXTI->EMR, PWR_EXTI_LINE_PVD) | |||
/** | |||
* @brief Disable event on PVD Exti Line 16. | |||
* @retval None. | |||
*/ | |||
#define __HAL_PWR_PVD_EXTI_DISABLE_EVENT() CLEAR_BIT(EXTI->EMR, PWR_EXTI_LINE_PVD) | |||
/** | |||
* @brief PVD EXTI line configuration: set falling edge trigger. | |||
* @retval None. | |||
*/ | |||
#define __HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE() SET_BIT(EXTI->FTSR, PWR_EXTI_LINE_PVD) | |||
/** | |||
* @brief Disable the PVD Extended Interrupt Falling Trigger. | |||
* @retval None. | |||
*/ | |||
#define __HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE() CLEAR_BIT(EXTI->FTSR, PWR_EXTI_LINE_PVD) | |||
/** | |||
* @brief PVD EXTI line configuration: set rising edge trigger. | |||
* @retval None. | |||
*/ | |||
#define __HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE() SET_BIT(EXTI->RTSR, PWR_EXTI_LINE_PVD) | |||
/** | |||
* @brief Disable the PVD Extended Interrupt Rising Trigger. | |||
* This parameter can be: | |||
* @retval None. | |||
*/ | |||
#define __HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE() CLEAR_BIT(EXTI->RTSR, PWR_EXTI_LINE_PVD) | |||
/** | |||
* @brief PVD EXTI line configuration: set rising & falling edge trigger. | |||
* @retval None. | |||
*/ | |||
#define __HAL_PWR_PVD_EXTI_ENABLE_RISING_FALLING_EDGE() __HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE();__HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE(); | |||
/** | |||
* @brief Disable the PVD Extended Interrupt Rising & Falling Trigger. | |||
* This parameter can be: | |||
* @retval None. | |||
*/ | |||
#define __HAL_PWR_PVD_EXTI_DISABLE_RISING_FALLING_EDGE() __HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE();__HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE(); | |||
/** | |||
* @brief Check whether the specified PVD EXTI interrupt flag is set or not. | |||
* @retval EXTI PVD Line Status. | |||
*/ | |||
#define __HAL_PWR_PVD_EXTI_GET_FLAG() (EXTI->PR & (PWR_EXTI_LINE_PVD)) | |||
/** | |||
* @brief Clear the PVD EXTI flag. | |||
* @retval None. | |||
*/ | |||
#define __HAL_PWR_PVD_EXTI_CLEAR_FLAG() (EXTI->PR = (PWR_EXTI_LINE_PVD)) | |||
/** | |||
* @brief Generate a Software interrupt on selected EXTI line. | |||
* @retval None. | |||
*/ | |||
#define __HAL_PWR_PVD_EXTI_GENERATE_SWIT() SET_BIT(EXTI->SWIER, PWR_EXTI_LINE_PVD) | |||
/** | |||
* @} | |||
*/ | |||
/* Private macro -------------------------------------------------------------*/ | |||
/** @defgroup PWR_Private_Macros PWR Private Macros | |||
* @{ | |||
*/ | |||
#define IS_PWR_PVD_LEVEL(LEVEL) (((LEVEL) == PWR_PVDLEVEL_0) || ((LEVEL) == PWR_PVDLEVEL_1)|| \ | |||
((LEVEL) == PWR_PVDLEVEL_2) || ((LEVEL) == PWR_PVDLEVEL_3)|| \ | |||
((LEVEL) == PWR_PVDLEVEL_4) || ((LEVEL) == PWR_PVDLEVEL_5)|| \ | |||
((LEVEL) == PWR_PVDLEVEL_6) || ((LEVEL) == PWR_PVDLEVEL_7)) | |||
#define IS_PWR_PVD_MODE(MODE) (((MODE) == PWR_PVD_MODE_IT_RISING)|| ((MODE) == PWR_PVD_MODE_IT_FALLING) || \ | |||
((MODE) == PWR_PVD_MODE_IT_RISING_FALLING) || ((MODE) == PWR_PVD_MODE_EVENT_RISING) || \ | |||
((MODE) == PWR_PVD_MODE_EVENT_FALLING) || ((MODE) == PWR_PVD_MODE_EVENT_RISING_FALLING) || \ | |||
((MODE) == PWR_PVD_MODE_NORMAL)) | |||
#define IS_PWR_WAKEUP_PIN(PIN) (((PIN) == PWR_WAKEUP_PIN1)) | |||
#define IS_PWR_REGULATOR(REGULATOR) (((REGULATOR) == PWR_MAINREGULATOR_ON) || \ | |||
((REGULATOR) == PWR_LOWPOWERREGULATOR_ON)) | |||
#define IS_PWR_SLEEP_ENTRY(ENTRY) (((ENTRY) == PWR_SLEEPENTRY_WFI) || ((ENTRY) == PWR_SLEEPENTRY_WFE)) | |||
#define IS_PWR_STOP_ENTRY(ENTRY) (((ENTRY) == PWR_STOPENTRY_WFI) || ((ENTRY) == PWR_STOPENTRY_WFE)) | |||
/** | |||
* @} | |||
*/ | |||
/* Exported functions --------------------------------------------------------*/ | |||
/** @addtogroup PWR_Exported_Functions PWR Exported Functions | |||
* @{ | |||
*/ | |||
/** @addtogroup PWR_Exported_Functions_Group1 Initialization and de-initialization functions | |||
* @{ | |||
*/ | |||
/* Initialization and de-initialization functions *******************************/ | |||
void HAL_PWR_DeInit(void); | |||
void HAL_PWR_EnableBkUpAccess(void); | |||
void HAL_PWR_DisableBkUpAccess(void); | |||
/** | |||
* @} | |||
*/ | |||
/** @addtogroup PWR_Exported_Functions_Group2 Peripheral Control functions | |||
* @{ | |||
*/ | |||
/* Peripheral Control functions ************************************************/ | |||
void HAL_PWR_ConfigPVD(PWR_PVDTypeDef *sConfigPVD); | |||
/* #define HAL_PWR_ConfigPVD 12*/ | |||
void HAL_PWR_EnablePVD(void); | |||
void HAL_PWR_DisablePVD(void); | |||
/* WakeUp pins configuration functions ****************************************/ | |||
void HAL_PWR_EnableWakeUpPin(uint32_t WakeUpPinx); | |||
void HAL_PWR_DisableWakeUpPin(uint32_t WakeUpPinx); | |||
/* Low Power modes configuration functions ************************************/ | |||
void HAL_PWR_EnterSTOPMode(uint32_t Regulator, uint8_t STOPEntry); | |||
void HAL_PWR_EnterSLEEPMode(uint32_t Regulator, uint8_t SLEEPEntry); | |||
void HAL_PWR_EnterSTANDBYMode(void); | |||
void HAL_PWR_EnableSleepOnExit(void); | |||
void HAL_PWR_DisableSleepOnExit(void); | |||
void HAL_PWR_EnableSEVOnPend(void); | |||
void HAL_PWR_DisableSEVOnPend(void); | |||
void HAL_PWR_PVD_IRQHandler(void); | |||
void HAL_PWR_PVDCallback(void); | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
#ifdef __cplusplus | |||
} | |||
#endif | |||
#endif /* __STM32F1xx_HAL_PWR_H */ | |||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@@ -0,0 +1,607 @@ | |||
/** | |||
****************************************************************************** | |||
* @file stm32f1xx_hal_rtc.h | |||
* @author MCD Application Team | |||
* @brief Header file of RTC HAL module. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© Copyright (c) 2016 STMicroelectronics. | |||
* All rights reserved.</center></h2> | |||
* | |||
* This software component is licensed by ST under BSD 3-Clause license, | |||
* the "License"; You may not use this file except in compliance with the | |||
* License. You may obtain a copy of the License at: | |||
* opensource.org/licenses/BSD-3-Clause | |||
* | |||
****************************************************************************** | |||
*/ | |||
/* Define to prevent recursive inclusion -------------------------------------*/ | |||
#ifndef __STM32F1xx_HAL_RTC_H | |||
#define __STM32F1xx_HAL_RTC_H | |||
#ifdef __cplusplus | |||
extern "C" { | |||
#endif | |||
/* Includes ------------------------------------------------------------------*/ | |||
#include "stm32f1xx_hal_def.h" | |||
/** @addtogroup STM32F1xx_HAL_Driver | |||
* @{ | |||
*/ | |||
/** @addtogroup RTC | |||
* @{ | |||
*/ | |||
/** @addtogroup RTC_Private_Macros | |||
* @{ | |||
*/ | |||
#define IS_RTC_ASYNCH_PREDIV(PREDIV) (((PREDIV) <= 0xFFFFFU) || ((PREDIV) == RTC_AUTO_1_SECOND)) | |||
#define IS_RTC_HOUR24(HOUR) ((HOUR) <= 23U) | |||
#define IS_RTC_MINUTES(MINUTES) ((MINUTES) <= 59U) | |||
#define IS_RTC_SECONDS(SECONDS) ((SECONDS) <= 59U) | |||
#define IS_RTC_FORMAT(FORMAT) (((FORMAT) == RTC_FORMAT_BIN) || ((FORMAT) == RTC_FORMAT_BCD)) | |||
#define IS_RTC_YEAR(YEAR) ((YEAR) <= 99U) | |||
#define IS_RTC_MONTH(MONTH) (((MONTH) >= 1U) && ((MONTH) <= 12U)) | |||
#define IS_RTC_DATE(DATE) (((DATE) >= 1U) && ((DATE) <= 31U)) | |||
#define IS_RTC_ALARM(ALARM) ((ALARM) == RTC_ALARM_A) | |||
#define IS_RTC_CALIB_OUTPUT(__OUTPUT__) (((__OUTPUT__) == RTC_OUTPUTSOURCE_NONE) || \ | |||
((__OUTPUT__) == RTC_OUTPUTSOURCE_CALIBCLOCK) || \ | |||
((__OUTPUT__) == RTC_OUTPUTSOURCE_ALARM) || \ | |||
((__OUTPUT__) == RTC_OUTPUTSOURCE_SECOND)) | |||
/** | |||
* @} | |||
*/ | |||
/** @addtogroup RTC_Private_Constants | |||
* @{ | |||
*/ | |||
/** @defgroup RTC_Timeout_Value Default Timeout Value | |||
* @{ | |||
*/ | |||
#define RTC_TIMEOUT_VALUE 1000U | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup RTC_EXTI_Line_Event RTC EXTI Line event | |||
* @{ | |||
*/ | |||
#define RTC_EXTI_LINE_ALARM_EVENT ((uint32_t)EXTI_IMR_MR17) /*!< External interrupt line 17 Connected to the RTC Alarm event */ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Exported types ------------------------------------------------------------*/ | |||
/** @defgroup RTC_Exported_Types RTC Exported Types | |||
* @{ | |||
*/ | |||
/** | |||
* @brief RTC Time structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
uint8_t Hours; /*!< Specifies the RTC Time Hour. | |||
This parameter must be a number between Min_Data = 0 and Max_Data = 23 */ | |||
uint8_t Minutes; /*!< Specifies the RTC Time Minutes. | |||
This parameter must be a number between Min_Data = 0 and Max_Data = 59 */ | |||
uint8_t Seconds; /*!< Specifies the RTC Time Seconds. | |||
This parameter must be a number between Min_Data = 0 and Max_Data = 59 */ | |||
} RTC_TimeTypeDef; | |||
/** | |||
* @brief RTC Alarm structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
RTC_TimeTypeDef AlarmTime; /*!< Specifies the RTC Alarm Time members */ | |||
uint32_t Alarm; /*!< Specifies the alarm ID (only 1 alarm ID for STM32F1). | |||
This parameter can be a value of @ref RTC_Alarms_Definitions */ | |||
} RTC_AlarmTypeDef; | |||
/** | |||
* @brief HAL State structures definition | |||
*/ | |||
typedef enum | |||
{ | |||
HAL_RTC_STATE_RESET = 0x00U, /*!< RTC not yet initialized or disabled */ | |||
HAL_RTC_STATE_READY = 0x01U, /*!< RTC initialized and ready for use */ | |||
HAL_RTC_STATE_BUSY = 0x02U, /*!< RTC process is ongoing */ | |||
HAL_RTC_STATE_TIMEOUT = 0x03U, /*!< RTC timeout state */ | |||
HAL_RTC_STATE_ERROR = 0x04U /*!< RTC error state */ | |||
} HAL_RTCStateTypeDef; | |||
/** | |||
* @brief RTC Configuration Structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
uint32_t AsynchPrediv; /*!< Specifies the RTC Asynchronous Predivider value. | |||
This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFFFFF or RTC_AUTO_1_SECOND | |||
If RTC_AUTO_1_SECOND is selected, AsynchPrediv will be set automatically to get 1sec timebase */ | |||
uint32_t OutPut; /*!< Specifies which signal will be routed to the RTC Tamper pin. | |||
This parameter can be a value of @ref RTC_output_source_to_output_on_the_Tamper_pin */ | |||
} RTC_InitTypeDef; | |||
/** | |||
* @brief RTC Date structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
uint8_t WeekDay; /*!< Specifies the RTC Date WeekDay (not necessary for HAL_RTC_SetDate). | |||
This parameter can be a value of @ref RTC_WeekDay_Definitions */ | |||
uint8_t Month; /*!< Specifies the RTC Date Month (in BCD format). | |||
This parameter can be a value of @ref RTC_Month_Date_Definitions */ | |||
uint8_t Date; /*!< Specifies the RTC Date. | |||
This parameter must be a number between Min_Data = 1 and Max_Data = 31 */ | |||
uint8_t Year; /*!< Specifies the RTC Date Year. | |||
This parameter must be a number between Min_Data = 0 and Max_Data = 99 */ | |||
} RTC_DateTypeDef; | |||
/** | |||
* @brief Time Handle Structure definition | |||
*/ | |||
#if (USE_HAL_RTC_REGISTER_CALLBACKS == 1) | |||
typedef struct __RTC_HandleTypeDef | |||
#else | |||
typedef struct | |||
#endif /* (USE_HAL_RTC_REGISTER_CALLBACKS) */ | |||
{ | |||
RTC_TypeDef *Instance; /*!< Register base address */ | |||
RTC_InitTypeDef Init; /*!< RTC required parameters */ | |||
RTC_DateTypeDef DateToUpdate; /*!< Current date set by user and updated automatically */ | |||
HAL_LockTypeDef Lock; /*!< RTC locking object */ | |||
__IO HAL_RTCStateTypeDef State; /*!< Time communication state */ | |||
#if (USE_HAL_RTC_REGISTER_CALLBACKS == 1) | |||
void (* AlarmAEventCallback)(struct __RTC_HandleTypeDef *hrtc); /*!< RTC Alarm A Event callback */ | |||
void (* Tamper1EventCallback)(struct __RTC_HandleTypeDef *hrtc); /*!< RTC Tamper 1 Event callback */ | |||
void (* MspInitCallback)(struct __RTC_HandleTypeDef *hrtc); /*!< RTC Msp Init callback */ | |||
void (* MspDeInitCallback)(struct __RTC_HandleTypeDef *hrtc); /*!< RTC Msp DeInit callback */ | |||
#endif /* (USE_HAL_RTC_REGISTER_CALLBACKS) */ | |||
} RTC_HandleTypeDef; | |||
#if (USE_HAL_RTC_REGISTER_CALLBACKS == 1) | |||
/** | |||
* @brief HAL RTC Callback ID enumeration definition | |||
*/ | |||
typedef enum | |||
{ | |||
HAL_RTC_ALARM_A_EVENT_CB_ID = 0x00u, /*!< RTC Alarm A Event Callback ID */ | |||
HAL_RTC_TAMPER1_EVENT_CB_ID = 0x04u, /*!< RTC Tamper 1 Callback ID */ | |||
HAL_RTC_MSPINIT_CB_ID = 0x0Eu, /*!< RTC Msp Init callback ID */ | |||
HAL_RTC_MSPDEINIT_CB_ID = 0x0Fu /*!< RTC Msp DeInit callback ID */ | |||
} HAL_RTC_CallbackIDTypeDef; | |||
/** | |||
* @brief HAL RTC Callback pointer definition | |||
*/ | |||
typedef void (*pRTC_CallbackTypeDef)(RTC_HandleTypeDef *hrtc); /*!< pointer to an RTC callback function */ | |||
#endif /* USE_HAL_RTC_REGISTER_CALLBACKS */ | |||
/** | |||
* @} | |||
*/ | |||
/* Exported constants --------------------------------------------------------*/ | |||
/** @defgroup RTC_Exported_Constants RTC Exported Constants | |||
* @{ | |||
*/ | |||
/** @defgroup RTC_Automatic_Prediv_1_Second Automatic calculation of prediv for 1sec timebase | |||
* @{ | |||
*/ | |||
#define RTC_AUTO_1_SECOND 0xFFFFFFFFU | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup RTC_Input_parameter_format_definitions Input Parameter Format | |||
* @{ | |||
*/ | |||
#define RTC_FORMAT_BIN 0x000000000U | |||
#define RTC_FORMAT_BCD 0x000000001U | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup RTC_Month_Date_Definitions Month Definitions | |||
* @{ | |||
*/ | |||
/* Coded in BCD format */ | |||
#define RTC_MONTH_JANUARY ((uint8_t)0x01) | |||
#define RTC_MONTH_FEBRUARY ((uint8_t)0x02) | |||
#define RTC_MONTH_MARCH ((uint8_t)0x03) | |||
#define RTC_MONTH_APRIL ((uint8_t)0x04) | |||
#define RTC_MONTH_MAY ((uint8_t)0x05) | |||
#define RTC_MONTH_JUNE ((uint8_t)0x06) | |||
#define RTC_MONTH_JULY ((uint8_t)0x07) | |||
#define RTC_MONTH_AUGUST ((uint8_t)0x08) | |||
#define RTC_MONTH_SEPTEMBER ((uint8_t)0x09) | |||
#define RTC_MONTH_OCTOBER ((uint8_t)0x10) | |||
#define RTC_MONTH_NOVEMBER ((uint8_t)0x11) | |||
#define RTC_MONTH_DECEMBER ((uint8_t)0x12) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup RTC_WeekDay_Definitions WeekDay Definitions | |||
* @{ | |||
*/ | |||
#define RTC_WEEKDAY_MONDAY ((uint8_t)0x01) | |||
#define RTC_WEEKDAY_TUESDAY ((uint8_t)0x02) | |||
#define RTC_WEEKDAY_WEDNESDAY ((uint8_t)0x03) | |||
#define RTC_WEEKDAY_THURSDAY ((uint8_t)0x04) | |||
#define RTC_WEEKDAY_FRIDAY ((uint8_t)0x05) | |||
#define RTC_WEEKDAY_SATURDAY ((uint8_t)0x06) | |||
#define RTC_WEEKDAY_SUNDAY ((uint8_t)0x00) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup RTC_Alarms_Definitions Alarms Definitions | |||
* @{ | |||
*/ | |||
#define RTC_ALARM_A 0U /*!< Specify alarm ID (mainly for legacy purposes) */ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup RTC_output_source_to_output_on_the_Tamper_pin Output source to output on the Tamper pin | |||
* @{ | |||
*/ | |||
#define RTC_OUTPUTSOURCE_NONE 0x00000000U /*!< No output on the TAMPER pin */ | |||
#define RTC_OUTPUTSOURCE_CALIBCLOCK BKP_RTCCR_CCO /*!< RTC clock with a frequency divided by 64 on the TAMPER pin */ | |||
#define RTC_OUTPUTSOURCE_ALARM BKP_RTCCR_ASOE /*!< Alarm pulse signal on the TAMPER pin */ | |||
#define RTC_OUTPUTSOURCE_SECOND (BKP_RTCCR_ASOS | BKP_RTCCR_ASOE) /*!< Second pulse signal on the TAMPER pin */ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup RTC_Interrupts_Definitions Interrupts Definitions | |||
* @{ | |||
*/ | |||
#define RTC_IT_OW RTC_CRH_OWIE /*!< Overflow interrupt */ | |||
#define RTC_IT_ALRA RTC_CRH_ALRIE /*!< Alarm interrupt */ | |||
#define RTC_IT_SEC RTC_CRH_SECIE /*!< Second interrupt */ | |||
#define RTC_IT_TAMP1 BKP_CSR_TPIE /*!< TAMPER Pin interrupt enable */ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup RTC_Flags_Definitions Flags Definitions | |||
* @{ | |||
*/ | |||
#define RTC_FLAG_RTOFF RTC_CRL_RTOFF /*!< RTC Operation OFF flag */ | |||
#define RTC_FLAG_RSF RTC_CRL_RSF /*!< Registers Synchronized flag */ | |||
#define RTC_FLAG_OW RTC_CRL_OWF /*!< Overflow flag */ | |||
#define RTC_FLAG_ALRAF RTC_CRL_ALRF /*!< Alarm flag */ | |||
#define RTC_FLAG_SEC RTC_CRL_SECF /*!< Second flag */ | |||
#define RTC_FLAG_TAMP1F BKP_CSR_TEF /*!< Tamper Interrupt Flag */ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Exported macro ------------------------------------------------------------*/ | |||
/** @defgroup RTC_Exported_macros RTC Exported Macros | |||
* @{ | |||
*/ | |||
/** @brief Reset RTC handle state | |||
* @param __HANDLE__: RTC handle. | |||
* @retval None | |||
*/ | |||
#if (USE_HAL_RTC_REGISTER_CALLBACKS == 1) | |||
#define __HAL_RTC_RESET_HANDLE_STATE(__HANDLE__) do{\ | |||
(__HANDLE__)->State = HAL_RTC_STATE_RESET;\ | |||
(__HANDLE__)->MspInitCallback = NULL;\ | |||
(__HANDLE__)->MspDeInitCallback = NULL;\ | |||
}while(0u) | |||
#else | |||
#define __HAL_RTC_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_RTC_STATE_RESET) | |||
#endif /* USE_HAL_RTC_REGISTER_CALLBACKS */ | |||
/** | |||
* @brief Disable the write protection for RTC registers. | |||
* @param __HANDLE__: specifies the RTC handle. | |||
* @retval None | |||
*/ | |||
#define __HAL_RTC_WRITEPROTECTION_DISABLE(__HANDLE__) SET_BIT((__HANDLE__)->Instance->CRL, RTC_CRL_CNF) | |||
/** | |||
* @brief Enable the write protection for RTC registers. | |||
* @param __HANDLE__: specifies the RTC handle. | |||
* @retval None | |||
*/ | |||
#define __HAL_RTC_WRITEPROTECTION_ENABLE(__HANDLE__) CLEAR_BIT((__HANDLE__)->Instance->CRL, RTC_CRL_CNF) | |||
/** | |||
* @brief Enable the RTC Alarm interrupt. | |||
* @param __HANDLE__: specifies the RTC handle. | |||
* @param __INTERRUPT__: specifies the RTC Alarm interrupt sources to be enabled or disabled. | |||
* This parameter can be any combination of the following values: | |||
* @arg RTC_IT_ALRA: Alarm A interrupt | |||
* @retval None | |||
*/ | |||
#define __HAL_RTC_ALARM_ENABLE_IT(__HANDLE__, __INTERRUPT__) SET_BIT((__HANDLE__)->Instance->CRH, (__INTERRUPT__)) | |||
/** | |||
* @brief Disable the RTC Alarm interrupt. | |||
* @param __HANDLE__: specifies the RTC handle. | |||
* @param __INTERRUPT__: specifies the RTC Alarm interrupt sources to be enabled or disabled. | |||
* This parameter can be any combination of the following values: | |||
* @arg RTC_IT_ALRA: Alarm A interrupt | |||
* @retval None | |||
*/ | |||
#define __HAL_RTC_ALARM_DISABLE_IT(__HANDLE__, __INTERRUPT__) CLEAR_BIT((__HANDLE__)->Instance->CRH, (__INTERRUPT__)) | |||
/** | |||
* @brief Check whether the specified RTC Alarm interrupt has been enabled or not. | |||
* @param __HANDLE__: specifies the RTC handle. | |||
* @param __INTERRUPT__: specifies the RTC Alarm interrupt sources to be checked | |||
* This parameter can be: | |||
* @arg RTC_IT_ALRA: Alarm A interrupt | |||
* @retval None | |||
*/ | |||
#define __HAL_RTC_ALARM_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((((__HANDLE__)->Instance->CRH)& ((__INTERRUPT__)))) != RESET)? SET : RESET) | |||
/** | |||
* @brief Get the selected RTC Alarm's flag status. | |||
* @param __HANDLE__: specifies the RTC handle. | |||
* @param __FLAG__: specifies the RTC Alarm Flag sources to be enabled or disabled. | |||
* This parameter can be: | |||
* @arg RTC_FLAG_ALRAF | |||
* @retval None | |||
*/ | |||
#define __HAL_RTC_ALARM_GET_FLAG(__HANDLE__, __FLAG__) (((((__HANDLE__)->Instance->CRL) & (__FLAG__)) != RESET)? SET : RESET) | |||
/** | |||
* @brief Check whether the specified RTC Alarm interrupt has occurred or not. | |||
* @param __HANDLE__: specifies the RTC handle. | |||
* @param __INTERRUPT__: specifies the RTC Alarm interrupt sources to check. | |||
* This parameter can be: | |||
* @arg RTC_IT_ALRA: Alarm A interrupt | |||
* @retval None | |||
*/ | |||
#define __HAL_RTC_ALARM_GET_IT(__HANDLE__, __INTERRUPT__) (((((__HANDLE__)->Instance->CRL) & (__INTERRUPT__)) != RESET)? SET : RESET) | |||
/** | |||
* @brief Clear the RTC Alarm's pending flags. | |||
* @param __HANDLE__: specifies the RTC handle. | |||
* @param __FLAG__: specifies the RTC Alarm Flag sources to be enabled or disabled. | |||
* This parameter can be: | |||
* @arg RTC_FLAG_ALRAF | |||
* @retval None | |||
*/ | |||
#define __HAL_RTC_ALARM_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->CRL) &= ~(__FLAG__) | |||
/** | |||
* @brief Enable interrupt on ALARM Exti Line 17. | |||
* @retval None. | |||
*/ | |||
#define __HAL_RTC_ALARM_EXTI_ENABLE_IT() SET_BIT(EXTI->IMR, RTC_EXTI_LINE_ALARM_EVENT) | |||
/** | |||
* @brief Disable interrupt on ALARM Exti Line 17. | |||
* @retval None. | |||
*/ | |||
#define __HAL_RTC_ALARM_EXTI_DISABLE_IT() CLEAR_BIT(EXTI->IMR, RTC_EXTI_LINE_ALARM_EVENT) | |||
/** | |||
* @brief Enable event on ALARM Exti Line 17. | |||
* @retval None. | |||
*/ | |||
#define __HAL_RTC_ALARM_EXTI_ENABLE_EVENT() SET_BIT(EXTI->EMR, RTC_EXTI_LINE_ALARM_EVENT) | |||
/** | |||
* @brief Disable event on ALARM Exti Line 17. | |||
* @retval None. | |||
*/ | |||
#define __HAL_RTC_ALARM_EXTI_DISABLE_EVENT() CLEAR_BIT(EXTI->EMR, RTC_EXTI_LINE_ALARM_EVENT) | |||
/** | |||
* @brief ALARM EXTI line configuration: set falling edge trigger. | |||
* @retval None. | |||
*/ | |||
#define __HAL_RTC_ALARM_EXTI_ENABLE_FALLING_EDGE() SET_BIT(EXTI->FTSR, RTC_EXTI_LINE_ALARM_EVENT) | |||
/** | |||
* @brief Disable the ALARM Extended Interrupt Falling Trigger. | |||
* @retval None. | |||
*/ | |||
#define __HAL_RTC_ALARM_EXTI_DISABLE_FALLING_EDGE() CLEAR_BIT(EXTI->FTSR, RTC_EXTI_LINE_ALARM_EVENT) | |||
/** | |||
* @brief ALARM EXTI line configuration: set rising edge trigger. | |||
* @retval None. | |||
*/ | |||
#define __HAL_RTC_ALARM_EXTI_ENABLE_RISING_EDGE() SET_BIT(EXTI->RTSR, RTC_EXTI_LINE_ALARM_EVENT) | |||
/** | |||
* @brief Disable the ALARM Extended Interrupt Rising Trigger. | |||
* This parameter can be: | |||
* @retval None. | |||
*/ | |||
#define __HAL_RTC_ALARM_EXTI_DISABLE_RISING_EDGE() CLEAR_BIT(EXTI->RTSR, RTC_EXTI_LINE_ALARM_EVENT) | |||
/** | |||
* @brief ALARM EXTI line configuration: set rising & falling edge trigger. | |||
* @retval None. | |||
*/ | |||
#define __HAL_RTC_ALARM_EXTI_ENABLE_RISING_FALLING_EDGE() \ | |||
do{ \ | |||
__HAL_RTC_ALARM_EXTI_ENABLE_RISING_EDGE(); \ | |||
__HAL_RTC_ALARM_EXTI_ENABLE_FALLING_EDGE(); \ | |||
} while(0U) | |||
/** | |||
* @brief Disable the ALARM Extended Interrupt Rising & Falling Trigger. | |||
* This parameter can be: | |||
* @retval None. | |||
*/ | |||
#define __HAL_RTC_ALARM_EXTI_DISABLE_RISING_FALLING_EDGE() \ | |||
do{ \ | |||
__HAL_RTC_ALARM_EXTI_DISABLE_RISING_EDGE(); \ | |||
__HAL_RTC_ALARM_EXTI_DISABLE_FALLING_EDGE(); \ | |||
} while(0U) | |||
/** | |||
* @brief Check whether the specified ALARM EXTI interrupt flag is set or not. | |||
* @retval EXTI ALARM Line Status. | |||
*/ | |||
#define __HAL_RTC_ALARM_EXTI_GET_FLAG() (EXTI->PR & (RTC_EXTI_LINE_ALARM_EVENT)) | |||
/** | |||
* @brief Clear the ALARM EXTI flag. | |||
* @retval None. | |||
*/ | |||
#define __HAL_RTC_ALARM_EXTI_CLEAR_FLAG() (EXTI->PR = (RTC_EXTI_LINE_ALARM_EVENT)) | |||
/** | |||
* @brief Generate a Software interrupt on selected EXTI line. | |||
* @retval None. | |||
*/ | |||
#define __HAL_RTC_ALARM_EXTI_GENERATE_SWIT() SET_BIT(EXTI->SWIER, RTC_EXTI_LINE_ALARM_EVENT) | |||
/** | |||
* @} | |||
*/ | |||
/* Include RTC HAL Extension module */ | |||
#include "stm32f1xx_hal_rtc_ex.h" | |||
/* Exported functions --------------------------------------------------------*/ | |||
/** @addtogroup RTC_Exported_Functions | |||
* @{ | |||
*/ | |||
/* Initialization and de-initialization functions ****************************/ | |||
/** @addtogroup RTC_Exported_Functions_Group1 | |||
* @{ | |||
*/ | |||
HAL_StatusTypeDef HAL_RTC_Init(RTC_HandleTypeDef *hrtc); | |||
HAL_StatusTypeDef HAL_RTC_DeInit(RTC_HandleTypeDef *hrtc); | |||
void HAL_RTC_MspInit(RTC_HandleTypeDef *hrtc); | |||
void HAL_RTC_MspDeInit(RTC_HandleTypeDef *hrtc); | |||
/* Callbacks Register/UnRegister functions ***********************************/ | |||
#if (USE_HAL_RTC_REGISTER_CALLBACKS == 1) | |||
HAL_StatusTypeDef HAL_RTC_RegisterCallback(RTC_HandleTypeDef *hrtc, HAL_RTC_CallbackIDTypeDef CallbackID, pRTC_CallbackTypeDef pCallback); | |||
HAL_StatusTypeDef HAL_RTC_UnRegisterCallback(RTC_HandleTypeDef *hrtc, HAL_RTC_CallbackIDTypeDef CallbackID); | |||
#endif /* USE_HAL_RTC_REGISTER_CALLBACKS */ | |||
/** | |||
* @} | |||
*/ | |||
/* RTC Time and Date functions ************************************************/ | |||
/** @addtogroup RTC_Exported_Functions_Group2 | |||
* @{ | |||
*/ | |||
HAL_StatusTypeDef HAL_RTC_SetTime(RTC_HandleTypeDef *hrtc, RTC_TimeTypeDef *sTime, uint32_t Format); | |||
HAL_StatusTypeDef HAL_RTC_GetTime(RTC_HandleTypeDef *hrtc, RTC_TimeTypeDef *sTime, uint32_t Format); | |||
HAL_StatusTypeDef HAL_RTC_SetDate(RTC_HandleTypeDef *hrtc, RTC_DateTypeDef *sDate, uint32_t Format); | |||
HAL_StatusTypeDef HAL_RTC_GetDate(RTC_HandleTypeDef *hrtc, RTC_DateTypeDef *sDate, uint32_t Format); | |||
/** | |||
* @} | |||
*/ | |||
/* RTC Alarm functions ********************************************************/ | |||
/** @addtogroup RTC_Exported_Functions_Group3 | |||
* @{ | |||
*/ | |||
HAL_StatusTypeDef HAL_RTC_SetAlarm(RTC_HandleTypeDef *hrtc, RTC_AlarmTypeDef *sAlarm, uint32_t Format); | |||
HAL_StatusTypeDef HAL_RTC_SetAlarm_IT(RTC_HandleTypeDef *hrtc, RTC_AlarmTypeDef *sAlarm, uint32_t Format); | |||
HAL_StatusTypeDef HAL_RTC_DeactivateAlarm(RTC_HandleTypeDef *hrtc, uint32_t Alarm); | |||
HAL_StatusTypeDef HAL_RTC_GetAlarm(RTC_HandleTypeDef *hrtc, RTC_AlarmTypeDef *sAlarm, uint32_t Alarm, uint32_t Format); | |||
void HAL_RTC_AlarmIRQHandler(RTC_HandleTypeDef *hrtc); | |||
HAL_StatusTypeDef HAL_RTC_PollForAlarmAEvent(RTC_HandleTypeDef *hrtc, uint32_t Timeout); | |||
void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc); | |||
/** | |||
* @} | |||
*/ | |||
/* Peripheral State functions *************************************************/ | |||
/** @addtogroup RTC_Exported_Functions_Group4 | |||
* @{ | |||
*/ | |||
HAL_RTCStateTypeDef HAL_RTC_GetState(RTC_HandleTypeDef *hrtc); | |||
/** | |||
* @} | |||
*/ | |||
/* Peripheral Control functions ***********************************************/ | |||
/** @addtogroup RTC_Exported_Functions_Group5 | |||
* @{ | |||
*/ | |||
HAL_StatusTypeDef HAL_RTC_WaitForSynchro(RTC_HandleTypeDef *hrtc); | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
#ifdef __cplusplus | |||
} | |||
#endif | |||
#endif /* __STM32F1xx_HAL_RTC_H */ | |||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@@ -0,0 +1,412 @@ | |||
/** | |||
****************************************************************************** | |||
* @file stm32f1xx_hal_rtc_ex.h | |||
* @author MCD Application Team | |||
* @brief Header file of RTC HAL Extension module. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© Copyright (c) 2016 STMicroelectronics. | |||
* All rights reserved.</center></h2> | |||
* | |||
* This software component is licensed by ST under BSD 3-Clause license, | |||
* the "License"; You may not use this file except in compliance with the | |||
* License. You may obtain a copy of the License at: | |||
* opensource.org/licenses/BSD-3-Clause | |||
* | |||
****************************************************************************** | |||
*/ | |||
/* Define to prevent recursive inclusion -------------------------------------*/ | |||
#ifndef __STM32F1xx_HAL_RTC_EX_H | |||
#define __STM32F1xx_HAL_RTC_EX_H | |||
#ifdef __cplusplus | |||
extern "C" { | |||
#endif | |||
/* Includes ------------------------------------------------------------------*/ | |||
#include "stm32f1xx_hal_def.h" | |||
/** @addtogroup STM32F1xx_HAL_Driver | |||
* @{ | |||
*/ | |||
/** @addtogroup RTCEx | |||
* @{ | |||
*/ | |||
/** @addtogroup RTCEx_Private_Macros | |||
* @{ | |||
*/ | |||
/** @defgroup RTCEx_Alias_For_Legacy Alias define maintained for legacy | |||
* @{ | |||
*/ | |||
#define HAL_RTCEx_TamperTimeStampIRQHandler HAL_RTCEx_TamperIRQHandler | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup RTCEx_IS_RTC_Definitions Private macros to check input parameters | |||
* @{ | |||
*/ | |||
#define IS_RTC_TAMPER(__TAMPER__) ((__TAMPER__) == RTC_TAMPER_1) | |||
#define IS_RTC_TAMPER_TRIGGER(__TRIGGER__) (((__TRIGGER__) == RTC_TAMPERTRIGGER_LOWLEVEL) || \ | |||
((__TRIGGER__) == RTC_TAMPERTRIGGER_HIGHLEVEL)) | |||
#if RTC_BKP_NUMBER > 10U | |||
#define IS_RTC_BKP(BKP) (((BKP) <= (uint32_t)RTC_BKP_DR10) || (((BKP) >= (uint32_t)RTC_BKP_DR11) && ((BKP) <= (uint32_t)RTC_BKP_DR42))) | |||
#else | |||
#define IS_RTC_BKP(BKP) ((BKP) <= (uint32_t)RTC_BKP_NUMBER) | |||
#endif | |||
#define IS_RTC_SMOOTH_CALIB_MINUS(__VALUE__) ((__VALUE__) <= 0x0000007FU) | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Exported types ------------------------------------------------------------*/ | |||
/** @defgroup RTCEx_Exported_Types RTCEx Exported Types | |||
* @{ | |||
*/ | |||
/** | |||
* @brief RTC Tamper structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
uint32_t Tamper; /*!< Specifies the Tamper Pin. | |||
This parameter can be a value of @ref RTCEx_Tamper_Pins_Definitions */ | |||
uint32_t Trigger; /*!< Specifies the Tamper Trigger. | |||
This parameter can be a value of @ref RTCEx_Tamper_Trigger_Definitions */ | |||
} RTC_TamperTypeDef; | |||
/** | |||
* @} | |||
*/ | |||
/* Exported constants --------------------------------------------------------*/ | |||
/** @defgroup RTCEx_Exported_Constants RTCEx Exported Constants | |||
* @{ | |||
*/ | |||
/** @defgroup RTCEx_Tamper_Pins_Definitions Tamper Pins Definitions | |||
* @{ | |||
*/ | |||
#define RTC_TAMPER_1 BKP_CR_TPE /*!< Select tamper to be enabled (mainly for legacy purposes) */ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup RTCEx_Tamper_Trigger_Definitions Tamper Trigger Definitions | |||
* @{ | |||
*/ | |||
#define RTC_TAMPERTRIGGER_LOWLEVEL BKP_CR_TPAL /*!< A high level on the TAMPER pin resets all data backup registers (if TPE bit is set) */ | |||
#define RTC_TAMPERTRIGGER_HIGHLEVEL 0x00000000U /*!< A low level on the TAMPER pin resets all data backup registers (if TPE bit is set) */ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup RTCEx_Backup_Registers_Definitions Backup Registers Definitions | |||
* @{ | |||
*/ | |||
#if RTC_BKP_NUMBER > 0U | |||
#define RTC_BKP_DR1 0x00000001U | |||
#define RTC_BKP_DR2 0x00000002U | |||
#define RTC_BKP_DR3 0x00000003U | |||
#define RTC_BKP_DR4 0x00000004U | |||
#define RTC_BKP_DR5 0x00000005U | |||
#define RTC_BKP_DR6 0x00000006U | |||
#define RTC_BKP_DR7 0x00000007U | |||
#define RTC_BKP_DR8 0x00000008U | |||
#define RTC_BKP_DR9 0x00000009U | |||
#define RTC_BKP_DR10 0x0000000AU | |||
#endif /* RTC_BKP_NUMBER > 0 */ | |||
#if RTC_BKP_NUMBER > 10U | |||
#define RTC_BKP_DR11 0x00000010U | |||
#define RTC_BKP_DR12 0x00000011U | |||
#define RTC_BKP_DR13 0x00000012U | |||
#define RTC_BKP_DR14 0x00000013U | |||
#define RTC_BKP_DR15 0x00000014U | |||
#define RTC_BKP_DR16 0x00000015U | |||
#define RTC_BKP_DR17 0x00000016U | |||
#define RTC_BKP_DR18 0x00000017U | |||
#define RTC_BKP_DR19 0x00000018U | |||
#define RTC_BKP_DR20 0x00000019U | |||
#define RTC_BKP_DR21 0x0000001AU | |||
#define RTC_BKP_DR22 0x0000001BU | |||
#define RTC_BKP_DR23 0x0000001CU | |||
#define RTC_BKP_DR24 0x0000001DU | |||
#define RTC_BKP_DR25 0x0000001EU | |||
#define RTC_BKP_DR26 0x0000001FU | |||
#define RTC_BKP_DR27 0x00000020U | |||
#define RTC_BKP_DR28 0x00000021U | |||
#define RTC_BKP_DR29 0x00000022U | |||
#define RTC_BKP_DR30 0x00000023U | |||
#define RTC_BKP_DR31 0x00000024U | |||
#define RTC_BKP_DR32 0x00000025U | |||
#define RTC_BKP_DR33 0x00000026U | |||
#define RTC_BKP_DR34 0x00000027U | |||
#define RTC_BKP_DR35 0x00000028U | |||
#define RTC_BKP_DR36 0x00000029U | |||
#define RTC_BKP_DR37 0x0000002AU | |||
#define RTC_BKP_DR38 0x0000002BU | |||
#define RTC_BKP_DR39 0x0000002CU | |||
#define RTC_BKP_DR40 0x0000002DU | |||
#define RTC_BKP_DR41 0x0000002EU | |||
#define RTC_BKP_DR42 0x0000002FU | |||
#endif /* RTC_BKP_NUMBER > 10 */ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Exported macro ------------------------------------------------------------*/ | |||
/** @defgroup RTCEx_Exported_Macros RTCEx Exported Macros | |||
* @{ | |||
*/ | |||
/** | |||
* @brief Enable the RTC Tamper interrupt. | |||
* @param __HANDLE__: specifies the RTC handle. | |||
* @param __INTERRUPT__: specifies the RTC Tamper interrupt sources to be enabled | |||
* This parameter can be any combination of the following values: | |||
* @arg RTC_IT_TAMP1: Tamper A interrupt | |||
* @retval None | |||
*/ | |||
#define __HAL_RTC_TAMPER_ENABLE_IT(__HANDLE__, __INTERRUPT__) SET_BIT(BKP->CSR, (__INTERRUPT__)) | |||
/** | |||
* @brief Disable the RTC Tamper interrupt. | |||
* @param __HANDLE__: specifies the RTC handle. | |||
* @param __INTERRUPT__: specifies the RTC Tamper interrupt sources to be disabled. | |||
* This parameter can be any combination of the following values: | |||
* @arg RTC_IT_TAMP1: Tamper A interrupt | |||
* @retval None | |||
*/ | |||
#define __HAL_RTC_TAMPER_DISABLE_IT(__HANDLE__, __INTERRUPT__) CLEAR_BIT(BKP->CSR, (__INTERRUPT__)) | |||
/** | |||
* @brief Check whether the specified RTC Tamper interrupt has been enabled or not. | |||
* @param __HANDLE__: specifies the RTC handle. | |||
* @param __INTERRUPT__: specifies the RTC Tamper interrupt sources to be checked. | |||
* This parameter can be: | |||
* @arg RTC_IT_TAMP1 | |||
* @retval None | |||
*/ | |||
#define __HAL_RTC_TAMPER_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((BKP->CSR) & ((__INTERRUPT__))) != RESET)? SET : RESET) | |||
/** | |||
* @brief Get the selected RTC Tamper's flag status. | |||
* @param __HANDLE__: specifies the RTC handle. | |||
* @param __FLAG__: specifies the RTC Tamper Flag sources to be enabled or disabled. | |||
* This parameter can be: | |||
* @arg RTC_FLAG_TAMP1F | |||
* @retval None | |||
*/ | |||
#define __HAL_RTC_TAMPER_GET_FLAG(__HANDLE__, __FLAG__) ((((BKP->CSR) & (__FLAG__)) != RESET)? SET : RESET) | |||
/** | |||
* @brief Get the selected RTC Tamper's flag status. | |||
* @param __HANDLE__: specifies the RTC handle. | |||
* @param __INTERRUPT__: specifies the RTC Tamper interrupt sources to be checked. | |||
* This parameter can be: | |||
* @arg RTC_IT_TAMP1 | |||
* @retval None | |||
*/ | |||
#define __HAL_RTC_TAMPER_GET_IT(__HANDLE__, __INTERRUPT__) ((((BKP->CSR) & (BKP_CSR_TEF)) != RESET)? SET : RESET) | |||
/** | |||
* @brief Clear the RTC Tamper's pending flags. | |||
* @param __HANDLE__: specifies the RTC handle. | |||
* @param __FLAG__: specifies the RTC Tamper Flag sources to be enabled or disabled. | |||
* This parameter can be: | |||
* @arg RTC_FLAG_TAMP1F | |||
* @retval None | |||
*/ | |||
#define __HAL_RTC_TAMPER_CLEAR_FLAG(__HANDLE__, __FLAG__) SET_BIT(BKP->CSR, BKP_CSR_CTE | BKP_CSR_CTI) | |||
/** | |||
* @brief Enable the RTC Second interrupt. | |||
* @param __HANDLE__: specifies the RTC handle. | |||
* @param __INTERRUPT__: specifies the RTC Second interrupt sources to be enabled | |||
* This parameter can be any combination of the following values: | |||
* @arg RTC_IT_SEC: Second A interrupt | |||
* @retval None | |||
*/ | |||
#define __HAL_RTC_SECOND_ENABLE_IT(__HANDLE__, __INTERRUPT__) SET_BIT((__HANDLE__)->Instance->CRH, (__INTERRUPT__)) | |||
/** | |||
* @brief Disable the RTC Second interrupt. | |||
* @param __HANDLE__: specifies the RTC handle. | |||
* @param __INTERRUPT__: specifies the RTC Second interrupt sources to be disabled. | |||
* This parameter can be any combination of the following values: | |||
* @arg RTC_IT_SEC: Second A interrupt | |||
* @retval None | |||
*/ | |||
#define __HAL_RTC_SECOND_DISABLE_IT(__HANDLE__, __INTERRUPT__) CLEAR_BIT((__HANDLE__)->Instance->CRH, (__INTERRUPT__)) | |||
/** | |||
* @brief Check whether the specified RTC Second interrupt has occurred or not. | |||
* @param __HANDLE__: specifies the RTC handle. | |||
* @param __INTERRUPT__: specifies the RTC Second interrupt sources to be enabled or disabled. | |||
* This parameter can be: | |||
* @arg RTC_IT_SEC: Second A interrupt | |||
* @retval None | |||
*/ | |||
#define __HAL_RTC_SECOND_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((((__HANDLE__)->Instance->CRH)& ((__INTERRUPT__)))) != RESET)? SET : RESET) | |||
/** | |||
* @brief Get the selected RTC Second's flag status. | |||
* @param __HANDLE__: specifies the RTC handle. | |||
* @param __FLAG__: specifies the RTC Second Flag sources to be enabled or disabled. | |||
* This parameter can be: | |||
* @arg RTC_FLAG_SEC | |||
* @retval None | |||
*/ | |||
#define __HAL_RTC_SECOND_GET_FLAG(__HANDLE__, __FLAG__) (((((__HANDLE__)->Instance->CRL) & (__FLAG__)) != RESET)? SET : RESET) | |||
/** | |||
* @brief Clear the RTC Second's pending flags. | |||
* @param __HANDLE__: specifies the RTC handle. | |||
* @param __FLAG__: specifies the RTC Second Flag sources to be enabled or disabled. | |||
* This parameter can be: | |||
* @arg RTC_FLAG_SEC | |||
* @retval None | |||
*/ | |||
#define __HAL_RTC_SECOND_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->CRL) &= ~(__FLAG__) | |||
/** | |||
* @brief Enable the RTC Overflow interrupt. | |||
* @param __HANDLE__: specifies the RTC handle. | |||
* @param __INTERRUPT__: specifies the RTC Overflow interrupt sources to be enabled | |||
* This parameter can be any combination of the following values: | |||
* @arg RTC_IT_OW: Overflow A interrupt | |||
* @retval None | |||
*/ | |||
#define __HAL_RTC_OVERFLOW_ENABLE_IT(__HANDLE__, __INTERRUPT__) SET_BIT((__HANDLE__)->Instance->CRH, (__INTERRUPT__)) | |||
/** | |||
* @brief Disable the RTC Overflow interrupt. | |||
* @param __HANDLE__: specifies the RTC handle. | |||
* @param __INTERRUPT__: specifies the RTC Overflow interrupt sources to be disabled. | |||
* This parameter can be any combination of the following values: | |||
* @arg RTC_IT_OW: Overflow A interrupt | |||
* @retval None | |||
*/ | |||
#define __HAL_RTC_OVERFLOW_DISABLE_IT(__HANDLE__, __INTERRUPT__) CLEAR_BIT((__HANDLE__)->Instance->CRH, (__INTERRUPT__)) | |||
/** | |||
* @brief Check whether the specified RTC Overflow interrupt has occurred or not. | |||
* @param __HANDLE__: specifies the RTC handle. | |||
* @param __INTERRUPT__: specifies the RTC Overflow interrupt sources to be enabled or disabled. | |||
* This parameter can be: | |||
* @arg RTC_IT_OW: Overflow A interrupt | |||
* @retval None | |||
*/ | |||
#define __HAL_RTC_OVERFLOW_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((((__HANDLE__)->Instance->CRH)& ((__INTERRUPT__))) ) != RESET)? SET : RESET) | |||
/** | |||
* @brief Get the selected RTC Overflow's flag status. | |||
* @param __HANDLE__: specifies the RTC handle. | |||
* @param __FLAG__: specifies the RTC Overflow Flag sources to be enabled or disabled. | |||
* This parameter can be: | |||
* @arg RTC_FLAG_OW | |||
* @retval None | |||
*/ | |||
#define __HAL_RTC_OVERFLOW_GET_FLAG(__HANDLE__, __FLAG__) (((((__HANDLE__)->Instance->CRL) & (__FLAG__)) != RESET)? SET : RESET) | |||
/** | |||
* @brief Clear the RTC Overflow's pending flags. | |||
* @param __HANDLE__: specifies the RTC handle. | |||
* @param __FLAG__: specifies the RTC Overflow Flag sources to be enabled or disabled. | |||
* This parameter can be: | |||
* @arg RTC_FLAG_OW | |||
* @retval None | |||
*/ | |||
#define __HAL_RTC_OVERFLOW_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->CRL) = ~(__FLAG__) | |||
/** | |||
* @} | |||
*/ | |||
/* Exported functions --------------------------------------------------------*/ | |||
/** @addtogroup RTCEx_Exported_Functions | |||
* @{ | |||
*/ | |||
/* RTC Tamper functions *****************************************/ | |||
/** @addtogroup RTCEx_Exported_Functions_Group1 | |||
* @{ | |||
*/ | |||
HAL_StatusTypeDef HAL_RTCEx_SetTamper(RTC_HandleTypeDef *hrtc, RTC_TamperTypeDef *sTamper); | |||
HAL_StatusTypeDef HAL_RTCEx_SetTamper_IT(RTC_HandleTypeDef *hrtc, RTC_TamperTypeDef *sTamper); | |||
HAL_StatusTypeDef HAL_RTCEx_DeactivateTamper(RTC_HandleTypeDef *hrtc, uint32_t Tamper); | |||
void HAL_RTCEx_TamperIRQHandler(RTC_HandleTypeDef *hrtc); | |||
void HAL_RTCEx_Tamper1EventCallback(RTC_HandleTypeDef *hrtc); | |||
HAL_StatusTypeDef HAL_RTCEx_PollForTamper1Event(RTC_HandleTypeDef *hrtc, uint32_t Timeout); | |||
/** | |||
* @} | |||
*/ | |||
/* RTC Second functions *****************************************/ | |||
/** @addtogroup RTCEx_Exported_Functions_Group2 | |||
* @{ | |||
*/ | |||
HAL_StatusTypeDef HAL_RTCEx_SetSecond_IT(RTC_HandleTypeDef *hrtc); | |||
HAL_StatusTypeDef HAL_RTCEx_DeactivateSecond(RTC_HandleTypeDef *hrtc); | |||
void HAL_RTCEx_RTCIRQHandler(RTC_HandleTypeDef *hrtc); | |||
void HAL_RTCEx_RTCEventCallback(RTC_HandleTypeDef *hrtc); | |||
void HAL_RTCEx_RTCEventErrorCallback(RTC_HandleTypeDef *hrtc); | |||
/** | |||
* @} | |||
*/ | |||
/* Extension Control functions ************************************************/ | |||
/** @addtogroup RTCEx_Exported_Functions_Group3 | |||
* @{ | |||
*/ | |||
void HAL_RTCEx_BKUPWrite(RTC_HandleTypeDef *hrtc, uint32_t BackupRegister, uint32_t Data); | |||
uint32_t HAL_RTCEx_BKUPRead(RTC_HandleTypeDef *hrtc, uint32_t BackupRegister); | |||
HAL_StatusTypeDef HAL_RTCEx_SetSmoothCalib(RTC_HandleTypeDef *hrtc, uint32_t SmoothCalibPeriod, uint32_t SmoothCalibPlusPulses, uint32_t SmouthCalibMinusPulsesValue); | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
#ifdef __cplusplus | |||
} | |||
#endif | |||
#endif /* __STM32F1xx_HAL_RTC_EX_H */ | |||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@@ -0,0 +1,887 @@ | |||
/** | |||
****************************************************************************** | |||
* @file stm32f1xx_hal_uart.h | |||
* @author MCD Application Team | |||
* @brief Header file of UART HAL module. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© Copyright (c) 2016 STMicroelectronics. | |||
* All rights reserved.</center></h2> | |||
* | |||
* This software component is licensed by ST under BSD 3-Clause license, | |||
* the "License"; You may not use this file except in compliance with the | |||
* License. You may obtain a copy of the License at: | |||
* opensource.org/licenses/BSD-3-Clause | |||
* | |||
****************************************************************************** | |||
*/ | |||
/* Define to prevent recursive inclusion -------------------------------------*/ | |||
#ifndef __STM32F1xx_HAL_UART_H | |||
#define __STM32F1xx_HAL_UART_H | |||
#ifdef __cplusplus | |||
extern "C" { | |||
#endif | |||
/* Includes ------------------------------------------------------------------*/ | |||
#include "stm32f1xx_hal_def.h" | |||
/** @addtogroup STM32F1xx_HAL_Driver | |||
* @{ | |||
*/ | |||
/** @addtogroup UART | |||
* @{ | |||
*/ | |||
/* Exported types ------------------------------------------------------------*/ | |||
/** @defgroup UART_Exported_Types UART Exported Types | |||
* @{ | |||
*/ | |||
/** | |||
* @brief UART Init Structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
uint32_t BaudRate; /*!< This member configures the UART communication baud rate. | |||
The baud rate is computed using the following formula: | |||
- IntegerDivider = ((PCLKx) / (16 * (huart->Init.BaudRate))) | |||
- FractionalDivider = ((IntegerDivider - ((uint32_t) IntegerDivider)) * 16) + 0.5 */ | |||
uint32_t WordLength; /*!< Specifies the number of data bits transmitted or received in a frame. | |||
This parameter can be a value of @ref UART_Word_Length */ | |||
uint32_t StopBits; /*!< Specifies the number of stop bits transmitted. | |||
This parameter can be a value of @ref UART_Stop_Bits */ | |||
uint32_t Parity; /*!< Specifies the parity mode. | |||
This parameter can be a value of @ref UART_Parity | |||
@note When parity is enabled, the computed parity is inserted | |||
at the MSB position of the transmitted data (9th bit when | |||
the word length is set to 9 data bits; 8th bit when the | |||
word length is set to 8 data bits). */ | |||
uint32_t Mode; /*!< Specifies whether the Receive or Transmit mode is enabled or disabled. | |||
This parameter can be a value of @ref UART_Mode */ | |||
uint32_t HwFlowCtl; /*!< Specifies whether the hardware flow control mode is enabled or disabled. | |||
This parameter can be a value of @ref UART_Hardware_Flow_Control */ | |||
uint32_t OverSampling; /*!< Specifies whether the Over sampling 8 is enabled or disabled, to achieve higher speed (up to fPCLK/8). | |||
This parameter can be a value of @ref UART_Over_Sampling. This feature is only available | |||
on STM32F100xx family, so OverSampling parameter should always be set to 16. */ | |||
} UART_InitTypeDef; | |||
/** | |||
* @brief HAL UART State structures definition | |||
* @note HAL UART State value is a combination of 2 different substates: gState and RxState. | |||
* - gState contains UART state information related to global Handle management | |||
* and also information related to Tx operations. | |||
* gState value coding follow below described bitmap : | |||
* b7-b6 Error information | |||
* 00 : No Error | |||
* 01 : (Not Used) | |||
* 10 : Timeout | |||
* 11 : Error | |||
* b5 Peripheral initialization status | |||
* 0 : Reset (Peripheral not initialized) | |||
* 1 : Init done (Peripheral initialized. HAL UART Init function already called) | |||
* b4-b3 (not used) | |||
* xx : Should be set to 00 | |||
* b2 Intrinsic process state | |||
* 0 : Ready | |||
* 1 : Busy (Peripheral busy with some configuration or internal operations) | |||
* b1 (not used) | |||
* x : Should be set to 0 | |||
* b0 Tx state | |||
* 0 : Ready (no Tx operation ongoing) | |||
* 1 : Busy (Tx operation ongoing) | |||
* - RxState contains information related to Rx operations. | |||
* RxState value coding follow below described bitmap : | |||
* b7-b6 (not used) | |||
* xx : Should be set to 00 | |||
* b5 Peripheral initialization status | |||
* 0 : Reset (Peripheral not initialized) | |||
* 1 : Init done (Peripheral initialized) | |||
* b4-b2 (not used) | |||
* xxx : Should be set to 000 | |||
* b1 Rx state | |||
* 0 : Ready (no Rx operation ongoing) | |||
* 1 : Busy (Rx operation ongoing) | |||
* b0 (not used) | |||
* x : Should be set to 0. | |||
*/ | |||
typedef enum | |||
{ | |||
HAL_UART_STATE_RESET = 0x00U, /*!< Peripheral is not yet Initialized | |||
Value is allowed for gState and RxState */ | |||
HAL_UART_STATE_READY = 0x20U, /*!< Peripheral Initialized and ready for use | |||
Value is allowed for gState and RxState */ | |||
HAL_UART_STATE_BUSY = 0x24U, /*!< an internal process is ongoing | |||
Value is allowed for gState only */ | |||
HAL_UART_STATE_BUSY_TX = 0x21U, /*!< Data Transmission process is ongoing | |||
Value is allowed for gState only */ | |||
HAL_UART_STATE_BUSY_RX = 0x22U, /*!< Data Reception process is ongoing | |||
Value is allowed for RxState only */ | |||
HAL_UART_STATE_BUSY_TX_RX = 0x23U, /*!< Data Transmission and Reception process is ongoing | |||
Not to be used for neither gState nor RxState. | |||
Value is result of combination (Or) between gState and RxState values */ | |||
HAL_UART_STATE_TIMEOUT = 0xA0U, /*!< Timeout state | |||
Value is allowed for gState only */ | |||
HAL_UART_STATE_ERROR = 0xE0U /*!< Error | |||
Value is allowed for gState only */ | |||
} HAL_UART_StateTypeDef; | |||
/** | |||
* @brief HAL UART Reception type definition | |||
* @note HAL UART Reception type value aims to identify which type of Reception is ongoing. | |||
* It is expected to admit following values : | |||
* HAL_UART_RECEPTION_STANDARD = 0x00U, | |||
* HAL_UART_RECEPTION_TOIDLE = 0x01U, | |||
*/ | |||
typedef uint32_t HAL_UART_RxTypeTypeDef; | |||
/** | |||
* @brief UART handle Structure definition | |||
*/ | |||
typedef struct __UART_HandleTypeDef | |||
{ | |||
USART_TypeDef *Instance; /*!< UART registers base address */ | |||
UART_InitTypeDef Init; /*!< UART communication parameters */ | |||
uint8_t *pTxBuffPtr; /*!< Pointer to UART Tx transfer Buffer */ | |||
uint16_t TxXferSize; /*!< UART Tx Transfer size */ | |||
__IO uint16_t TxXferCount; /*!< UART Tx Transfer Counter */ | |||
uint8_t *pRxBuffPtr; /*!< Pointer to UART Rx transfer Buffer */ | |||
uint16_t RxXferSize; /*!< UART Rx Transfer size */ | |||
__IO uint16_t RxXferCount; /*!< UART Rx Transfer Counter */ | |||
__IO HAL_UART_RxTypeTypeDef ReceptionType; /*!< Type of ongoing reception */ | |||
DMA_HandleTypeDef *hdmatx; /*!< UART Tx DMA Handle parameters */ | |||
DMA_HandleTypeDef *hdmarx; /*!< UART Rx DMA Handle parameters */ | |||
HAL_LockTypeDef Lock; /*!< Locking object */ | |||
__IO HAL_UART_StateTypeDef gState; /*!< UART state information related to global Handle management | |||
and also related to Tx operations. | |||
This parameter can be a value of @ref HAL_UART_StateTypeDef */ | |||
__IO HAL_UART_StateTypeDef RxState; /*!< UART state information related to Rx operations. | |||
This parameter can be a value of @ref HAL_UART_StateTypeDef */ | |||
__IO uint32_t ErrorCode; /*!< UART Error code */ | |||
#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) | |||
void (* TxHalfCpltCallback)(struct __UART_HandleTypeDef *huart); /*!< UART Tx Half Complete Callback */ | |||
void (* TxCpltCallback)(struct __UART_HandleTypeDef *huart); /*!< UART Tx Complete Callback */ | |||
void (* RxHalfCpltCallback)(struct __UART_HandleTypeDef *huart); /*!< UART Rx Half Complete Callback */ | |||
void (* RxCpltCallback)(struct __UART_HandleTypeDef *huart); /*!< UART Rx Complete Callback */ | |||
void (* ErrorCallback)(struct __UART_HandleTypeDef *huart); /*!< UART Error Callback */ | |||
void (* AbortCpltCallback)(struct __UART_HandleTypeDef *huart); /*!< UART Abort Complete Callback */ | |||
void (* AbortTransmitCpltCallback)(struct __UART_HandleTypeDef *huart); /*!< UART Abort Transmit Complete Callback */ | |||
void (* AbortReceiveCpltCallback)(struct __UART_HandleTypeDef *huart); /*!< UART Abort Receive Complete Callback */ | |||
void (* WakeupCallback)(struct __UART_HandleTypeDef *huart); /*!< UART Wakeup Callback */ | |||
void (* RxEventCallback)(struct __UART_HandleTypeDef *huart, uint16_t Pos); /*!< UART Reception Event Callback */ | |||
void (* MspInitCallback)(struct __UART_HandleTypeDef *huart); /*!< UART Msp Init callback */ | |||
void (* MspDeInitCallback)(struct __UART_HandleTypeDef *huart); /*!< UART Msp DeInit callback */ | |||
#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ | |||
} UART_HandleTypeDef; | |||
#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) | |||
/** | |||
* @brief HAL UART Callback ID enumeration definition | |||
*/ | |||
typedef enum | |||
{ | |||
HAL_UART_TX_HALFCOMPLETE_CB_ID = 0x00U, /*!< UART Tx Half Complete Callback ID */ | |||
HAL_UART_TX_COMPLETE_CB_ID = 0x01U, /*!< UART Tx Complete Callback ID */ | |||
HAL_UART_RX_HALFCOMPLETE_CB_ID = 0x02U, /*!< UART Rx Half Complete Callback ID */ | |||
HAL_UART_RX_COMPLETE_CB_ID = 0x03U, /*!< UART Rx Complete Callback ID */ | |||
HAL_UART_ERROR_CB_ID = 0x04U, /*!< UART Error Callback ID */ | |||
HAL_UART_ABORT_COMPLETE_CB_ID = 0x05U, /*!< UART Abort Complete Callback ID */ | |||
HAL_UART_ABORT_TRANSMIT_COMPLETE_CB_ID = 0x06U, /*!< UART Abort Transmit Complete Callback ID */ | |||
HAL_UART_ABORT_RECEIVE_COMPLETE_CB_ID = 0x07U, /*!< UART Abort Receive Complete Callback ID */ | |||
HAL_UART_WAKEUP_CB_ID = 0x08U, /*!< UART Wakeup Callback ID */ | |||
HAL_UART_MSPINIT_CB_ID = 0x0BU, /*!< UART MspInit callback ID */ | |||
HAL_UART_MSPDEINIT_CB_ID = 0x0CU /*!< UART MspDeInit callback ID */ | |||
} HAL_UART_CallbackIDTypeDef; | |||
/** | |||
* @brief HAL UART Callback pointer definition | |||
*/ | |||
typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer to an UART callback function */ | |||
typedef void (*pUART_RxEventCallbackTypeDef)(struct __UART_HandleTypeDef *huart, uint16_t Pos); /*!< pointer to a UART Rx Event specific callback function */ | |||
#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ | |||
/** | |||
* @} | |||
*/ | |||
/* Exported constants --------------------------------------------------------*/ | |||
/** @defgroup UART_Exported_Constants UART Exported Constants | |||
* @{ | |||
*/ | |||
/** @defgroup UART_Error_Code UART Error Code | |||
* @{ | |||
*/ | |||
#define HAL_UART_ERROR_NONE 0x00000000U /*!< No error */ | |||
#define HAL_UART_ERROR_PE 0x00000001U /*!< Parity error */ | |||
#define HAL_UART_ERROR_NE 0x00000002U /*!< Noise error */ | |||
#define HAL_UART_ERROR_FE 0x00000004U /*!< Frame error */ | |||
#define HAL_UART_ERROR_ORE 0x00000008U /*!< Overrun error */ | |||
#define HAL_UART_ERROR_DMA 0x00000010U /*!< DMA transfer error */ | |||
#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) | |||
#define HAL_UART_ERROR_INVALID_CALLBACK 0x00000020U /*!< Invalid Callback error */ | |||
#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup UART_Word_Length UART Word Length | |||
* @{ | |||
*/ | |||
#define UART_WORDLENGTH_8B 0x00000000U | |||
#define UART_WORDLENGTH_9B ((uint32_t)USART_CR1_M) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup UART_Stop_Bits UART Number of Stop Bits | |||
* @{ | |||
*/ | |||
#define UART_STOPBITS_1 0x00000000U | |||
#define UART_STOPBITS_2 ((uint32_t)USART_CR2_STOP_1) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup UART_Parity UART Parity | |||
* @{ | |||
*/ | |||
#define UART_PARITY_NONE 0x00000000U | |||
#define UART_PARITY_EVEN ((uint32_t)USART_CR1_PCE) | |||
#define UART_PARITY_ODD ((uint32_t)(USART_CR1_PCE | USART_CR1_PS)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup UART_Hardware_Flow_Control UART Hardware Flow Control | |||
* @{ | |||
*/ | |||
#define UART_HWCONTROL_NONE 0x00000000U | |||
#define UART_HWCONTROL_RTS ((uint32_t)USART_CR3_RTSE) | |||
#define UART_HWCONTROL_CTS ((uint32_t)USART_CR3_CTSE) | |||
#define UART_HWCONTROL_RTS_CTS ((uint32_t)(USART_CR3_RTSE | USART_CR3_CTSE)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup UART_Mode UART Transfer Mode | |||
* @{ | |||
*/ | |||
#define UART_MODE_RX ((uint32_t)USART_CR1_RE) | |||
#define UART_MODE_TX ((uint32_t)USART_CR1_TE) | |||
#define UART_MODE_TX_RX ((uint32_t)(USART_CR1_TE | USART_CR1_RE)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup UART_State UART State | |||
* @{ | |||
*/ | |||
#define UART_STATE_DISABLE 0x00000000U | |||
#define UART_STATE_ENABLE ((uint32_t)USART_CR1_UE) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup UART_Over_Sampling UART Over Sampling | |||
* @{ | |||
*/ | |||
#define UART_OVERSAMPLING_16 0x00000000U | |||
#if defined(USART_CR1_OVER8) | |||
#define UART_OVERSAMPLING_8 ((uint32_t)USART_CR1_OVER8) | |||
#endif /* USART_CR1_OVER8 */ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup UART_LIN_Break_Detection_Length UART LIN Break Detection Length | |||
* @{ | |||
*/ | |||
#define UART_LINBREAKDETECTLENGTH_10B 0x00000000U | |||
#define UART_LINBREAKDETECTLENGTH_11B ((uint32_t)USART_CR2_LBDL) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup UART_WakeUp_functions UART Wakeup Functions | |||
* @{ | |||
*/ | |||
#define UART_WAKEUPMETHOD_IDLELINE 0x00000000U | |||
#define UART_WAKEUPMETHOD_ADDRESSMARK ((uint32_t)USART_CR1_WAKE) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup UART_Flags UART FLags | |||
* Elements values convention: 0xXXXX | |||
* - 0xXXXX : Flag mask in the SR register | |||
* @{ | |||
*/ | |||
#define UART_FLAG_CTS ((uint32_t)USART_SR_CTS) | |||
#define UART_FLAG_LBD ((uint32_t)USART_SR_LBD) | |||
#define UART_FLAG_TXE ((uint32_t)USART_SR_TXE) | |||
#define UART_FLAG_TC ((uint32_t)USART_SR_TC) | |||
#define UART_FLAG_RXNE ((uint32_t)USART_SR_RXNE) | |||
#define UART_FLAG_IDLE ((uint32_t)USART_SR_IDLE) | |||
#define UART_FLAG_ORE ((uint32_t)USART_SR_ORE) | |||
#define UART_FLAG_NE ((uint32_t)USART_SR_NE) | |||
#define UART_FLAG_FE ((uint32_t)USART_SR_FE) | |||
#define UART_FLAG_PE ((uint32_t)USART_SR_PE) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup UART_Interrupt_definition UART Interrupt Definitions | |||
* Elements values convention: 0xY000XXXX | |||
* - XXXX : Interrupt mask (16 bits) in the Y register | |||
* - Y : Interrupt source register (2bits) | |||
* - 0001: CR1 register | |||
* - 0010: CR2 register | |||
* - 0011: CR3 register | |||
* @{ | |||
*/ | |||
#define UART_IT_PE ((uint32_t)(UART_CR1_REG_INDEX << 28U | USART_CR1_PEIE)) | |||
#define UART_IT_TXE ((uint32_t)(UART_CR1_REG_INDEX << 28U | USART_CR1_TXEIE)) | |||
#define UART_IT_TC ((uint32_t)(UART_CR1_REG_INDEX << 28U | USART_CR1_TCIE)) | |||
#define UART_IT_RXNE ((uint32_t)(UART_CR1_REG_INDEX << 28U | USART_CR1_RXNEIE)) | |||
#define UART_IT_IDLE ((uint32_t)(UART_CR1_REG_INDEX << 28U | USART_CR1_IDLEIE)) | |||
#define UART_IT_LBD ((uint32_t)(UART_CR2_REG_INDEX << 28U | USART_CR2_LBDIE)) | |||
#define UART_IT_CTS ((uint32_t)(UART_CR3_REG_INDEX << 28U | USART_CR3_CTSIE)) | |||
#define UART_IT_ERR ((uint32_t)(UART_CR3_REG_INDEX << 28U | USART_CR3_EIE)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup UART_RECEPTION_TYPE_Values UART Reception type values | |||
* @{ | |||
*/ | |||
#define HAL_UART_RECEPTION_STANDARD (0x00000000U) /*!< Standard reception */ | |||
#define HAL_UART_RECEPTION_TOIDLE (0x00000001U) /*!< Reception till completion or IDLE event */ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Exported macro ------------------------------------------------------------*/ | |||
/** @defgroup UART_Exported_Macros UART Exported Macros | |||
* @{ | |||
*/ | |||
/** @brief Reset UART handle gstate & RxState | |||
* @param __HANDLE__ specifies the UART Handle. | |||
* UART Handle selects the USARTx or UARTy peripheral | |||
* (USART,UART availability and x,y values depending on device). | |||
* @retval None | |||
*/ | |||
#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) | |||
#define __HAL_UART_RESET_HANDLE_STATE(__HANDLE__) do{ \ | |||
(__HANDLE__)->gState = HAL_UART_STATE_RESET; \ | |||
(__HANDLE__)->RxState = HAL_UART_STATE_RESET; \ | |||
(__HANDLE__)->MspInitCallback = NULL; \ | |||
(__HANDLE__)->MspDeInitCallback = NULL; \ | |||
} while(0U) | |||
#else | |||
#define __HAL_UART_RESET_HANDLE_STATE(__HANDLE__) do{ \ | |||
(__HANDLE__)->gState = HAL_UART_STATE_RESET; \ | |||
(__HANDLE__)->RxState = HAL_UART_STATE_RESET; \ | |||
} while(0U) | |||
#endif /*USE_HAL_UART_REGISTER_CALLBACKS */ | |||
/** @brief Flushes the UART DR register | |||
* @param __HANDLE__ specifies the UART Handle. | |||
* UART Handle selects the USARTx or UARTy peripheral | |||
* (USART,UART availability and x,y values depending on device). | |||
*/ | |||
#define __HAL_UART_FLUSH_DRREGISTER(__HANDLE__) ((__HANDLE__)->Instance->DR) | |||
/** @brief Checks whether the specified UART flag is set or not. | |||
* @param __HANDLE__ specifies the UART Handle. | |||
* UART Handle selects the USARTx or UARTy peripheral | |||
* (USART,UART availability and x,y values depending on device). | |||
* @param __FLAG__ specifies the flag to check. | |||
* This parameter can be one of the following values: | |||
* @arg UART_FLAG_CTS: CTS Change flag (not available for UART4 and UART5) | |||
* @arg UART_FLAG_LBD: LIN Break detection flag | |||
* @arg UART_FLAG_TXE: Transmit data register empty flag | |||
* @arg UART_FLAG_TC: Transmission Complete flag | |||
* @arg UART_FLAG_RXNE: Receive data register not empty flag | |||
* @arg UART_FLAG_IDLE: Idle Line detection flag | |||
* @arg UART_FLAG_ORE: Overrun Error flag | |||
* @arg UART_FLAG_NE: Noise Error flag | |||
* @arg UART_FLAG_FE: Framing Error flag | |||
* @arg UART_FLAG_PE: Parity Error flag | |||
* @retval The new state of __FLAG__ (TRUE or FALSE). | |||
*/ | |||
#define __HAL_UART_GET_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->SR & (__FLAG__)) == (__FLAG__)) | |||
/** @brief Clears the specified UART pending flag. | |||
* @param __HANDLE__ specifies the UART Handle. | |||
* UART Handle selects the USARTx or UARTy peripheral | |||
* (USART,UART availability and x,y values depending on device). | |||
* @param __FLAG__ specifies the flag to check. | |||
* This parameter can be any combination of the following values: | |||
* @arg UART_FLAG_CTS: CTS Change flag (not available for UART4 and UART5). | |||
* @arg UART_FLAG_LBD: LIN Break detection flag. | |||
* @arg UART_FLAG_TC: Transmission Complete flag. | |||
* @arg UART_FLAG_RXNE: Receive data register not empty flag. | |||
* | |||
* @note PE (Parity error), FE (Framing error), NE (Noise error), ORE (Overrun | |||
* error) and IDLE (Idle line detected) flags are cleared by software | |||
* sequence: a read operation to USART_SR register followed by a read | |||
* operation to USART_DR register. | |||
* @note RXNE flag can be also cleared by a read to the USART_DR register. | |||
* @note TC flag can be also cleared by software sequence: a read operation to | |||
* USART_SR register followed by a write operation to USART_DR register. | |||
* @note TXE flag is cleared only by a write to the USART_DR register. | |||
* | |||
* @retval None | |||
*/ | |||
#define __HAL_UART_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->SR = ~(__FLAG__)) | |||
/** @brief Clears the UART PE pending flag. | |||
* @param __HANDLE__ specifies the UART Handle. | |||
* UART Handle selects the USARTx or UARTy peripheral | |||
* (USART,UART availability and x,y values depending on device). | |||
* @retval None | |||
*/ | |||
#define __HAL_UART_CLEAR_PEFLAG(__HANDLE__) \ | |||
do{ \ | |||
__IO uint32_t tmpreg = 0x00U; \ | |||
tmpreg = (__HANDLE__)->Instance->SR; \ | |||
tmpreg = (__HANDLE__)->Instance->DR; \ | |||
UNUSED(tmpreg); \ | |||
} while(0U) | |||
/** @brief Clears the UART FE pending flag. | |||
* @param __HANDLE__ specifies the UART Handle. | |||
* UART Handle selects the USARTx or UARTy peripheral | |||
* (USART,UART availability and x,y values depending on device). | |||
* @retval None | |||
*/ | |||
#define __HAL_UART_CLEAR_FEFLAG(__HANDLE__) __HAL_UART_CLEAR_PEFLAG(__HANDLE__) | |||
/** @brief Clears the UART NE pending flag. | |||
* @param __HANDLE__ specifies the UART Handle. | |||
* UART Handle selects the USARTx or UARTy peripheral | |||
* (USART,UART availability and x,y values depending on device). | |||
* @retval None | |||
*/ | |||
#define __HAL_UART_CLEAR_NEFLAG(__HANDLE__) __HAL_UART_CLEAR_PEFLAG(__HANDLE__) | |||
/** @brief Clears the UART ORE pending flag. | |||
* @param __HANDLE__ specifies the UART Handle. | |||
* UART Handle selects the USARTx or UARTy peripheral | |||
* (USART,UART availability and x,y values depending on device). | |||
* @retval None | |||
*/ | |||
#define __HAL_UART_CLEAR_OREFLAG(__HANDLE__) __HAL_UART_CLEAR_PEFLAG(__HANDLE__) | |||
/** @brief Clears the UART IDLE pending flag. | |||
* @param __HANDLE__ specifies the UART Handle. | |||
* UART Handle selects the USARTx or UARTy peripheral | |||
* (USART,UART availability and x,y values depending on device). | |||
* @retval None | |||
*/ | |||
#define __HAL_UART_CLEAR_IDLEFLAG(__HANDLE__) __HAL_UART_CLEAR_PEFLAG(__HANDLE__) | |||
/** @brief Enable the specified UART interrupt. | |||
* @param __HANDLE__ specifies the UART Handle. | |||
* UART Handle selects the USARTx or UARTy peripheral | |||
* (USART,UART availability and x,y values depending on device). | |||
* @param __INTERRUPT__ specifies the UART interrupt source to enable. | |||
* This parameter can be one of the following values: | |||
* @arg UART_IT_CTS: CTS change interrupt | |||
* @arg UART_IT_LBD: LIN Break detection interrupt | |||
* @arg UART_IT_TXE: Transmit Data Register empty interrupt | |||
* @arg UART_IT_TC: Transmission complete interrupt | |||
* @arg UART_IT_RXNE: Receive Data register not empty interrupt | |||
* @arg UART_IT_IDLE: Idle line detection interrupt | |||
* @arg UART_IT_PE: Parity Error interrupt | |||
* @arg UART_IT_ERR: Error interrupt(Frame error, noise error, overrun error) | |||
* @retval None | |||
*/ | |||
#define __HAL_UART_ENABLE_IT(__HANDLE__, __INTERRUPT__) ((((__INTERRUPT__) >> 28U) == UART_CR1_REG_INDEX)? ((__HANDLE__)->Instance->CR1 |= ((__INTERRUPT__) & UART_IT_MASK)): \ | |||
(((__INTERRUPT__) >> 28U) == UART_CR2_REG_INDEX)? ((__HANDLE__)->Instance->CR2 |= ((__INTERRUPT__) & UART_IT_MASK)): \ | |||
((__HANDLE__)->Instance->CR3 |= ((__INTERRUPT__) & UART_IT_MASK))) | |||
/** @brief Disable the specified UART interrupt. | |||
* @param __HANDLE__ specifies the UART Handle. | |||
* UART Handle selects the USARTx or UARTy peripheral | |||
* (USART,UART availability and x,y values depending on device). | |||
* @param __INTERRUPT__ specifies the UART interrupt source to disable. | |||
* This parameter can be one of the following values: | |||
* @arg UART_IT_CTS: CTS change interrupt | |||
* @arg UART_IT_LBD: LIN Break detection interrupt | |||
* @arg UART_IT_TXE: Transmit Data Register empty interrupt | |||
* @arg UART_IT_TC: Transmission complete interrupt | |||
* @arg UART_IT_RXNE: Receive Data register not empty interrupt | |||
* @arg UART_IT_IDLE: Idle line detection interrupt | |||
* @arg UART_IT_PE: Parity Error interrupt | |||
* @arg UART_IT_ERR: Error interrupt(Frame error, noise error, overrun error) | |||
* @retval None | |||
*/ | |||
#define __HAL_UART_DISABLE_IT(__HANDLE__, __INTERRUPT__) ((((__INTERRUPT__) >> 28U) == UART_CR1_REG_INDEX)? ((__HANDLE__)->Instance->CR1 &= ~((__INTERRUPT__) & UART_IT_MASK)): \ | |||
(((__INTERRUPT__) >> 28U) == UART_CR2_REG_INDEX)? ((__HANDLE__)->Instance->CR2 &= ~((__INTERRUPT__) & UART_IT_MASK)): \ | |||
((__HANDLE__)->Instance->CR3 &= ~ ((__INTERRUPT__) & UART_IT_MASK))) | |||
/** @brief Checks whether the specified UART interrupt source is enabled or not. | |||
* @param __HANDLE__ specifies the UART Handle. | |||
* UART Handle selects the USARTx or UARTy peripheral | |||
* (USART,UART availability and x,y values depending on device). | |||
* @param __IT__ specifies the UART interrupt source to check. | |||
* This parameter can be one of the following values: | |||
* @arg UART_IT_CTS: CTS change interrupt (not available for UART4 and UART5) | |||
* @arg UART_IT_LBD: LIN Break detection interrupt | |||
* @arg UART_IT_TXE: Transmit Data Register empty interrupt | |||
* @arg UART_IT_TC: Transmission complete interrupt | |||
* @arg UART_IT_RXNE: Receive Data register not empty interrupt | |||
* @arg UART_IT_IDLE: Idle line detection interrupt | |||
* @arg UART_IT_ERR: Error interrupt | |||
* @retval The new state of __IT__ (TRUE or FALSE). | |||
*/ | |||
#define __HAL_UART_GET_IT_SOURCE(__HANDLE__, __IT__) (((((__IT__) >> 28U) == UART_CR1_REG_INDEX)? (__HANDLE__)->Instance->CR1:(((((uint32_t)(__IT__)) >> 28U) == UART_CR2_REG_INDEX)? \ | |||
(__HANDLE__)->Instance->CR2 : (__HANDLE__)->Instance->CR3)) & (((uint32_t)(__IT__)) & UART_IT_MASK)) | |||
/** @brief Enable CTS flow control | |||
* @note This macro allows to enable CTS hardware flow control for a given UART instance, | |||
* without need to call HAL_UART_Init() function. | |||
* As involving direct access to UART registers, usage of this macro should be fully endorsed by user. | |||
* @note As macro is expected to be used for modifying CTS Hw flow control feature activation, without need | |||
* for USART instance Deinit/Init, following conditions for macro call should be fulfilled : | |||
* - UART instance should have already been initialised (through call of HAL_UART_Init() ) | |||
* - macro could only be called when corresponding UART instance is disabled (i.e __HAL_UART_DISABLE(__HANDLE__)) | |||
* and should be followed by an Enable macro (i.e __HAL_UART_ENABLE(__HANDLE__)). | |||
* @param __HANDLE__ specifies the UART Handle. | |||
* The Handle Instance can be any USARTx (supporting the HW Flow control feature). | |||
* It is used to select the USART peripheral (USART availability and x value depending on device). | |||
* @retval None | |||
*/ | |||
#define __HAL_UART_HWCONTROL_CTS_ENABLE(__HANDLE__) \ | |||
do{ \ | |||
SET_BIT((__HANDLE__)->Instance->CR3, USART_CR3_CTSE); \ | |||
(__HANDLE__)->Init.HwFlowCtl |= USART_CR3_CTSE; \ | |||
} while(0U) | |||
/** @brief Disable CTS flow control | |||
* @note This macro allows to disable CTS hardware flow control for a given UART instance, | |||
* without need to call HAL_UART_Init() function. | |||
* As involving direct access to UART registers, usage of this macro should be fully endorsed by user. | |||
* @note As macro is expected to be used for modifying CTS Hw flow control feature activation, without need | |||
* for USART instance Deinit/Init, following conditions for macro call should be fulfilled : | |||
* - UART instance should have already been initialised (through call of HAL_UART_Init() ) | |||
* - macro could only be called when corresponding UART instance is disabled (i.e __HAL_UART_DISABLE(__HANDLE__)) | |||
* and should be followed by an Enable macro (i.e __HAL_UART_ENABLE(__HANDLE__)). | |||
* @param __HANDLE__ specifies the UART Handle. | |||
* The Handle Instance can be any USARTx (supporting the HW Flow control feature). | |||
* It is used to select the USART peripheral (USART availability and x value depending on device). | |||
* @retval None | |||
*/ | |||
#define __HAL_UART_HWCONTROL_CTS_DISABLE(__HANDLE__) \ | |||
do{ \ | |||
CLEAR_BIT((__HANDLE__)->Instance->CR3, USART_CR3_CTSE); \ | |||
(__HANDLE__)->Init.HwFlowCtl &= ~(USART_CR3_CTSE); \ | |||
} while(0U) | |||
/** @brief Enable RTS flow control | |||
* This macro allows to enable RTS hardware flow control for a given UART instance, | |||
* without need to call HAL_UART_Init() function. | |||
* As involving direct access to UART registers, usage of this macro should be fully endorsed by user. | |||
* @note As macro is expected to be used for modifying RTS Hw flow control feature activation, without need | |||
* for USART instance Deinit/Init, following conditions for macro call should be fulfilled : | |||
* - UART instance should have already been initialised (through call of HAL_UART_Init() ) | |||
* - macro could only be called when corresponding UART instance is disabled (i.e __HAL_UART_DISABLE(__HANDLE__)) | |||
* and should be followed by an Enable macro (i.e __HAL_UART_ENABLE(__HANDLE__)). | |||
* @param __HANDLE__ specifies the UART Handle. | |||
* The Handle Instance can be any USARTx (supporting the HW Flow control feature). | |||
* It is used to select the USART peripheral (USART availability and x value depending on device). | |||
* @retval None | |||
*/ | |||
#define __HAL_UART_HWCONTROL_RTS_ENABLE(__HANDLE__) \ | |||
do{ \ | |||
SET_BIT((__HANDLE__)->Instance->CR3, USART_CR3_RTSE); \ | |||
(__HANDLE__)->Init.HwFlowCtl |= USART_CR3_RTSE; \ | |||
} while(0U) | |||
/** @brief Disable RTS flow control | |||
* This macro allows to disable RTS hardware flow control for a given UART instance, | |||
* without need to call HAL_UART_Init() function. | |||
* As involving direct access to UART registers, usage of this macro should be fully endorsed by user. | |||
* @note As macro is expected to be used for modifying RTS Hw flow control feature activation, without need | |||
* for USART instance Deinit/Init, following conditions for macro call should be fulfilled : | |||
* - UART instance should have already been initialised (through call of HAL_UART_Init() ) | |||
* - macro could only be called when corresponding UART instance is disabled (i.e __HAL_UART_DISABLE(__HANDLE__)) | |||
* and should be followed by an Enable macro (i.e __HAL_UART_ENABLE(__HANDLE__)). | |||
* @param __HANDLE__ specifies the UART Handle. | |||
* The Handle Instance can be any USARTx (supporting the HW Flow control feature). | |||
* It is used to select the USART peripheral (USART availability and x value depending on device). | |||
* @retval None | |||
*/ | |||
#define __HAL_UART_HWCONTROL_RTS_DISABLE(__HANDLE__) \ | |||
do{ \ | |||
CLEAR_BIT((__HANDLE__)->Instance->CR3, USART_CR3_RTSE);\ | |||
(__HANDLE__)->Init.HwFlowCtl &= ~(USART_CR3_RTSE); \ | |||
} while(0U) | |||
#if defined(USART_CR3_ONEBIT) | |||
/** @brief Macro to enable the UART's one bit sample method | |||
* @param __HANDLE__ specifies the UART Handle. | |||
* @retval None | |||
*/ | |||
#define __HAL_UART_ONE_BIT_SAMPLE_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR3|= USART_CR3_ONEBIT) | |||
/** @brief Macro to disable the UART's one bit sample method | |||
* @param __HANDLE__ specifies the UART Handle. | |||
* @retval None | |||
*/ | |||
#define __HAL_UART_ONE_BIT_SAMPLE_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR3 &= (uint16_t)~((uint16_t)USART_CR3_ONEBIT)) | |||
#endif /* UART_ONE_BIT_SAMPLE_Feature */ | |||
/** @brief Enable UART | |||
* @param __HANDLE__ specifies the UART Handle. | |||
* @retval None | |||
*/ | |||
#define __HAL_UART_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 |= USART_CR1_UE) | |||
/** @brief Disable UART | |||
* @param __HANDLE__ specifies the UART Handle. | |||
* @retval None | |||
*/ | |||
#define __HAL_UART_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 &= ~USART_CR1_UE) | |||
/** | |||
* @} | |||
*/ | |||
/* Exported functions --------------------------------------------------------*/ | |||
/** @addtogroup UART_Exported_Functions | |||
* @{ | |||
*/ | |||
/** @addtogroup UART_Exported_Functions_Group1 Initialization and de-initialization functions | |||
* @{ | |||
*/ | |||
/* Initialization/de-initialization functions **********************************/ | |||
HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart); | |||
HAL_StatusTypeDef HAL_HalfDuplex_Init(UART_HandleTypeDef *huart); | |||
HAL_StatusTypeDef HAL_LIN_Init(UART_HandleTypeDef *huart, uint32_t BreakDetectLength); | |||
HAL_StatusTypeDef HAL_MultiProcessor_Init(UART_HandleTypeDef *huart, uint8_t Address, uint32_t WakeUpMethod); | |||
HAL_StatusTypeDef HAL_UART_DeInit(UART_HandleTypeDef *huart); | |||
void HAL_UART_MspInit(UART_HandleTypeDef *huart); | |||
void HAL_UART_MspDeInit(UART_HandleTypeDef *huart); | |||
/* Callbacks Register/UnRegister functions ***********************************/ | |||
#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) | |||
HAL_StatusTypeDef HAL_UART_RegisterCallback(UART_HandleTypeDef *huart, HAL_UART_CallbackIDTypeDef CallbackID, pUART_CallbackTypeDef pCallback); | |||
HAL_StatusTypeDef HAL_UART_UnRegisterCallback(UART_HandleTypeDef *huart, HAL_UART_CallbackIDTypeDef CallbackID); | |||
HAL_StatusTypeDef HAL_UART_RegisterRxEventCallback(UART_HandleTypeDef *huart, pUART_RxEventCallbackTypeDef pCallback); | |||
HAL_StatusTypeDef HAL_UART_UnRegisterRxEventCallback(UART_HandleTypeDef *huart); | |||
#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ | |||
/** | |||
* @} | |||
*/ | |||
/** @addtogroup UART_Exported_Functions_Group2 IO operation functions | |||
* @{ | |||
*/ | |||
/* IO operation functions *******************************************************/ | |||
HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout); | |||
HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout); | |||
HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size); | |||
HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size); | |||
HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size); | |||
HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size); | |||
HAL_StatusTypeDef HAL_UART_DMAPause(UART_HandleTypeDef *huart); | |||
HAL_StatusTypeDef HAL_UART_DMAResume(UART_HandleTypeDef *huart); | |||
HAL_StatusTypeDef HAL_UART_DMAStop(UART_HandleTypeDef *huart); | |||
HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint16_t *RxLen, uint32_t Timeout); | |||
HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size); | |||
HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size); | |||
/* Transfer Abort functions */ | |||
HAL_StatusTypeDef HAL_UART_Abort(UART_HandleTypeDef *huart); | |||
HAL_StatusTypeDef HAL_UART_AbortTransmit(UART_HandleTypeDef *huart); | |||
HAL_StatusTypeDef HAL_UART_AbortReceive(UART_HandleTypeDef *huart); | |||
HAL_StatusTypeDef HAL_UART_Abort_IT(UART_HandleTypeDef *huart); | |||
HAL_StatusTypeDef HAL_UART_AbortTransmit_IT(UART_HandleTypeDef *huart); | |||
HAL_StatusTypeDef HAL_UART_AbortReceive_IT(UART_HandleTypeDef *huart); | |||
void HAL_UART_IRQHandler(UART_HandleTypeDef *huart); | |||
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart); | |||
void HAL_UART_TxHalfCpltCallback(UART_HandleTypeDef *huart); | |||
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart); | |||
void HAL_UART_RxHalfCpltCallback(UART_HandleTypeDef *huart); | |||
void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart); | |||
void HAL_UART_AbortCpltCallback(UART_HandleTypeDef *huart); | |||
void HAL_UART_AbortTransmitCpltCallback(UART_HandleTypeDef *huart); | |||
void HAL_UART_AbortReceiveCpltCallback(UART_HandleTypeDef *huart); | |||
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size); | |||
/** | |||
* @} | |||
*/ | |||
/** @addtogroup UART_Exported_Functions_Group3 | |||
* @{ | |||
*/ | |||
/* Peripheral Control functions ************************************************/ | |||
HAL_StatusTypeDef HAL_LIN_SendBreak(UART_HandleTypeDef *huart); | |||
HAL_StatusTypeDef HAL_MultiProcessor_EnterMuteMode(UART_HandleTypeDef *huart); | |||
HAL_StatusTypeDef HAL_MultiProcessor_ExitMuteMode(UART_HandleTypeDef *huart); | |||
HAL_StatusTypeDef HAL_HalfDuplex_EnableTransmitter(UART_HandleTypeDef *huart); | |||
HAL_StatusTypeDef HAL_HalfDuplex_EnableReceiver(UART_HandleTypeDef *huart); | |||
/** | |||
* @} | |||
*/ | |||
/** @addtogroup UART_Exported_Functions_Group4 | |||
* @{ | |||
*/ | |||
/* Peripheral State functions **************************************************/ | |||
HAL_UART_StateTypeDef HAL_UART_GetState(UART_HandleTypeDef *huart); | |||
uint32_t HAL_UART_GetError(UART_HandleTypeDef *huart); | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Private types -------------------------------------------------------------*/ | |||
/* Private variables ---------------------------------------------------------*/ | |||
/* Private constants ---------------------------------------------------------*/ | |||
/** @defgroup UART_Private_Constants UART Private Constants | |||
* @{ | |||
*/ | |||
/** @brief UART interruptions flag mask | |||
* | |||
*/ | |||
#define UART_IT_MASK 0x0000FFFFU | |||
#define UART_CR1_REG_INDEX 1U | |||
#define UART_CR2_REG_INDEX 2U | |||
#define UART_CR3_REG_INDEX 3U | |||
/** | |||
* @} | |||
*/ | |||
/* Private macros ------------------------------------------------------------*/ | |||
/** @defgroup UART_Private_Macros UART Private Macros | |||
* @{ | |||
*/ | |||
#define IS_UART_WORD_LENGTH(LENGTH) (((LENGTH) == UART_WORDLENGTH_8B) || \ | |||
((LENGTH) == UART_WORDLENGTH_9B)) | |||
#define IS_UART_LIN_WORD_LENGTH(LENGTH) (((LENGTH) == UART_WORDLENGTH_8B)) | |||
#define IS_UART_STOPBITS(STOPBITS) (((STOPBITS) == UART_STOPBITS_1) || \ | |||
((STOPBITS) == UART_STOPBITS_2)) | |||
#define IS_UART_PARITY(PARITY) (((PARITY) == UART_PARITY_NONE) || \ | |||
((PARITY) == UART_PARITY_EVEN) || \ | |||
((PARITY) == UART_PARITY_ODD)) | |||
#define IS_UART_HARDWARE_FLOW_CONTROL(CONTROL)\ | |||
(((CONTROL) == UART_HWCONTROL_NONE) || \ | |||
((CONTROL) == UART_HWCONTROL_RTS) || \ | |||
((CONTROL) == UART_HWCONTROL_CTS) || \ | |||
((CONTROL) == UART_HWCONTROL_RTS_CTS)) | |||
#define IS_UART_MODE(MODE) ((((MODE) & 0x0000FFF3U) == 0x00U) && ((MODE) != 0x00U)) | |||
#define IS_UART_STATE(STATE) (((STATE) == UART_STATE_DISABLE) || \ | |||
((STATE) == UART_STATE_ENABLE)) | |||
#if defined(USART_CR1_OVER8) | |||
#define IS_UART_OVERSAMPLING(SAMPLING) (((SAMPLING) == UART_OVERSAMPLING_16) || \ | |||
((SAMPLING) == UART_OVERSAMPLING_8)) | |||
#endif /* USART_CR1_OVER8 */ | |||
#define IS_UART_LIN_OVERSAMPLING(SAMPLING) (((SAMPLING) == UART_OVERSAMPLING_16)) | |||
#define IS_UART_LIN_BREAK_DETECT_LENGTH(LENGTH) (((LENGTH) == UART_LINBREAKDETECTLENGTH_10B) || \ | |||
((LENGTH) == UART_LINBREAKDETECTLENGTH_11B)) | |||
#define IS_UART_WAKEUPMETHOD(WAKEUP) (((WAKEUP) == UART_WAKEUPMETHOD_IDLELINE) || \ | |||
((WAKEUP) == UART_WAKEUPMETHOD_ADDRESSMARK)) | |||
#define IS_UART_BAUDRATE(BAUDRATE) ((BAUDRATE) <= 4500000U) | |||
#define IS_UART_ADDRESS(ADDRESS) ((ADDRESS) <= 0x0FU) | |||
#define UART_DIV_SAMPLING16(_PCLK_, _BAUD_) (((_PCLK_)*25U)/(4U*(_BAUD_))) | |||
#define UART_DIVMANT_SAMPLING16(_PCLK_, _BAUD_) (UART_DIV_SAMPLING16((_PCLK_), (_BAUD_))/100U) | |||
#define UART_DIVFRAQ_SAMPLING16(_PCLK_, _BAUD_) ((((UART_DIV_SAMPLING16((_PCLK_), (_BAUD_)) - (UART_DIVMANT_SAMPLING16((_PCLK_), (_BAUD_)) * 100U)) * 16U) + 50U) / 100U) | |||
/* UART BRR = mantissa + overflow + fraction | |||
= (UART DIVMANT << 4) + (UART DIVFRAQ & 0xF0) + (UART DIVFRAQ & 0x0FU) */ | |||
#define UART_BRR_SAMPLING16(_PCLK_, _BAUD_) (((UART_DIVMANT_SAMPLING16((_PCLK_), (_BAUD_)) << 4U) + \ | |||
(UART_DIVFRAQ_SAMPLING16((_PCLK_), (_BAUD_)) & 0xF0U)) + \ | |||
(UART_DIVFRAQ_SAMPLING16((_PCLK_), (_BAUD_)) & 0x0FU)) | |||
#define UART_DIV_SAMPLING8(_PCLK_, _BAUD_) (((_PCLK_)*25U)/(2U*(_BAUD_))) | |||
#define UART_DIVMANT_SAMPLING8(_PCLK_, _BAUD_) (UART_DIV_SAMPLING8((_PCLK_), (_BAUD_))/100U) | |||
#define UART_DIVFRAQ_SAMPLING8(_PCLK_, _BAUD_) ((((UART_DIV_SAMPLING8((_PCLK_), (_BAUD_)) - (UART_DIVMANT_SAMPLING8((_PCLK_), (_BAUD_)) * 100U)) * 8U) + 50U) / 100U) | |||
/* UART BRR = mantissa + overflow + fraction | |||
= (UART DIVMANT << 4) + ((UART DIVFRAQ & 0xF8) << 1) + (UART DIVFRAQ & 0x07U) */ | |||
#define UART_BRR_SAMPLING8(_PCLK_, _BAUD_) (((UART_DIVMANT_SAMPLING8((_PCLK_), (_BAUD_)) << 4U) + \ | |||
((UART_DIVFRAQ_SAMPLING8((_PCLK_), (_BAUD_)) & 0xF8U) << 1U)) + \ | |||
(UART_DIVFRAQ_SAMPLING8((_PCLK_), (_BAUD_)) & 0x07U)) | |||
/** | |||
* @} | |||
*/ | |||
/* Private functions ---------------------------------------------------------*/ | |||
/** @defgroup UART_Private_Functions UART Private Functions | |||
* @{ | |||
*/ | |||
HAL_StatusTypeDef UART_Start_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size); | |||
HAL_StatusTypeDef UART_Start_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size); | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
#ifdef __cplusplus | |||
} | |||
#endif | |||
#endif /* __STM32F1xx_HAL_UART_H */ | |||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@@ -0,0 +1,678 @@ | |||
/** | |||
****************************************************************************** | |||
* @file stm32f1xx_ll_usb.h | |||
* @author MCD Application Team | |||
* @brief Header file of USB Low Layer HAL module. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© Copyright (c) 2016 STMicroelectronics. | |||
* All rights reserved.</center></h2> | |||
* | |||
* This software component is licensed by ST under BSD 3-Clause license, | |||
* the "License"; You may not use this file except in compliance with the | |||
* License. You may obtain a copy of the License at: | |||
* opensource.org/licenses/BSD-3-Clause | |||
* | |||
****************************************************************************** | |||
*/ | |||
/* Define to prevent recursive inclusion -------------------------------------*/ | |||
#ifndef STM32F1xx_LL_USB_H | |||
#define STM32F1xx_LL_USB_H | |||
#ifdef __cplusplus | |||
extern "C" { | |||
#endif | |||
/* Includes ------------------------------------------------------------------*/ | |||
#include "stm32f1xx_hal_def.h" | |||
#if defined (USB) || defined (USB_OTG_FS) | |||
/** @addtogroup STM32F1xx_HAL_Driver | |||
* @{ | |||
*/ | |||
/** @addtogroup USB_LL | |||
* @{ | |||
*/ | |||
/* Exported types ------------------------------------------------------------*/ | |||
/** | |||
* @brief USB Mode definition | |||
*/ | |||
#if defined (USB_OTG_FS) | |||
typedef enum | |||
{ | |||
USB_DEVICE_MODE = 0, | |||
USB_HOST_MODE = 1, | |||
USB_DRD_MODE = 2 | |||
} USB_ModeTypeDef; | |||
/** | |||
* @brief URB States definition | |||
*/ | |||
typedef enum | |||
{ | |||
URB_IDLE = 0, | |||
URB_DONE, | |||
URB_NOTREADY, | |||
URB_NYET, | |||
URB_ERROR, | |||
URB_STALL | |||
} USB_OTG_URBStateTypeDef; | |||
/** | |||
* @brief Host channel States definition | |||
*/ | |||
typedef enum | |||
{ | |||
HC_IDLE = 0, | |||
HC_XFRC, | |||
HC_HALTED, | |||
HC_NAK, | |||
HC_NYET, | |||
HC_STALL, | |||
HC_XACTERR, | |||
HC_BBLERR, | |||
HC_DATATGLERR | |||
} USB_OTG_HCStateTypeDef; | |||
/** | |||
* @brief USB Instance Initialization Structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
uint32_t dev_endpoints; /*!< Device Endpoints number. | |||
This parameter depends on the used USB core. | |||
This parameter must be a number between Min_Data = 1 and Max_Data = 15 */ | |||
uint32_t Host_channels; /*!< Host Channels number. | |||
This parameter Depends on the used USB core. | |||
This parameter must be a number between Min_Data = 1 and Max_Data = 15 */ | |||
uint32_t speed; /*!< USB Core speed. | |||
This parameter can be any value of @ref PCD_Speed/HCD_Speed | |||
(HCD_SPEED_xxx, HCD_SPEED_xxx) */ | |||
uint32_t dma_enable; /*!< Enable or disable of the USB embedded DMA used only for OTG HS. */ | |||
uint32_t ep0_mps; /*!< Set the Endpoint 0 Max Packet size. */ | |||
uint32_t phy_itface; /*!< Select the used PHY interface. | |||
This parameter can be any value of @ref PCD_PHY_Module/HCD_PHY_Module */ | |||
uint32_t Sof_enable; /*!< Enable or disable the output of the SOF signal. */ | |||
uint32_t low_power_enable; /*!< Enable or disable the low power mode. */ | |||
uint32_t lpm_enable; /*!< Enable or disable Link Power Management. */ | |||
uint32_t battery_charging_enable; /*!< Enable or disable Battery charging. */ | |||
uint32_t vbus_sensing_enable; /*!< Enable or disable the VBUS Sensing feature. */ | |||
uint32_t use_dedicated_ep1; /*!< Enable or disable the use of the dedicated EP1 interrupt. */ | |||
uint32_t use_external_vbus; /*!< Enable or disable the use of the external VBUS. */ | |||
} USB_OTG_CfgTypeDef; | |||
typedef struct | |||
{ | |||
uint8_t num; /*!< Endpoint number | |||
This parameter must be a number between Min_Data = 1 and Max_Data = 15 */ | |||
uint8_t is_in; /*!< Endpoint direction | |||
This parameter must be a number between Min_Data = 0 and Max_Data = 1 */ | |||
uint8_t is_stall; /*!< Endpoint stall condition | |||
This parameter must be a number between Min_Data = 0 and Max_Data = 1 */ | |||
uint8_t type; /*!< Endpoint type | |||
This parameter can be any value of @ref USB_LL_EP_Type */ | |||
uint8_t data_pid_start; /*!< Initial data PID | |||
This parameter must be a number between Min_Data = 0 and Max_Data = 1 */ | |||
uint8_t even_odd_frame; /*!< IFrame parity | |||
This parameter must be a number between Min_Data = 0 and Max_Data = 1 */ | |||
uint16_t tx_fifo_num; /*!< Transmission FIFO number | |||
This parameter must be a number between Min_Data = 1 and Max_Data = 15 */ | |||
uint32_t maxpacket; /*!< Endpoint Max packet size | |||
This parameter must be a number between Min_Data = 0 and Max_Data = 64KB */ | |||
uint8_t *xfer_buff; /*!< Pointer to transfer buffer */ | |||
uint32_t dma_addr; /*!< 32 bits aligned transfer buffer address */ | |||
uint32_t xfer_len; /*!< Current transfer length */ | |||
uint32_t xfer_count; /*!< Partial transfer length in case of multi packet transfer */ | |||
} USB_OTG_EPTypeDef; | |||
typedef struct | |||
{ | |||
uint8_t dev_addr; /*!< USB device address. | |||
This parameter must be a number between Min_Data = 1 and Max_Data = 255 */ | |||
uint8_t ch_num; /*!< Host channel number. | |||
This parameter must be a number between Min_Data = 1 and Max_Data = 15 */ | |||
uint8_t ep_num; /*!< Endpoint number. | |||
This parameter must be a number between Min_Data = 1 and Max_Data = 15 */ | |||
uint8_t ep_is_in; /*!< Endpoint direction | |||
This parameter must be a number between Min_Data = 0 and Max_Data = 1 */ | |||
uint8_t speed; /*!< USB Host Channel speed. | |||
This parameter can be any value of @ref HCD_Device_Speed: | |||
(HCD_DEVICE_SPEED_xxx) */ | |||
uint8_t do_ping; /*!< Enable or disable the use of the PING protocol for HS mode. */ | |||
uint8_t process_ping; /*!< Execute the PING protocol for HS mode. */ | |||
uint8_t ep_type; /*!< Endpoint Type. | |||
This parameter can be any value of @ref USB_LL_EP_Type */ | |||
uint16_t max_packet; /*!< Endpoint Max packet size. | |||
This parameter must be a number between Min_Data = 0 and Max_Data = 64KB */ | |||
uint8_t data_pid; /*!< Initial data PID. | |||
This parameter must be a number between Min_Data = 0 and Max_Data = 1 */ | |||
uint8_t *xfer_buff; /*!< Pointer to transfer buffer. */ | |||
uint32_t XferSize; /*!< OTG Channel transfer size. */ | |||
uint32_t xfer_len; /*!< Current transfer length. */ | |||
uint32_t xfer_count; /*!< Partial transfer length in case of multi packet transfer. */ | |||
uint8_t toggle_in; /*!< IN transfer current toggle flag. | |||
This parameter must be a number between Min_Data = 0 and Max_Data = 1 */ | |||
uint8_t toggle_out; /*!< OUT transfer current toggle flag | |||
This parameter must be a number between Min_Data = 0 and Max_Data = 1 */ | |||
uint32_t dma_addr; /*!< 32 bits aligned transfer buffer address. */ | |||
uint32_t ErrCnt; /*!< Host channel error count. */ | |||
USB_OTG_URBStateTypeDef urb_state; /*!< URB state. | |||
This parameter can be any value of @ref USB_OTG_URBStateTypeDef */ | |||
USB_OTG_HCStateTypeDef state; /*!< Host Channel state. | |||
This parameter can be any value of @ref USB_OTG_HCStateTypeDef */ | |||
} USB_OTG_HCTypeDef; | |||
#endif /* defined (USB_OTG_FS) */ | |||
#if defined (USB) | |||
typedef enum | |||
{ | |||
USB_DEVICE_MODE = 0 | |||
} USB_ModeTypeDef; | |||
/** | |||
* @brief USB Initialization Structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
uint32_t dev_endpoints; /*!< Device Endpoints number. | |||
This parameter depends on the used USB core. | |||
This parameter must be a number between Min_Data = 1 and Max_Data = 15 */ | |||
uint32_t speed; /*!< USB Core speed. | |||
This parameter can be any value of @ref PCD_Speed/HCD_Speed | |||
(HCD_SPEED_xxx, HCD_SPEED_xxx) */ | |||
uint32_t ep0_mps; /*!< Set the Endpoint 0 Max Packet size. */ | |||
uint32_t phy_itface; /*!< Select the used PHY interface. | |||
This parameter can be any value of @ref PCD_PHY_Module/HCD_PHY_Module */ | |||
uint32_t Sof_enable; /*!< Enable or disable the output of the SOF signal. */ | |||
uint32_t low_power_enable; /*!< Enable or disable Low Power mode */ | |||
uint32_t lpm_enable; /*!< Enable or disable Battery charging. */ | |||
uint32_t battery_charging_enable; /*!< Enable or disable Battery charging. */ | |||
} USB_CfgTypeDef; | |||
typedef struct | |||
{ | |||
uint8_t num; /*!< Endpoint number | |||
This parameter must be a number between Min_Data = 1 and Max_Data = 15 */ | |||
uint8_t is_in; /*!< Endpoint direction | |||
This parameter must be a number between Min_Data = 0 and Max_Data = 1 */ | |||
uint8_t is_stall; /*!< Endpoint stall condition | |||
This parameter must be a number between Min_Data = 0 and Max_Data = 1 */ | |||
uint8_t type; /*!< Endpoint type | |||
This parameter can be any value of @ref USB_EP_Type */ | |||
uint8_t data_pid_start; /*!< Initial data PID | |||
This parameter must be a number between Min_Data = 0 and Max_Data = 1 */ | |||
uint16_t pmaadress; /*!< PMA Address | |||
This parameter can be any value between Min_addr = 0 and Max_addr = 1K */ | |||
uint16_t pmaaddr0; /*!< PMA Address0 | |||
This parameter can be any value between Min_addr = 0 and Max_addr = 1K */ | |||
uint16_t pmaaddr1; /*!< PMA Address1 | |||
This parameter can be any value between Min_addr = 0 and Max_addr = 1K */ | |||
uint8_t doublebuffer; /*!< Double buffer enable | |||
This parameter can be 0 or 1 */ | |||
uint16_t tx_fifo_num; /*!< This parameter is not required by USB Device FS peripheral, it is used | |||
only by USB OTG FS peripheral | |||
This parameter is added to ensure compatibility across USB peripherals */ | |||
uint32_t maxpacket; /*!< Endpoint Max packet size | |||
This parameter must be a number between Min_Data = 0 and Max_Data = 64KB */ | |||
uint8_t *xfer_buff; /*!< Pointer to transfer buffer */ | |||
uint32_t xfer_len; /*!< Current transfer length */ | |||
uint32_t xfer_count; /*!< Partial transfer length in case of multi packet transfer */ | |||
uint32_t xfer_len_db; /*!< double buffer transfer length used with bulk double buffer in */ | |||
uint8_t xfer_fill_db; /*!< double buffer Need to Fill new buffer used with bulk_in */ | |||
} USB_EPTypeDef; | |||
#endif /* defined (USB) */ | |||
/* Exported constants --------------------------------------------------------*/ | |||
/** @defgroup PCD_Exported_Constants PCD Exported Constants | |||
* @{ | |||
*/ | |||
#if defined (USB_OTG_FS) | |||
/** @defgroup USB_OTG_CORE VERSION ID | |||
* @{ | |||
*/ | |||
#define USB_OTG_CORE_ID_300A 0x4F54300AU | |||
#define USB_OTG_CORE_ID_310A 0x4F54310AU | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup USB_Core_Mode_ USB Core Mode | |||
* @{ | |||
*/ | |||
#define USB_OTG_MODE_DEVICE 0U | |||
#define USB_OTG_MODE_HOST 1U | |||
#define USB_OTG_MODE_DRD 2U | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup USB_LL Device Speed | |||
* @{ | |||
*/ | |||
#define USBD_FS_SPEED 2U | |||
#define USBH_FSLS_SPEED 1U | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup USB_LL_Core_Speed USB Low Layer Core Speed | |||
* @{ | |||
*/ | |||
#define USB_OTG_SPEED_FULL 3U | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup USB_LL_Core_PHY USB Low Layer Core PHY | |||
* @{ | |||
*/ | |||
#define USB_OTG_ULPI_PHY 1U | |||
#define USB_OTG_EMBEDDED_PHY 2U | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup USB_LL_Turnaround_Timeout Turnaround Timeout Value | |||
* @{ | |||
*/ | |||
#ifndef USBD_FS_TRDT_VALUE | |||
#define USBD_FS_TRDT_VALUE 5U | |||
#define USBD_DEFAULT_TRDT_VALUE 9U | |||
#endif /* USBD_HS_TRDT_VALUE */ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup USB_LL_Core_MPS USB Low Layer Core MPS | |||
* @{ | |||
*/ | |||
#define USB_OTG_FS_MAX_PACKET_SIZE 64U | |||
#define USB_OTG_MAX_EP0_SIZE 64U | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup USB_LL_Core_PHY_Frequency USB Low Layer Core PHY Frequency | |||
* @{ | |||
*/ | |||
#define DSTS_ENUMSPD_HS_PHY_30MHZ_OR_60MHZ (0U << 1) | |||
#define DSTS_ENUMSPD_FS_PHY_30MHZ_OR_60MHZ (1U << 1) | |||
#define DSTS_ENUMSPD_FS_PHY_48MHZ (3U << 1) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup USB_LL_CORE_Frame_Interval USB Low Layer Core Frame Interval | |||
* @{ | |||
*/ | |||
#define DCFG_FRAME_INTERVAL_80 0U | |||
#define DCFG_FRAME_INTERVAL_85 1U | |||
#define DCFG_FRAME_INTERVAL_90 2U | |||
#define DCFG_FRAME_INTERVAL_95 3U | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup USB_LL_EP0_MPS USB Low Layer EP0 MPS | |||
* @{ | |||
*/ | |||
#define EP_MPS_64 0U | |||
#define EP_MPS_32 1U | |||
#define EP_MPS_16 2U | |||
#define EP_MPS_8 3U | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup USB_LL_EP_Speed USB Low Layer EP Speed | |||
* @{ | |||
*/ | |||
#define EP_SPEED_LOW 0U | |||
#define EP_SPEED_FULL 1U | |||
#define EP_SPEED_HIGH 2U | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup USB_LL_EP_Type USB Low Layer EP Type | |||
* @{ | |||
*/ | |||
#define EP_TYPE_CTRL 0U | |||
#define EP_TYPE_ISOC 1U | |||
#define EP_TYPE_BULK 2U | |||
#define EP_TYPE_INTR 3U | |||
#define EP_TYPE_MSK 3U | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup USB_LL_STS_Defines USB Low Layer STS Defines | |||
* @{ | |||
*/ | |||
#define STS_GOUT_NAK 1U | |||
#define STS_DATA_UPDT 2U | |||
#define STS_XFER_COMP 3U | |||
#define STS_SETUP_COMP 4U | |||
#define STS_SETUP_UPDT 6U | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup USB_LL_HCFG_SPEED_Defines USB Low Layer HCFG Speed Defines | |||
* @{ | |||
*/ | |||
#define HCFG_30_60_MHZ 0U | |||
#define HCFG_48_MHZ 1U | |||
#define HCFG_6_MHZ 2U | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup USB_LL_HPRT0_PRTSPD_SPEED_Defines USB Low Layer HPRT0 PRTSPD Speed Defines | |||
* @{ | |||
*/ | |||
#define HPRT0_PRTSPD_HIGH_SPEED 0U | |||
#define HPRT0_PRTSPD_FULL_SPEED 1U | |||
#define HPRT0_PRTSPD_LOW_SPEED 2U | |||
/** | |||
* @} | |||
*/ | |||
#define HCCHAR_CTRL 0U | |||
#define HCCHAR_ISOC 1U | |||
#define HCCHAR_BULK 2U | |||
#define HCCHAR_INTR 3U | |||
#define HC_PID_DATA0 0U | |||
#define HC_PID_DATA2 1U | |||
#define HC_PID_DATA1 2U | |||
#define HC_PID_SETUP 3U | |||
#define GRXSTS_PKTSTS_IN 2U | |||
#define GRXSTS_PKTSTS_IN_XFER_COMP 3U | |||
#define GRXSTS_PKTSTS_DATA_TOGGLE_ERR 5U | |||
#define GRXSTS_PKTSTS_CH_HALTED 7U | |||
#define USBx_PCGCCTL *(__IO uint32_t *)((uint32_t)USBx_BASE + USB_OTG_PCGCCTL_BASE) | |||
#define USBx_HPRT0 *(__IO uint32_t *)((uint32_t)USBx_BASE + USB_OTG_HOST_PORT_BASE) | |||
#define USBx_DEVICE ((USB_OTG_DeviceTypeDef *)(USBx_BASE + USB_OTG_DEVICE_BASE)) | |||
#define USBx_INEP(i) ((USB_OTG_INEndpointTypeDef *)(USBx_BASE\ | |||
+ USB_OTG_IN_ENDPOINT_BASE + ((i) * USB_OTG_EP_REG_SIZE))) | |||
#define USBx_OUTEP(i) ((USB_OTG_OUTEndpointTypeDef *)(USBx_BASE\ | |||
+ USB_OTG_OUT_ENDPOINT_BASE + ((i) * USB_OTG_EP_REG_SIZE))) | |||
#define USBx_DFIFO(i) *(__IO uint32_t *)(USBx_BASE + USB_OTG_FIFO_BASE + ((i) * USB_OTG_FIFO_SIZE)) | |||
#define USBx_HOST ((USB_OTG_HostTypeDef *)(USBx_BASE + USB_OTG_HOST_BASE)) | |||
#define USBx_HC(i) ((USB_OTG_HostChannelTypeDef *)(USBx_BASE\ | |||
+ USB_OTG_HOST_CHANNEL_BASE\ | |||
+ ((i) * USB_OTG_HOST_CHANNEL_SIZE))) | |||
#endif /* defined (USB_OTG_FS) */ | |||
#if defined (USB) | |||
/** @defgroup USB_LL_EP0_MPS USB Low Layer EP0 MPS | |||
* @{ | |||
*/ | |||
#define EP_MPS_64 0U | |||
#define EP_MPS_32 1U | |||
#define EP_MPS_16 2U | |||
#define EP_MPS_8 3U | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup USB_LL_EP_Type USB Low Layer EP Type | |||
* @{ | |||
*/ | |||
#define EP_TYPE_CTRL 0U | |||
#define EP_TYPE_ISOC 1U | |||
#define EP_TYPE_BULK 2U | |||
#define EP_TYPE_INTR 3U | |||
#define EP_TYPE_MSK 3U | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup USB_LL Device Speed | |||
* @{ | |||
*/ | |||
#define USBD_FS_SPEED 2U | |||
/** | |||
* @} | |||
*/ | |||
#define BTABLE_ADDRESS 0x000U | |||
#define PMA_ACCESS 2U | |||
#endif /* defined (USB) */ | |||
#if defined (USB_OTG_FS) | |||
#define EP_ADDR_MSK 0xFU | |||
#endif /* defined (USB_OTG_FS) */ | |||
#if defined (USB) | |||
#define EP_ADDR_MSK 0x7U | |||
#endif /* defined (USB) */ | |||
/** | |||
* @} | |||
*/ | |||
/* Exported macro ------------------------------------------------------------*/ | |||
/** @defgroup USB_LL_Exported_Macros USB Low Layer Exported Macros | |||
* @{ | |||
*/ | |||
#if defined (USB_OTG_FS) | |||
#define USB_MASK_INTERRUPT(__INSTANCE__, __INTERRUPT__) ((__INSTANCE__)->GINTMSK &= ~(__INTERRUPT__)) | |||
#define USB_UNMASK_INTERRUPT(__INSTANCE__, __INTERRUPT__) ((__INSTANCE__)->GINTMSK |= (__INTERRUPT__)) | |||
#define CLEAR_IN_EP_INTR(__EPNUM__, __INTERRUPT__) (USBx_INEP(__EPNUM__)->DIEPINT = (__INTERRUPT__)) | |||
#define CLEAR_OUT_EP_INTR(__EPNUM__, __INTERRUPT__) (USBx_OUTEP(__EPNUM__)->DOEPINT = (__INTERRUPT__)) | |||
#endif /* defined (USB_OTG_FS) */ | |||
/** | |||
* @} | |||
*/ | |||
/* Exported functions --------------------------------------------------------*/ | |||
/** @addtogroup USB_LL_Exported_Functions USB Low Layer Exported Functions | |||
* @{ | |||
*/ | |||
#if defined (USB_OTG_FS) | |||
HAL_StatusTypeDef USB_CoreInit(USB_OTG_GlobalTypeDef *USBx, USB_OTG_CfgTypeDef cfg); | |||
HAL_StatusTypeDef USB_DevInit(USB_OTG_GlobalTypeDef *USBx, USB_OTG_CfgTypeDef cfg); | |||
HAL_StatusTypeDef USB_EnableGlobalInt(USB_OTG_GlobalTypeDef *USBx); | |||
HAL_StatusTypeDef USB_DisableGlobalInt(USB_OTG_GlobalTypeDef *USBx); | |||
HAL_StatusTypeDef USB_SetTurnaroundTime(USB_OTG_GlobalTypeDef *USBx, uint32_t hclk, uint8_t speed); | |||
HAL_StatusTypeDef USB_SetCurrentMode(USB_OTG_GlobalTypeDef *USBx, USB_ModeTypeDef mode); | |||
HAL_StatusTypeDef USB_SetDevSpeed(USB_OTG_GlobalTypeDef *USBx, uint8_t speed); | |||
HAL_StatusTypeDef USB_FlushRxFifo(USB_OTG_GlobalTypeDef *USBx); | |||
HAL_StatusTypeDef USB_FlushTxFifo(USB_OTG_GlobalTypeDef *USBx, uint32_t num); | |||
HAL_StatusTypeDef USB_ActivateEndpoint(USB_OTG_GlobalTypeDef *USBx, USB_OTG_EPTypeDef *ep); | |||
HAL_StatusTypeDef USB_DeactivateEndpoint(USB_OTG_GlobalTypeDef *USBx, USB_OTG_EPTypeDef *ep); | |||
HAL_StatusTypeDef USB_ActivateDedicatedEndpoint(USB_OTG_GlobalTypeDef *USBx, USB_OTG_EPTypeDef *ep); | |||
HAL_StatusTypeDef USB_DeactivateDedicatedEndpoint(USB_OTG_GlobalTypeDef *USBx, USB_OTG_EPTypeDef *ep); | |||
HAL_StatusTypeDef USB_EPStartXfer(USB_OTG_GlobalTypeDef *USBx, USB_OTG_EPTypeDef *ep); | |||
HAL_StatusTypeDef USB_EP0StartXfer(USB_OTG_GlobalTypeDef *USBx, USB_OTG_EPTypeDef *ep); | |||
HAL_StatusTypeDef USB_WritePacket(USB_OTG_GlobalTypeDef *USBx, uint8_t *src, | |||
uint8_t ch_ep_num, uint16_t len); | |||
void *USB_ReadPacket(USB_OTG_GlobalTypeDef *USBx, uint8_t *dest, uint16_t len); | |||
HAL_StatusTypeDef USB_EPSetStall(USB_OTG_GlobalTypeDef *USBx, USB_OTG_EPTypeDef *ep); | |||
HAL_StatusTypeDef USB_EPClearStall(USB_OTG_GlobalTypeDef *USBx, USB_OTG_EPTypeDef *ep); | |||
HAL_StatusTypeDef USB_SetDevAddress(USB_OTG_GlobalTypeDef *USBx, uint8_t address); | |||
HAL_StatusTypeDef USB_DevConnect(USB_OTG_GlobalTypeDef *USBx); | |||
HAL_StatusTypeDef USB_DevDisconnect(USB_OTG_GlobalTypeDef *USBx); | |||
HAL_StatusTypeDef USB_StopDevice(USB_OTG_GlobalTypeDef *USBx); | |||
HAL_StatusTypeDef USB_ActivateSetup(USB_OTG_GlobalTypeDef *USBx); | |||
HAL_StatusTypeDef USB_EP0_OutStart(USB_OTG_GlobalTypeDef *USBx, uint8_t *psetup); | |||
uint8_t USB_GetDevSpeed(USB_OTG_GlobalTypeDef *USBx); | |||
uint32_t USB_GetMode(USB_OTG_GlobalTypeDef *USBx); | |||
uint32_t USB_ReadInterrupts(USB_OTG_GlobalTypeDef *USBx); | |||
uint32_t USB_ReadDevAllOutEpInterrupt(USB_OTG_GlobalTypeDef *USBx); | |||
uint32_t USB_ReadDevOutEPInterrupt(USB_OTG_GlobalTypeDef *USBx, uint8_t epnum); | |||
uint32_t USB_ReadDevAllInEpInterrupt(USB_OTG_GlobalTypeDef *USBx); | |||
uint32_t USB_ReadDevInEPInterrupt(USB_OTG_GlobalTypeDef *USBx, uint8_t epnum); | |||
void USB_ClearInterrupts(USB_OTG_GlobalTypeDef *USBx, uint32_t interrupt); | |||
HAL_StatusTypeDef USB_HostInit(USB_OTG_GlobalTypeDef *USBx, USB_OTG_CfgTypeDef cfg); | |||
HAL_StatusTypeDef USB_InitFSLSPClkSel(USB_OTG_GlobalTypeDef *USBx, uint8_t freq); | |||
HAL_StatusTypeDef USB_ResetPort(USB_OTG_GlobalTypeDef *USBx); | |||
HAL_StatusTypeDef USB_DriveVbus(USB_OTG_GlobalTypeDef *USBx, uint8_t state); | |||
uint32_t USB_GetHostSpeed(USB_OTG_GlobalTypeDef *USBx); | |||
uint32_t USB_GetCurrentFrame(USB_OTG_GlobalTypeDef *USBx); | |||
HAL_StatusTypeDef USB_HC_Init(USB_OTG_GlobalTypeDef *USBx, uint8_t ch_num, | |||
uint8_t epnum, uint8_t dev_address, uint8_t speed, | |||
uint8_t ep_type, uint16_t mps); | |||
HAL_StatusTypeDef USB_HC_StartXfer(USB_OTG_GlobalTypeDef *USBx, | |||
USB_OTG_HCTypeDef *hc); | |||
uint32_t USB_HC_ReadInterrupt(USB_OTG_GlobalTypeDef *USBx); | |||
HAL_StatusTypeDef USB_HC_Halt(USB_OTG_GlobalTypeDef *USBx, uint8_t hc_num); | |||
HAL_StatusTypeDef USB_DoPing(USB_OTG_GlobalTypeDef *USBx, uint8_t ch_num); | |||
HAL_StatusTypeDef USB_StopHost(USB_OTG_GlobalTypeDef *USBx); | |||
HAL_StatusTypeDef USB_ActivateRemoteWakeup(USB_OTG_GlobalTypeDef *USBx); | |||
HAL_StatusTypeDef USB_DeActivateRemoteWakeup(USB_OTG_GlobalTypeDef *USBx); | |||
#endif /* defined (USB_OTG_FS) */ | |||
#if defined (USB) | |||
HAL_StatusTypeDef USB_CoreInit(USB_TypeDef *USBx, USB_CfgTypeDef cfg); | |||
HAL_StatusTypeDef USB_DevInit(USB_TypeDef *USBx, USB_CfgTypeDef cfg); | |||
HAL_StatusTypeDef USB_EnableGlobalInt(USB_TypeDef *USBx); | |||
HAL_StatusTypeDef USB_DisableGlobalInt(USB_TypeDef *USBx); | |||
HAL_StatusTypeDef USB_SetCurrentMode(USB_TypeDef *USBx, USB_ModeTypeDef mode); | |||
HAL_StatusTypeDef USB_SetDevSpeed(USB_TypeDef *USBx, uint8_t speed); | |||
HAL_StatusTypeDef USB_FlushRxFifo(USB_TypeDef *USBx); | |||
HAL_StatusTypeDef USB_FlushTxFifo(USB_TypeDef *USBx, uint32_t num); | |||
#if defined (HAL_PCD_MODULE_ENABLED) | |||
HAL_StatusTypeDef USB_ActivateEndpoint(USB_TypeDef *USBx, USB_EPTypeDef *ep); | |||
HAL_StatusTypeDef USB_DeactivateEndpoint(USB_TypeDef *USBx, USB_EPTypeDef *ep); | |||
HAL_StatusTypeDef USB_EPStartXfer(USB_TypeDef *USBx, USB_EPTypeDef *ep); | |||
HAL_StatusTypeDef USB_EPSetStall(USB_TypeDef *USBx, USB_EPTypeDef *ep); | |||
HAL_StatusTypeDef USB_EPClearStall(USB_TypeDef *USBx, USB_EPTypeDef *ep); | |||
#endif | |||
HAL_StatusTypeDef USB_SetDevAddress(USB_TypeDef *USBx, uint8_t address); | |||
HAL_StatusTypeDef USB_DevConnect(USB_TypeDef *USBx); | |||
HAL_StatusTypeDef USB_DevDisconnect(USB_TypeDef *USBx); | |||
HAL_StatusTypeDef USB_StopDevice(USB_TypeDef *USBx); | |||
HAL_StatusTypeDef USB_EP0_OutStart(USB_TypeDef *USBx, uint8_t *psetup); | |||
HAL_StatusTypeDef USB_WritePacket(USB_TypeDef *USBx, uint8_t *src, | |||
uint8_t ch_ep_num, uint16_t len); | |||
void *USB_ReadPacket(USB_TypeDef *USBx, uint8_t *dest, uint16_t len); | |||
uint32_t USB_ReadInterrupts(USB_TypeDef *USBx); | |||
uint32_t USB_ReadDevAllOutEpInterrupt(USB_TypeDef *USBx); | |||
uint32_t USB_ReadDevOutEPInterrupt(USB_TypeDef *USBx, uint8_t epnum); | |||
uint32_t USB_ReadDevAllInEpInterrupt(USB_TypeDef *USBx); | |||
uint32_t USB_ReadDevInEPInterrupt(USB_TypeDef *USBx, uint8_t epnum); | |||
void USB_ClearInterrupts(USB_TypeDef *USBx, uint32_t interrupt); | |||
HAL_StatusTypeDef USB_ActivateRemoteWakeup(USB_TypeDef *USBx); | |||
HAL_StatusTypeDef USB_DeActivateRemoteWakeup(USB_TypeDef *USBx); | |||
void USB_WritePMA(USB_TypeDef *USBx, uint8_t *pbUsrBuf, | |||
uint16_t wPMABufAddr, uint16_t wNBytes); | |||
void USB_ReadPMA(USB_TypeDef *USBx, uint8_t *pbUsrBuf, | |||
uint16_t wPMABufAddr, uint16_t wNBytes); | |||
#endif /* defined (USB) */ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
#endif /* defined (USB) || defined (USB_OTG_FS) */ | |||
#ifdef __cplusplus | |||
} | |||
#endif | |||
#endif /* STM32F1xx_LL_USB_H */ | |||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@@ -0,0 +1,408 @@ | |||
/** | |||
****************************************************************************** | |||
* @file system_stm32f1xx.c | |||
* @author MCD Application Team | |||
* @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. | |||
* | |||
* 1. This file provides two functions and one global variable to be called from | |||
* user application: | |||
* - SystemInit(): Setups the system clock (System clock source, PLL Multiplier | |||
* factors, AHB/APBx prescalers and Flash settings). | |||
* This function is called at startup just after reset and | |||
* before branch to main program. This call is made inside | |||
* the "startup_stm32f1xx_xx.s" file. | |||
* | |||
* - SystemCoreClock variable: Contains the core clock (HCLK), it can be used | |||
* by the user application to setup the SysTick | |||
* timer or configure other parameters. | |||
* | |||
* - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must | |||
* be called whenever the core clock is changed | |||
* during program execution. | |||
* | |||
* 2. After each device reset the HSI (8 MHz) is used as system clock source. | |||
* Then SystemInit() function is called, in "startup_stm32f1xx_xx.s" file, to | |||
* configure the system clock before to branch to main program. | |||
* | |||
* 4. The default value of HSE crystal is set to 8 MHz (or 25 MHz, depending on | |||
* the product used), refer to "HSE_VALUE". | |||
* When HSE is used as system clock source, directly or through PLL, and you | |||
* are using different crystal you have to adapt the HSE value to your own | |||
* configuration. | |||
* | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© Copyright (c) 2017 STMicroelectronics. | |||
* All rights reserved.</center></h2> | |||
* | |||
* This software component is licensed by ST under BSD 3-Clause license, | |||
* the "License"; You may not use this file except in compliance with the | |||
* License. You may obtain a copy of the License at: | |||
* opensource.org/licenses/BSD-3-Clause | |||
* | |||
****************************************************************************** | |||
*/ | |||
/** @addtogroup CMSIS | |||
* @{ | |||
*/ | |||
/** @addtogroup stm32f1xx_system | |||
* @{ | |||
*/ | |||
/** @addtogroup STM32F1xx_System_Private_Includes | |||
* @{ | |||
*/ | |||
#include "stm32f1xx.h" | |||
/** | |||
* @} | |||
*/ | |||
/** @addtogroup STM32F1xx_System_Private_TypesDefinitions | |||
* @{ | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/** @addtogroup STM32F1xx_System_Private_Defines | |||
* @{ | |||
*/ | |||
#if !defined (HSE_VALUE) | |||
#define HSE_VALUE 8000000U /*!< Default value of the External oscillator in Hz. | |||
This value can be provided and adapted by the user application. */ | |||
#endif /* HSE_VALUE */ | |||
#if !defined (HSI_VALUE) | |||
#define HSI_VALUE 8000000U /*!< Default value of the Internal oscillator in Hz. | |||
This value can be provided and adapted by the user application. */ | |||
#endif /* HSI_VALUE */ | |||
/*!< Uncomment the following line if you need to use external SRAM */ | |||
#if defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F103xE) || defined(STM32F103xG) | |||
/* #define DATA_IN_ExtSRAM */ | |||
#endif /* STM32F100xE || STM32F101xE || STM32F101xG || STM32F103xE || STM32F103xG */ | |||
/* Note: Following vector table addresses must be defined in line with linker | |||
configuration. */ | |||
/*!< Uncomment the following line if you need to relocate the vector table | |||
anywhere in Flash or Sram, else the vector table is kept at the automatic | |||
remap of boot address selected */ | |||
/* #define USER_VECT_TAB_ADDRESS */ | |||
#if defined(USER_VECT_TAB_ADDRESS) | |||
/*!< Uncomment the following line if you need to relocate your vector Table | |||
in Sram else user remap will be done in Flash. */ | |||
/* #define VECT_TAB_SRAM */ | |||
#if defined(VECT_TAB_SRAM) | |||
#define VECT_TAB_BASE_ADDRESS SRAM_BASE /*!< Vector Table base address field. | |||
This value must be a multiple of 0x200. */ | |||
#define VECT_TAB_OFFSET 0x00000000U /*!< Vector Table base offset field. | |||
This value must be a multiple of 0x200. */ | |||
#else | |||
#define VECT_TAB_BASE_ADDRESS FLASH_BASE /*!< Vector Table base address field. | |||
This value must be a multiple of 0x200. */ | |||
#define VECT_TAB_OFFSET 0x00000000U /*!< Vector Table base offset field. | |||
This value must be a multiple of 0x200. */ | |||
#endif /* VECT_TAB_SRAM */ | |||
#endif /* USER_VECT_TAB_ADDRESS */ | |||
/******************************************************************************/ | |||
/** | |||
* @} | |||
*/ | |||
/** @addtogroup STM32F1xx_System_Private_Macros | |||
* @{ | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/** @addtogroup STM32F1xx_System_Private_Variables | |||
* @{ | |||
*/ | |||
/* This variable is updated in three ways: | |||
1) by calling CMSIS function SystemCoreClockUpdate() | |||
2) by calling HAL API function HAL_RCC_GetHCLKFreq() | |||
3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency | |||
Note: If you use this function to configure the system clock; then there | |||
is no need to call the 2 first functions listed above, since SystemCoreClock | |||
variable is updated automatically. | |||
*/ | |||
uint32_t SystemCoreClock = 16000000; | |||
const uint8_t AHBPrescTable[16U] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; | |||
const uint8_t APBPrescTable[8U] = {0, 0, 0, 0, 1, 2, 3, 4}; | |||
/** | |||
* @} | |||
*/ | |||
/** @addtogroup STM32F1xx_System_Private_FunctionPrototypes | |||
* @{ | |||
*/ | |||
#if defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F103xE) || defined(STM32F103xG) | |||
#ifdef DATA_IN_ExtSRAM | |||
static void SystemInit_ExtMemCtl(void); | |||
#endif /* DATA_IN_ExtSRAM */ | |||
#endif /* STM32F100xE || STM32F101xE || STM32F101xG || STM32F103xE || STM32F103xG */ | |||
/** | |||
* @} | |||
*/ | |||
/** @addtogroup STM32F1xx_System_Private_Functions | |||
* @{ | |||
*/ | |||
/** | |||
* @brief Setup the microcontroller system | |||
* Initialize the Embedded Flash Interface, the PLL and update the | |||
* SystemCoreClock variable. | |||
* @note This function should be used only after reset. | |||
* @param None | |||
* @retval None | |||
*/ | |||
void SystemInit (void) | |||
{ | |||
#if defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F103xE) || defined(STM32F103xG) | |||
#ifdef DATA_IN_ExtSRAM | |||
SystemInit_ExtMemCtl(); | |||
#endif /* DATA_IN_ExtSRAM */ | |||
#endif | |||
/* Configure the Vector Table location -------------------------------------*/ | |||
#if defined(USER_VECT_TAB_ADDRESS) | |||
SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */ | |||
#endif /* USER_VECT_TAB_ADDRESS */ | |||
} | |||
/** | |||
* @brief Update SystemCoreClock variable according to Clock Register Values. | |||
* The SystemCoreClock variable contains the core clock (HCLK), it can | |||
* be used by the user application to setup the SysTick timer or configure | |||
* other parameters. | |||
* | |||
* @note Each time the core clock (HCLK) changes, this function must be called | |||
* to update SystemCoreClock variable value. Otherwise, any configuration | |||
* based on this variable will be incorrect. | |||
* | |||
* @note - The system frequency computed by this function is not the real | |||
* frequency in the chip. It is calculated based on the predefined | |||
* constant and the selected clock source: | |||
* | |||
* - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) | |||
* | |||
* - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) | |||
* | |||
* - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) | |||
* or HSI_VALUE(*) multiplied by the PLL factors. | |||
* | |||
* (*) HSI_VALUE is a constant defined in stm32f1xx.h file (default value | |||
* 8 MHz) but the real value may vary depending on the variations | |||
* in voltage and temperature. | |||
* | |||
* (**) HSE_VALUE is a constant defined in stm32f1xx.h file (default value | |||
* 8 MHz or 25 MHz, depending on the product used), user has to ensure | |||
* that HSE_VALUE is same as the real frequency of the crystal used. | |||
* Otherwise, this function may have wrong result. | |||
* | |||
* - The result of this function could be not correct when using fractional | |||
* value for HSE crystal. | |||
* @param None | |||
* @retval None | |||
*/ | |||
void SystemCoreClockUpdate (void) | |||
{ | |||
uint32_t tmp = 0U, pllmull = 0U, pllsource = 0U; | |||
#if defined(STM32F105xC) || defined(STM32F107xC) | |||
uint32_t prediv1source = 0U, prediv1factor = 0U, prediv2factor = 0U, pll2mull = 0U; | |||
#endif /* STM32F105xC */ | |||
#if defined(STM32F100xB) || defined(STM32F100xE) | |||
uint32_t prediv1factor = 0U; | |||
#endif /* STM32F100xB or STM32F100xE */ | |||
/* Get SYSCLK source -------------------------------------------------------*/ | |||
tmp = RCC->CFGR & RCC_CFGR_SWS; | |||
switch (tmp) | |||
{ | |||
case 0x00U: /* HSI used as system clock */ | |||
SystemCoreClock = HSI_VALUE; | |||
break; | |||
case 0x04U: /* HSE used as system clock */ | |||
SystemCoreClock = HSE_VALUE; | |||
break; | |||
case 0x08U: /* PLL used as system clock */ | |||
/* Get PLL clock source and multiplication factor ----------------------*/ | |||
pllmull = RCC->CFGR & RCC_CFGR_PLLMULL; | |||
pllsource = RCC->CFGR & RCC_CFGR_PLLSRC; | |||
#if !defined(STM32F105xC) && !defined(STM32F107xC) | |||
pllmull = ( pllmull >> 18U) + 2U; | |||
if (pllsource == 0x00U) | |||
{ | |||
/* HSI oscillator clock divided by 2 selected as PLL clock entry */ | |||
SystemCoreClock = (HSI_VALUE >> 1U) * pllmull; | |||
} | |||
else | |||
{ | |||
#if defined(STM32F100xB) || defined(STM32F100xE) | |||
prediv1factor = (RCC->CFGR2 & RCC_CFGR2_PREDIV1) + 1U; | |||
/* HSE oscillator clock selected as PREDIV1 clock entry */ | |||
SystemCoreClock = (HSE_VALUE / prediv1factor) * pllmull; | |||
#else | |||
/* HSE selected as PLL clock entry */ | |||
if ((RCC->CFGR & RCC_CFGR_PLLXTPRE) != (uint32_t)RESET) | |||
{/* HSE oscillator clock divided by 2 */ | |||
SystemCoreClock = (HSE_VALUE >> 1U) * pllmull; | |||
} | |||
else | |||
{ | |||
SystemCoreClock = HSE_VALUE * pllmull; | |||
} | |||
#endif | |||
} | |||
#else | |||
pllmull = pllmull >> 18U; | |||
if (pllmull != 0x0DU) | |||
{ | |||
pllmull += 2U; | |||
} | |||
else | |||
{ /* PLL multiplication factor = PLL input clock * 6.5 */ | |||
pllmull = 13U / 2U; | |||
} | |||
if (pllsource == 0x00U) | |||
{ | |||
/* HSI oscillator clock divided by 2 selected as PLL clock entry */ | |||
SystemCoreClock = (HSI_VALUE >> 1U) * pllmull; | |||
} | |||
else | |||
{/* PREDIV1 selected as PLL clock entry */ | |||
/* Get PREDIV1 clock source and division factor */ | |||
prediv1source = RCC->CFGR2 & RCC_CFGR2_PREDIV1SRC; | |||
prediv1factor = (RCC->CFGR2 & RCC_CFGR2_PREDIV1) + 1U; | |||
if (prediv1source == 0U) | |||
{ | |||
/* HSE oscillator clock selected as PREDIV1 clock entry */ | |||
SystemCoreClock = (HSE_VALUE / prediv1factor) * pllmull; | |||
} | |||
else | |||
{/* PLL2 clock selected as PREDIV1 clock entry */ | |||
/* Get PREDIV2 division factor and PLL2 multiplication factor */ | |||
prediv2factor = ((RCC->CFGR2 & RCC_CFGR2_PREDIV2) >> 4U) + 1U; | |||
pll2mull = ((RCC->CFGR2 & RCC_CFGR2_PLL2MUL) >> 8U) + 2U; | |||
SystemCoreClock = (((HSE_VALUE / prediv2factor) * pll2mull) / prediv1factor) * pllmull; | |||
} | |||
} | |||
#endif /* STM32F105xC */ | |||
break; | |||
default: | |||
SystemCoreClock = HSI_VALUE; | |||
break; | |||
} | |||
/* Compute HCLK clock frequency ----------------*/ | |||
/* Get HCLK prescaler */ | |||
tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4U)]; | |||
/* HCLK clock frequency */ | |||
SystemCoreClock >>= tmp; | |||
} | |||
#if defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F103xE) || defined(STM32F103xG) | |||
/** | |||
* @brief Setup the external memory controller. Called in startup_stm32f1xx.s | |||
* before jump to __main | |||
* @param None | |||
* @retval None | |||
*/ | |||
#ifdef DATA_IN_ExtSRAM | |||
/** | |||
* @brief Setup the external memory controller. | |||
* Called in startup_stm32f1xx_xx.s/.c before jump to main. | |||
* This function configures the external SRAM mounted on STM3210E-EVAL | |||
* board (STM32 High density devices). This SRAM will be used as program | |||
* data memory (including heap and stack). | |||
* @param None | |||
* @retval None | |||
*/ | |||
void SystemInit_ExtMemCtl(void) | |||
{ | |||
__IO uint32_t tmpreg; | |||
/*!< FSMC Bank1 NOR/SRAM3 is used for the STM3210E-EVAL, if another Bank is | |||
required, then adjust the Register Addresses */ | |||
/* Enable FSMC clock */ | |||
RCC->AHBENR = 0x00000114U; | |||
/* Delay after an RCC peripheral clock enabling */ | |||
tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_FSMCEN); | |||
/* Enable GPIOD, GPIOE, GPIOF and GPIOG clocks */ | |||
RCC->APB2ENR = 0x000001E0U; | |||
/* Delay after an RCC peripheral clock enabling */ | |||
tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPDEN); | |||
(void)(tmpreg); | |||
/* --------------- SRAM Data lines, NOE and NWE configuration ---------------*/ | |||
/*---------------- SRAM Address lines configuration -------------------------*/ | |||
/*---------------- NOE and NWE configuration --------------------------------*/ | |||
/*---------------- NE3 configuration ----------------------------------------*/ | |||
/*---------------- NBL0, NBL1 configuration ---------------------------------*/ | |||
GPIOD->CRL = 0x44BB44BBU; | |||
GPIOD->CRH = 0xBBBBBBBBU; | |||
GPIOE->CRL = 0xB44444BBU; | |||
GPIOE->CRH = 0xBBBBBBBBU; | |||
GPIOF->CRL = 0x44BBBBBBU; | |||
GPIOF->CRH = 0xBBBB4444U; | |||
GPIOG->CRL = 0x44BBBBBBU; | |||
GPIOG->CRH = 0x444B4B44U; | |||
/*---------------- FSMC Configuration ---------------------------------------*/ | |||
/*---------------- Enable FSMC Bank1_SRAM Bank ------------------------------*/ | |||
FSMC_Bank1->BTCR[4U] = 0x00001091U; | |||
FSMC_Bank1->BTCR[5U] = 0x00110212U; | |||
} | |||
#endif /* DATA_IN_ExtSRAM */ | |||
#endif /* STM32F100xE || STM32F101xE || STM32F101xG || STM32F103xE || STM32F103xG */ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@@ -0,0 +1,98 @@ | |||
/** | |||
****************************************************************************** | |||
* @file system_stm32f10x.h | |||
* @author MCD Application Team | |||
* @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Header File. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© Copyright (c) 2017 STMicroelectronics. | |||
* All rights reserved.</center></h2> | |||
* | |||
* This software component is licensed by ST under BSD 3-Clause license, | |||
* the "License"; You may not use this file except in compliance with the | |||
* License. You may obtain a copy of the License at: | |||
* opensource.org/licenses/BSD-3-Clause | |||
* | |||
****************************************************************************** | |||
*/ | |||
/** @addtogroup CMSIS | |||
* @{ | |||
*/ | |||
/** @addtogroup stm32f10x_system | |||
* @{ | |||
*/ | |||
/** | |||
* @brief Define to prevent recursive inclusion | |||
*/ | |||
#ifndef __SYSTEM_STM32F10X_H | |||
#define __SYSTEM_STM32F10X_H | |||
#ifdef __cplusplus | |||
extern "C" { | |||
#endif | |||
/** @addtogroup STM32F10x_System_Includes | |||
* @{ | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/** @addtogroup STM32F10x_System_Exported_types | |||
* @{ | |||
*/ | |||
extern uint32_t SystemCoreClock; /*!< System Clock Frequency (Core Clock) */ | |||
extern const uint8_t AHBPrescTable[16U]; /*!< AHB prescalers table values */ | |||
extern const uint8_t APBPrescTable[8U]; /*!< APB prescalers table values */ | |||
/** | |||
* @} | |||
*/ | |||
/** @addtogroup STM32F10x_System_Exported_Constants | |||
* @{ | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/** @addtogroup STM32F10x_System_Exported_Macros | |||
* @{ | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/** @addtogroup STM32F10x_System_Exported_Functions | |||
* @{ | |||
*/ | |||
extern void SystemInit(void); | |||
extern void SystemCoreClockUpdate(void); | |||
/** | |||
* @} | |||
*/ | |||
#ifdef __cplusplus | |||
} | |||
#endif | |||
#endif /*__SYSTEM_STM32F10X_H */ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@@ -0,0 +1,30 @@ | |||
#!/bin/sh - | |||
COD=$1 | |||
if [ ! -d "$COD" ]; then | |||
echo "usage: $0 <checkoutdir>" | |||
echo "" | |||
echo "checkoutdir is the directory where the STM32CubeXX files are" | |||
echo "checked out." | |||
exit 1 | |||
fi | |||
err=0 | |||
while read lclfn cube cubefn; do | |||
cubefile="$COD/$cube/$cubefn" | |||
if [ ! -f "$cubefile" ]; then | |||
echo file "$cubefile" does not exist, but specified. | |||
err=1 | |||
continue | |||
fi | |||
cp "$cubefile" "$lclfn" | |||
git add "$lclfn" | |||
done << EOF | |||
$(cat .srcs) | |||
EOF | |||
if [ x"$err" != x"0" ]; then | |||
echo There was one or more errors. | |||
fi |
@@ -0,0 +1,7 @@ | |||
#ifdef STM32L151xC | |||
#include "stm32l1xx.h" | |||
#include "stm32l1xx_hal.h" | |||
#elif defined STM32F103xB | |||
#else | |||
#error No port for this controller | |||
#endif |
@@ -28,8 +28,7 @@ | |||
#endif | |||
/* Includes ------------------------------------------------------------------*/ | |||
#include "stm32l1xx.h" | |||
#include "stm32l1xx_hal.h" | |||
#include "usb_common_inc.h" | |||
#include "usbd_def.h" | |||
/* USER CODE BEGIN INCLUDE */ | |||
@@ -20,8 +20,7 @@ | |||
/* USER CODE END Header */ | |||
/* Includes ------------------------------------------------------------------*/ | |||
#include "stm32l1xx.h" | |||
#include "stm32l1xx_hal.h" | |||
#include "usb_common_inc.h" | |||
#include "usbd_def.h" | |||
#include "usbd_core.h" | |||
#include "usbd_cdc.h" | |||
@@ -32,8 +32,7 @@ | |||
#include <stdlib.h> | |||
#include <string.h> | |||
#include "main.h" | |||
#include "stm32l1xx.h" | |||
#include "stm32l1xx_hal.h" | |||
#include "usb_common_inc.h" | |||
/* USER CODE BEGIN INCLUDE */ | |||