Version initiale : Activité 2 étape 2.3
This commit is contained in:
parent
9448471cb9
commit
fc35ad8b62
42 changed files with 38166 additions and 699 deletions
46
Inc/stm32f1xx_it.h
Normal file
46
Inc/stm32f1xx_it.h
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file Examples_LL/GPIO/GPIO_InfiniteLedToggling/Inc/stm32f1xx_it.h
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @brief This file contains the headers of the interrupt handlers.
|
||||||
|
* !! modif : include main.h enlevé
|
||||||
|
******************************************************************************
|
||||||
|
* @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_IT_H
|
||||||
|
#define __STM32F1xx_IT_H
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
void NMI_Handler(void);
|
||||||
|
void HardFault_Handler(void);
|
||||||
|
void MemManage_Handler(void);
|
||||||
|
void BusFault_Handler(void);
|
||||||
|
void UsageFault_Handler(void);
|
||||||
|
void SVC_Handler(void);
|
||||||
|
void DebugMon_Handler(void);
|
||||||
|
void PendSV_Handler(void);
|
||||||
|
void SysTick_Handler(void);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* __STM32F1xx_IT_H */
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
3932
LLDrivers/inc/stm32f1xx_ll_adc.h
Normal file
3932
LLDrivers/inc/stm32f1xx_ll_adc.h
Normal file
File diff suppressed because it is too large
Load diff
1015
LLDrivers/inc/stm32f1xx_ll_bus.h
Normal file
1015
LLDrivers/inc/stm32f1xx_ll_bus.h
Normal file
File diff suppressed because it is too large
Load diff
640
LLDrivers/inc/stm32f1xx_ll_cortex.h
Normal file
640
LLDrivers/inc/stm32f1xx_ll_cortex.h
Normal file
|
@ -0,0 +1,640 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file stm32f1xx_ll_cortex.h
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @brief Header file of CORTEX LL module.
|
||||||
|
@verbatim
|
||||||
|
==============================================================================
|
||||||
|
##### How to use this driver #####
|
||||||
|
==============================================================================
|
||||||
|
[..]
|
||||||
|
The LL CORTEX driver contains a set of generic APIs that can be
|
||||||
|
used by user:
|
||||||
|
(+) SYSTICK configuration used by @ref LL_mDelay and @ref LL_Init1msTick
|
||||||
|
functions
|
||||||
|
(+) Low power mode configuration (SCB register of Cortex-MCU)
|
||||||
|
(+) MPU API to configure and enable regions
|
||||||
|
(MPU services provided only on some devices)
|
||||||
|
(+) API to access to MCU info (CPUID register)
|
||||||
|
(+) API to enable fault handler (SHCSR accesses)
|
||||||
|
|
||||||
|
@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
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||||
|
#ifndef __STM32F1xx_LL_CORTEX_H
|
||||||
|
#define __STM32F1xx_LL_CORTEX_H
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "stm32f1xx.h"
|
||||||
|
|
||||||
|
/** @addtogroup STM32F1xx_LL_Driver
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup CORTEX_LL CORTEX
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Private types -------------------------------------------------------------*/
|
||||||
|
/* Private variables ---------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* Private constants ---------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* Private macros ------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* Exported types ------------------------------------------------------------*/
|
||||||
|
/* Exported constants --------------------------------------------------------*/
|
||||||
|
/** @defgroup CORTEX_LL_Exported_Constants CORTEX Exported Constants
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup CORTEX_LL_EC_CLKSOURCE_HCLK SYSTICK Clock Source
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define LL_SYSTICK_CLKSOURCE_HCLK_DIV8 0x00000000U /*!< AHB clock divided by 8 selected as SysTick clock source.*/
|
||||||
|
#define LL_SYSTICK_CLKSOURCE_HCLK SysTick_CTRL_CLKSOURCE_Msk /*!< AHB clock selected as SysTick clock source. */
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup CORTEX_LL_EC_FAULT Handler Fault type
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define LL_HANDLER_FAULT_USG SCB_SHCSR_USGFAULTENA_Msk /*!< Usage fault */
|
||||||
|
#define LL_HANDLER_FAULT_BUS SCB_SHCSR_BUSFAULTENA_Msk /*!< Bus fault */
|
||||||
|
#define LL_HANDLER_FAULT_MEM SCB_SHCSR_MEMFAULTENA_Msk /*!< Memory management fault */
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if __MPU_PRESENT
|
||||||
|
|
||||||
|
/** @defgroup CORTEX_LL_EC_CTRL_HFNMI_PRIVDEF MPU Control
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define LL_MPU_CTRL_HFNMI_PRIVDEF_NONE 0x00000000U /*!< Disable NMI and privileged SW access */
|
||||||
|
#define LL_MPU_CTRL_HARDFAULT_NMI MPU_CTRL_HFNMIENA_Msk /*!< Enables the operation of MPU during hard fault, NMI, and FAULTMASK handlers */
|
||||||
|
#define LL_MPU_CTRL_PRIVILEGED_DEFAULT MPU_CTRL_PRIVDEFENA_Msk /*!< Enable privileged software access to default memory map */
|
||||||
|
#define LL_MPU_CTRL_HFNMI_PRIVDEF (MPU_CTRL_HFNMIENA_Msk | MPU_CTRL_PRIVDEFENA_Msk) /*!< Enable NMI and privileged SW access */
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup CORTEX_LL_EC_REGION MPU Region Number
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define LL_MPU_REGION_NUMBER0 0x00U /*!< REGION Number 0 */
|
||||||
|
#define LL_MPU_REGION_NUMBER1 0x01U /*!< REGION Number 1 */
|
||||||
|
#define LL_MPU_REGION_NUMBER2 0x02U /*!< REGION Number 2 */
|
||||||
|
#define LL_MPU_REGION_NUMBER3 0x03U /*!< REGION Number 3 */
|
||||||
|
#define LL_MPU_REGION_NUMBER4 0x04U /*!< REGION Number 4 */
|
||||||
|
#define LL_MPU_REGION_NUMBER5 0x05U /*!< REGION Number 5 */
|
||||||
|
#define LL_MPU_REGION_NUMBER6 0x06U /*!< REGION Number 6 */
|
||||||
|
#define LL_MPU_REGION_NUMBER7 0x07U /*!< REGION Number 7 */
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup CORTEX_LL_EC_REGION_SIZE MPU Region Size
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define LL_MPU_REGION_SIZE_32B (0x04U << MPU_RASR_SIZE_Pos) /*!< 32B Size of the MPU protection region */
|
||||||
|
#define LL_MPU_REGION_SIZE_64B (0x05U << MPU_RASR_SIZE_Pos) /*!< 64B Size of the MPU protection region */
|
||||||
|
#define LL_MPU_REGION_SIZE_128B (0x06U << MPU_RASR_SIZE_Pos) /*!< 128B Size of the MPU protection region */
|
||||||
|
#define LL_MPU_REGION_SIZE_256B (0x07U << MPU_RASR_SIZE_Pos) /*!< 256B Size of the MPU protection region */
|
||||||
|
#define LL_MPU_REGION_SIZE_512B (0x08U << MPU_RASR_SIZE_Pos) /*!< 512B Size of the MPU protection region */
|
||||||
|
#define LL_MPU_REGION_SIZE_1KB (0x09U << MPU_RASR_SIZE_Pos) /*!< 1KB Size of the MPU protection region */
|
||||||
|
#define LL_MPU_REGION_SIZE_2KB (0x0AU << MPU_RASR_SIZE_Pos) /*!< 2KB Size of the MPU protection region */
|
||||||
|
#define LL_MPU_REGION_SIZE_4KB (0x0BU << MPU_RASR_SIZE_Pos) /*!< 4KB Size of the MPU protection region */
|
||||||
|
#define LL_MPU_REGION_SIZE_8KB (0x0CU << MPU_RASR_SIZE_Pos) /*!< 8KB Size of the MPU protection region */
|
||||||
|
#define LL_MPU_REGION_SIZE_16KB (0x0DU << MPU_RASR_SIZE_Pos) /*!< 16KB Size of the MPU protection region */
|
||||||
|
#define LL_MPU_REGION_SIZE_32KB (0x0EU << MPU_RASR_SIZE_Pos) /*!< 32KB Size of the MPU protection region */
|
||||||
|
#define LL_MPU_REGION_SIZE_64KB (0x0FU << MPU_RASR_SIZE_Pos) /*!< 64KB Size of the MPU protection region */
|
||||||
|
#define LL_MPU_REGION_SIZE_128KB (0x10U << MPU_RASR_SIZE_Pos) /*!< 128KB Size of the MPU protection region */
|
||||||
|
#define LL_MPU_REGION_SIZE_256KB (0x11U << MPU_RASR_SIZE_Pos) /*!< 256KB Size of the MPU protection region */
|
||||||
|
#define LL_MPU_REGION_SIZE_512KB (0x12U << MPU_RASR_SIZE_Pos) /*!< 512KB Size of the MPU protection region */
|
||||||
|
#define LL_MPU_REGION_SIZE_1MB (0x13U << MPU_RASR_SIZE_Pos) /*!< 1MB Size of the MPU protection region */
|
||||||
|
#define LL_MPU_REGION_SIZE_2MB (0x14U << MPU_RASR_SIZE_Pos) /*!< 2MB Size of the MPU protection region */
|
||||||
|
#define LL_MPU_REGION_SIZE_4MB (0x15U << MPU_RASR_SIZE_Pos) /*!< 4MB Size of the MPU protection region */
|
||||||
|
#define LL_MPU_REGION_SIZE_8MB (0x16U << MPU_RASR_SIZE_Pos) /*!< 8MB Size of the MPU protection region */
|
||||||
|
#define LL_MPU_REGION_SIZE_16MB (0x17U << MPU_RASR_SIZE_Pos) /*!< 16MB Size of the MPU protection region */
|
||||||
|
#define LL_MPU_REGION_SIZE_32MB (0x18U << MPU_RASR_SIZE_Pos) /*!< 32MB Size of the MPU protection region */
|
||||||
|
#define LL_MPU_REGION_SIZE_64MB (0x19U << MPU_RASR_SIZE_Pos) /*!< 64MB Size of the MPU protection region */
|
||||||
|
#define LL_MPU_REGION_SIZE_128MB (0x1AU << MPU_RASR_SIZE_Pos) /*!< 128MB Size of the MPU protection region */
|
||||||
|
#define LL_MPU_REGION_SIZE_256MB (0x1BU << MPU_RASR_SIZE_Pos) /*!< 256MB Size of the MPU protection region */
|
||||||
|
#define LL_MPU_REGION_SIZE_512MB (0x1CU << MPU_RASR_SIZE_Pos) /*!< 512MB Size of the MPU protection region */
|
||||||
|
#define LL_MPU_REGION_SIZE_1GB (0x1DU << MPU_RASR_SIZE_Pos) /*!< 1GB Size of the MPU protection region */
|
||||||
|
#define LL_MPU_REGION_SIZE_2GB (0x1EU << MPU_RASR_SIZE_Pos) /*!< 2GB Size of the MPU protection region */
|
||||||
|
#define LL_MPU_REGION_SIZE_4GB (0x1FU << MPU_RASR_SIZE_Pos) /*!< 4GB Size of the MPU protection region */
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup CORTEX_LL_EC_REGION_PRIVILEDGES MPU Region Privileges
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define LL_MPU_REGION_NO_ACCESS (0x00U << MPU_RASR_AP_Pos) /*!< No access*/
|
||||||
|
#define LL_MPU_REGION_PRIV_RW (0x01U << MPU_RASR_AP_Pos) /*!< RW privileged (privileged access only)*/
|
||||||
|
#define LL_MPU_REGION_PRIV_RW_URO (0x02U << MPU_RASR_AP_Pos) /*!< RW privileged - RO user (Write in a user program generates a fault) */
|
||||||
|
#define LL_MPU_REGION_FULL_ACCESS (0x03U << MPU_RASR_AP_Pos) /*!< RW privileged & user (Full access) */
|
||||||
|
#define LL_MPU_REGION_PRIV_RO (0x05U << MPU_RASR_AP_Pos) /*!< RO privileged (privileged read only)*/
|
||||||
|
#define LL_MPU_REGION_PRIV_RO_URO (0x06U << MPU_RASR_AP_Pos) /*!< RO privileged & user (read only) */
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup CORTEX_LL_EC_TEX MPU TEX Level
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define LL_MPU_TEX_LEVEL0 (0x00U << MPU_RASR_TEX_Pos) /*!< b000 for TEX bits */
|
||||||
|
#define LL_MPU_TEX_LEVEL1 (0x01U << MPU_RASR_TEX_Pos) /*!< b001 for TEX bits */
|
||||||
|
#define LL_MPU_TEX_LEVEL2 (0x02U << MPU_RASR_TEX_Pos) /*!< b010 for TEX bits */
|
||||||
|
#define LL_MPU_TEX_LEVEL4 (0x04U << MPU_RASR_TEX_Pos) /*!< b100 for TEX bits */
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup CORTEX_LL_EC_INSTRUCTION_ACCESS MPU Instruction Access
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define LL_MPU_INSTRUCTION_ACCESS_ENABLE 0x00U /*!< Instruction fetches enabled */
|
||||||
|
#define LL_MPU_INSTRUCTION_ACCESS_DISABLE MPU_RASR_XN_Msk /*!< Instruction fetches disabled*/
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup CORTEX_LL_EC_SHAREABLE_ACCESS MPU Shareable Access
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define LL_MPU_ACCESS_SHAREABLE MPU_RASR_S_Msk /*!< Shareable memory attribute */
|
||||||
|
#define LL_MPU_ACCESS_NOT_SHAREABLE 0x00U /*!< Not Shareable memory attribute */
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup CORTEX_LL_EC_CACHEABLE_ACCESS MPU Cacheable Access
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define LL_MPU_ACCESS_CACHEABLE MPU_RASR_C_Msk /*!< Cacheable memory attribute */
|
||||||
|
#define LL_MPU_ACCESS_NOT_CACHEABLE 0x00U /*!< Not Cacheable memory attribute */
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup CORTEX_LL_EC_BUFFERABLE_ACCESS MPU Bufferable Access
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define LL_MPU_ACCESS_BUFFERABLE MPU_RASR_B_Msk /*!< Bufferable memory attribute */
|
||||||
|
#define LL_MPU_ACCESS_NOT_BUFFERABLE 0x00U /*!< Not Bufferable memory attribute */
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
#endif /* __MPU_PRESENT */
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Exported macro ------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* Exported functions --------------------------------------------------------*/
|
||||||
|
/** @defgroup CORTEX_LL_Exported_Functions CORTEX Exported Functions
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup CORTEX_LL_EF_SYSTICK SYSTICK
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This function checks if the Systick counter flag is active or not.
|
||||||
|
* @note It can be used in timeout function on application side.
|
||||||
|
* @rmtoll STK_CTRL COUNTFLAG LL_SYSTICK_IsActiveCounterFlag
|
||||||
|
* @retval State of bit (1 or 0).
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE uint32_t LL_SYSTICK_IsActiveCounterFlag(void)
|
||||||
|
{
|
||||||
|
return ((SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk) == (SysTick_CTRL_COUNTFLAG_Msk));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Configures the SysTick clock source
|
||||||
|
* @rmtoll STK_CTRL CLKSOURCE LL_SYSTICK_SetClkSource
|
||||||
|
* @param Source This parameter can be one of the following values:
|
||||||
|
* @arg @ref LL_SYSTICK_CLKSOURCE_HCLK_DIV8
|
||||||
|
* @arg @ref LL_SYSTICK_CLKSOURCE_HCLK
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE void LL_SYSTICK_SetClkSource(uint32_t Source)
|
||||||
|
{
|
||||||
|
if (Source == LL_SYSTICK_CLKSOURCE_HCLK)
|
||||||
|
{
|
||||||
|
SET_BIT(SysTick->CTRL, LL_SYSTICK_CLKSOURCE_HCLK);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
CLEAR_BIT(SysTick->CTRL, LL_SYSTICK_CLKSOURCE_HCLK);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get the SysTick clock source
|
||||||
|
* @rmtoll STK_CTRL CLKSOURCE LL_SYSTICK_GetClkSource
|
||||||
|
* @retval Returned value can be one of the following values:
|
||||||
|
* @arg @ref LL_SYSTICK_CLKSOURCE_HCLK_DIV8
|
||||||
|
* @arg @ref LL_SYSTICK_CLKSOURCE_HCLK
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE uint32_t LL_SYSTICK_GetClkSource(void)
|
||||||
|
{
|
||||||
|
return READ_BIT(SysTick->CTRL, LL_SYSTICK_CLKSOURCE_HCLK);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Enable SysTick exception request
|
||||||
|
* @rmtoll STK_CTRL TICKINT LL_SYSTICK_EnableIT
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE void LL_SYSTICK_EnableIT(void)
|
||||||
|
{
|
||||||
|
SET_BIT(SysTick->CTRL, SysTick_CTRL_TICKINT_Msk);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Disable SysTick exception request
|
||||||
|
* @rmtoll STK_CTRL TICKINT LL_SYSTICK_DisableIT
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE void LL_SYSTICK_DisableIT(void)
|
||||||
|
{
|
||||||
|
CLEAR_BIT(SysTick->CTRL, SysTick_CTRL_TICKINT_Msk);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Checks if the SYSTICK interrupt is enabled or disabled.
|
||||||
|
* @rmtoll STK_CTRL TICKINT LL_SYSTICK_IsEnabledIT
|
||||||
|
* @retval State of bit (1 or 0).
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE uint32_t LL_SYSTICK_IsEnabledIT(void)
|
||||||
|
{
|
||||||
|
return (READ_BIT(SysTick->CTRL, SysTick_CTRL_TICKINT_Msk) == (SysTick_CTRL_TICKINT_Msk));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup CORTEX_LL_EF_LOW_POWER_MODE LOW POWER MODE
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Processor uses sleep as its low power mode
|
||||||
|
* @rmtoll SCB_SCR SLEEPDEEP LL_LPM_EnableSleep
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE void LL_LPM_EnableSleep(void)
|
||||||
|
{
|
||||||
|
/* Clear SLEEPDEEP bit of Cortex System Control Register */
|
||||||
|
CLEAR_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPDEEP_Msk));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Processor uses deep sleep as its low power mode
|
||||||
|
* @rmtoll SCB_SCR SLEEPDEEP LL_LPM_EnableDeepSleep
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE void LL_LPM_EnableDeepSleep(void)
|
||||||
|
{
|
||||||
|
/* Set SLEEPDEEP bit of Cortex System Control Register */
|
||||||
|
SET_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPDEEP_Msk));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Configures sleep-on-exit when returning from Handler mode to Thread mode.
|
||||||
|
* @note Setting this bit to 1 enables an interrupt-driven application to avoid returning to an
|
||||||
|
* empty main application.
|
||||||
|
* @rmtoll SCB_SCR SLEEPONEXIT LL_LPM_EnableSleepOnExit
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE void LL_LPM_EnableSleepOnExit(void)
|
||||||
|
{
|
||||||
|
/* Set SLEEPONEXIT bit of Cortex System Control Register */
|
||||||
|
SET_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPONEXIT_Msk));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Do not sleep when returning to Thread mode.
|
||||||
|
* @rmtoll SCB_SCR SLEEPONEXIT LL_LPM_DisableSleepOnExit
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE void LL_LPM_DisableSleepOnExit(void)
|
||||||
|
{
|
||||||
|
/* Clear SLEEPONEXIT bit of Cortex System Control Register */
|
||||||
|
CLEAR_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPONEXIT_Msk));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Enabled events and all interrupts, including disabled interrupts, can wakeup the
|
||||||
|
* processor.
|
||||||
|
* @rmtoll SCB_SCR SEVEONPEND LL_LPM_EnableEventOnPend
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE void LL_LPM_EnableEventOnPend(void)
|
||||||
|
{
|
||||||
|
/* Set SEVEONPEND bit of Cortex System Control Register */
|
||||||
|
SET_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SEVONPEND_Msk));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Only enabled interrupts or events can wakeup the processor, disabled interrupts are
|
||||||
|
* excluded
|
||||||
|
* @rmtoll SCB_SCR SEVEONPEND LL_LPM_DisableEventOnPend
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE void LL_LPM_DisableEventOnPend(void)
|
||||||
|
{
|
||||||
|
/* Clear SEVEONPEND bit of Cortex System Control Register */
|
||||||
|
CLEAR_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SEVONPEND_Msk));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup CORTEX_LL_EF_HANDLER HANDLER
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Enable a fault in System handler control register (SHCSR)
|
||||||
|
* @rmtoll SCB_SHCSR MEMFAULTENA LL_HANDLER_EnableFault
|
||||||
|
* @param Fault This parameter can be a combination of the following values:
|
||||||
|
* @arg @ref LL_HANDLER_FAULT_USG
|
||||||
|
* @arg @ref LL_HANDLER_FAULT_BUS
|
||||||
|
* @arg @ref LL_HANDLER_FAULT_MEM
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE void LL_HANDLER_EnableFault(uint32_t Fault)
|
||||||
|
{
|
||||||
|
/* Enable the system handler fault */
|
||||||
|
SET_BIT(SCB->SHCSR, Fault);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Disable a fault in System handler control register (SHCSR)
|
||||||
|
* @rmtoll SCB_SHCSR MEMFAULTENA LL_HANDLER_DisableFault
|
||||||
|
* @param Fault This parameter can be a combination of the following values:
|
||||||
|
* @arg @ref LL_HANDLER_FAULT_USG
|
||||||
|
* @arg @ref LL_HANDLER_FAULT_BUS
|
||||||
|
* @arg @ref LL_HANDLER_FAULT_MEM
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE void LL_HANDLER_DisableFault(uint32_t Fault)
|
||||||
|
{
|
||||||
|
/* Disable the system handler fault */
|
||||||
|
CLEAR_BIT(SCB->SHCSR, Fault);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup CORTEX_LL_EF_MCU_INFO MCU INFO
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get Implementer code
|
||||||
|
* @rmtoll SCB_CPUID IMPLEMENTER LL_CPUID_GetImplementer
|
||||||
|
* @retval Value should be equal to 0x41 for ARM
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE uint32_t LL_CPUID_GetImplementer(void)
|
||||||
|
{
|
||||||
|
return (uint32_t)(READ_BIT(SCB->CPUID, SCB_CPUID_IMPLEMENTER_Msk) >> SCB_CPUID_IMPLEMENTER_Pos);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get Variant number (The r value in the rnpn product revision identifier)
|
||||||
|
* @rmtoll SCB_CPUID VARIANT LL_CPUID_GetVariant
|
||||||
|
* @retval Value between 0 and 255 (0x1: revision 1, 0x2: revision 2)
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE uint32_t LL_CPUID_GetVariant(void)
|
||||||
|
{
|
||||||
|
return (uint32_t)(READ_BIT(SCB->CPUID, SCB_CPUID_VARIANT_Msk) >> SCB_CPUID_VARIANT_Pos);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get Constant number
|
||||||
|
* @rmtoll SCB_CPUID ARCHITECTURE LL_CPUID_GetConstant
|
||||||
|
* @retval Value should be equal to 0xF for Cortex-M3 devices
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE uint32_t LL_CPUID_GetConstant(void)
|
||||||
|
{
|
||||||
|
return (uint32_t)(READ_BIT(SCB->CPUID, SCB_CPUID_ARCHITECTURE_Msk) >> SCB_CPUID_ARCHITECTURE_Pos);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get Part number
|
||||||
|
* @rmtoll SCB_CPUID PARTNO LL_CPUID_GetParNo
|
||||||
|
* @retval Value should be equal to 0xC23 for Cortex-M3
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE uint32_t LL_CPUID_GetParNo(void)
|
||||||
|
{
|
||||||
|
return (uint32_t)(READ_BIT(SCB->CPUID, SCB_CPUID_PARTNO_Msk) >> SCB_CPUID_PARTNO_Pos);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get Revision number (The p value in the rnpn product revision identifier, indicates patch release)
|
||||||
|
* @rmtoll SCB_CPUID REVISION LL_CPUID_GetRevision
|
||||||
|
* @retval Value between 0 and 255 (0x0: patch 0, 0x1: patch 1)
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE uint32_t LL_CPUID_GetRevision(void)
|
||||||
|
{
|
||||||
|
return (uint32_t)(READ_BIT(SCB->CPUID, SCB_CPUID_REVISION_Msk) >> SCB_CPUID_REVISION_Pos);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if __MPU_PRESENT
|
||||||
|
/** @defgroup CORTEX_LL_EF_MPU MPU
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Enable MPU with input options
|
||||||
|
* @rmtoll MPU_CTRL ENABLE LL_MPU_Enable
|
||||||
|
* @param Options This parameter can be one of the following values:
|
||||||
|
* @arg @ref LL_MPU_CTRL_HFNMI_PRIVDEF_NONE
|
||||||
|
* @arg @ref LL_MPU_CTRL_HARDFAULT_NMI
|
||||||
|
* @arg @ref LL_MPU_CTRL_PRIVILEGED_DEFAULT
|
||||||
|
* @arg @ref LL_MPU_CTRL_HFNMI_PRIVDEF
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE void LL_MPU_Enable(uint32_t Options)
|
||||||
|
{
|
||||||
|
/* Enable the MPU*/
|
||||||
|
WRITE_REG(MPU->CTRL, (MPU_CTRL_ENABLE_Msk | Options));
|
||||||
|
/* Ensure MPU settings take effects */
|
||||||
|
__DSB();
|
||||||
|
/* Sequence instruction fetches using update settings */
|
||||||
|
__ISB();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Disable MPU
|
||||||
|
* @rmtoll MPU_CTRL ENABLE LL_MPU_Disable
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE void LL_MPU_Disable(void)
|
||||||
|
{
|
||||||
|
/* Make sure outstanding transfers are done */
|
||||||
|
__DMB();
|
||||||
|
/* Disable MPU*/
|
||||||
|
WRITE_REG(MPU->CTRL, 0U);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Check if MPU is enabled or not
|
||||||
|
* @rmtoll MPU_CTRL ENABLE LL_MPU_IsEnabled
|
||||||
|
* @retval State of bit (1 or 0).
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE uint32_t LL_MPU_IsEnabled(void)
|
||||||
|
{
|
||||||
|
return (READ_BIT(MPU->CTRL, MPU_CTRL_ENABLE_Msk) == (MPU_CTRL_ENABLE_Msk));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Enable a MPU region
|
||||||
|
* @rmtoll MPU_RASR ENABLE LL_MPU_EnableRegion
|
||||||
|
* @param Region This parameter can be one of the following values:
|
||||||
|
* @arg @ref LL_MPU_REGION_NUMBER0
|
||||||
|
* @arg @ref LL_MPU_REGION_NUMBER1
|
||||||
|
* @arg @ref LL_MPU_REGION_NUMBER2
|
||||||
|
* @arg @ref LL_MPU_REGION_NUMBER3
|
||||||
|
* @arg @ref LL_MPU_REGION_NUMBER4
|
||||||
|
* @arg @ref LL_MPU_REGION_NUMBER5
|
||||||
|
* @arg @ref LL_MPU_REGION_NUMBER6
|
||||||
|
* @arg @ref LL_MPU_REGION_NUMBER7
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE void LL_MPU_EnableRegion(uint32_t Region)
|
||||||
|
{
|
||||||
|
/* Set Region number */
|
||||||
|
WRITE_REG(MPU->RNR, Region);
|
||||||
|
/* Enable the MPU region */
|
||||||
|
SET_BIT(MPU->RASR, MPU_RASR_ENABLE_Msk);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Configure and enable a region
|
||||||
|
* @rmtoll MPU_RNR REGION LL_MPU_ConfigRegion\n
|
||||||
|
* MPU_RBAR REGION LL_MPU_ConfigRegion\n
|
||||||
|
* MPU_RBAR ADDR LL_MPU_ConfigRegion\n
|
||||||
|
* MPU_RASR XN LL_MPU_ConfigRegion\n
|
||||||
|
* MPU_RASR AP LL_MPU_ConfigRegion\n
|
||||||
|
* MPU_RASR S LL_MPU_ConfigRegion\n
|
||||||
|
* MPU_RASR C LL_MPU_ConfigRegion\n
|
||||||
|
* MPU_RASR B LL_MPU_ConfigRegion\n
|
||||||
|
* MPU_RASR SIZE LL_MPU_ConfigRegion
|
||||||
|
* @param Region This parameter can be one of the following values:
|
||||||
|
* @arg @ref LL_MPU_REGION_NUMBER0
|
||||||
|
* @arg @ref LL_MPU_REGION_NUMBER1
|
||||||
|
* @arg @ref LL_MPU_REGION_NUMBER2
|
||||||
|
* @arg @ref LL_MPU_REGION_NUMBER3
|
||||||
|
* @arg @ref LL_MPU_REGION_NUMBER4
|
||||||
|
* @arg @ref LL_MPU_REGION_NUMBER5
|
||||||
|
* @arg @ref LL_MPU_REGION_NUMBER6
|
||||||
|
* @arg @ref LL_MPU_REGION_NUMBER7
|
||||||
|
* @param Address Value of region base address
|
||||||
|
* @param SubRegionDisable Sub-region disable value between Min_Data = 0x00 and Max_Data = 0xFF
|
||||||
|
* @param Attributes This parameter can be a combination of the following values:
|
||||||
|
* @arg @ref LL_MPU_REGION_SIZE_32B or @ref LL_MPU_REGION_SIZE_64B or @ref LL_MPU_REGION_SIZE_128B or @ref LL_MPU_REGION_SIZE_256B or @ref LL_MPU_REGION_SIZE_512B
|
||||||
|
* or @ref LL_MPU_REGION_SIZE_1KB or @ref LL_MPU_REGION_SIZE_2KB or @ref LL_MPU_REGION_SIZE_4KB or @ref LL_MPU_REGION_SIZE_8KB or @ref LL_MPU_REGION_SIZE_16KB
|
||||||
|
* or @ref LL_MPU_REGION_SIZE_32KB or @ref LL_MPU_REGION_SIZE_64KB or @ref LL_MPU_REGION_SIZE_128KB or @ref LL_MPU_REGION_SIZE_256KB or @ref LL_MPU_REGION_SIZE_512KB
|
||||||
|
* or @ref LL_MPU_REGION_SIZE_1MB or @ref LL_MPU_REGION_SIZE_2MB or @ref LL_MPU_REGION_SIZE_4MB or @ref LL_MPU_REGION_SIZE_8MB or @ref LL_MPU_REGION_SIZE_16MB
|
||||||
|
* or @ref LL_MPU_REGION_SIZE_32MB or @ref LL_MPU_REGION_SIZE_64MB or @ref LL_MPU_REGION_SIZE_128MB or @ref LL_MPU_REGION_SIZE_256MB or @ref LL_MPU_REGION_SIZE_512MB
|
||||||
|
* or @ref LL_MPU_REGION_SIZE_1GB or @ref LL_MPU_REGION_SIZE_2GB or @ref LL_MPU_REGION_SIZE_4GB
|
||||||
|
* @arg @ref LL_MPU_REGION_NO_ACCESS or @ref LL_MPU_REGION_PRIV_RW or @ref LL_MPU_REGION_PRIV_RW_URO or @ref LL_MPU_REGION_FULL_ACCESS
|
||||||
|
* or @ref LL_MPU_REGION_PRIV_RO or @ref LL_MPU_REGION_PRIV_RO_URO
|
||||||
|
* @arg @ref LL_MPU_TEX_LEVEL0 or @ref LL_MPU_TEX_LEVEL1 or @ref LL_MPU_TEX_LEVEL2 or @ref LL_MPU_TEX_LEVEL4
|
||||||
|
* @arg @ref LL_MPU_INSTRUCTION_ACCESS_ENABLE or @ref LL_MPU_INSTRUCTION_ACCESS_DISABLE
|
||||||
|
* @arg @ref LL_MPU_ACCESS_SHAREABLE or @ref LL_MPU_ACCESS_NOT_SHAREABLE
|
||||||
|
* @arg @ref LL_MPU_ACCESS_CACHEABLE or @ref LL_MPU_ACCESS_NOT_CACHEABLE
|
||||||
|
* @arg @ref LL_MPU_ACCESS_BUFFERABLE or @ref LL_MPU_ACCESS_NOT_BUFFERABLE
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE void LL_MPU_ConfigRegion(uint32_t Region, uint32_t SubRegionDisable, uint32_t Address, uint32_t Attributes)
|
||||||
|
{
|
||||||
|
/* Set Region number */
|
||||||
|
WRITE_REG(MPU->RNR, Region);
|
||||||
|
/* Set base address */
|
||||||
|
WRITE_REG(MPU->RBAR, (Address & 0xFFFFFFE0U));
|
||||||
|
/* Configure MPU */
|
||||||
|
WRITE_REG(MPU->RASR, (MPU_RASR_ENABLE_Msk | Attributes | SubRegionDisable << MPU_RASR_SRD_Pos));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Disable a region
|
||||||
|
* @rmtoll MPU_RNR REGION LL_MPU_DisableRegion\n
|
||||||
|
* MPU_RASR ENABLE LL_MPU_DisableRegion
|
||||||
|
* @param Region This parameter can be one of the following values:
|
||||||
|
* @arg @ref LL_MPU_REGION_NUMBER0
|
||||||
|
* @arg @ref LL_MPU_REGION_NUMBER1
|
||||||
|
* @arg @ref LL_MPU_REGION_NUMBER2
|
||||||
|
* @arg @ref LL_MPU_REGION_NUMBER3
|
||||||
|
* @arg @ref LL_MPU_REGION_NUMBER4
|
||||||
|
* @arg @ref LL_MPU_REGION_NUMBER5
|
||||||
|
* @arg @ref LL_MPU_REGION_NUMBER6
|
||||||
|
* @arg @ref LL_MPU_REGION_NUMBER7
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE void LL_MPU_DisableRegion(uint32_t Region)
|
||||||
|
{
|
||||||
|
/* Set Region number */
|
||||||
|
WRITE_REG(MPU->RNR, Region);
|
||||||
|
/* Disable the MPU region */
|
||||||
|
CLEAR_BIT(MPU->RASR, MPU_RASR_ENABLE_Msk);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#endif /* __MPU_PRESENT */
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* __STM32F1xx_LL_CORTEX_H */
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
204
LLDrivers/inc/stm32f1xx_ll_crc.h
Normal file
204
LLDrivers/inc/stm32f1xx_ll_crc.h
Normal file
|
@ -0,0 +1,204 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file stm32f1xx_ll_crc.h
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @brief Header file of CRC LL 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_CRC_H
|
||||||
|
#define STM32F1xx_LL_CRC_H
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "stm32f1xx.h"
|
||||||
|
|
||||||
|
/** @addtogroup STM32F1xx_LL_Driver
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(CRC)
|
||||||
|
|
||||||
|
/** @defgroup CRC_LL CRC
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Private types -------------------------------------------------------------*/
|
||||||
|
/* Private variables ---------------------------------------------------------*/
|
||||||
|
/* Private constants ---------------------------------------------------------*/
|
||||||
|
/* Private macros ------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* Exported types ------------------------------------------------------------*/
|
||||||
|
/* Exported constants --------------------------------------------------------*/
|
||||||
|
/** @defgroup CRC_LL_Exported_Constants CRC Exported Constants
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Exported macro ------------------------------------------------------------*/
|
||||||
|
/** @defgroup CRC_LL_Exported_Macros CRC Exported Macros
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup CRC_LL_EM_WRITE_READ Common Write and read registers Macros
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Write a value in CRC register
|
||||||
|
* @param __INSTANCE__ CRC Instance
|
||||||
|
* @param __REG__ Register to be written
|
||||||
|
* @param __VALUE__ Value to be written in the register
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define LL_CRC_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, __VALUE__)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Read a value in CRC register
|
||||||
|
* @param __INSTANCE__ CRC Instance
|
||||||
|
* @param __REG__ Register to be read
|
||||||
|
* @retval Register value
|
||||||
|
*/
|
||||||
|
#define LL_CRC_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/* Exported functions --------------------------------------------------------*/
|
||||||
|
/** @defgroup CRC_LL_Exported_Functions CRC Exported Functions
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup CRC_LL_EF_Configuration CRC Configuration functions
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Reset the CRC calculation unit.
|
||||||
|
* @note If Programmable Initial CRC value feature
|
||||||
|
* is available, also set the Data Register to the value stored in the
|
||||||
|
* CRC_INIT register, otherwise, reset Data Register to its default value.
|
||||||
|
* @rmtoll CR RESET LL_CRC_ResetCRCCalculationUnit
|
||||||
|
* @param CRCx CRC Instance
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE void LL_CRC_ResetCRCCalculationUnit(CRC_TypeDef *CRCx)
|
||||||
|
{
|
||||||
|
SET_BIT(CRCx->CR, CRC_CR_RESET);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup CRC_LL_EF_Data_Management Data_Management
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Write given 32-bit data to the CRC calculator
|
||||||
|
* @rmtoll DR DR LL_CRC_FeedData32
|
||||||
|
* @param CRCx CRC Instance
|
||||||
|
* @param InData value to be provided to CRC calculator between between Min_Data=0 and Max_Data=0xFFFFFFFF
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE void LL_CRC_FeedData32(CRC_TypeDef *CRCx, uint32_t InData)
|
||||||
|
{
|
||||||
|
WRITE_REG(CRCx->DR, InData);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Return current CRC calculation result. 32 bits value is returned.
|
||||||
|
* @rmtoll DR DR LL_CRC_ReadData32
|
||||||
|
* @param CRCx CRC Instance
|
||||||
|
* @retval Current CRC calculation result as stored in CRC_DR register (32 bits).
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE uint32_t LL_CRC_ReadData32(CRC_TypeDef *CRCx)
|
||||||
|
{
|
||||||
|
return (uint32_t)(READ_REG(CRCx->DR));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Return data stored in the Independent Data(IDR) register.
|
||||||
|
* @note This register can be used as a temporary storage location for one byte.
|
||||||
|
* @rmtoll IDR IDR LL_CRC_Read_IDR
|
||||||
|
* @param CRCx CRC Instance
|
||||||
|
* @retval Value stored in CRC_IDR register (General-purpose 8-bit data register).
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE uint32_t LL_CRC_Read_IDR(CRC_TypeDef *CRCx)
|
||||||
|
{
|
||||||
|
return (uint32_t)(READ_REG(CRCx->IDR));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Store data in the Independent Data(IDR) register.
|
||||||
|
* @note This register can be used as a temporary storage location for one byte.
|
||||||
|
* @rmtoll IDR IDR LL_CRC_Write_IDR
|
||||||
|
* @param CRCx CRC Instance
|
||||||
|
* @param InData value to be stored in CRC_IDR register (8-bit) between Min_Data=0 and Max_Data=0xFF
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE void LL_CRC_Write_IDR(CRC_TypeDef *CRCx, uint32_t InData)
|
||||||
|
{
|
||||||
|
*((uint8_t __IO *)(&CRCx->IDR)) = (uint8_t) InData;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(USE_FULL_LL_DRIVER)
|
||||||
|
/** @defgroup CRC_LL_EF_Init Initialization and de-initialization functions
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
ErrorStatus LL_CRC_DeInit(CRC_TypeDef *CRCx);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
#endif /* USE_FULL_LL_DRIVER */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#endif /* defined(CRC) */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* STM32F1xx_LL_CRC_H */
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
1326
LLDrivers/inc/stm32f1xx_ll_dac.h
Normal file
1326
LLDrivers/inc/stm32f1xx_ll_dac.h
Normal file
File diff suppressed because it is too large
Load diff
1960
LLDrivers/inc/stm32f1xx_ll_dma.h
Normal file
1960
LLDrivers/inc/stm32f1xx_ll_dma.h
Normal file
File diff suppressed because it is too large
Load diff
888
LLDrivers/inc/stm32f1xx_ll_exti.h
Normal file
888
LLDrivers/inc/stm32f1xx_ll_exti.h
Normal file
|
@ -0,0 +1,888 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file stm32f1xx_ll_exti.h
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @brief Header file of EXTI LL 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_EXTI_H
|
||||||
|
#define STM32F1xx_LL_EXTI_H
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "stm32f1xx.h"
|
||||||
|
|
||||||
|
/** @addtogroup STM32F1xx_LL_Driver
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined (EXTI)
|
||||||
|
|
||||||
|
/** @defgroup EXTI_LL EXTI
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Private types -------------------------------------------------------------*/
|
||||||
|
/* Private variables ---------------------------------------------------------*/
|
||||||
|
/* Private constants ---------------------------------------------------------*/
|
||||||
|
/* Private Macros ------------------------------------------------------------*/
|
||||||
|
#if defined(USE_FULL_LL_DRIVER)
|
||||||
|
/** @defgroup EXTI_LL_Private_Macros EXTI Private Macros
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
#endif /*USE_FULL_LL_DRIVER*/
|
||||||
|
/* Exported types ------------------------------------------------------------*/
|
||||||
|
#if defined(USE_FULL_LL_DRIVER)
|
||||||
|
/** @defgroup EXTI_LL_ES_INIT EXTI Exported Init structure
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
|
||||||
|
uint32_t Line_0_31; /*!< Specifies the EXTI lines to be enabled or disabled for Lines in range 0 to 31
|
||||||
|
This parameter can be any combination of @ref EXTI_LL_EC_LINE */
|
||||||
|
|
||||||
|
FunctionalState LineCommand; /*!< Specifies the new state of the selected EXTI lines.
|
||||||
|
This parameter can be set either to ENABLE or DISABLE */
|
||||||
|
|
||||||
|
uint8_t Mode; /*!< Specifies the mode for the EXTI lines.
|
||||||
|
This parameter can be a value of @ref EXTI_LL_EC_MODE. */
|
||||||
|
|
||||||
|
uint8_t Trigger; /*!< Specifies the trigger signal active edge for the EXTI lines.
|
||||||
|
This parameter can be a value of @ref EXTI_LL_EC_TRIGGER. */
|
||||||
|
} LL_EXTI_InitTypeDef;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
#endif /*USE_FULL_LL_DRIVER*/
|
||||||
|
|
||||||
|
/* Exported constants --------------------------------------------------------*/
|
||||||
|
/** @defgroup EXTI_LL_Exported_Constants EXTI Exported Constants
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup EXTI_LL_EC_LINE LINE
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define LL_EXTI_LINE_0 EXTI_IMR_IM0 /*!< Extended line 0 */
|
||||||
|
#define LL_EXTI_LINE_1 EXTI_IMR_IM1 /*!< Extended line 1 */
|
||||||
|
#define LL_EXTI_LINE_2 EXTI_IMR_IM2 /*!< Extended line 2 */
|
||||||
|
#define LL_EXTI_LINE_3 EXTI_IMR_IM3 /*!< Extended line 3 */
|
||||||
|
#define LL_EXTI_LINE_4 EXTI_IMR_IM4 /*!< Extended line 4 */
|
||||||
|
#define LL_EXTI_LINE_5 EXTI_IMR_IM5 /*!< Extended line 5 */
|
||||||
|
#define LL_EXTI_LINE_6 EXTI_IMR_IM6 /*!< Extended line 6 */
|
||||||
|
#define LL_EXTI_LINE_7 EXTI_IMR_IM7 /*!< Extended line 7 */
|
||||||
|
#define LL_EXTI_LINE_8 EXTI_IMR_IM8 /*!< Extended line 8 */
|
||||||
|
#define LL_EXTI_LINE_9 EXTI_IMR_IM9 /*!< Extended line 9 */
|
||||||
|
#define LL_EXTI_LINE_10 EXTI_IMR_IM10 /*!< Extended line 10 */
|
||||||
|
#define LL_EXTI_LINE_11 EXTI_IMR_IM11 /*!< Extended line 11 */
|
||||||
|
#define LL_EXTI_LINE_12 EXTI_IMR_IM12 /*!< Extended line 12 */
|
||||||
|
#define LL_EXTI_LINE_13 EXTI_IMR_IM13 /*!< Extended line 13 */
|
||||||
|
#define LL_EXTI_LINE_14 EXTI_IMR_IM14 /*!< Extended line 14 */
|
||||||
|
#define LL_EXTI_LINE_15 EXTI_IMR_IM15 /*!< Extended line 15 */
|
||||||
|
#if defined(EXTI_IMR_IM16)
|
||||||
|
#define LL_EXTI_LINE_16 EXTI_IMR_IM16 /*!< Extended line 16 */
|
||||||
|
#endif
|
||||||
|
#define LL_EXTI_LINE_17 EXTI_IMR_IM17 /*!< Extended line 17 */
|
||||||
|
#if defined(EXTI_IMR_IM18)
|
||||||
|
#define LL_EXTI_LINE_18 EXTI_IMR_IM18 /*!< Extended line 18 */
|
||||||
|
#endif
|
||||||
|
#if defined(EXTI_IMR_IM19)
|
||||||
|
#define LL_EXTI_LINE_19 EXTI_IMR_IM19 /*!< Extended line 19 */
|
||||||
|
#endif
|
||||||
|
#if defined(EXTI_IMR_IM20)
|
||||||
|
#define LL_EXTI_LINE_20 EXTI_IMR_IM20 /*!< Extended line 20 */
|
||||||
|
#endif
|
||||||
|
#if defined(EXTI_IMR_IM21)
|
||||||
|
#define LL_EXTI_LINE_21 EXTI_IMR_IM21 /*!< Extended line 21 */
|
||||||
|
#endif
|
||||||
|
#if defined(EXTI_IMR_IM22)
|
||||||
|
#define LL_EXTI_LINE_22 EXTI_IMR_IM22 /*!< Extended line 22 */
|
||||||
|
#endif
|
||||||
|
#if defined(EXTI_IMR_IM23)
|
||||||
|
#define LL_EXTI_LINE_23 EXTI_IMR_IM23 /*!< Extended line 23 */
|
||||||
|
#endif
|
||||||
|
#if defined(EXTI_IMR_IM24)
|
||||||
|
#define LL_EXTI_LINE_24 EXTI_IMR_IM24 /*!< Extended line 24 */
|
||||||
|
#endif
|
||||||
|
#if defined(EXTI_IMR_IM25)
|
||||||
|
#define LL_EXTI_LINE_25 EXTI_IMR_IM25 /*!< Extended line 25 */
|
||||||
|
#endif
|
||||||
|
#if defined(EXTI_IMR_IM26)
|
||||||
|
#define LL_EXTI_LINE_26 EXTI_IMR_IM26 /*!< Extended line 26 */
|
||||||
|
#endif
|
||||||
|
#if defined(EXTI_IMR_IM27)
|
||||||
|
#define LL_EXTI_LINE_27 EXTI_IMR_IM27 /*!< Extended line 27 */
|
||||||
|
#endif
|
||||||
|
#if defined(EXTI_IMR_IM28)
|
||||||
|
#define LL_EXTI_LINE_28 EXTI_IMR_IM28 /*!< Extended line 28 */
|
||||||
|
#endif
|
||||||
|
#if defined(EXTI_IMR_IM29)
|
||||||
|
#define LL_EXTI_LINE_29 EXTI_IMR_IM29 /*!< Extended line 29 */
|
||||||
|
#endif
|
||||||
|
#if defined(EXTI_IMR_IM30)
|
||||||
|
#define LL_EXTI_LINE_30 EXTI_IMR_IM30 /*!< Extended line 30 */
|
||||||
|
#endif
|
||||||
|
#if defined(EXTI_IMR_IM31)
|
||||||
|
#define LL_EXTI_LINE_31 EXTI_IMR_IM31 /*!< Extended line 31 */
|
||||||
|
#endif
|
||||||
|
#define LL_EXTI_LINE_ALL_0_31 EXTI_IMR_IM /*!< All Extended line not reserved*/
|
||||||
|
|
||||||
|
|
||||||
|
#define LL_EXTI_LINE_ALL (0xFFFFFFFFU) /*!< All Extended line */
|
||||||
|
|
||||||
|
#if defined(USE_FULL_LL_DRIVER)
|
||||||
|
#define LL_EXTI_LINE_NONE (0x00000000U) /*!< None Extended line */
|
||||||
|
#endif /*USE_FULL_LL_DRIVER*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
#if defined(USE_FULL_LL_DRIVER)
|
||||||
|
|
||||||
|
/** @defgroup EXTI_LL_EC_MODE Mode
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define LL_EXTI_MODE_IT ((uint8_t)0x00) /*!< Interrupt Mode */
|
||||||
|
#define LL_EXTI_MODE_EVENT ((uint8_t)0x01) /*!< Event Mode */
|
||||||
|
#define LL_EXTI_MODE_IT_EVENT ((uint8_t)0x02) /*!< Interrupt & Event Mode */
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup EXTI_LL_EC_TRIGGER Edge Trigger
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define LL_EXTI_TRIGGER_NONE ((uint8_t)0x00) /*!< No Trigger Mode */
|
||||||
|
#define LL_EXTI_TRIGGER_RISING ((uint8_t)0x01) /*!< Trigger Rising Mode */
|
||||||
|
#define LL_EXTI_TRIGGER_FALLING ((uint8_t)0x02) /*!< Trigger Falling Mode */
|
||||||
|
#define LL_EXTI_TRIGGER_RISING_FALLING ((uint8_t)0x03) /*!< Trigger Rising & Falling Mode */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#endif /*USE_FULL_LL_DRIVER*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Exported macro ------------------------------------------------------------*/
|
||||||
|
/** @defgroup EXTI_LL_Exported_Macros EXTI Exported Macros
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup EXTI_LL_EM_WRITE_READ Common Write and read registers Macros
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Write a value in EXTI register
|
||||||
|
* @param __REG__ Register to be written
|
||||||
|
* @param __VALUE__ Value to be written in the register
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define LL_EXTI_WriteReg(__REG__, __VALUE__) WRITE_REG(EXTI->__REG__, (__VALUE__))
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Read a value in EXTI register
|
||||||
|
* @param __REG__ Register to be read
|
||||||
|
* @retval Register value
|
||||||
|
*/
|
||||||
|
#define LL_EXTI_ReadReg(__REG__) READ_REG(EXTI->__REG__)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* Exported functions --------------------------------------------------------*/
|
||||||
|
/** @defgroup EXTI_LL_Exported_Functions EXTI Exported Functions
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
/** @defgroup EXTI_LL_EF_IT_Management IT_Management
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Enable ExtiLine Interrupt request for Lines in range 0 to 31
|
||||||
|
* @note The reset value for the direct or internal lines (see RM)
|
||||||
|
* is set to 1 in order to enable the interrupt by default.
|
||||||
|
* Bits are set automatically at Power on.
|
||||||
|
* @rmtoll IMR IMx LL_EXTI_EnableIT_0_31
|
||||||
|
* @param ExtiLine This parameter can be one of the following values:
|
||||||
|
* @arg @ref LL_EXTI_LINE_0
|
||||||
|
* @arg @ref LL_EXTI_LINE_1
|
||||||
|
* @arg @ref LL_EXTI_LINE_2
|
||||||
|
* @arg @ref LL_EXTI_LINE_3
|
||||||
|
* @arg @ref LL_EXTI_LINE_4
|
||||||
|
* @arg @ref LL_EXTI_LINE_5
|
||||||
|
* @arg @ref LL_EXTI_LINE_6
|
||||||
|
* @arg @ref LL_EXTI_LINE_7
|
||||||
|
* @arg @ref LL_EXTI_LINE_8
|
||||||
|
* @arg @ref LL_EXTI_LINE_9
|
||||||
|
* @arg @ref LL_EXTI_LINE_10
|
||||||
|
* @arg @ref LL_EXTI_LINE_11
|
||||||
|
* @arg @ref LL_EXTI_LINE_12
|
||||||
|
* @arg @ref LL_EXTI_LINE_13
|
||||||
|
* @arg @ref LL_EXTI_LINE_14
|
||||||
|
* @arg @ref LL_EXTI_LINE_15
|
||||||
|
* @arg @ref LL_EXTI_LINE_16
|
||||||
|
* @arg @ref LL_EXTI_LINE_17
|
||||||
|
* @arg @ref LL_EXTI_LINE_18
|
||||||
|
* @arg @ref LL_EXTI_LINE_19
|
||||||
|
* @arg @ref LL_EXTI_LINE_ALL_0_31
|
||||||
|
* @note Please check each device line mapping for EXTI Line availability
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE void LL_EXTI_EnableIT_0_31(uint32_t ExtiLine)
|
||||||
|
{
|
||||||
|
SET_BIT(EXTI->IMR, ExtiLine);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Disable ExtiLine Interrupt request for Lines in range 0 to 31
|
||||||
|
* @note The reset value for the direct or internal lines (see RM)
|
||||||
|
* is set to 1 in order to enable the interrupt by default.
|
||||||
|
* Bits are set automatically at Power on.
|
||||||
|
* @rmtoll IMR IMx LL_EXTI_DisableIT_0_31
|
||||||
|
* @param ExtiLine This parameter can be one of the following values:
|
||||||
|
* @arg @ref LL_EXTI_LINE_0
|
||||||
|
* @arg @ref LL_EXTI_LINE_1
|
||||||
|
* @arg @ref LL_EXTI_LINE_2
|
||||||
|
* @arg @ref LL_EXTI_LINE_3
|
||||||
|
* @arg @ref LL_EXTI_LINE_4
|
||||||
|
* @arg @ref LL_EXTI_LINE_5
|
||||||
|
* @arg @ref LL_EXTI_LINE_6
|
||||||
|
* @arg @ref LL_EXTI_LINE_7
|
||||||
|
* @arg @ref LL_EXTI_LINE_8
|
||||||
|
* @arg @ref LL_EXTI_LINE_9
|
||||||
|
* @arg @ref LL_EXTI_LINE_10
|
||||||
|
* @arg @ref LL_EXTI_LINE_11
|
||||||
|
* @arg @ref LL_EXTI_LINE_12
|
||||||
|
* @arg @ref LL_EXTI_LINE_13
|
||||||
|
* @arg @ref LL_EXTI_LINE_14
|
||||||
|
* @arg @ref LL_EXTI_LINE_15
|
||||||
|
* @arg @ref LL_EXTI_LINE_16
|
||||||
|
* @arg @ref LL_EXTI_LINE_17
|
||||||
|
* @arg @ref LL_EXTI_LINE_18
|
||||||
|
* @arg @ref LL_EXTI_LINE_19
|
||||||
|
* @arg @ref LL_EXTI_LINE_ALL_0_31
|
||||||
|
* @note Please check each device line mapping for EXTI Line availability
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE void LL_EXTI_DisableIT_0_31(uint32_t ExtiLine)
|
||||||
|
{
|
||||||
|
CLEAR_BIT(EXTI->IMR, ExtiLine);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Indicate if ExtiLine Interrupt request is enabled for Lines in range 0 to 31
|
||||||
|
* @note The reset value for the direct or internal lines (see RM)
|
||||||
|
* is set to 1 in order to enable the interrupt by default.
|
||||||
|
* Bits are set automatically at Power on.
|
||||||
|
* @rmtoll IMR IMx LL_EXTI_IsEnabledIT_0_31
|
||||||
|
* @param ExtiLine This parameter can be one of the following values:
|
||||||
|
* @arg @ref LL_EXTI_LINE_0
|
||||||
|
* @arg @ref LL_EXTI_LINE_1
|
||||||
|
* @arg @ref LL_EXTI_LINE_2
|
||||||
|
* @arg @ref LL_EXTI_LINE_3
|
||||||
|
* @arg @ref LL_EXTI_LINE_4
|
||||||
|
* @arg @ref LL_EXTI_LINE_5
|
||||||
|
* @arg @ref LL_EXTI_LINE_6
|
||||||
|
* @arg @ref LL_EXTI_LINE_7
|
||||||
|
* @arg @ref LL_EXTI_LINE_8
|
||||||
|
* @arg @ref LL_EXTI_LINE_9
|
||||||
|
* @arg @ref LL_EXTI_LINE_10
|
||||||
|
* @arg @ref LL_EXTI_LINE_11
|
||||||
|
* @arg @ref LL_EXTI_LINE_12
|
||||||
|
* @arg @ref LL_EXTI_LINE_13
|
||||||
|
* @arg @ref LL_EXTI_LINE_14
|
||||||
|
* @arg @ref LL_EXTI_LINE_15
|
||||||
|
* @arg @ref LL_EXTI_LINE_16
|
||||||
|
* @arg @ref LL_EXTI_LINE_17
|
||||||
|
* @arg @ref LL_EXTI_LINE_18
|
||||||
|
* @arg @ref LL_EXTI_LINE_19
|
||||||
|
* @arg @ref LL_EXTI_LINE_ALL_0_31
|
||||||
|
* @note Please check each device line mapping for EXTI Line availability
|
||||||
|
* @retval State of bit (1 or 0).
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE uint32_t LL_EXTI_IsEnabledIT_0_31(uint32_t ExtiLine)
|
||||||
|
{
|
||||||
|
return (READ_BIT(EXTI->IMR, ExtiLine) == (ExtiLine));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup EXTI_LL_EF_Event_Management Event_Management
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Enable ExtiLine Event request for Lines in range 0 to 31
|
||||||
|
* @rmtoll EMR EMx LL_EXTI_EnableEvent_0_31
|
||||||
|
* @param ExtiLine This parameter can be one of the following values:
|
||||||
|
* @arg @ref LL_EXTI_LINE_0
|
||||||
|
* @arg @ref LL_EXTI_LINE_1
|
||||||
|
* @arg @ref LL_EXTI_LINE_2
|
||||||
|
* @arg @ref LL_EXTI_LINE_3
|
||||||
|
* @arg @ref LL_EXTI_LINE_4
|
||||||
|
* @arg @ref LL_EXTI_LINE_5
|
||||||
|
* @arg @ref LL_EXTI_LINE_6
|
||||||
|
* @arg @ref LL_EXTI_LINE_7
|
||||||
|
* @arg @ref LL_EXTI_LINE_8
|
||||||
|
* @arg @ref LL_EXTI_LINE_9
|
||||||
|
* @arg @ref LL_EXTI_LINE_10
|
||||||
|
* @arg @ref LL_EXTI_LINE_11
|
||||||
|
* @arg @ref LL_EXTI_LINE_12
|
||||||
|
* @arg @ref LL_EXTI_LINE_13
|
||||||
|
* @arg @ref LL_EXTI_LINE_14
|
||||||
|
* @arg @ref LL_EXTI_LINE_15
|
||||||
|
* @arg @ref LL_EXTI_LINE_16
|
||||||
|
* @arg @ref LL_EXTI_LINE_17
|
||||||
|
* @arg @ref LL_EXTI_LINE_18
|
||||||
|
* @arg @ref LL_EXTI_LINE_19
|
||||||
|
* @arg @ref LL_EXTI_LINE_ALL_0_31
|
||||||
|
* @note Please check each device line mapping for EXTI Line availability
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE void LL_EXTI_EnableEvent_0_31(uint32_t ExtiLine)
|
||||||
|
{
|
||||||
|
SET_BIT(EXTI->EMR, ExtiLine);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Disable ExtiLine Event request for Lines in range 0 to 31
|
||||||
|
* @rmtoll EMR EMx LL_EXTI_DisableEvent_0_31
|
||||||
|
* @param ExtiLine This parameter can be one of the following values:
|
||||||
|
* @arg @ref LL_EXTI_LINE_0
|
||||||
|
* @arg @ref LL_EXTI_LINE_1
|
||||||
|
* @arg @ref LL_EXTI_LINE_2
|
||||||
|
* @arg @ref LL_EXTI_LINE_3
|
||||||
|
* @arg @ref LL_EXTI_LINE_4
|
||||||
|
* @arg @ref LL_EXTI_LINE_5
|
||||||
|
* @arg @ref LL_EXTI_LINE_6
|
||||||
|
* @arg @ref LL_EXTI_LINE_7
|
||||||
|
* @arg @ref LL_EXTI_LINE_8
|
||||||
|
* @arg @ref LL_EXTI_LINE_9
|
||||||
|
* @arg @ref LL_EXTI_LINE_10
|
||||||
|
* @arg @ref LL_EXTI_LINE_11
|
||||||
|
* @arg @ref LL_EXTI_LINE_12
|
||||||
|
* @arg @ref LL_EXTI_LINE_13
|
||||||
|
* @arg @ref LL_EXTI_LINE_14
|
||||||
|
* @arg @ref LL_EXTI_LINE_15
|
||||||
|
* @arg @ref LL_EXTI_LINE_16
|
||||||
|
* @arg @ref LL_EXTI_LINE_17
|
||||||
|
* @arg @ref LL_EXTI_LINE_18
|
||||||
|
* @arg @ref LL_EXTI_LINE_19
|
||||||
|
* @arg @ref LL_EXTI_LINE_ALL_0_31
|
||||||
|
* @note Please check each device line mapping for EXTI Line availability
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE void LL_EXTI_DisableEvent_0_31(uint32_t ExtiLine)
|
||||||
|
{
|
||||||
|
CLEAR_BIT(EXTI->EMR, ExtiLine);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Indicate if ExtiLine Event request is enabled for Lines in range 0 to 31
|
||||||
|
* @rmtoll EMR EMx LL_EXTI_IsEnabledEvent_0_31
|
||||||
|
* @param ExtiLine This parameter can be one of the following values:
|
||||||
|
* @arg @ref LL_EXTI_LINE_0
|
||||||
|
* @arg @ref LL_EXTI_LINE_1
|
||||||
|
* @arg @ref LL_EXTI_LINE_2
|
||||||
|
* @arg @ref LL_EXTI_LINE_3
|
||||||
|
* @arg @ref LL_EXTI_LINE_4
|
||||||
|
* @arg @ref LL_EXTI_LINE_5
|
||||||
|
* @arg @ref LL_EXTI_LINE_6
|
||||||
|
* @arg @ref LL_EXTI_LINE_7
|
||||||
|
* @arg @ref LL_EXTI_LINE_8
|
||||||
|
* @arg @ref LL_EXTI_LINE_9
|
||||||
|
* @arg @ref LL_EXTI_LINE_10
|
||||||
|
* @arg @ref LL_EXTI_LINE_11
|
||||||
|
* @arg @ref LL_EXTI_LINE_12
|
||||||
|
* @arg @ref LL_EXTI_LINE_13
|
||||||
|
* @arg @ref LL_EXTI_LINE_14
|
||||||
|
* @arg @ref LL_EXTI_LINE_15
|
||||||
|
* @arg @ref LL_EXTI_LINE_16
|
||||||
|
* @arg @ref LL_EXTI_LINE_17
|
||||||
|
* @arg @ref LL_EXTI_LINE_18
|
||||||
|
* @arg @ref LL_EXTI_LINE_19
|
||||||
|
* @arg @ref LL_EXTI_LINE_ALL_0_31
|
||||||
|
* @note Please check each device line mapping for EXTI Line availability
|
||||||
|
* @retval State of bit (1 or 0).
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE uint32_t LL_EXTI_IsEnabledEvent_0_31(uint32_t ExtiLine)
|
||||||
|
{
|
||||||
|
return (READ_BIT(EXTI->EMR, ExtiLine) == (ExtiLine));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup EXTI_LL_EF_Rising_Trigger_Management Rising_Trigger_Management
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Enable ExtiLine Rising Edge Trigger for Lines in range 0 to 31
|
||||||
|
* @note The configurable wakeup lines are edge-triggered. No glitch must be
|
||||||
|
* generated on these lines. If a rising edge on a configurable interrupt
|
||||||
|
* line occurs during a write operation in the EXTI_RTSR register, the
|
||||||
|
* pending bit is not set.
|
||||||
|
* Rising and falling edge triggers can be set for
|
||||||
|
* the same interrupt line. In this case, both generate a trigger
|
||||||
|
* condition.
|
||||||
|
* @rmtoll RTSR RTx LL_EXTI_EnableRisingTrig_0_31
|
||||||
|
* @param ExtiLine This parameter can be a combination of the following values:
|
||||||
|
* @arg @ref LL_EXTI_LINE_0
|
||||||
|
* @arg @ref LL_EXTI_LINE_1
|
||||||
|
* @arg @ref LL_EXTI_LINE_2
|
||||||
|
* @arg @ref LL_EXTI_LINE_3
|
||||||
|
* @arg @ref LL_EXTI_LINE_4
|
||||||
|
* @arg @ref LL_EXTI_LINE_5
|
||||||
|
* @arg @ref LL_EXTI_LINE_6
|
||||||
|
* @arg @ref LL_EXTI_LINE_7
|
||||||
|
* @arg @ref LL_EXTI_LINE_8
|
||||||
|
* @arg @ref LL_EXTI_LINE_9
|
||||||
|
* @arg @ref LL_EXTI_LINE_10
|
||||||
|
* @arg @ref LL_EXTI_LINE_11
|
||||||
|
* @arg @ref LL_EXTI_LINE_12
|
||||||
|
* @arg @ref LL_EXTI_LINE_13
|
||||||
|
* @arg @ref LL_EXTI_LINE_14
|
||||||
|
* @arg @ref LL_EXTI_LINE_15
|
||||||
|
* @arg @ref LL_EXTI_LINE_16
|
||||||
|
* @arg @ref LL_EXTI_LINE_18
|
||||||
|
* @arg @ref LL_EXTI_LINE_19
|
||||||
|
* @note Please check each device line mapping for EXTI Line availability
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE void LL_EXTI_EnableRisingTrig_0_31(uint32_t ExtiLine)
|
||||||
|
{
|
||||||
|
SET_BIT(EXTI->RTSR, ExtiLine);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Disable ExtiLine Rising Edge Trigger for Lines in range 0 to 31
|
||||||
|
* @note The configurable wakeup lines are edge-triggered. No glitch must be
|
||||||
|
* generated on these lines. If a rising edge on a configurable interrupt
|
||||||
|
* line occurs during a write operation in the EXTI_RTSR register, the
|
||||||
|
* pending bit is not set.
|
||||||
|
* Rising and falling edge triggers can be set for
|
||||||
|
* the same interrupt line. In this case, both generate a trigger
|
||||||
|
* condition.
|
||||||
|
* @rmtoll RTSR RTx LL_EXTI_DisableRisingTrig_0_31
|
||||||
|
* @param ExtiLine This parameter can be a combination of the following values:
|
||||||
|
* @arg @ref LL_EXTI_LINE_0
|
||||||
|
* @arg @ref LL_EXTI_LINE_1
|
||||||
|
* @arg @ref LL_EXTI_LINE_2
|
||||||
|
* @arg @ref LL_EXTI_LINE_3
|
||||||
|
* @arg @ref LL_EXTI_LINE_4
|
||||||
|
* @arg @ref LL_EXTI_LINE_5
|
||||||
|
* @arg @ref LL_EXTI_LINE_6
|
||||||
|
* @arg @ref LL_EXTI_LINE_7
|
||||||
|
* @arg @ref LL_EXTI_LINE_8
|
||||||
|
* @arg @ref LL_EXTI_LINE_9
|
||||||
|
* @arg @ref LL_EXTI_LINE_10
|
||||||
|
* @arg @ref LL_EXTI_LINE_11
|
||||||
|
* @arg @ref LL_EXTI_LINE_12
|
||||||
|
* @arg @ref LL_EXTI_LINE_13
|
||||||
|
* @arg @ref LL_EXTI_LINE_14
|
||||||
|
* @arg @ref LL_EXTI_LINE_15
|
||||||
|
* @arg @ref LL_EXTI_LINE_16
|
||||||
|
* @arg @ref LL_EXTI_LINE_18
|
||||||
|
* @arg @ref LL_EXTI_LINE_19
|
||||||
|
* @note Please check each device line mapping for EXTI Line availability
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE void LL_EXTI_DisableRisingTrig_0_31(uint32_t ExtiLine)
|
||||||
|
{
|
||||||
|
CLEAR_BIT(EXTI->RTSR, ExtiLine);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Check if rising edge trigger is enabled for Lines in range 0 to 31
|
||||||
|
* @rmtoll RTSR RTx LL_EXTI_IsEnabledRisingTrig_0_31
|
||||||
|
* @param ExtiLine This parameter can be a combination of the following values:
|
||||||
|
* @arg @ref LL_EXTI_LINE_0
|
||||||
|
* @arg @ref LL_EXTI_LINE_1
|
||||||
|
* @arg @ref LL_EXTI_LINE_2
|
||||||
|
* @arg @ref LL_EXTI_LINE_3
|
||||||
|
* @arg @ref LL_EXTI_LINE_4
|
||||||
|
* @arg @ref LL_EXTI_LINE_5
|
||||||
|
* @arg @ref LL_EXTI_LINE_6
|
||||||
|
* @arg @ref LL_EXTI_LINE_7
|
||||||
|
* @arg @ref LL_EXTI_LINE_8
|
||||||
|
* @arg @ref LL_EXTI_LINE_9
|
||||||
|
* @arg @ref LL_EXTI_LINE_10
|
||||||
|
* @arg @ref LL_EXTI_LINE_11
|
||||||
|
* @arg @ref LL_EXTI_LINE_12
|
||||||
|
* @arg @ref LL_EXTI_LINE_13
|
||||||
|
* @arg @ref LL_EXTI_LINE_14
|
||||||
|
* @arg @ref LL_EXTI_LINE_15
|
||||||
|
* @arg @ref LL_EXTI_LINE_16
|
||||||
|
* @arg @ref LL_EXTI_LINE_18
|
||||||
|
* @arg @ref LL_EXTI_LINE_19
|
||||||
|
* @note Please check each device line mapping for EXTI Line availability
|
||||||
|
* @retval State of bit (1 or 0).
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE uint32_t LL_EXTI_IsEnabledRisingTrig_0_31(uint32_t ExtiLine)
|
||||||
|
{
|
||||||
|
return (READ_BIT(EXTI->RTSR, ExtiLine) == (ExtiLine));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup EXTI_LL_EF_Falling_Trigger_Management Falling_Trigger_Management
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Enable ExtiLine Falling Edge Trigger for Lines in range 0 to 31
|
||||||
|
* @note The configurable wakeup lines are edge-triggered. No glitch must be
|
||||||
|
* generated on these lines. If a falling edge on a configurable interrupt
|
||||||
|
* line occurs during a write operation in the EXTI_FTSR register, the
|
||||||
|
* pending bit is not set.
|
||||||
|
* Rising and falling edge triggers can be set for
|
||||||
|
* the same interrupt line. In this case, both generate a trigger
|
||||||
|
* condition.
|
||||||
|
* @rmtoll FTSR FTx LL_EXTI_EnableFallingTrig_0_31
|
||||||
|
* @param ExtiLine This parameter can be a combination of the following values:
|
||||||
|
* @arg @ref LL_EXTI_LINE_0
|
||||||
|
* @arg @ref LL_EXTI_LINE_1
|
||||||
|
* @arg @ref LL_EXTI_LINE_2
|
||||||
|
* @arg @ref LL_EXTI_LINE_3
|
||||||
|
* @arg @ref LL_EXTI_LINE_4
|
||||||
|
* @arg @ref LL_EXTI_LINE_5
|
||||||
|
* @arg @ref LL_EXTI_LINE_6
|
||||||
|
* @arg @ref LL_EXTI_LINE_7
|
||||||
|
* @arg @ref LL_EXTI_LINE_8
|
||||||
|
* @arg @ref LL_EXTI_LINE_9
|
||||||
|
* @arg @ref LL_EXTI_LINE_10
|
||||||
|
* @arg @ref LL_EXTI_LINE_11
|
||||||
|
* @arg @ref LL_EXTI_LINE_12
|
||||||
|
* @arg @ref LL_EXTI_LINE_13
|
||||||
|
* @arg @ref LL_EXTI_LINE_14
|
||||||
|
* @arg @ref LL_EXTI_LINE_15
|
||||||
|
* @arg @ref LL_EXTI_LINE_16
|
||||||
|
* @arg @ref LL_EXTI_LINE_18
|
||||||
|
* @arg @ref LL_EXTI_LINE_19
|
||||||
|
* @note Please check each device line mapping for EXTI Line availability
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE void LL_EXTI_EnableFallingTrig_0_31(uint32_t ExtiLine)
|
||||||
|
{
|
||||||
|
SET_BIT(EXTI->FTSR, ExtiLine);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Disable ExtiLine Falling Edge Trigger for Lines in range 0 to 31
|
||||||
|
* @note The configurable wakeup lines are edge-triggered. No glitch must be
|
||||||
|
* generated on these lines. If a Falling edge on a configurable interrupt
|
||||||
|
* line occurs during a write operation in the EXTI_FTSR register, the
|
||||||
|
* pending bit is not set.
|
||||||
|
* Rising and falling edge triggers can be set for the same interrupt line.
|
||||||
|
* In this case, both generate a trigger condition.
|
||||||
|
* @rmtoll FTSR FTx LL_EXTI_DisableFallingTrig_0_31
|
||||||
|
* @param ExtiLine This parameter can be a combination of the following values:
|
||||||
|
* @arg @ref LL_EXTI_LINE_0
|
||||||
|
* @arg @ref LL_EXTI_LINE_1
|
||||||
|
* @arg @ref LL_EXTI_LINE_2
|
||||||
|
* @arg @ref LL_EXTI_LINE_3
|
||||||
|
* @arg @ref LL_EXTI_LINE_4
|
||||||
|
* @arg @ref LL_EXTI_LINE_5
|
||||||
|
* @arg @ref LL_EXTI_LINE_6
|
||||||
|
* @arg @ref LL_EXTI_LINE_7
|
||||||
|
* @arg @ref LL_EXTI_LINE_8
|
||||||
|
* @arg @ref LL_EXTI_LINE_9
|
||||||
|
* @arg @ref LL_EXTI_LINE_10
|
||||||
|
* @arg @ref LL_EXTI_LINE_11
|
||||||
|
* @arg @ref LL_EXTI_LINE_12
|
||||||
|
* @arg @ref LL_EXTI_LINE_13
|
||||||
|
* @arg @ref LL_EXTI_LINE_14
|
||||||
|
* @arg @ref LL_EXTI_LINE_15
|
||||||
|
* @arg @ref LL_EXTI_LINE_16
|
||||||
|
* @arg @ref LL_EXTI_LINE_18
|
||||||
|
* @arg @ref LL_EXTI_LINE_19
|
||||||
|
* @note Please check each device line mapping for EXTI Line availability
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE void LL_EXTI_DisableFallingTrig_0_31(uint32_t ExtiLine)
|
||||||
|
{
|
||||||
|
CLEAR_BIT(EXTI->FTSR, ExtiLine);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Check if falling edge trigger is enabled for Lines in range 0 to 31
|
||||||
|
* @rmtoll FTSR FTx LL_EXTI_IsEnabledFallingTrig_0_31
|
||||||
|
* @param ExtiLine This parameter can be a combination of the following values:
|
||||||
|
* @arg @ref LL_EXTI_LINE_0
|
||||||
|
* @arg @ref LL_EXTI_LINE_1
|
||||||
|
* @arg @ref LL_EXTI_LINE_2
|
||||||
|
* @arg @ref LL_EXTI_LINE_3
|
||||||
|
* @arg @ref LL_EXTI_LINE_4
|
||||||
|
* @arg @ref LL_EXTI_LINE_5
|
||||||
|
* @arg @ref LL_EXTI_LINE_6
|
||||||
|
* @arg @ref LL_EXTI_LINE_7
|
||||||
|
* @arg @ref LL_EXTI_LINE_8
|
||||||
|
* @arg @ref LL_EXTI_LINE_9
|
||||||
|
* @arg @ref LL_EXTI_LINE_10
|
||||||
|
* @arg @ref LL_EXTI_LINE_11
|
||||||
|
* @arg @ref LL_EXTI_LINE_12
|
||||||
|
* @arg @ref LL_EXTI_LINE_13
|
||||||
|
* @arg @ref LL_EXTI_LINE_14
|
||||||
|
* @arg @ref LL_EXTI_LINE_15
|
||||||
|
* @arg @ref LL_EXTI_LINE_16
|
||||||
|
* @arg @ref LL_EXTI_LINE_18
|
||||||
|
* @arg @ref LL_EXTI_LINE_19
|
||||||
|
* @note Please check each device line mapping for EXTI Line availability
|
||||||
|
* @retval State of bit (1 or 0).
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE uint32_t LL_EXTI_IsEnabledFallingTrig_0_31(uint32_t ExtiLine)
|
||||||
|
{
|
||||||
|
return (READ_BIT(EXTI->FTSR, ExtiLine) == (ExtiLine));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup EXTI_LL_EF_Software_Interrupt_Management Software_Interrupt_Management
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Generate a software Interrupt Event for Lines in range 0 to 31
|
||||||
|
* @note If the interrupt is enabled on this line in the EXTI_IMR, writing a 1 to
|
||||||
|
* this bit when it is at '0' sets the corresponding pending bit in EXTI_PR
|
||||||
|
* resulting in an interrupt request generation.
|
||||||
|
* This bit is cleared by clearing the corresponding bit in the EXTI_PR
|
||||||
|
* register (by writing a 1 into the bit)
|
||||||
|
* @rmtoll SWIER SWIx LL_EXTI_GenerateSWI_0_31
|
||||||
|
* @param ExtiLine This parameter can be a combination of the following values:
|
||||||
|
* @arg @ref LL_EXTI_LINE_0
|
||||||
|
* @arg @ref LL_EXTI_LINE_1
|
||||||
|
* @arg @ref LL_EXTI_LINE_2
|
||||||
|
* @arg @ref LL_EXTI_LINE_3
|
||||||
|
* @arg @ref LL_EXTI_LINE_4
|
||||||
|
* @arg @ref LL_EXTI_LINE_5
|
||||||
|
* @arg @ref LL_EXTI_LINE_6
|
||||||
|
* @arg @ref LL_EXTI_LINE_7
|
||||||
|
* @arg @ref LL_EXTI_LINE_8
|
||||||
|
* @arg @ref LL_EXTI_LINE_9
|
||||||
|
* @arg @ref LL_EXTI_LINE_10
|
||||||
|
* @arg @ref LL_EXTI_LINE_11
|
||||||
|
* @arg @ref LL_EXTI_LINE_12
|
||||||
|
* @arg @ref LL_EXTI_LINE_13
|
||||||
|
* @arg @ref LL_EXTI_LINE_14
|
||||||
|
* @arg @ref LL_EXTI_LINE_15
|
||||||
|
* @arg @ref LL_EXTI_LINE_16
|
||||||
|
* @arg @ref LL_EXTI_LINE_18
|
||||||
|
* @arg @ref LL_EXTI_LINE_19
|
||||||
|
* @note Please check each device line mapping for EXTI Line availability
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE void LL_EXTI_GenerateSWI_0_31(uint32_t ExtiLine)
|
||||||
|
{
|
||||||
|
SET_BIT(EXTI->SWIER, ExtiLine);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup EXTI_LL_EF_Flag_Management Flag_Management
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Check if the ExtLine Flag is set or not for Lines in range 0 to 31
|
||||||
|
* @note This bit is set when the selected edge event arrives on the interrupt
|
||||||
|
* line. This bit is cleared by writing a 1 to the bit.
|
||||||
|
* @rmtoll PR PIFx LL_EXTI_IsActiveFlag_0_31
|
||||||
|
* @param ExtiLine This parameter can be a combination of the following values:
|
||||||
|
* @arg @ref LL_EXTI_LINE_0
|
||||||
|
* @arg @ref LL_EXTI_LINE_1
|
||||||
|
* @arg @ref LL_EXTI_LINE_2
|
||||||
|
* @arg @ref LL_EXTI_LINE_3
|
||||||
|
* @arg @ref LL_EXTI_LINE_4
|
||||||
|
* @arg @ref LL_EXTI_LINE_5
|
||||||
|
* @arg @ref LL_EXTI_LINE_6
|
||||||
|
* @arg @ref LL_EXTI_LINE_7
|
||||||
|
* @arg @ref LL_EXTI_LINE_8
|
||||||
|
* @arg @ref LL_EXTI_LINE_9
|
||||||
|
* @arg @ref LL_EXTI_LINE_10
|
||||||
|
* @arg @ref LL_EXTI_LINE_11
|
||||||
|
* @arg @ref LL_EXTI_LINE_12
|
||||||
|
* @arg @ref LL_EXTI_LINE_13
|
||||||
|
* @arg @ref LL_EXTI_LINE_14
|
||||||
|
* @arg @ref LL_EXTI_LINE_15
|
||||||
|
* @arg @ref LL_EXTI_LINE_16
|
||||||
|
* @arg @ref LL_EXTI_LINE_18
|
||||||
|
* @arg @ref LL_EXTI_LINE_19
|
||||||
|
* @note Please check each device line mapping for EXTI Line availability
|
||||||
|
* @retval State of bit (1 or 0).
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE uint32_t LL_EXTI_IsActiveFlag_0_31(uint32_t ExtiLine)
|
||||||
|
{
|
||||||
|
return (READ_BIT(EXTI->PR, ExtiLine) == (ExtiLine));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Read ExtLine Combination Flag for Lines in range 0 to 31
|
||||||
|
* @note This bit is set when the selected edge event arrives on the interrupt
|
||||||
|
* line. This bit is cleared by writing a 1 to the bit.
|
||||||
|
* @rmtoll PR PIFx LL_EXTI_ReadFlag_0_31
|
||||||
|
* @param ExtiLine This parameter can be a combination of the following values:
|
||||||
|
* @arg @ref LL_EXTI_LINE_0
|
||||||
|
* @arg @ref LL_EXTI_LINE_1
|
||||||
|
* @arg @ref LL_EXTI_LINE_2
|
||||||
|
* @arg @ref LL_EXTI_LINE_3
|
||||||
|
* @arg @ref LL_EXTI_LINE_4
|
||||||
|
* @arg @ref LL_EXTI_LINE_5
|
||||||
|
* @arg @ref LL_EXTI_LINE_6
|
||||||
|
* @arg @ref LL_EXTI_LINE_7
|
||||||
|
* @arg @ref LL_EXTI_LINE_8
|
||||||
|
* @arg @ref LL_EXTI_LINE_9
|
||||||
|
* @arg @ref LL_EXTI_LINE_10
|
||||||
|
* @arg @ref LL_EXTI_LINE_11
|
||||||
|
* @arg @ref LL_EXTI_LINE_12
|
||||||
|
* @arg @ref LL_EXTI_LINE_13
|
||||||
|
* @arg @ref LL_EXTI_LINE_14
|
||||||
|
* @arg @ref LL_EXTI_LINE_15
|
||||||
|
* @arg @ref LL_EXTI_LINE_16
|
||||||
|
* @arg @ref LL_EXTI_LINE_18
|
||||||
|
* @arg @ref LL_EXTI_LINE_19
|
||||||
|
* @note Please check each device line mapping for EXTI Line availability
|
||||||
|
* @retval @note This bit is set when the selected edge event arrives on the interrupt
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE uint32_t LL_EXTI_ReadFlag_0_31(uint32_t ExtiLine)
|
||||||
|
{
|
||||||
|
return (uint32_t)(READ_BIT(EXTI->PR, ExtiLine));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Clear ExtLine Flags for Lines in range 0 to 31
|
||||||
|
* @note This bit is set when the selected edge event arrives on the interrupt
|
||||||
|
* line. This bit is cleared by writing a 1 to the bit.
|
||||||
|
* @rmtoll PR PIFx LL_EXTI_ClearFlag_0_31
|
||||||
|
* @param ExtiLine This parameter can be a combination of the following values:
|
||||||
|
* @arg @ref LL_EXTI_LINE_0
|
||||||
|
* @arg @ref LL_EXTI_LINE_1
|
||||||
|
* @arg @ref LL_EXTI_LINE_2
|
||||||
|
* @arg @ref LL_EXTI_LINE_3
|
||||||
|
* @arg @ref LL_EXTI_LINE_4
|
||||||
|
* @arg @ref LL_EXTI_LINE_5
|
||||||
|
* @arg @ref LL_EXTI_LINE_6
|
||||||
|
* @arg @ref LL_EXTI_LINE_7
|
||||||
|
* @arg @ref LL_EXTI_LINE_8
|
||||||
|
* @arg @ref LL_EXTI_LINE_9
|
||||||
|
* @arg @ref LL_EXTI_LINE_10
|
||||||
|
* @arg @ref LL_EXTI_LINE_11
|
||||||
|
* @arg @ref LL_EXTI_LINE_12
|
||||||
|
* @arg @ref LL_EXTI_LINE_13
|
||||||
|
* @arg @ref LL_EXTI_LINE_14
|
||||||
|
* @arg @ref LL_EXTI_LINE_15
|
||||||
|
* @arg @ref LL_EXTI_LINE_16
|
||||||
|
* @arg @ref LL_EXTI_LINE_18
|
||||||
|
* @arg @ref LL_EXTI_LINE_19
|
||||||
|
* @note Please check each device line mapping for EXTI Line availability
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE void LL_EXTI_ClearFlag_0_31(uint32_t ExtiLine)
|
||||||
|
{
|
||||||
|
WRITE_REG(EXTI->PR, ExtiLine);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(USE_FULL_LL_DRIVER)
|
||||||
|
/** @defgroup EXTI_LL_EF_Init Initialization and de-initialization functions
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
uint32_t LL_EXTI_Init(LL_EXTI_InitTypeDef *EXTI_InitStruct);
|
||||||
|
uint32_t LL_EXTI_DeInit(void);
|
||||||
|
void LL_EXTI_StructInit(LL_EXTI_InitTypeDef *EXTI_InitStruct);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
#endif /* USE_FULL_LL_DRIVER */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#endif /* EXTI */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* STM32F1xx_LL_EXTI_H */
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
951
LLDrivers/inc/stm32f1xx_ll_fsmc.h
Normal file
951
LLDrivers/inc/stm32f1xx_ll_fsmc.h
Normal file
|
@ -0,0 +1,951 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file stm32f1xx_ll_fsmc.h
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @brief Header file of FSMC 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_FSMC_H
|
||||||
|
#define STM32F1xx_LL_FSMC_H
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "stm32f1xx_hal_def.h"
|
||||||
|
|
||||||
|
/** @addtogroup STM32F1xx_HAL_Driver
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @addtogroup FSMC_LL
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @addtogroup FSMC_LL_Private_Macros
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#if defined FSMC_BANK1
|
||||||
|
|
||||||
|
#define IS_FSMC_NORSRAM_BANK(__BANK__) (((__BANK__) == FSMC_NORSRAM_BANK1) || \
|
||||||
|
((__BANK__) == FSMC_NORSRAM_BANK2) || \
|
||||||
|
((__BANK__) == FSMC_NORSRAM_BANK3) || \
|
||||||
|
((__BANK__) == FSMC_NORSRAM_BANK4))
|
||||||
|
#define IS_FSMC_MUX(__MUX__) (((__MUX__) == FSMC_DATA_ADDRESS_MUX_DISABLE) || \
|
||||||
|
((__MUX__) == FSMC_DATA_ADDRESS_MUX_ENABLE))
|
||||||
|
#define IS_FSMC_MEMORY(__MEMORY__) (((__MEMORY__) == FSMC_MEMORY_TYPE_SRAM) || \
|
||||||
|
((__MEMORY__) == FSMC_MEMORY_TYPE_PSRAM)|| \
|
||||||
|
((__MEMORY__) == FSMC_MEMORY_TYPE_NOR))
|
||||||
|
#define IS_FSMC_NORSRAM_MEMORY_WIDTH(__WIDTH__) (((__WIDTH__) == FSMC_NORSRAM_MEM_BUS_WIDTH_8) || \
|
||||||
|
((__WIDTH__) == FSMC_NORSRAM_MEM_BUS_WIDTH_16) || \
|
||||||
|
((__WIDTH__) == FSMC_NORSRAM_MEM_BUS_WIDTH_32))
|
||||||
|
#define IS_FSMC_PAGESIZE(__SIZE__) (((__SIZE__) == FSMC_PAGE_SIZE_NONE) || \
|
||||||
|
((__SIZE__) == FSMC_PAGE_SIZE_128) || \
|
||||||
|
((__SIZE__) == FSMC_PAGE_SIZE_256) || \
|
||||||
|
((__SIZE__) == FSMC_PAGE_SIZE_512) || \
|
||||||
|
((__SIZE__) == FSMC_PAGE_SIZE_1024))
|
||||||
|
#define IS_FSMC_ACCESS_MODE(__MODE__) (((__MODE__) == FSMC_ACCESS_MODE_A) || \
|
||||||
|
((__MODE__) == FSMC_ACCESS_MODE_B) || \
|
||||||
|
((__MODE__) == FSMC_ACCESS_MODE_C) || \
|
||||||
|
((__MODE__) == FSMC_ACCESS_MODE_D))
|
||||||
|
#define IS_FSMC_BURSTMODE(__STATE__) (((__STATE__) == FSMC_BURST_ACCESS_MODE_DISABLE) || \
|
||||||
|
((__STATE__) == FSMC_BURST_ACCESS_MODE_ENABLE))
|
||||||
|
#define IS_FSMC_WAIT_POLARITY(__POLARITY__) (((__POLARITY__) == FSMC_WAIT_SIGNAL_POLARITY_LOW) || \
|
||||||
|
((__POLARITY__) == FSMC_WAIT_SIGNAL_POLARITY_HIGH))
|
||||||
|
#define IS_FSMC_WRAP_MODE(__MODE__) (((__MODE__) == FSMC_WRAP_MODE_DISABLE) || \
|
||||||
|
((__MODE__) == FSMC_WRAP_MODE_ENABLE))
|
||||||
|
#define IS_FSMC_WAIT_SIGNAL_ACTIVE(__ACTIVE__) (((__ACTIVE__) == FSMC_WAIT_TIMING_BEFORE_WS) || \
|
||||||
|
((__ACTIVE__) == FSMC_WAIT_TIMING_DURING_WS))
|
||||||
|
#define IS_FSMC_WRITE_OPERATION(__OPERATION__) (((__OPERATION__) == FSMC_WRITE_OPERATION_DISABLE) || \
|
||||||
|
((__OPERATION__) == FSMC_WRITE_OPERATION_ENABLE))
|
||||||
|
#define IS_FSMC_WAITE_SIGNAL(__SIGNAL__) (((__SIGNAL__) == FSMC_WAIT_SIGNAL_DISABLE) || \
|
||||||
|
((__SIGNAL__) == FSMC_WAIT_SIGNAL_ENABLE))
|
||||||
|
#define IS_FSMC_EXTENDED_MODE(__MODE__) (((__MODE__) == FSMC_EXTENDED_MODE_DISABLE) || \
|
||||||
|
((__MODE__) == FSMC_EXTENDED_MODE_ENABLE))
|
||||||
|
#define IS_FSMC_ASYNWAIT(__STATE__) (((__STATE__) == FSMC_ASYNCHRONOUS_WAIT_DISABLE) || \
|
||||||
|
((__STATE__) == FSMC_ASYNCHRONOUS_WAIT_ENABLE))
|
||||||
|
#define IS_FSMC_DATA_LATENCY(__LATENCY__) (((__LATENCY__) > 1U) && ((__LATENCY__) <= 17U))
|
||||||
|
#define IS_FSMC_WRITE_BURST(__BURST__) (((__BURST__) == FSMC_WRITE_BURST_DISABLE) || \
|
||||||
|
((__BURST__) == FSMC_WRITE_BURST_ENABLE))
|
||||||
|
#define IS_FSMC_CONTINOUS_CLOCK(__CCLOCK__) (((__CCLOCK__) == FSMC_CONTINUOUS_CLOCK_SYNC_ONLY) || \
|
||||||
|
((__CCLOCK__) == FSMC_CONTINUOUS_CLOCK_SYNC_ASYNC))
|
||||||
|
#define IS_FSMC_ADDRESS_SETUP_TIME(__TIME__) ((__TIME__) <= 15U)
|
||||||
|
#define IS_FSMC_ADDRESS_HOLD_TIME(__TIME__) (((__TIME__) > 0U) && ((__TIME__) <= 15U))
|
||||||
|
#define IS_FSMC_DATASETUP_TIME(__TIME__) (((__TIME__) > 0U) && ((__TIME__) <= 255U))
|
||||||
|
#define IS_FSMC_DATAHOLD_DURATION(__DATAHOLD__) ((__DATAHOLD__) <= 3U)
|
||||||
|
#define IS_FSMC_TURNAROUND_TIME(__TIME__) ((__TIME__) <= 15U)
|
||||||
|
#define IS_FSMC_CLK_DIV(__DIV__) (((__DIV__) > 1U) && ((__DIV__) <= 16U))
|
||||||
|
#define IS_FSMC_NORSRAM_DEVICE(__INSTANCE__) ((__INSTANCE__) == FSMC_NORSRAM_DEVICE)
|
||||||
|
#define IS_FSMC_NORSRAM_EXTENDED_DEVICE(__INSTANCE__) ((__INSTANCE__) == FSMC_NORSRAM_EXTENDED_DEVICE)
|
||||||
|
|
||||||
|
#endif /* FSMC_BANK1 */
|
||||||
|
#if defined(FSMC_BANK3)
|
||||||
|
|
||||||
|
#define IS_FSMC_NAND_BANK(__BANK__) ((__BANK__) == FSMC_NAND_BANK3)
|
||||||
|
#define IS_FSMC_WAIT_FEATURE(__FEATURE__) (((__FEATURE__) == FSMC_NAND_PCC_WAIT_FEATURE_DISABLE) || \
|
||||||
|
((__FEATURE__) == FSMC_NAND_PCC_WAIT_FEATURE_ENABLE))
|
||||||
|
#define IS_FSMC_NAND_MEMORY_WIDTH(__WIDTH__) (((__WIDTH__) == FSMC_NAND_PCC_MEM_BUS_WIDTH_8) || \
|
||||||
|
((__WIDTH__) == FSMC_NAND_PCC_MEM_BUS_WIDTH_16))
|
||||||
|
#define IS_FSMC_ECC_STATE(__STATE__) (((__STATE__) == FSMC_NAND_ECC_DISABLE) || \
|
||||||
|
((__STATE__) == FSMC_NAND_ECC_ENABLE))
|
||||||
|
|
||||||
|
#define IS_FSMC_ECCPAGE_SIZE(__SIZE__) (((__SIZE__) == FSMC_NAND_ECC_PAGE_SIZE_256BYTE) || \
|
||||||
|
((__SIZE__) == FSMC_NAND_ECC_PAGE_SIZE_512BYTE) || \
|
||||||
|
((__SIZE__) == FSMC_NAND_ECC_PAGE_SIZE_1024BYTE) || \
|
||||||
|
((__SIZE__) == FSMC_NAND_ECC_PAGE_SIZE_2048BYTE) || \
|
||||||
|
((__SIZE__) == FSMC_NAND_ECC_PAGE_SIZE_4096BYTE) || \
|
||||||
|
((__SIZE__) == FSMC_NAND_ECC_PAGE_SIZE_8192BYTE))
|
||||||
|
#define IS_FSMC_TCLR_TIME(__TIME__) ((__TIME__) <= 255U)
|
||||||
|
#define IS_FSMC_TAR_TIME(__TIME__) ((__TIME__) <= 255U)
|
||||||
|
#define IS_FSMC_SETUP_TIME(__TIME__) ((__TIME__) <= 254U)
|
||||||
|
#define IS_FSMC_WAIT_TIME(__TIME__) ((__TIME__) <= 254U)
|
||||||
|
#define IS_FSMC_HOLD_TIME(__TIME__) ((__TIME__) <= 254U)
|
||||||
|
#define IS_FSMC_HIZ_TIME(__TIME__) ((__TIME__) <= 254U)
|
||||||
|
#define IS_FSMC_NAND_DEVICE(__INSTANCE__) ((__INSTANCE__) == FSMC_NAND_DEVICE)
|
||||||
|
|
||||||
|
#endif /* FSMC_BANK3 */
|
||||||
|
#if defined(FSMC_BANK4)
|
||||||
|
#define IS_FSMC_PCCARD_DEVICE(__INSTANCE__) ((__INSTANCE__) == FSMC_PCCARD_DEVICE)
|
||||||
|
|
||||||
|
#endif /* FSMC_BANK4 */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Exported typedef ----------------------------------------------------------*/
|
||||||
|
|
||||||
|
/** @defgroup FSMC_LL_Exported_typedef FSMC Low Layer Exported Types
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined FSMC_BANK1
|
||||||
|
#define FSMC_NORSRAM_TypeDef FSMC_Bank1_TypeDef
|
||||||
|
#define FSMC_NORSRAM_EXTENDED_TypeDef FSMC_Bank1E_TypeDef
|
||||||
|
#endif /* FSMC_BANK1 */
|
||||||
|
#if defined(FSMC_BANK3)
|
||||||
|
#define FSMC_NAND_TypeDef FSMC_Bank2_3_TypeDef
|
||||||
|
#endif /* FSMC_BANK3 */
|
||||||
|
#if defined(FSMC_BANK4)
|
||||||
|
#define FSMC_PCCARD_TypeDef FSMC_Bank4_TypeDef
|
||||||
|
#endif /* FSMC_BANK4 */
|
||||||
|
|
||||||
|
#if defined FSMC_BANK1
|
||||||
|
#define FSMC_NORSRAM_DEVICE FSMC_Bank1
|
||||||
|
#define FSMC_NORSRAM_EXTENDED_DEVICE FSMC_Bank1E
|
||||||
|
#endif /* FSMC_BANK1 */
|
||||||
|
#if defined(FSMC_BANK3)
|
||||||
|
#define FSMC_NAND_DEVICE FSMC_Bank2_3
|
||||||
|
#endif /* FSMC_BANK3 */
|
||||||
|
#if defined(FSMC_BANK4)
|
||||||
|
#define FSMC_PCCARD_DEVICE FSMC_Bank4
|
||||||
|
#endif /* FSMC_BANK4 */
|
||||||
|
|
||||||
|
#if defined FSMC_BANK1
|
||||||
|
/**
|
||||||
|
* @brief FSMC NORSRAM Configuration Structure definition
|
||||||
|
*/
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
uint32_t NSBank; /*!< Specifies the NORSRAM memory device that will be used.
|
||||||
|
This parameter can be a value of @ref FSMC_NORSRAM_Bank */
|
||||||
|
|
||||||
|
uint32_t DataAddressMux; /*!< Specifies whether the address and data values are
|
||||||
|
multiplexed on the data bus or not.
|
||||||
|
This parameter can be a value of @ref FSMC_Data_Address_Bus_Multiplexing */
|
||||||
|
|
||||||
|
uint32_t MemoryType; /*!< Specifies the type of external memory attached to
|
||||||
|
the corresponding memory device.
|
||||||
|
This parameter can be a value of @ref FSMC_Memory_Type */
|
||||||
|
|
||||||
|
uint32_t MemoryDataWidth; /*!< Specifies the external memory device width.
|
||||||
|
This parameter can be a value of @ref FSMC_NORSRAM_Data_Width */
|
||||||
|
|
||||||
|
uint32_t BurstAccessMode; /*!< Enables or disables the burst access mode for Flash memory,
|
||||||
|
valid only with synchronous burst Flash memories.
|
||||||
|
This parameter can be a value of @ref FSMC_Burst_Access_Mode */
|
||||||
|
|
||||||
|
uint32_t WaitSignalPolarity; /*!< Specifies the wait signal polarity, valid only when accessing
|
||||||
|
the Flash memory in burst mode.
|
||||||
|
This parameter can be a value of @ref FSMC_Wait_Signal_Polarity */
|
||||||
|
|
||||||
|
uint32_t WrapMode; /*!< Enables or disables the Wrapped burst access mode for Flash
|
||||||
|
memory, valid only when accessing Flash memories in burst mode.
|
||||||
|
This parameter can be a value of @ref FSMC_Wrap_Mode */
|
||||||
|
|
||||||
|
uint32_t WaitSignalActive; /*!< Specifies if the wait signal is asserted by the memory one
|
||||||
|
clock cycle before the wait state or during the wait state,
|
||||||
|
valid only when accessing memories in burst mode.
|
||||||
|
This parameter can be a value of @ref FSMC_Wait_Timing */
|
||||||
|
|
||||||
|
uint32_t WriteOperation; /*!< Enables or disables the write operation in the selected device by the FSMC.
|
||||||
|
This parameter can be a value of @ref FSMC_Write_Operation */
|
||||||
|
|
||||||
|
uint32_t WaitSignal; /*!< Enables or disables the wait state insertion via wait
|
||||||
|
signal, valid for Flash memory access in burst mode.
|
||||||
|
This parameter can be a value of @ref FSMC_Wait_Signal */
|
||||||
|
|
||||||
|
uint32_t ExtendedMode; /*!< Enables or disables the extended mode.
|
||||||
|
This parameter can be a value of @ref FSMC_Extended_Mode */
|
||||||
|
|
||||||
|
uint32_t AsynchronousWait; /*!< Enables or disables wait signal during asynchronous transfers,
|
||||||
|
valid only with asynchronous Flash memories.
|
||||||
|
This parameter can be a value of @ref FSMC_AsynchronousWait */
|
||||||
|
|
||||||
|
uint32_t WriteBurst; /*!< Enables or disables the write burst operation.
|
||||||
|
This parameter can be a value of @ref FSMC_Write_Burst */
|
||||||
|
|
||||||
|
|
||||||
|
uint32_t PageSize; /*!< Specifies the memory page size.
|
||||||
|
This parameter can be a value of @ref FSMC_Page_Size */
|
||||||
|
}FSMC_NORSRAM_InitTypeDef;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief FSMC NORSRAM Timing parameters structure definition
|
||||||
|
*/
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
uint32_t AddressSetupTime; /*!< Defines the number of HCLK cycles to configure
|
||||||
|
the duration of the address setup time.
|
||||||
|
This parameter can be a value between Min_Data = 0 and Max_Data = 15.
|
||||||
|
@note This parameter is not used with synchronous NOR Flash memories. */
|
||||||
|
|
||||||
|
uint32_t AddressHoldTime; /*!< Defines the number of HCLK cycles to configure
|
||||||
|
the duration of the address hold time.
|
||||||
|
This parameter can be a value between Min_Data = 1 and Max_Data = 15.
|
||||||
|
@note This parameter is not used with synchronous NOR Flash memories. */
|
||||||
|
|
||||||
|
uint32_t DataSetupTime; /*!< Defines the number of HCLK cycles to configure
|
||||||
|
the duration of the data setup time.
|
||||||
|
This parameter can be a value between Min_Data = 1 and Max_Data = 255.
|
||||||
|
@note This parameter is used for SRAMs, ROMs and asynchronous multiplexed
|
||||||
|
NOR Flash memories. */
|
||||||
|
|
||||||
|
uint32_t BusTurnAroundDuration; /*!< Defines the number of HCLK cycles to configure
|
||||||
|
the duration of the bus turnaround.
|
||||||
|
This parameter can be a value between Min_Data = 0 and Max_Data = 15.
|
||||||
|
@note This parameter is only used for multiplexed NOR Flash memories. */
|
||||||
|
|
||||||
|
uint32_t CLKDivision; /*!< Defines the period of CLK clock output signal, expressed in number of
|
||||||
|
HCLK cycles. This parameter can be a value between Min_Data = 2 and Max_Data = 16.
|
||||||
|
@note This parameter is not used for asynchronous NOR Flash, SRAM or ROM
|
||||||
|
accesses. */
|
||||||
|
|
||||||
|
uint32_t DataLatency; /*!< Defines the number of memory clock cycles to issue
|
||||||
|
to the memory before getting the first data.
|
||||||
|
The parameter value depends on the memory type as shown below:
|
||||||
|
- It must be set to 0 in case of a CRAM
|
||||||
|
- It is don't care in asynchronous NOR, SRAM or ROM accesses
|
||||||
|
- It may assume a value between Min_Data = 2 and Max_Data = 17 in NOR Flash memories
|
||||||
|
with synchronous burst mode enable */
|
||||||
|
|
||||||
|
uint32_t AccessMode; /*!< Specifies the asynchronous access mode.
|
||||||
|
This parameter can be a value of @ref FSMC_Access_Mode */
|
||||||
|
}FSMC_NORSRAM_TimingTypeDef;
|
||||||
|
#endif /* FSMC_BANK1 */
|
||||||
|
|
||||||
|
#if defined(FSMC_BANK3)
|
||||||
|
/**
|
||||||
|
* @brief FSMC NAND Configuration Structure definition
|
||||||
|
*/
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
uint32_t NandBank; /*!< Specifies the NAND memory device that will be used.
|
||||||
|
This parameter can be a value of @ref FSMC_NAND_Bank */
|
||||||
|
|
||||||
|
uint32_t Waitfeature; /*!< Enables or disables the Wait feature for the NAND Memory device.
|
||||||
|
This parameter can be any value of @ref FSMC_Wait_feature */
|
||||||
|
|
||||||
|
uint32_t MemoryDataWidth; /*!< Specifies the external memory device width.
|
||||||
|
This parameter can be any value of @ref FSMC_NAND_Data_Width */
|
||||||
|
|
||||||
|
uint32_t EccComputation; /*!< Enables or disables the ECC computation.
|
||||||
|
This parameter can be any value of @ref FSMC_ECC */
|
||||||
|
|
||||||
|
uint32_t ECCPageSize; /*!< Defines the page size for the extended ECC.
|
||||||
|
This parameter can be any value of @ref FSMC_ECC_Page_Size */
|
||||||
|
|
||||||
|
uint32_t TCLRSetupTime; /*!< Defines the number of HCLK cycles to configure the
|
||||||
|
delay between CLE low and RE low.
|
||||||
|
This parameter can be a value between Min_Data = 0 and Max_Data = 255 */
|
||||||
|
|
||||||
|
uint32_t TARSetupTime; /*!< Defines the number of HCLK cycles to configure the
|
||||||
|
delay between ALE low and RE low.
|
||||||
|
This parameter can be a number between Min_Data = 0 and Max_Data = 255 */
|
||||||
|
}FSMC_NAND_InitTypeDef;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(FSMC_BANK3)||defined(FSMC_BANK4)
|
||||||
|
/**
|
||||||
|
* @brief FSMC NAND Timing parameters structure definition
|
||||||
|
*/
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
uint32_t SetupTime; /*!< Defines the number of HCLK cycles to setup address before
|
||||||
|
the command assertion for NAND-Flash read or write access
|
||||||
|
to common/Attribute or I/O memory space (depending on
|
||||||
|
the memory space timing to be configured).
|
||||||
|
This parameter can be a value between Min_Data = 0 and Max_Data = 254 */
|
||||||
|
|
||||||
|
uint32_t WaitSetupTime; /*!< Defines the minimum number of HCLK cycles to assert the
|
||||||
|
command for NAND-Flash read or write access to
|
||||||
|
common/Attribute or I/O memory space (depending on the
|
||||||
|
memory space timing to be configured).
|
||||||
|
This parameter can be a number between Min_Data = 0 and Max_Data = 254 */
|
||||||
|
|
||||||
|
uint32_t HoldSetupTime; /*!< Defines the number of HCLK clock cycles to hold address
|
||||||
|
(and data for write access) after the command de-assertion
|
||||||
|
for NAND-Flash read or write access to common/Attribute
|
||||||
|
or I/O memory space (depending on the memory space timing
|
||||||
|
to be configured).
|
||||||
|
This parameter can be a number between Min_Data = 0 and Max_Data = 254 */
|
||||||
|
|
||||||
|
uint32_t HiZSetupTime; /*!< Defines the number of HCLK clock cycles during which the
|
||||||
|
data bus is kept in HiZ after the start of a NAND-Flash
|
||||||
|
write access to common/Attribute or I/O memory space (depending
|
||||||
|
on the memory space timing to be configured).
|
||||||
|
This parameter can be a number between Min_Data = 0 and Max_Data = 254 */
|
||||||
|
}FSMC_NAND_PCC_TimingTypeDef;
|
||||||
|
#endif /* FSMC_BANK3 */
|
||||||
|
|
||||||
|
#if defined(FSMC_BANK4)
|
||||||
|
/**
|
||||||
|
* @brief FSMC PCCARD Configuration Structure definition
|
||||||
|
*/
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
uint32_t Waitfeature; /*!< Enables or disables the Wait feature for the PCCARD Memory device.
|
||||||
|
This parameter can be any value of @ref FSMC_Wait_feature */
|
||||||
|
|
||||||
|
uint32_t TCLRSetupTime; /*!< Defines the number of HCLK cycles to configure the
|
||||||
|
delay between CLE low and RE low.
|
||||||
|
This parameter can be a value between Min_Data = 0 and Max_Data = 255 */
|
||||||
|
|
||||||
|
uint32_t TARSetupTime; /*!< Defines the number of HCLK cycles to configure the
|
||||||
|
delay between ALE low and RE low.
|
||||||
|
This parameter can be a number between Min_Data = 0 and Max_Data = 255 */
|
||||||
|
}FSMC_PCCARD_InitTypeDef;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Exported constants --------------------------------------------------------*/
|
||||||
|
/** @addtogroup FSMC_LL_Exported_Constants FSMC Low Layer Exported Constants
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#if defined FSMC_BANK1
|
||||||
|
|
||||||
|
/** @defgroup FSMC_LL_NOR_SRAM_Controller FSMC NOR/SRAM Controller
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup FSMC_NORSRAM_Bank FSMC NOR/SRAM Bank
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define FSMC_NORSRAM_BANK1 ((uint32_t)0x00000000U)
|
||||||
|
#define FSMC_NORSRAM_BANK2 ((uint32_t)0x00000002U)
|
||||||
|
#define FSMC_NORSRAM_BANK3 ((uint32_t)0x00000004U)
|
||||||
|
#define FSMC_NORSRAM_BANK4 ((uint32_t)0x00000006U)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup FSMC_Data_Address_Bus_Multiplexing FSMC Data Address Bus Multiplexing
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define FSMC_DATA_ADDRESS_MUX_DISABLE ((uint32_t)0x00000000U)
|
||||||
|
#define FSMC_DATA_ADDRESS_MUX_ENABLE ((uint32_t)0x00000002U)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup FSMC_Memory_Type FSMC Memory Type
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define FSMC_MEMORY_TYPE_SRAM ((uint32_t)0x00000000U)
|
||||||
|
#define FSMC_MEMORY_TYPE_PSRAM ((uint32_t)0x00000004U)
|
||||||
|
#define FSMC_MEMORY_TYPE_NOR ((uint32_t)0x00000008U)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup FSMC_NORSRAM_Data_Width FSMC NORSRAM Data Width
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define FSMC_NORSRAM_MEM_BUS_WIDTH_8 ((uint32_t)0x00000000U)
|
||||||
|
#define FSMC_NORSRAM_MEM_BUS_WIDTH_16 ((uint32_t)0x00000010U)
|
||||||
|
#define FSMC_NORSRAM_MEM_BUS_WIDTH_32 ((uint32_t)0x00000020U)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup FSMC_NORSRAM_Flash_Access FSMC NOR/SRAM Flash Access
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define FSMC_NORSRAM_FLASH_ACCESS_ENABLE ((uint32_t)0x00000040U)
|
||||||
|
#define FSMC_NORSRAM_FLASH_ACCESS_DISABLE ((uint32_t)0x00000000U)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup FSMC_Burst_Access_Mode FSMC Burst Access Mode
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define FSMC_BURST_ACCESS_MODE_DISABLE ((uint32_t)0x00000000U)
|
||||||
|
#define FSMC_BURST_ACCESS_MODE_ENABLE ((uint32_t)0x00000100U)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup FSMC_Wait_Signal_Polarity FSMC Wait Signal Polarity
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define FSMC_WAIT_SIGNAL_POLARITY_LOW ((uint32_t)0x00000000U)
|
||||||
|
#define FSMC_WAIT_SIGNAL_POLARITY_HIGH ((uint32_t)0x00000200U)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup FSMC_Wrap_Mode FSMC Wrap Mode
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define FSMC_WRAP_MODE_DISABLE ((uint32_t)0x00000000U)
|
||||||
|
#define FSMC_WRAP_MODE_ENABLE ((uint32_t)0x00000400U)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup FSMC_Wait_Timing FSMC Wait Timing
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define FSMC_WAIT_TIMING_BEFORE_WS ((uint32_t)0x00000000U)
|
||||||
|
#define FSMC_WAIT_TIMING_DURING_WS ((uint32_t)0x00000800U)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup FSMC_Write_Operation FSMC Write Operation
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define FSMC_WRITE_OPERATION_DISABLE ((uint32_t)0x00000000U)
|
||||||
|
#define FSMC_WRITE_OPERATION_ENABLE ((uint32_t)0x00001000U)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup FSMC_Wait_Signal FSMC Wait Signal
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define FSMC_WAIT_SIGNAL_DISABLE ((uint32_t)0x00000000U)
|
||||||
|
#define FSMC_WAIT_SIGNAL_ENABLE ((uint32_t)0x00002000U)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup FSMC_Extended_Mode FSMC Extended Mode
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define FSMC_EXTENDED_MODE_DISABLE ((uint32_t)0x00000000U)
|
||||||
|
#define FSMC_EXTENDED_MODE_ENABLE ((uint32_t)0x00004000U)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup FSMC_AsynchronousWait FSMC Asynchronous Wait
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define FSMC_ASYNCHRONOUS_WAIT_DISABLE ((uint32_t)0x00000000U)
|
||||||
|
#define FSMC_ASYNCHRONOUS_WAIT_ENABLE ((uint32_t)0x00008000U)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup FSMC_Page_Size FSMC Page Size
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define FSMC_PAGE_SIZE_NONE ((uint32_t)0x00000000U)
|
||||||
|
#define FSMC_PAGE_SIZE_128 ((uint32_t)0x00010000U)
|
||||||
|
#define FSMC_PAGE_SIZE_256 ((uint32_t)0x00020000U)
|
||||||
|
#define FSMC_PAGE_SIZE_512 ((uint32_t)0x00030000U)
|
||||||
|
#define FSMC_PAGE_SIZE_1024 ((uint32_t)0x00040000U)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup FSMC_Write_Burst FSMC Write Burst
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define FSMC_WRITE_BURST_DISABLE ((uint32_t)0x00000000U)
|
||||||
|
#define FSMC_WRITE_BURST_ENABLE ((uint32_t)0x00080000U)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup FSMC_Continous_Clock FSMC Continuous Clock
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define FSMC_CONTINUOUS_CLOCK_SYNC_ONLY ((uint32_t)0x00000000U)
|
||||||
|
#define FSMC_CONTINUOUS_CLOCK_SYNC_ASYNC ((uint32_t)0x00100000U)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup FSMC_Access_Mode FSMC Access Mode
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define FSMC_ACCESS_MODE_A ((uint32_t)0x00000000U)
|
||||||
|
#define FSMC_ACCESS_MODE_B ((uint32_t)0x10000000U)
|
||||||
|
#define FSMC_ACCESS_MODE_C ((uint32_t)0x20000000U)
|
||||||
|
#define FSMC_ACCESS_MODE_D ((uint32_t)0x30000000U)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
#endif /* FSMC_BANK1 */
|
||||||
|
|
||||||
|
#if defined(FSMC_BANK3)||defined(FSMC_BANK4)
|
||||||
|
|
||||||
|
/** @defgroup FSMC_LL_NAND_Controller FSMC NAND Controller
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
/** @defgroup FSMC_NAND_Bank FSMC NAND Bank
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define FSMC_NAND_BANK2 ((uint32_t)0x00000010U)
|
||||||
|
#define FSMC_NAND_BANK3 ((uint32_t)0x00000100U)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup FSMC_Wait_feature FSMC Wait feature
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define FSMC_NAND_PCC_WAIT_FEATURE_DISABLE ((uint32_t)0x00000000U)
|
||||||
|
#define FSMC_NAND_PCC_WAIT_FEATURE_ENABLE ((uint32_t)0x00000002U)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup FSMC_PCR_Memory_Type FSMC PCR Memory Type
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#if defined(FSMC_BANK4)
|
||||||
|
#define FSMC_PCR_MEMORY_TYPE_PCCARD ((uint32_t)0x00000000U)
|
||||||
|
#endif
|
||||||
|
#define FSMC_PCR_MEMORY_TYPE_NAND ((uint32_t)0x00000008U)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup FSMC_NAND_Data_Width FSMC NAND Data Width
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define FSMC_NAND_PCC_MEM_BUS_WIDTH_8 ((uint32_t)0x00000000U)
|
||||||
|
#define FSMC_NAND_PCC_MEM_BUS_WIDTH_16 ((uint32_t)0x00000010U)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup FSMC_ECC FSMC ECC
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define FSMC_NAND_ECC_DISABLE ((uint32_t)0x00000000U)
|
||||||
|
#define FSMC_NAND_ECC_ENABLE ((uint32_t)0x00000040U)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup FSMC_ECC_Page_Size FSMC ECC Page Size
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define FSMC_NAND_ECC_PAGE_SIZE_256BYTE ((uint32_t)0x00000000U)
|
||||||
|
#define FSMC_NAND_ECC_PAGE_SIZE_512BYTE ((uint32_t)0x00020000U)
|
||||||
|
#define FSMC_NAND_ECC_PAGE_SIZE_1024BYTE ((uint32_t)0x00040000U)
|
||||||
|
#define FSMC_NAND_ECC_PAGE_SIZE_2048BYTE ((uint32_t)0x00060000U)
|
||||||
|
#define FSMC_NAND_ECC_PAGE_SIZE_4096BYTE ((uint32_t)0x00080000U)
|
||||||
|
#define FSMC_NAND_ECC_PAGE_SIZE_8192BYTE ((uint32_t)0x000A0000U)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
#endif /* FSMC_BANK3 */
|
||||||
|
|
||||||
|
|
||||||
|
/** @defgroup FSMC_LL_Interrupt_definition FSMC Low Layer Interrupt definition
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#if defined(FSMC_BANK3)||defined(FSMC_BANK4)
|
||||||
|
#define FSMC_IT_RISING_EDGE ((uint32_t)0x00000008U)
|
||||||
|
#define FSMC_IT_LEVEL ((uint32_t)0x00000010U)
|
||||||
|
#define FSMC_IT_FALLING_EDGE ((uint32_t)0x00000020U)
|
||||||
|
#endif /* FSMC_BANK3 */
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup FSMC_LL_Flag_definition FSMC Low Layer Flag definition
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#if defined(FSMC_BANK3)||defined(FSMC_BANK4)
|
||||||
|
#define FSMC_FLAG_RISING_EDGE ((uint32_t)0x00000001U)
|
||||||
|
#define FSMC_FLAG_LEVEL ((uint32_t)0x00000002U)
|
||||||
|
#define FSMC_FLAG_FALLING_EDGE ((uint32_t)0x00000004U)
|
||||||
|
#define FSMC_FLAG_FEMPT ((uint32_t)0x00000040U)
|
||||||
|
#endif /* FSMC_BANK3 */
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Private macro -------------------------------------------------------------*/
|
||||||
|
/** @defgroup FSMC_LL_Private_Macros FSMC_LL Private Macros
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#if defined FSMC_BANK1
|
||||||
|
/** @defgroup FSMC_LL_NOR_Macros FSMC NOR/SRAM Macros
|
||||||
|
* @brief macros to handle NOR device enable/disable and read/write operations
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Enable the NORSRAM device access.
|
||||||
|
* @param __INSTANCE__ FSMC_NORSRAM Instance
|
||||||
|
* @param __BANK__ FSMC_NORSRAM Bank
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define __FSMC_NORSRAM_ENABLE(__INSTANCE__, __BANK__) ((__INSTANCE__)->BTCR[(__BANK__)] |= FSMC_BCRx_MBKEN)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Disable the NORSRAM device access.
|
||||||
|
* @param __INSTANCE__ FSMC_NORSRAM Instance
|
||||||
|
* @param __BANK__ FSMC_NORSRAM Bank
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define __FSMC_NORSRAM_DISABLE(__INSTANCE__, __BANK__) ((__INSTANCE__)->BTCR[(__BANK__)] &= ~FSMC_BCRx_MBKEN)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
#endif /* FSMC_BANK1 */
|
||||||
|
|
||||||
|
#if defined(FSMC_BANK3)
|
||||||
|
/** @defgroup FSMC_LL_NAND_Macros FSMC NAND Macros
|
||||||
|
* @brief macros to handle NAND device enable/disable
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Enable the NAND device access.
|
||||||
|
* @param __INSTANCE__ FSMC_NAND Instance
|
||||||
|
* @param __BANK__ FSMC_NAND Bank
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define __FSMC_NAND_ENABLE(__INSTANCE__, __BANK__) (((__BANK__) == FSMC_NAND_BANK2)? ((__INSTANCE__)->PCR2 |= FSMC_PCRx_PBKEN): \
|
||||||
|
((__INSTANCE__)->PCR3 |= FSMC_PCRx_PBKEN))
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Disable the NAND device access.
|
||||||
|
* @param __INSTANCE__ FSMC_NAND Instance
|
||||||
|
* @param __BANK__ FSMC_NAND Bank
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define __FSMC_NAND_DISABLE(__INSTANCE__, __BANK__) (((__BANK__) == FSMC_NAND_BANK2)? CLEAR_BIT((__INSTANCE__)->PCR2, FSMC_PCRx_PBKEN): \
|
||||||
|
CLEAR_BIT((__INSTANCE__)->PCR3, FSMC_PCRx_PBKEN))
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(FSMC_BANK4)
|
||||||
|
/** @defgroup FSMC_LL_PCCARD_Macros FMC PCCARD Macros
|
||||||
|
* @brief macros to handle PCCARD read/write operations
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* @brief Enable the PCCARD device access.
|
||||||
|
* @param __INSTANCE__ FSMC_PCCARD Instance
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define __FSMC_PCCARD_ENABLE(__INSTANCE__) ((__INSTANCE__)->PCR4 |= FSMC_PCRx_PBKEN)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Disable the PCCARD device access.
|
||||||
|
* @param __INSTANCE__ FSMC_PCCARD Instance
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define __FSMC_PCCARD_DISABLE(__INSTANCE__) ((__INSTANCE__)->PCR4 &= ~FSMC_PCRx_PBKEN)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#endif
|
||||||
|
#if defined(FSMC_BANK3)
|
||||||
|
/** @defgroup FSMC_LL_NAND_Interrupt FSMC NAND Interrupt
|
||||||
|
* @brief macros to handle NAND interrupts
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Enable the NAND device interrupt.
|
||||||
|
* @param __INSTANCE__ FSMC_NAND instance
|
||||||
|
* @param __BANK__ FSMC_NAND Bank
|
||||||
|
* @param __INTERRUPT__ FSMC_NAND interrupt
|
||||||
|
* This parameter can be any combination of the following values:
|
||||||
|
* @arg FSMC_IT_RISING_EDGE: Interrupt rising edge.
|
||||||
|
* @arg FSMC_IT_LEVEL: Interrupt level.
|
||||||
|
* @arg FSMC_IT_FALLING_EDGE: Interrupt falling edge.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define __FSMC_NAND_ENABLE_IT(__INSTANCE__, __BANK__, __INTERRUPT__) (((__BANK__) == FSMC_NAND_BANK2)? ((__INSTANCE__)->SR2 |= (__INTERRUPT__)): \
|
||||||
|
((__INSTANCE__)->SR3 |= (__INTERRUPT__)))
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Disable the NAND device interrupt.
|
||||||
|
* @param __INSTANCE__ FSMC_NAND Instance
|
||||||
|
* @param __BANK__ FSMC_NAND Bank
|
||||||
|
* @param __INTERRUPT__ FSMC_NAND interrupt
|
||||||
|
* This parameter can be any combination of the following values:
|
||||||
|
* @arg FSMC_IT_RISING_EDGE: Interrupt rising edge.
|
||||||
|
* @arg FSMC_IT_LEVEL: Interrupt level.
|
||||||
|
* @arg FSMC_IT_FALLING_EDGE: Interrupt falling edge.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define __FSMC_NAND_DISABLE_IT(__INSTANCE__, __BANK__, __INTERRUPT__) (((__BANK__) == FSMC_NAND_BANK2)? ((__INSTANCE__)->SR2 &= ~(__INTERRUPT__)): \
|
||||||
|
((__INSTANCE__)->SR3 &= ~(__INTERRUPT__)))
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get flag status of the NAND device.
|
||||||
|
* @param __INSTANCE__ FSMC_NAND Instance
|
||||||
|
* @param __BANK__ FSMC_NAND Bank
|
||||||
|
* @param __FLAG__ FSMC_NAND flag
|
||||||
|
* This parameter can be any combination of the following values:
|
||||||
|
* @arg FSMC_FLAG_RISING_EDGE: Interrupt rising edge flag.
|
||||||
|
* @arg FSMC_FLAG_LEVEL: Interrupt level edge flag.
|
||||||
|
* @arg FSMC_FLAG_FALLING_EDGE: Interrupt falling edge flag.
|
||||||
|
* @arg FSMC_FLAG_FEMPT: FIFO empty flag.
|
||||||
|
* @retval The state of FLAG (SET or RESET).
|
||||||
|
*/
|
||||||
|
#define __FSMC_NAND_GET_FLAG(__INSTANCE__, __BANK__, __FLAG__) (((__BANK__) == FSMC_NAND_BANK2)? (((__INSTANCE__)->SR2 &(__FLAG__)) == (__FLAG__)): \
|
||||||
|
(((__INSTANCE__)->SR3 &(__FLAG__)) == (__FLAG__)))
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Clear flag status of the NAND device.
|
||||||
|
* @param __INSTANCE__ FSMC_NAND Instance
|
||||||
|
* @param __BANK__ FSMC_NAND Bank
|
||||||
|
* @param __FLAG__ FSMC_NAND flag
|
||||||
|
* This parameter can be any combination of the following values:
|
||||||
|
* @arg FSMC_FLAG_RISING_EDGE: Interrupt rising edge flag.
|
||||||
|
* @arg FSMC_FLAG_LEVEL: Interrupt level edge flag.
|
||||||
|
* @arg FSMC_FLAG_FALLING_EDGE: Interrupt falling edge flag.
|
||||||
|
* @arg FSMC_FLAG_FEMPT: FIFO empty flag.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define __FSMC_NAND_CLEAR_FLAG(__INSTANCE__, __BANK__, __FLAG__) (((__BANK__) == FSMC_NAND_BANK2)? ((__INSTANCE__)->SR2 &= ~(__FLAG__)): \
|
||||||
|
((__INSTANCE__)->SR3 &= ~(__FLAG__)))
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
#endif /* FSMC_BANK3 */
|
||||||
|
|
||||||
|
#if defined(FSMC_BANK4)
|
||||||
|
/** @defgroup FSMC_LL_PCCARD_Interrupt FSMC PCCARD Interrupt
|
||||||
|
* @brief macros to handle PCCARD interrupts
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Enable the PCCARD device interrupt.
|
||||||
|
* @param __INSTANCE__ FSMC_PCCARD instance
|
||||||
|
* @param __INTERRUPT__ FSMC_PCCARD interrupt
|
||||||
|
* This parameter can be any combination of the following values:
|
||||||
|
* @arg FSMC_IT_RISING_EDGE: Interrupt rising edge.
|
||||||
|
* @arg FSMC_IT_LEVEL: Interrupt level.
|
||||||
|
* @arg FSMC_IT_FALLING_EDGE: Interrupt falling edge.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define __FSMC_PCCARD_ENABLE_IT(__INSTANCE__, __INTERRUPT__) ((__INSTANCE__)->SR4 |= (__INTERRUPT__))
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Disable the PCCARD device interrupt.
|
||||||
|
* @param __INSTANCE__ FSMC_PCCARD instance
|
||||||
|
* @param __INTERRUPT__ FSMC_PCCARD interrupt
|
||||||
|
* This parameter can be any combination of the following values:
|
||||||
|
* @arg FSMC_IT_RISING_EDGE: Interrupt rising edge.
|
||||||
|
* @arg FSMC_IT_LEVEL: Interrupt level.
|
||||||
|
* @arg FSMC_IT_FALLING_EDGE: Interrupt falling edge.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define __FSMC_PCCARD_DISABLE_IT(__INSTANCE__, __INTERRUPT__) ((__INSTANCE__)->SR4 &= ~(__INTERRUPT__))
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get flag status of the PCCARD device.
|
||||||
|
* @param __INSTANCE__ FSMC_PCCARD instance
|
||||||
|
* @param __FLAG__ FSMC_PCCARD flag
|
||||||
|
* This parameter can be any combination of the following values:
|
||||||
|
* @arg FSMC_FLAG_RISING_EDGE: Interrupt rising edge flag.
|
||||||
|
* @arg FSMC_FLAG_LEVEL: Interrupt level edge flag.
|
||||||
|
* @arg FSMC_FLAG_FALLING_EDGE: Interrupt falling edge flag.
|
||||||
|
* @arg FSMC_FLAG_FEMPT: FIFO empty flag.
|
||||||
|
* @retval The state of FLAG (SET or RESET).
|
||||||
|
*/
|
||||||
|
#define __FSMC_PCCARD_GET_FLAG(__INSTANCE__, __FLAG__) (((__INSTANCE__)->SR4 &(__FLAG__)) == (__FLAG__))
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Clear flag status of the PCCARD device.
|
||||||
|
* @param __INSTANCE__ FSMC_PCCARD instance
|
||||||
|
* @param __FLAG__ FSMC_PCCARD flag
|
||||||
|
* This parameter can be any combination of the following values:
|
||||||
|
* @arg FSMC_FLAG_RISING_EDGE: Interrupt rising edge flag.
|
||||||
|
* @arg FSMC_FLAG_LEVEL: Interrupt level edge flag.
|
||||||
|
* @arg FSMC_FLAG_FALLING_EDGE: Interrupt falling edge flag.
|
||||||
|
* @arg FSMC_FLAG_FEMPT: FIFO empty flag.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define __FSMC_PCCARD_CLEAR_FLAG(__INSTANCE__, __FLAG__) ((__INSTANCE__)->SR4 &= ~(__FLAG__))
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Private functions ---------------------------------------------------------*/
|
||||||
|
/** @defgroup FSMC_LL_Private_Functions FSMC LL Private Functions
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined FSMC_BANK1
|
||||||
|
/** @defgroup FSMC_LL_NORSRAM NOR SRAM
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
/** @defgroup FSMC_LL_NORSRAM_Private_Functions_Group1 NOR SRAM Initialization/de-initialization functions
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
HAL_StatusTypeDef FSMC_NORSRAM_Init(FSMC_NORSRAM_TypeDef *Device, FSMC_NORSRAM_InitTypeDef *Init);
|
||||||
|
HAL_StatusTypeDef FSMC_NORSRAM_Timing_Init(FSMC_NORSRAM_TypeDef *Device, FSMC_NORSRAM_TimingTypeDef *Timing, uint32_t Bank);
|
||||||
|
HAL_StatusTypeDef FSMC_NORSRAM_Extended_Timing_Init(FSMC_NORSRAM_EXTENDED_TypeDef *Device, FSMC_NORSRAM_TimingTypeDef *Timing, uint32_t Bank, uint32_t ExtendedMode);
|
||||||
|
HAL_StatusTypeDef FSMC_NORSRAM_DeInit(FSMC_NORSRAM_TypeDef *Device, FSMC_NORSRAM_EXTENDED_TypeDef *ExDevice, uint32_t Bank);
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup FSMC_LL_NORSRAM_Private_Functions_Group2 NOR SRAM Control functions
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
HAL_StatusTypeDef FSMC_NORSRAM_WriteOperation_Enable(FSMC_NORSRAM_TypeDef *Device, uint32_t Bank);
|
||||||
|
HAL_StatusTypeDef FSMC_NORSRAM_WriteOperation_Disable(FSMC_NORSRAM_TypeDef *Device, uint32_t Bank);
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
#endif /* FSMC_BANK1 */
|
||||||
|
|
||||||
|
#if defined(FSMC_BANK3)
|
||||||
|
/** @defgroup FSMC_LL_NAND NAND
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
/** @defgroup FSMC_LL_NAND_Private_Functions_Group1 NAND Initialization/de-initialization functions
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
HAL_StatusTypeDef FSMC_NAND_Init(FSMC_NAND_TypeDef *Device, FSMC_NAND_InitTypeDef *Init);
|
||||||
|
HAL_StatusTypeDef FSMC_NAND_CommonSpace_Timing_Init(FSMC_NAND_TypeDef *Device, FSMC_NAND_PCC_TimingTypeDef *Timing, uint32_t Bank);
|
||||||
|
HAL_StatusTypeDef FSMC_NAND_AttributeSpace_Timing_Init(FSMC_NAND_TypeDef *Device, FSMC_NAND_PCC_TimingTypeDef *Timing, uint32_t Bank);
|
||||||
|
HAL_StatusTypeDef FSMC_NAND_DeInit(FSMC_NAND_TypeDef *Device, uint32_t Bank);
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup FSMC_LL_NAND_Private_Functions_Group2 NAND Control functions
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
HAL_StatusTypeDef FSMC_NAND_ECC_Enable(FSMC_NAND_TypeDef *Device, uint32_t Bank);
|
||||||
|
HAL_StatusTypeDef FSMC_NAND_ECC_Disable(FSMC_NAND_TypeDef *Device, uint32_t Bank);
|
||||||
|
HAL_StatusTypeDef FSMC_NAND_GetECC(FSMC_NAND_TypeDef *Device, uint32_t *ECCval, uint32_t Bank, uint32_t Timeout);
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
#endif /* FSMC_BANK3 */
|
||||||
|
|
||||||
|
#if defined(FSMC_BANK4)
|
||||||
|
/** @defgroup FSMC_LL_PCCARD PCCARD
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
/** @defgroup FSMC_LL_PCCARD_Private_Functions_Group1 PCCARD Initialization/de-initialization functions
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
HAL_StatusTypeDef FSMC_PCCARD_Init(FSMC_PCCARD_TypeDef *Device, FSMC_PCCARD_InitTypeDef *Init);
|
||||||
|
HAL_StatusTypeDef FSMC_PCCARD_CommonSpace_Timing_Init(FSMC_PCCARD_TypeDef *Device, FSMC_NAND_PCC_TimingTypeDef *Timing);
|
||||||
|
HAL_StatusTypeDef FSMC_PCCARD_AttributeSpace_Timing_Init(FSMC_PCCARD_TypeDef *Device, FSMC_NAND_PCC_TimingTypeDef *Timing);
|
||||||
|
HAL_StatusTypeDef FSMC_PCCARD_IOSpace_Timing_Init(FSMC_PCCARD_TypeDef *Device, FSMC_NAND_PCC_TimingTypeDef *Timing);
|
||||||
|
HAL_StatusTypeDef FSMC_PCCARD_DeInit(FSMC_PCCARD_TypeDef *Device);
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
#endif /* FSMC_BANK4 */
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* STM32F1xx_LL_FSMC_H */
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
2345
LLDrivers/inc/stm32f1xx_ll_gpio.h
Normal file
2345
LLDrivers/inc/stm32f1xx_ll_gpio.h
Normal file
File diff suppressed because it is too large
Load diff
1784
LLDrivers/inc/stm32f1xx_ll_i2c.h
Normal file
1784
LLDrivers/inc/stm32f1xx_ll_i2c.h
Normal file
File diff suppressed because it is too large
Load diff
311
LLDrivers/inc/stm32f1xx_ll_iwdg.h
Normal file
311
LLDrivers/inc/stm32f1xx_ll_iwdg.h
Normal file
|
@ -0,0 +1,311 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file stm32f1xx_ll_iwdg.h
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @brief Header file of IWDG LL 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_IWDG_H
|
||||||
|
#define STM32F1xx_LL_IWDG_H
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "stm32f1xx.h"
|
||||||
|
|
||||||
|
/** @addtogroup STM32F1xx_LL_Driver
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(IWDG)
|
||||||
|
|
||||||
|
/** @defgroup IWDG_LL IWDG
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Private types -------------------------------------------------------------*/
|
||||||
|
/* Private variables ---------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* Private constants ---------------------------------------------------------*/
|
||||||
|
/** @defgroup IWDG_LL_Private_Constants IWDG Private Constants
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define LL_IWDG_KEY_RELOAD 0x0000AAAAU /*!< IWDG Reload Counter Enable */
|
||||||
|
#define LL_IWDG_KEY_ENABLE 0x0000CCCCU /*!< IWDG Peripheral Enable */
|
||||||
|
#define LL_IWDG_KEY_WR_ACCESS_ENABLE 0x00005555U /*!< IWDG KR Write Access Enable */
|
||||||
|
#define LL_IWDG_KEY_WR_ACCESS_DISABLE 0x00000000U /*!< IWDG KR Write Access Disable */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Private macros ------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* Exported types ------------------------------------------------------------*/
|
||||||
|
/* Exported constants --------------------------------------------------------*/
|
||||||
|
/** @defgroup IWDG_LL_Exported_Constants IWDG Exported Constants
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup IWDG_LL_EC_GET_FLAG Get Flags Defines
|
||||||
|
* @brief Flags defines which can be used with LL_IWDG_ReadReg function
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define LL_IWDG_SR_PVU IWDG_SR_PVU /*!< Watchdog prescaler value update */
|
||||||
|
#define LL_IWDG_SR_RVU IWDG_SR_RVU /*!< Watchdog counter reload value update */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup IWDG_LL_EC_PRESCALER Prescaler Divider
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define LL_IWDG_PRESCALER_4 0x00000000U /*!< Divider by 4 */
|
||||||
|
#define LL_IWDG_PRESCALER_8 (IWDG_PR_PR_0) /*!< Divider by 8 */
|
||||||
|
#define LL_IWDG_PRESCALER_16 (IWDG_PR_PR_1) /*!< Divider by 16 */
|
||||||
|
#define LL_IWDG_PRESCALER_32 (IWDG_PR_PR_1 | IWDG_PR_PR_0) /*!< Divider by 32 */
|
||||||
|
#define LL_IWDG_PRESCALER_64 (IWDG_PR_PR_2) /*!< Divider by 64 */
|
||||||
|
#define LL_IWDG_PRESCALER_128 (IWDG_PR_PR_2 | IWDG_PR_PR_0) /*!< Divider by 128 */
|
||||||
|
#define LL_IWDG_PRESCALER_256 (IWDG_PR_PR_2 | IWDG_PR_PR_1) /*!< Divider by 256 */
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Exported macro ------------------------------------------------------------*/
|
||||||
|
/** @defgroup IWDG_LL_Exported_Macros IWDG Exported Macros
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup IWDG_LL_EM_WRITE_READ Common Write and read registers Macros
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Write a value in IWDG register
|
||||||
|
* @param __INSTANCE__ IWDG Instance
|
||||||
|
* @param __REG__ Register to be written
|
||||||
|
* @param __VALUE__ Value to be written in the register
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define LL_IWDG_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__))
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Read a value in IWDG register
|
||||||
|
* @param __INSTANCE__ IWDG Instance
|
||||||
|
* @param __REG__ Register to be read
|
||||||
|
* @retval Register value
|
||||||
|
*/
|
||||||
|
#define LL_IWDG_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/* Exported functions --------------------------------------------------------*/
|
||||||
|
/** @defgroup IWDG_LL_Exported_Functions IWDG Exported Functions
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
/** @defgroup IWDG_LL_EF_Configuration Configuration
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Start the Independent Watchdog
|
||||||
|
* @note Except if the hardware watchdog option is selected
|
||||||
|
* @rmtoll KR KEY LL_IWDG_Enable
|
||||||
|
* @param IWDGx IWDG Instance
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE void LL_IWDG_Enable(IWDG_TypeDef *IWDGx)
|
||||||
|
{
|
||||||
|
WRITE_REG(IWDG->KR, LL_IWDG_KEY_ENABLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Reloads IWDG counter with value defined in the reload register
|
||||||
|
* @rmtoll KR KEY LL_IWDG_ReloadCounter
|
||||||
|
* @param IWDGx IWDG Instance
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE void LL_IWDG_ReloadCounter(IWDG_TypeDef *IWDGx)
|
||||||
|
{
|
||||||
|
WRITE_REG(IWDG->KR, LL_IWDG_KEY_RELOAD);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Enable write access to IWDG_PR, IWDG_RLR and IWDG_WINR registers
|
||||||
|
* @rmtoll KR KEY LL_IWDG_EnableWriteAccess
|
||||||
|
* @param IWDGx IWDG Instance
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE void LL_IWDG_EnableWriteAccess(IWDG_TypeDef *IWDGx)
|
||||||
|
{
|
||||||
|
WRITE_REG(IWDG->KR, LL_IWDG_KEY_WR_ACCESS_ENABLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Disable write access to IWDG_PR, IWDG_RLR and IWDG_WINR registers
|
||||||
|
* @rmtoll KR KEY LL_IWDG_DisableWriteAccess
|
||||||
|
* @param IWDGx IWDG Instance
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE void LL_IWDG_DisableWriteAccess(IWDG_TypeDef *IWDGx)
|
||||||
|
{
|
||||||
|
WRITE_REG(IWDG->KR, LL_IWDG_KEY_WR_ACCESS_DISABLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Select the prescaler of the IWDG
|
||||||
|
* @rmtoll PR PR LL_IWDG_SetPrescaler
|
||||||
|
* @param IWDGx IWDG Instance
|
||||||
|
* @param Prescaler This parameter can be one of the following values:
|
||||||
|
* @arg @ref LL_IWDG_PRESCALER_4
|
||||||
|
* @arg @ref LL_IWDG_PRESCALER_8
|
||||||
|
* @arg @ref LL_IWDG_PRESCALER_16
|
||||||
|
* @arg @ref LL_IWDG_PRESCALER_32
|
||||||
|
* @arg @ref LL_IWDG_PRESCALER_64
|
||||||
|
* @arg @ref LL_IWDG_PRESCALER_128
|
||||||
|
* @arg @ref LL_IWDG_PRESCALER_256
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE void LL_IWDG_SetPrescaler(IWDG_TypeDef *IWDGx, uint32_t Prescaler)
|
||||||
|
{
|
||||||
|
WRITE_REG(IWDGx->PR, IWDG_PR_PR & Prescaler);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get the selected prescaler of the IWDG
|
||||||
|
* @rmtoll PR PR LL_IWDG_GetPrescaler
|
||||||
|
* @param IWDGx IWDG Instance
|
||||||
|
* @retval Returned value can be one of the following values:
|
||||||
|
* @arg @ref LL_IWDG_PRESCALER_4
|
||||||
|
* @arg @ref LL_IWDG_PRESCALER_8
|
||||||
|
* @arg @ref LL_IWDG_PRESCALER_16
|
||||||
|
* @arg @ref LL_IWDG_PRESCALER_32
|
||||||
|
* @arg @ref LL_IWDG_PRESCALER_64
|
||||||
|
* @arg @ref LL_IWDG_PRESCALER_128
|
||||||
|
* @arg @ref LL_IWDG_PRESCALER_256
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE uint32_t LL_IWDG_GetPrescaler(IWDG_TypeDef *IWDGx)
|
||||||
|
{
|
||||||
|
return (uint32_t)(READ_REG(IWDGx->PR));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Specify the IWDG down-counter reload value
|
||||||
|
* @rmtoll RLR RL LL_IWDG_SetReloadCounter
|
||||||
|
* @param IWDGx IWDG Instance
|
||||||
|
* @param Counter Value between Min_Data=0 and Max_Data=0x0FFF
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE void LL_IWDG_SetReloadCounter(IWDG_TypeDef *IWDGx, uint32_t Counter)
|
||||||
|
{
|
||||||
|
WRITE_REG(IWDGx->RLR, IWDG_RLR_RL & Counter);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get the specified IWDG down-counter reload value
|
||||||
|
* @rmtoll RLR RL LL_IWDG_GetReloadCounter
|
||||||
|
* @param IWDGx IWDG Instance
|
||||||
|
* @retval Value between Min_Data=0 and Max_Data=0x0FFF
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE uint32_t LL_IWDG_GetReloadCounter(IWDG_TypeDef *IWDGx)
|
||||||
|
{
|
||||||
|
return (uint32_t)(READ_REG(IWDGx->RLR));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup IWDG_LL_EF_FLAG_Management FLAG_Management
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Check if flag Prescaler Value Update is set or not
|
||||||
|
* @rmtoll SR PVU LL_IWDG_IsActiveFlag_PVU
|
||||||
|
* @param IWDGx IWDG Instance
|
||||||
|
* @retval State of bit (1 or 0).
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE uint32_t LL_IWDG_IsActiveFlag_PVU(IWDG_TypeDef *IWDGx)
|
||||||
|
{
|
||||||
|
return (READ_BIT(IWDGx->SR, IWDG_SR_PVU) == (IWDG_SR_PVU));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Check if flag Reload Value Update is set or not
|
||||||
|
* @rmtoll SR RVU LL_IWDG_IsActiveFlag_RVU
|
||||||
|
* @param IWDGx IWDG Instance
|
||||||
|
* @retval State of bit (1 or 0).
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE uint32_t LL_IWDG_IsActiveFlag_RVU(IWDG_TypeDef *IWDGx)
|
||||||
|
{
|
||||||
|
return (READ_BIT(IWDGx->SR, IWDG_SR_RVU) == (IWDG_SR_RVU));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Check if all flags Prescaler, Reload & Window Value Update are reset or not
|
||||||
|
* @rmtoll SR PVU LL_IWDG_IsReady\n
|
||||||
|
* SR RVU LL_IWDG_IsReady
|
||||||
|
* @param IWDGx IWDG Instance
|
||||||
|
* @retval State of bits (1 or 0).
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE uint32_t LL_IWDG_IsReady(IWDG_TypeDef *IWDGx)
|
||||||
|
{
|
||||||
|
return (READ_BIT(IWDGx->SR, IWDG_SR_PVU | IWDG_SR_RVU) == 0U);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#endif /* IWDG) */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* STM32F1xx_LL_IWDG_H */
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
440
LLDrivers/inc/stm32f1xx_ll_pwr.h
Normal file
440
LLDrivers/inc/stm32f1xx_ll_pwr.h
Normal file
|
@ -0,0 +1,440 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file stm32f1xx_ll_pwr.h
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @brief Header file of PWR LL 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_PWR_H
|
||||||
|
#define __STM32F1xx_LL_PWR_H
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "stm32f1xx.h"
|
||||||
|
|
||||||
|
/** @addtogroup STM32F1xx_LL_Driver
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(PWR)
|
||||||
|
|
||||||
|
/** @defgroup PWR_LL PWR
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Private types -------------------------------------------------------------*/
|
||||||
|
/* Private variables ---------------------------------------------------------*/
|
||||||
|
/* Private constants ---------------------------------------------------------*/
|
||||||
|
/* Private macros ------------------------------------------------------------*/
|
||||||
|
/* Exported types ------------------------------------------------------------*/
|
||||||
|
/* Exported constants --------------------------------------------------------*/
|
||||||
|
/** @defgroup PWR_LL_Exported_Constants PWR Exported Constants
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup PWR_LL_EC_CLEAR_FLAG Clear Flags Defines
|
||||||
|
* @brief Flags defines which can be used with LL_PWR_WriteReg function
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define LL_PWR_CR_CSBF PWR_CR_CSBF /*!< Clear standby flag */
|
||||||
|
#define LL_PWR_CR_CWUF PWR_CR_CWUF /*!< Clear wakeup flag */
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup PWR_LL_EC_GET_FLAG Get Flags Defines
|
||||||
|
* @brief Flags defines which can be used with LL_PWR_ReadReg function
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define LL_PWR_CSR_WUF PWR_CSR_WUF /*!< Wakeup flag */
|
||||||
|
#define LL_PWR_CSR_SBF PWR_CSR_SBF /*!< Standby flag */
|
||||||
|
#define LL_PWR_CSR_PVDO PWR_CSR_PVDO /*!< Power voltage detector output flag */
|
||||||
|
#define LL_PWR_CSR_EWUP1 PWR_CSR_EWUP /*!< Enable WKUP pin 1 */
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/** @defgroup PWR_LL_EC_MODE_PWR Mode Power
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define LL_PWR_MODE_STOP_MAINREGU 0x00000000U /*!< Enter Stop mode when the CPU enters deepsleep */
|
||||||
|
#define LL_PWR_MODE_STOP_LPREGU (PWR_CR_LPDS) /*!< Enter Stop mode (with low power Regulator ON) when the CPU enters deepsleep */
|
||||||
|
#define LL_PWR_MODE_STANDBY (PWR_CR_PDDS) /*!< Enter Standby mode when the CPU enters deepsleep */
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup PWR_LL_EC_REGU_MODE_DS_MODE Regulator Mode In Deep Sleep Mode
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define LL_PWR_REGU_DSMODE_MAIN 0x00000000U /*!< Voltage Regulator in main mode during deepsleep mode */
|
||||||
|
#define LL_PWR_REGU_DSMODE_LOW_POWER (PWR_CR_LPDS) /*!< Voltage Regulator in low-power mode during deepsleep mode */
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup PWR_LL_EC_PVDLEVEL Power Voltage Detector Level
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define LL_PWR_PVDLEVEL_0 (PWR_CR_PLS_LEV0) /*!< Voltage threshold detected by PVD 2.2 V */
|
||||||
|
#define LL_PWR_PVDLEVEL_1 (PWR_CR_PLS_LEV1) /*!< Voltage threshold detected by PVD 2.3 V */
|
||||||
|
#define LL_PWR_PVDLEVEL_2 (PWR_CR_PLS_LEV2) /*!< Voltage threshold detected by PVD 2.4 V */
|
||||||
|
#define LL_PWR_PVDLEVEL_3 (PWR_CR_PLS_LEV3) /*!< Voltage threshold detected by PVD 2.5 V */
|
||||||
|
#define LL_PWR_PVDLEVEL_4 (PWR_CR_PLS_LEV4) /*!< Voltage threshold detected by PVD 2.6 V */
|
||||||
|
#define LL_PWR_PVDLEVEL_5 (PWR_CR_PLS_LEV5) /*!< Voltage threshold detected by PVD 2.7 V */
|
||||||
|
#define LL_PWR_PVDLEVEL_6 (PWR_CR_PLS_LEV6) /*!< Voltage threshold detected by PVD 2.8 V */
|
||||||
|
#define LL_PWR_PVDLEVEL_7 (PWR_CR_PLS_LEV7) /*!< Voltage threshold detected by PVD 2.9 V */
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
/** @defgroup PWR_LL_EC_WAKEUP_PIN Wakeup Pins
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define LL_PWR_WAKEUP_PIN1 (PWR_CSR_EWUP) /*!< WKUP pin 1 : PA0 */
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/* Exported macro ------------------------------------------------------------*/
|
||||||
|
/** @defgroup PWR_LL_Exported_Macros PWR Exported Macros
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup PWR_LL_EM_WRITE_READ Common write and read registers Macros
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Write a value in PWR register
|
||||||
|
* @param __REG__ Register to be written
|
||||||
|
* @param __VALUE__ Value to be written in the register
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define LL_PWR_WriteReg(__REG__, __VALUE__) WRITE_REG(PWR->__REG__, (__VALUE__))
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Read a value in PWR register
|
||||||
|
* @param __REG__ Register to be read
|
||||||
|
* @retval Register value
|
||||||
|
*/
|
||||||
|
#define LL_PWR_ReadReg(__REG__) READ_REG(PWR->__REG__)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Exported functions --------------------------------------------------------*/
|
||||||
|
/** @defgroup PWR_LL_Exported_Functions PWR Exported Functions
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup PWR_LL_EF_Configuration Configuration
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Enable access to the backup domain
|
||||||
|
* @rmtoll CR DBP LL_PWR_EnableBkUpAccess
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE void LL_PWR_EnableBkUpAccess(void)
|
||||||
|
{
|
||||||
|
SET_BIT(PWR->CR, PWR_CR_DBP);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Disable access to the backup domain
|
||||||
|
* @rmtoll CR DBP LL_PWR_DisableBkUpAccess
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE void LL_PWR_DisableBkUpAccess(void)
|
||||||
|
{
|
||||||
|
CLEAR_BIT(PWR->CR, PWR_CR_DBP);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Check if the backup domain is enabled
|
||||||
|
* @rmtoll CR DBP LL_PWR_IsEnabledBkUpAccess
|
||||||
|
* @retval State of bit (1 or 0).
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE uint32_t LL_PWR_IsEnabledBkUpAccess(void)
|
||||||
|
{
|
||||||
|
return (READ_BIT(PWR->CR, PWR_CR_DBP) == (PWR_CR_DBP));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set voltage Regulator mode during deep sleep mode
|
||||||
|
* @rmtoll CR LPDS LL_PWR_SetRegulModeDS
|
||||||
|
* @param RegulMode This parameter can be one of the following values:
|
||||||
|
* @arg @ref LL_PWR_REGU_DSMODE_MAIN
|
||||||
|
* @arg @ref LL_PWR_REGU_DSMODE_LOW_POWER
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE void LL_PWR_SetRegulModeDS(uint32_t RegulMode)
|
||||||
|
{
|
||||||
|
MODIFY_REG(PWR->CR, PWR_CR_LPDS, RegulMode);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get voltage Regulator mode during deep sleep mode
|
||||||
|
* @rmtoll CR LPDS LL_PWR_GetRegulModeDS
|
||||||
|
* @retval Returned value can be one of the following values:
|
||||||
|
* @arg @ref LL_PWR_REGU_DSMODE_MAIN
|
||||||
|
* @arg @ref LL_PWR_REGU_DSMODE_LOW_POWER
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE uint32_t LL_PWR_GetRegulModeDS(void)
|
||||||
|
{
|
||||||
|
return (uint32_t)(READ_BIT(PWR->CR, PWR_CR_LPDS));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set Power Down mode when CPU enters deepsleep
|
||||||
|
* @rmtoll CR PDDS LL_PWR_SetPowerMode\n
|
||||||
|
* @rmtoll CR LPDS LL_PWR_SetPowerMode
|
||||||
|
* @param PDMode This parameter can be one of the following values:
|
||||||
|
* @arg @ref LL_PWR_MODE_STOP_MAINREGU
|
||||||
|
* @arg @ref LL_PWR_MODE_STOP_LPREGU
|
||||||
|
* @arg @ref LL_PWR_MODE_STANDBY
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE void LL_PWR_SetPowerMode(uint32_t PDMode)
|
||||||
|
{
|
||||||
|
MODIFY_REG(PWR->CR, (PWR_CR_PDDS| PWR_CR_LPDS), PDMode);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get Power Down mode when CPU enters deepsleep
|
||||||
|
* @rmtoll CR PDDS LL_PWR_GetPowerMode\n
|
||||||
|
* @rmtoll CR LPDS LL_PWR_GetPowerMode
|
||||||
|
* @retval Returned value can be one of the following values:
|
||||||
|
* @arg @ref LL_PWR_MODE_STOP_MAINREGU
|
||||||
|
* @arg @ref LL_PWR_MODE_STOP_LPREGU
|
||||||
|
* @arg @ref LL_PWR_MODE_STANDBY
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE uint32_t LL_PWR_GetPowerMode(void)
|
||||||
|
{
|
||||||
|
return (uint32_t)(READ_BIT(PWR->CR, (PWR_CR_PDDS| PWR_CR_LPDS)));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Configure the voltage threshold detected by the Power Voltage Detector
|
||||||
|
* @rmtoll CR PLS LL_PWR_SetPVDLevel
|
||||||
|
* @param PVDLevel This parameter can be one of the following values:
|
||||||
|
* @arg @ref LL_PWR_PVDLEVEL_0
|
||||||
|
* @arg @ref LL_PWR_PVDLEVEL_1
|
||||||
|
* @arg @ref LL_PWR_PVDLEVEL_2
|
||||||
|
* @arg @ref LL_PWR_PVDLEVEL_3
|
||||||
|
* @arg @ref LL_PWR_PVDLEVEL_4
|
||||||
|
* @arg @ref LL_PWR_PVDLEVEL_5
|
||||||
|
* @arg @ref LL_PWR_PVDLEVEL_6
|
||||||
|
* @arg @ref LL_PWR_PVDLEVEL_7
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE void LL_PWR_SetPVDLevel(uint32_t PVDLevel)
|
||||||
|
{
|
||||||
|
MODIFY_REG(PWR->CR, PWR_CR_PLS, PVDLevel);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get the voltage threshold detection
|
||||||
|
* @rmtoll CR PLS LL_PWR_GetPVDLevel
|
||||||
|
* @retval Returned value can be one of the following values:
|
||||||
|
* @arg @ref LL_PWR_PVDLEVEL_0
|
||||||
|
* @arg @ref LL_PWR_PVDLEVEL_1
|
||||||
|
* @arg @ref LL_PWR_PVDLEVEL_2
|
||||||
|
* @arg @ref LL_PWR_PVDLEVEL_3
|
||||||
|
* @arg @ref LL_PWR_PVDLEVEL_4
|
||||||
|
* @arg @ref LL_PWR_PVDLEVEL_5
|
||||||
|
* @arg @ref LL_PWR_PVDLEVEL_6
|
||||||
|
* @arg @ref LL_PWR_PVDLEVEL_7
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE uint32_t LL_PWR_GetPVDLevel(void)
|
||||||
|
{
|
||||||
|
return (uint32_t)(READ_BIT(PWR->CR, PWR_CR_PLS));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Enable Power Voltage Detector
|
||||||
|
* @rmtoll CR PVDE LL_PWR_EnablePVD
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE void LL_PWR_EnablePVD(void)
|
||||||
|
{
|
||||||
|
SET_BIT(PWR->CR, PWR_CR_PVDE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Disable Power Voltage Detector
|
||||||
|
* @rmtoll CR PVDE LL_PWR_DisablePVD
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE void LL_PWR_DisablePVD(void)
|
||||||
|
{
|
||||||
|
CLEAR_BIT(PWR->CR, PWR_CR_PVDE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Check if Power Voltage Detector is enabled
|
||||||
|
* @rmtoll CR PVDE LL_PWR_IsEnabledPVD
|
||||||
|
* @retval State of bit (1 or 0).
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE uint32_t LL_PWR_IsEnabledPVD(void)
|
||||||
|
{
|
||||||
|
return (READ_BIT(PWR->CR, PWR_CR_PVDE) == (PWR_CR_PVDE));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Enable the WakeUp PINx functionality
|
||||||
|
* @rmtoll CSR EWUP LL_PWR_EnableWakeUpPin
|
||||||
|
* @param WakeUpPin This parameter can be one of the following values:
|
||||||
|
* @arg @ref LL_PWR_WAKEUP_PIN1
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE void LL_PWR_EnableWakeUpPin(uint32_t WakeUpPin)
|
||||||
|
{
|
||||||
|
SET_BIT(PWR->CSR, WakeUpPin);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Disable the WakeUp PINx functionality
|
||||||
|
* @rmtoll CSR EWUP LL_PWR_DisableWakeUpPin
|
||||||
|
* @param WakeUpPin This parameter can be one of the following values:
|
||||||
|
* @arg @ref LL_PWR_WAKEUP_PIN1
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE void LL_PWR_DisableWakeUpPin(uint32_t WakeUpPin)
|
||||||
|
{
|
||||||
|
CLEAR_BIT(PWR->CSR, WakeUpPin);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Check if the WakeUp PINx functionality is enabled
|
||||||
|
* @rmtoll CSR EWUP LL_PWR_IsEnabledWakeUpPin
|
||||||
|
* @param WakeUpPin This parameter can be one of the following values:
|
||||||
|
* @arg @ref LL_PWR_WAKEUP_PIN1
|
||||||
|
* @retval State of bit (1 or 0).
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE uint32_t LL_PWR_IsEnabledWakeUpPin(uint32_t WakeUpPin)
|
||||||
|
{
|
||||||
|
return (READ_BIT(PWR->CSR, WakeUpPin) == (WakeUpPin));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup PWR_LL_EF_FLAG_Management FLAG_Management
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get Wake-up Flag
|
||||||
|
* @rmtoll CSR WUF LL_PWR_IsActiveFlag_WU
|
||||||
|
* @retval State of bit (1 or 0).
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE uint32_t LL_PWR_IsActiveFlag_WU(void)
|
||||||
|
{
|
||||||
|
return (READ_BIT(PWR->CSR, PWR_CSR_WUF) == (PWR_CSR_WUF));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get Standby Flag
|
||||||
|
* @rmtoll CSR SBF LL_PWR_IsActiveFlag_SB
|
||||||
|
* @retval State of bit (1 or 0).
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE uint32_t LL_PWR_IsActiveFlag_SB(void)
|
||||||
|
{
|
||||||
|
return (READ_BIT(PWR->CSR, PWR_CSR_SBF) == (PWR_CSR_SBF));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Indicate whether VDD voltage is below the selected PVD threshold
|
||||||
|
* @rmtoll CSR PVDO LL_PWR_IsActiveFlag_PVDO
|
||||||
|
* @retval State of bit (1 or 0).
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE uint32_t LL_PWR_IsActiveFlag_PVDO(void)
|
||||||
|
{
|
||||||
|
return (READ_BIT(PWR->CSR, PWR_CSR_PVDO) == (PWR_CSR_PVDO));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Clear Standby Flag
|
||||||
|
* @rmtoll CR CSBF LL_PWR_ClearFlag_SB
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE void LL_PWR_ClearFlag_SB(void)
|
||||||
|
{
|
||||||
|
SET_BIT(PWR->CR, PWR_CR_CSBF);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Clear Wake-up Flags
|
||||||
|
* @rmtoll CR CWUF LL_PWR_ClearFlag_WU
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE void LL_PWR_ClearFlag_WU(void)
|
||||||
|
{
|
||||||
|
SET_BIT(PWR->CR, PWR_CR_CWUF);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(USE_FULL_LL_DRIVER)
|
||||||
|
/** @defgroup PWR_LL_EF_Init De-initialization function
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
ErrorStatus LL_PWR_DeInit(void);
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
#endif /* USE_FULL_LL_DRIVER */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#endif /* defined(PWR) */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* __STM32F1xx_LL_PWR_H */
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
1003
LLDrivers/inc/stm32f1xx_ll_rtc.h
Normal file
1003
LLDrivers/inc/stm32f1xx_ll_rtc.h
Normal file
File diff suppressed because it is too large
Load diff
1112
LLDrivers/inc/stm32f1xx_ll_sdmmc.h
Normal file
1112
LLDrivers/inc/stm32f1xx_ll_sdmmc.h
Normal file
File diff suppressed because it is too large
Load diff
1938
LLDrivers/inc/stm32f1xx_ll_spi.h
Normal file
1938
LLDrivers/inc/stm32f1xx_ll_spi.h
Normal file
File diff suppressed because it is too large
Load diff
3831
LLDrivers/inc/stm32f1xx_ll_tim.h
Normal file
3831
LLDrivers/inc/stm32f1xx_ll_tim.h
Normal file
File diff suppressed because it is too large
Load diff
2569
LLDrivers/inc/stm32f1xx_ll_usart.h
Normal file
2569
LLDrivers/inc/stm32f1xx_ll_usart.h
Normal file
File diff suppressed because it is too large
Load diff
651
LLDrivers/inc/stm32f1xx_ll_usb.h
Normal file
651
LLDrivers/inc/stm32f1xx_ll_usb.h
Normal file
|
@ -0,0 +1,651 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @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 OTG 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 USB_Core_Speed_ */
|
||||||
|
|
||||||
|
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 USB_Core_PHY_ */
|
||||||
|
|
||||||
|
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_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 speed.
|
||||||
|
This parameter can be any value of @ref USB_Core_Speed_ */
|
||||||
|
|
||||||
|
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_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 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 USB_Core_Speed */
|
||||||
|
|
||||||
|
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 USB_Core_PHY */
|
||||||
|
|
||||||
|
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 */
|
||||||
|
|
||||||
|
} 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_FS_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 DEP0CTL_MPS_64 0U
|
||||||
|
#define DEP0CTL_MPS_32 1U
|
||||||
|
#define DEP0CTL_MPS_16 2U
|
||||||
|
#define DEP0CTL_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 DEP0CTL_MPS_64 0U
|
||||||
|
#define DEP0CTL_MPS_32 1U
|
||||||
|
#define DEP0CTL_MPS_16 2U
|
||||||
|
#define DEP0CTL_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);
|
||||||
|
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_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);
|
||||||
|
HAL_StatusTypeDef USB_EPSetStall(USB_TypeDef *USBx, USB_EPTypeDef *ep);
|
||||||
|
HAL_StatusTypeDef USB_EPClearStall(USB_TypeDef *USBx, USB_EPTypeDef *ep);
|
||||||
|
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);
|
||||||
|
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****/
|
318
LLDrivers/inc/stm32f1xx_ll_wwdg.h
Normal file
318
LLDrivers/inc/stm32f1xx_ll_wwdg.h
Normal file
|
@ -0,0 +1,318 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file stm32f1xx_ll_wwdg.h
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @brief Header file of WWDG LL 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_WWDG_H
|
||||||
|
#define STM32F1xx_LL_WWDG_H
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "stm32f1xx.h"
|
||||||
|
|
||||||
|
/** @addtogroup STM32F1xx_LL_Driver
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined (WWDG)
|
||||||
|
/** @defgroup WWDG_LL WWDG
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Private types -------------------------------------------------------------*/
|
||||||
|
/* Private variables ---------------------------------------------------------*/
|
||||||
|
/* Private constants ---------------------------------------------------------*/
|
||||||
|
/* Private macros ------------------------------------------------------------*/
|
||||||
|
/* Exported types ------------------------------------------------------------*/
|
||||||
|
/* Exported constants --------------------------------------------------------*/
|
||||||
|
/** @defgroup WWDG_LL_Exported_Constants WWDG Exported Constants
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup WWDG_LL_EC_IT IT Defines
|
||||||
|
* @brief IT defines which can be used with LL_WWDG_ReadReg and LL_WWDG_WriteReg functions
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define LL_WWDG_CFR_EWI WWDG_CFR_EWI
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup WWDG_LL_EC_PRESCALER PRESCALER
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define LL_WWDG_PRESCALER_1 0x00000000U /*!< WWDG counter clock = (PCLK1/4096)/1 */
|
||||||
|
#define LL_WWDG_PRESCALER_2 WWDG_CFR_WDGTB_0 /*!< WWDG counter clock = (PCLK1/4096)/2 */
|
||||||
|
#define LL_WWDG_PRESCALER_4 WWDG_CFR_WDGTB_1 /*!< WWDG counter clock = (PCLK1/4096)/4 */
|
||||||
|
#define LL_WWDG_PRESCALER_8 (WWDG_CFR_WDGTB_0 | WWDG_CFR_WDGTB_1) /*!< WWDG counter clock = (PCLK1/4096)/8 */
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Exported macro ------------------------------------------------------------*/
|
||||||
|
/** @defgroup WWDG_LL_Exported_Macros WWDG Exported Macros
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
/** @defgroup WWDG_LL_EM_WRITE_READ Common Write and read registers macros
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* @brief Write a value in WWDG register
|
||||||
|
* @param __INSTANCE__ WWDG Instance
|
||||||
|
* @param __REG__ Register to be written
|
||||||
|
* @param __VALUE__ Value to be written in the register
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#define LL_WWDG_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__))
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Read a value in WWDG register
|
||||||
|
* @param __INSTANCE__ WWDG Instance
|
||||||
|
* @param __REG__ Register to be read
|
||||||
|
* @retval Register value
|
||||||
|
*/
|
||||||
|
#define LL_WWDG_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Exported functions --------------------------------------------------------*/
|
||||||
|
/** @defgroup WWDG_LL_Exported_Functions WWDG Exported Functions
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup WWDG_LL_EF_Configuration Configuration
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* @brief Enable Window Watchdog. The watchdog is always disabled after a reset.
|
||||||
|
* @note It is enabled by setting the WDGA bit in the WWDG_CR register,
|
||||||
|
* then it cannot be disabled again except by a reset.
|
||||||
|
* This bit is set by software and only cleared by hardware after a reset.
|
||||||
|
* When WDGA = 1, the watchdog can generate a reset.
|
||||||
|
* @rmtoll CR WDGA LL_WWDG_Enable
|
||||||
|
* @param WWDGx WWDG Instance
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE void LL_WWDG_Enable(WWDG_TypeDef *WWDGx)
|
||||||
|
{
|
||||||
|
SET_BIT(WWDGx->CR, WWDG_CR_WDGA);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Checks if Window Watchdog is enabled
|
||||||
|
* @rmtoll CR WDGA LL_WWDG_IsEnabled
|
||||||
|
* @param WWDGx WWDG Instance
|
||||||
|
* @retval State of bit (1 or 0).
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE uint32_t LL_WWDG_IsEnabled(WWDG_TypeDef *WWDGx)
|
||||||
|
{
|
||||||
|
return ((READ_BIT(WWDGx->CR, WWDG_CR_WDGA) == (WWDG_CR_WDGA)) ? 1UL : 0UL);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set the Watchdog counter value to provided value (7-bits T[6:0])
|
||||||
|
* @note When writing to the WWDG_CR register, always write 1 in the MSB b6 to avoid generating an immediate reset
|
||||||
|
* This counter is decremented every (4096 x 2expWDGTB) PCLK cycles
|
||||||
|
* A reset is produced when it rolls over from 0x40 to 0x3F (bit T6 becomes cleared)
|
||||||
|
* Setting the counter lower then 0x40 causes an immediate reset (if WWDG enabled)
|
||||||
|
* @rmtoll CR T LL_WWDG_SetCounter
|
||||||
|
* @param WWDGx WWDG Instance
|
||||||
|
* @param Counter 0..0x7F (7 bit counter value)
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE void LL_WWDG_SetCounter(WWDG_TypeDef *WWDGx, uint32_t Counter)
|
||||||
|
{
|
||||||
|
MODIFY_REG(WWDGx->CR, WWDG_CR_T, Counter);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Return current Watchdog Counter Value (7 bits counter value)
|
||||||
|
* @rmtoll CR T LL_WWDG_GetCounter
|
||||||
|
* @param WWDGx WWDG Instance
|
||||||
|
* @retval 7 bit Watchdog Counter value
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE uint32_t LL_WWDG_GetCounter(WWDG_TypeDef *WWDGx)
|
||||||
|
{
|
||||||
|
return (READ_BIT(WWDGx->CR, WWDG_CR_T));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set the time base of the prescaler (WDGTB).
|
||||||
|
* @note Prescaler is used to apply ratio on PCLK clock, so that Watchdog counter
|
||||||
|
* is decremented every (4096 x 2expWDGTB) PCLK cycles
|
||||||
|
* @rmtoll CFR WDGTB LL_WWDG_SetPrescaler
|
||||||
|
* @param WWDGx WWDG Instance
|
||||||
|
* @param Prescaler This parameter can be one of the following values:
|
||||||
|
* @arg @ref LL_WWDG_PRESCALER_1
|
||||||
|
* @arg @ref LL_WWDG_PRESCALER_2
|
||||||
|
* @arg @ref LL_WWDG_PRESCALER_4
|
||||||
|
* @arg @ref LL_WWDG_PRESCALER_8
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE void LL_WWDG_SetPrescaler(WWDG_TypeDef *WWDGx, uint32_t Prescaler)
|
||||||
|
{
|
||||||
|
MODIFY_REG(WWDGx->CFR, WWDG_CFR_WDGTB, Prescaler);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Return current Watchdog Prescaler Value
|
||||||
|
* @rmtoll CFR WDGTB LL_WWDG_GetPrescaler
|
||||||
|
* @param WWDGx WWDG Instance
|
||||||
|
* @retval Returned value can be one of the following values:
|
||||||
|
* @arg @ref LL_WWDG_PRESCALER_1
|
||||||
|
* @arg @ref LL_WWDG_PRESCALER_2
|
||||||
|
* @arg @ref LL_WWDG_PRESCALER_4
|
||||||
|
* @arg @ref LL_WWDG_PRESCALER_8
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE uint32_t LL_WWDG_GetPrescaler(WWDG_TypeDef *WWDGx)
|
||||||
|
{
|
||||||
|
return (READ_BIT(WWDGx->CFR, WWDG_CFR_WDGTB));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set the Watchdog Window value to be compared to the downcounter (7-bits W[6:0]).
|
||||||
|
* @note This window value defines when write in the WWDG_CR register
|
||||||
|
* to program Watchdog counter is allowed.
|
||||||
|
* Watchdog counter value update must occur only when the counter value
|
||||||
|
* is lower than the Watchdog window register value.
|
||||||
|
* Otherwise, a MCU reset is generated if the 7-bit Watchdog counter value
|
||||||
|
* (in the control register) is refreshed before the downcounter has reached
|
||||||
|
* the watchdog window register value.
|
||||||
|
* Physically is possible to set the Window lower then 0x40 but it is not recommended.
|
||||||
|
* To generate an immediate reset, it is possible to set the Counter lower than 0x40.
|
||||||
|
* @rmtoll CFR W LL_WWDG_SetWindow
|
||||||
|
* @param WWDGx WWDG Instance
|
||||||
|
* @param Window 0x00..0x7F (7 bit Window value)
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE void LL_WWDG_SetWindow(WWDG_TypeDef *WWDGx, uint32_t Window)
|
||||||
|
{
|
||||||
|
MODIFY_REG(WWDGx->CFR, WWDG_CFR_W, Window);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Return current Watchdog Window Value (7 bits value)
|
||||||
|
* @rmtoll CFR W LL_WWDG_GetWindow
|
||||||
|
* @param WWDGx WWDG Instance
|
||||||
|
* @retval 7 bit Watchdog Window value
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE uint32_t LL_WWDG_GetWindow(WWDG_TypeDef *WWDGx)
|
||||||
|
{
|
||||||
|
return (READ_BIT(WWDGx->CFR, WWDG_CFR_W));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup WWDG_LL_EF_FLAG_Management FLAG_Management
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* @brief Indicates if the WWDG Early Wakeup Interrupt Flag is set or not.
|
||||||
|
* @note This bit is set by hardware when the counter has reached the value 0x40.
|
||||||
|
* It must be cleared by software by writing 0.
|
||||||
|
* A write of 1 has no effect. This bit is also set if the interrupt is not enabled.
|
||||||
|
* @rmtoll SR EWIF LL_WWDG_IsActiveFlag_EWKUP
|
||||||
|
* @param WWDGx WWDG Instance
|
||||||
|
* @retval State of bit (1 or 0).
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE uint32_t LL_WWDG_IsActiveFlag_EWKUP(WWDG_TypeDef *WWDGx)
|
||||||
|
{
|
||||||
|
return ((READ_BIT(WWDGx->SR, WWDG_SR_EWIF) == (WWDG_SR_EWIF)) ? 1UL : 0UL);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Clear WWDG Early Wakeup Interrupt Flag (EWIF)
|
||||||
|
* @rmtoll SR EWIF LL_WWDG_ClearFlag_EWKUP
|
||||||
|
* @param WWDGx WWDG Instance
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE void LL_WWDG_ClearFlag_EWKUP(WWDG_TypeDef *WWDGx)
|
||||||
|
{
|
||||||
|
WRITE_REG(WWDGx->SR, ~WWDG_SR_EWIF);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup WWDG_LL_EF_IT_Management IT_Management
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* @brief Enable the Early Wakeup Interrupt.
|
||||||
|
* @note When set, an interrupt occurs whenever the counter reaches value 0x40.
|
||||||
|
* This interrupt is only cleared by hardware after a reset
|
||||||
|
* @rmtoll CFR EWI LL_WWDG_EnableIT_EWKUP
|
||||||
|
* @param WWDGx WWDG Instance
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE void LL_WWDG_EnableIT_EWKUP(WWDG_TypeDef *WWDGx)
|
||||||
|
{
|
||||||
|
SET_BIT(WWDGx->CFR, WWDG_CFR_EWI);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Check if Early Wakeup Interrupt is enabled
|
||||||
|
* @rmtoll CFR EWI LL_WWDG_IsEnabledIT_EWKUP
|
||||||
|
* @param WWDGx WWDG Instance
|
||||||
|
* @retval State of bit (1 or 0).
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE uint32_t LL_WWDG_IsEnabledIT_EWKUP(WWDG_TypeDef *WWDGx)
|
||||||
|
{
|
||||||
|
return ((READ_BIT(WWDGx->CFR, WWDG_CFR_EWI) == (WWDG_CFR_EWI)) ? 1UL : 0UL);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#endif /* WWDG */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* STM32F1xx_LL_WWDG_H */
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
886
LLDrivers/src/stm32f1xx_ll_adc.c
Normal file
886
LLDrivers/src/stm32f1xx_ll_adc.c
Normal file
|
@ -0,0 +1,886 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file stm32f1xx_ll_adc.c
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @brief ADC LL 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
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(USE_FULL_LL_DRIVER)
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "stm32f1xx_ll_adc.h"
|
||||||
|
#include "stm32f1xx_ll_bus.h"
|
||||||
|
|
||||||
|
#ifdef USE_FULL_ASSERT
|
||||||
|
#include "stm32_assert.h"
|
||||||
|
#else
|
||||||
|
#define assert_param(expr) ((void)0U)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/** @addtogroup STM32F1xx_LL_Driver
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined (ADC1) || defined (ADC2) || defined (ADC3)
|
||||||
|
|
||||||
|
/** @addtogroup ADC_LL ADC
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Private types -------------------------------------------------------------*/
|
||||||
|
/* Private variables ---------------------------------------------------------*/
|
||||||
|
/* Private constants ---------------------------------------------------------*/
|
||||||
|
/* Private macros ------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/** @addtogroup ADC_LL_Private_Macros
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Check of parameters for configuration of ADC hierarchical scope: */
|
||||||
|
/* common to several ADC instances. */
|
||||||
|
/* Check of parameters for configuration of ADC hierarchical scope: */
|
||||||
|
/* ADC instance. */
|
||||||
|
#define IS_LL_ADC_DATA_ALIGN(__DATA_ALIGN__) \
|
||||||
|
( ((__DATA_ALIGN__) == LL_ADC_DATA_ALIGN_RIGHT) \
|
||||||
|
|| ((__DATA_ALIGN__) == LL_ADC_DATA_ALIGN_LEFT) \
|
||||||
|
)
|
||||||
|
|
||||||
|
#define IS_LL_ADC_SCAN_SELECTION(__SCAN_SELECTION__) \
|
||||||
|
( ((__SCAN_SELECTION__) == LL_ADC_SEQ_SCAN_DISABLE) \
|
||||||
|
|| ((__SCAN_SELECTION__) == LL_ADC_SEQ_SCAN_ENABLE) \
|
||||||
|
)
|
||||||
|
|
||||||
|
#define IS_LL_ADC_SEQ_SCAN_MODE(__SEQ_SCAN_MODE__) \
|
||||||
|
( ((__SCAN_MODE__) == LL_ADC_SEQ_SCAN_DISABLE) \
|
||||||
|
|| ((__SCAN_MODE__) == LL_ADC_SEQ_SCAN_ENABLE) \
|
||||||
|
)
|
||||||
|
|
||||||
|
/* Check of parameters for configuration of ADC hierarchical scope: */
|
||||||
|
/* ADC group regular */
|
||||||
|
#if defined(ADC3)
|
||||||
|
#define IS_LL_ADC_REG_TRIG_SOURCE(__ADC_INSTANCE__, __REG_TRIG_SOURCE__) \
|
||||||
|
((((__ADC_INSTANCE__) == ADC1) || ((__ADC_INSTANCE__) == ADC2)) \
|
||||||
|
? ( ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_SOFTWARE) \
|
||||||
|
|| ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM1_CH3) \
|
||||||
|
|| ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM1_CH1) \
|
||||||
|
|| ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM1_CH2) \
|
||||||
|
|| ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM2_CH2) \
|
||||||
|
|| ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM3_TRGO) \
|
||||||
|
|| ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM4_CH4) \
|
||||||
|
|| ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_EXTI_LINE11) \
|
||||||
|
|| ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM8_TRGO) \
|
||||||
|
) \
|
||||||
|
: \
|
||||||
|
( ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_SOFTWARE) \
|
||||||
|
|| ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM1_CH3) \
|
||||||
|
|| ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM3_CH1) \
|
||||||
|
|| ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM2_CH3) \
|
||||||
|
|| ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM8_CH1) \
|
||||||
|
|| ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM8_TRGO_ADC3) \
|
||||||
|
|| ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM5_CH1) \
|
||||||
|
|| ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM5_CH3) \
|
||||||
|
) \
|
||||||
|
)
|
||||||
|
#else
|
||||||
|
#if defined (STM32F101xE) || defined (STM32F105xC) || defined (STM32F107xC)
|
||||||
|
#define IS_LL_ADC_REG_TRIG_SOURCE(__REG_TRIG_SOURCE__) \
|
||||||
|
( ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_SOFTWARE) \
|
||||||
|
|| ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM1_CH3) \
|
||||||
|
|| ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM1_CH1) \
|
||||||
|
|| ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM1_CH2) \
|
||||||
|
|| ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM2_CH2) \
|
||||||
|
|| ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM3_TRGO) \
|
||||||
|
|| ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM4_CH4) \
|
||||||
|
|| ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_EXTI_LINE11) \
|
||||||
|
|| ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM8_TRGO) \
|
||||||
|
)
|
||||||
|
#else
|
||||||
|
#define IS_LL_ADC_REG_TRIG_SOURCE(__REG_TRIG_SOURCE__) \
|
||||||
|
( ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_SOFTWARE) \
|
||||||
|
|| ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM1_CH3) \
|
||||||
|
|| ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM1_CH1) \
|
||||||
|
|| ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM1_CH2) \
|
||||||
|
|| ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM2_CH2) \
|
||||||
|
|| ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM3_TRGO) \
|
||||||
|
|| ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM4_CH4) \
|
||||||
|
|| ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_EXTI_LINE11) \
|
||||||
|
)
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#define IS_LL_ADC_REG_CONTINUOUS_MODE(__REG_CONTINUOUS_MODE__) \
|
||||||
|
( ((__REG_CONTINUOUS_MODE__) == LL_ADC_REG_CONV_SINGLE) \
|
||||||
|
|| ((__REG_CONTINUOUS_MODE__) == LL_ADC_REG_CONV_CONTINUOUS) \
|
||||||
|
)
|
||||||
|
|
||||||
|
#define IS_LL_ADC_REG_DMA_TRANSFER(__REG_DMA_TRANSFER__) \
|
||||||
|
( ((__REG_DMA_TRANSFER__) == LL_ADC_REG_DMA_TRANSFER_NONE) \
|
||||||
|
|| ((__REG_DMA_TRANSFER__) == LL_ADC_REG_DMA_TRANSFER_UNLIMITED) \
|
||||||
|
)
|
||||||
|
|
||||||
|
#define IS_LL_ADC_REG_SEQ_SCAN_LENGTH(__REG_SEQ_SCAN_LENGTH__) \
|
||||||
|
( ((__REG_SEQ_SCAN_LENGTH__) == LL_ADC_REG_SEQ_SCAN_DISABLE) \
|
||||||
|
|| ((__REG_SEQ_SCAN_LENGTH__) == LL_ADC_REG_SEQ_SCAN_ENABLE_2RANKS) \
|
||||||
|
|| ((__REG_SEQ_SCAN_LENGTH__) == LL_ADC_REG_SEQ_SCAN_ENABLE_3RANKS) \
|
||||||
|
|| ((__REG_SEQ_SCAN_LENGTH__) == LL_ADC_REG_SEQ_SCAN_ENABLE_4RANKS) \
|
||||||
|
|| ((__REG_SEQ_SCAN_LENGTH__) == LL_ADC_REG_SEQ_SCAN_ENABLE_5RANKS) \
|
||||||
|
|| ((__REG_SEQ_SCAN_LENGTH__) == LL_ADC_REG_SEQ_SCAN_ENABLE_6RANKS) \
|
||||||
|
|| ((__REG_SEQ_SCAN_LENGTH__) == LL_ADC_REG_SEQ_SCAN_ENABLE_7RANKS) \
|
||||||
|
|| ((__REG_SEQ_SCAN_LENGTH__) == LL_ADC_REG_SEQ_SCAN_ENABLE_8RANKS) \
|
||||||
|
|| ((__REG_SEQ_SCAN_LENGTH__) == LL_ADC_REG_SEQ_SCAN_ENABLE_9RANKS) \
|
||||||
|
|| ((__REG_SEQ_SCAN_LENGTH__) == LL_ADC_REG_SEQ_SCAN_ENABLE_10RANKS) \
|
||||||
|
|| ((__REG_SEQ_SCAN_LENGTH__) == LL_ADC_REG_SEQ_SCAN_ENABLE_11RANKS) \
|
||||||
|
|| ((__REG_SEQ_SCAN_LENGTH__) == LL_ADC_REG_SEQ_SCAN_ENABLE_12RANKS) \
|
||||||
|
|| ((__REG_SEQ_SCAN_LENGTH__) == LL_ADC_REG_SEQ_SCAN_ENABLE_13RANKS) \
|
||||||
|
|| ((__REG_SEQ_SCAN_LENGTH__) == LL_ADC_REG_SEQ_SCAN_ENABLE_14RANKS) \
|
||||||
|
|| ((__REG_SEQ_SCAN_LENGTH__) == LL_ADC_REG_SEQ_SCAN_ENABLE_15RANKS) \
|
||||||
|
|| ((__REG_SEQ_SCAN_LENGTH__) == LL_ADC_REG_SEQ_SCAN_ENABLE_16RANKS) \
|
||||||
|
)
|
||||||
|
|
||||||
|
#define IS_LL_ADC_REG_SEQ_SCAN_DISCONT_MODE(__REG_SEQ_DISCONT_MODE__) \
|
||||||
|
( ((__REG_SEQ_DISCONT_MODE__) == LL_ADC_REG_SEQ_DISCONT_DISABLE) \
|
||||||
|
|| ((__REG_SEQ_DISCONT_MODE__) == LL_ADC_REG_SEQ_DISCONT_1RANK) \
|
||||||
|
|| ((__REG_SEQ_DISCONT_MODE__) == LL_ADC_REG_SEQ_DISCONT_2RANKS) \
|
||||||
|
|| ((__REG_SEQ_DISCONT_MODE__) == LL_ADC_REG_SEQ_DISCONT_3RANKS) \
|
||||||
|
|| ((__REG_SEQ_DISCONT_MODE__) == LL_ADC_REG_SEQ_DISCONT_4RANKS) \
|
||||||
|
|| ((__REG_SEQ_DISCONT_MODE__) == LL_ADC_REG_SEQ_DISCONT_5RANKS) \
|
||||||
|
|| ((__REG_SEQ_DISCONT_MODE__) == LL_ADC_REG_SEQ_DISCONT_6RANKS) \
|
||||||
|
|| ((__REG_SEQ_DISCONT_MODE__) == LL_ADC_REG_SEQ_DISCONT_7RANKS) \
|
||||||
|
|| ((__REG_SEQ_DISCONT_MODE__) == LL_ADC_REG_SEQ_DISCONT_8RANKS) \
|
||||||
|
)
|
||||||
|
|
||||||
|
/* Check of parameters for configuration of ADC hierarchical scope: */
|
||||||
|
/* ADC group injected */
|
||||||
|
#if defined(ADC3)
|
||||||
|
#define IS_LL_ADC_INJ_TRIG_SOURCE(__ADC_INSTANCE__, __INJ_TRIG_SOURCE__) \
|
||||||
|
((((__ADC_INSTANCE__) == ADC1) || ((__ADC_INSTANCE__) == ADC2)) \
|
||||||
|
? ( ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_SOFTWARE) \
|
||||||
|
|| ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM1_TRGO) \
|
||||||
|
|| ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM1_CH4) \
|
||||||
|
|| ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM2_TRGO) \
|
||||||
|
|| ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM2_CH1) \
|
||||||
|
|| ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM3_CH4) \
|
||||||
|
|| ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM4_TRGO) \
|
||||||
|
|| ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_EXTI_LINE15) \
|
||||||
|
|| ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM8_CH4) \
|
||||||
|
) \
|
||||||
|
: \
|
||||||
|
( ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_SOFTWARE) \
|
||||||
|
|| ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM1_TRGO) \
|
||||||
|
|| ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM1_CH4) \
|
||||||
|
|| ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM4_CH3) \
|
||||||
|
|| ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM8_CH2) \
|
||||||
|
|| ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM8_CH4_ADC3) \
|
||||||
|
|| ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM5_TRGO) \
|
||||||
|
|| ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM5_CH4) \
|
||||||
|
) \
|
||||||
|
)
|
||||||
|
#else
|
||||||
|
#if defined (STM32F101xE) || defined (STM32F105xC) || defined (STM32F107xC)
|
||||||
|
#define IS_LL_ADC_INJ_TRIG_SOURCE(__INJ_TRIG_SOURCE__) \
|
||||||
|
( ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_SOFTWARE) \
|
||||||
|
|| ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM1_TRGO) \
|
||||||
|
|| ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM1_CH4) \
|
||||||
|
|| ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM2_TRGO) \
|
||||||
|
|| ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM2_CH1) \
|
||||||
|
|| ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM3_CH4) \
|
||||||
|
|| ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM4_TRGO) \
|
||||||
|
|| ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_EXTI_LINE15) \
|
||||||
|
|| ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM8_CH4) \
|
||||||
|
)
|
||||||
|
#else
|
||||||
|
#define IS_LL_ADC_INJ_TRIG_SOURCE(__INJ_TRIG_SOURCE__) \
|
||||||
|
( ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_SOFTWARE) \
|
||||||
|
|| ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM1_TRGO) \
|
||||||
|
|| ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM1_CH4) \
|
||||||
|
|| ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM2_TRGO) \
|
||||||
|
|| ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM2_CH1) \
|
||||||
|
|| ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM3_CH4) \
|
||||||
|
|| ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM4_TRGO) \
|
||||||
|
|| ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_EXTI_LINE15) \
|
||||||
|
)
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#define IS_LL_ADC_INJ_TRIG_AUTO(__INJ_TRIG_AUTO__) \
|
||||||
|
( ((__INJ_TRIG_AUTO__) == LL_ADC_INJ_TRIG_INDEPENDENT) \
|
||||||
|
|| ((__INJ_TRIG_AUTO__) == LL_ADC_INJ_TRIG_FROM_GRP_REGULAR) \
|
||||||
|
)
|
||||||
|
|
||||||
|
#define IS_LL_ADC_INJ_SEQ_SCAN_LENGTH(__INJ_SEQ_SCAN_LENGTH__) \
|
||||||
|
( ((__INJ_SEQ_SCAN_LENGTH__) == LL_ADC_INJ_SEQ_SCAN_DISABLE) \
|
||||||
|
|| ((__INJ_SEQ_SCAN_LENGTH__) == LL_ADC_INJ_SEQ_SCAN_ENABLE_2RANKS) \
|
||||||
|
|| ((__INJ_SEQ_SCAN_LENGTH__) == LL_ADC_INJ_SEQ_SCAN_ENABLE_3RANKS) \
|
||||||
|
|| ((__INJ_SEQ_SCAN_LENGTH__) == LL_ADC_INJ_SEQ_SCAN_ENABLE_4RANKS) \
|
||||||
|
)
|
||||||
|
|
||||||
|
#define IS_LL_ADC_INJ_SEQ_SCAN_DISCONT_MODE(__INJ_SEQ_DISCONT_MODE__) \
|
||||||
|
( ((__INJ_SEQ_DISCONT_MODE__) == LL_ADC_INJ_SEQ_DISCONT_DISABLE) \
|
||||||
|
|| ((__INJ_SEQ_DISCONT_MODE__) == LL_ADC_INJ_SEQ_DISCONT_1RANK) \
|
||||||
|
)
|
||||||
|
|
||||||
|
#if defined(ADC_MULTIMODE_SUPPORT)
|
||||||
|
/* Check of parameters for configuration of ADC hierarchical scope: */
|
||||||
|
/* multimode. */
|
||||||
|
#define IS_LL_ADC_MULTI_MODE(__MULTI_MODE__) \
|
||||||
|
( ((__MULTI_MODE__) == LL_ADC_MULTI_INDEPENDENT) \
|
||||||
|
|| ((__MULTI_MODE__) == LL_ADC_MULTI_DUAL_REG_SIMULT) \
|
||||||
|
|| ((__MULTI_MODE__) == LL_ADC_MULTI_DUAL_REG_INTERL_FAST) \
|
||||||
|
|| ((__MULTI_MODE__) == LL_ADC_MULTI_DUAL_REG_INTERL_SLOW) \
|
||||||
|
|| ((__MULTI_MODE__) == LL_ADC_MULTI_DUAL_INJ_SIMULT) \
|
||||||
|
|| ((__MULTI_MODE__) == LL_ADC_MULTI_DUAL_INJ_ALTERN) \
|
||||||
|
|| ((__MULTI_MODE__) == LL_ADC_MULTI_DUAL_REG_SIM_INJ_SIM) \
|
||||||
|
|| ((__MULTI_MODE__) == LL_ADC_MULTI_DUAL_REG_SIM_INJ_ALT) \
|
||||||
|
|| ((__MULTI_MODE__) == LL_ADC_MULTI_DUAL_REG_INTFAST_INJ_SIM) \
|
||||||
|
|| ((__MULTI_MODE__) == LL_ADC_MULTI_DUAL_REG_INTSLOW_INJ_SIM) \
|
||||||
|
)
|
||||||
|
|
||||||
|
#define IS_LL_ADC_MULTI_MASTER_SLAVE(__MULTI_MASTER_SLAVE__) \
|
||||||
|
( ((__MULTI_MASTER_SLAVE__) == LL_ADC_MULTI_MASTER) \
|
||||||
|
|| ((__MULTI_MASTER_SLAVE__) == LL_ADC_MULTI_SLAVE) \
|
||||||
|
|| ((__MULTI_MASTER_SLAVE__) == LL_ADC_MULTI_MASTER_SLAVE) \
|
||||||
|
)
|
||||||
|
|
||||||
|
#endif /* ADC_MULTIMODE_SUPPORT */
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/* Private function prototypes -----------------------------------------------*/
|
||||||
|
|
||||||
|
/* Exported functions --------------------------------------------------------*/
|
||||||
|
/** @addtogroup ADC_LL_Exported_Functions
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @addtogroup ADC_LL_EF_Init
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief De-initialize registers of all ADC instances belonging to
|
||||||
|
* the same ADC common instance to their default reset values.
|
||||||
|
* @param ADCxy_COMMON ADC common instance
|
||||||
|
* (can be set directly from CMSIS definition or by using helper macro @ref __LL_ADC_COMMON_INSTANCE() )
|
||||||
|
* @retval An ErrorStatus enumeration value:
|
||||||
|
* - SUCCESS: ADC common registers are de-initialized
|
||||||
|
* - ERROR: not applicable
|
||||||
|
*/
|
||||||
|
ErrorStatus LL_ADC_CommonDeInit(ADC_Common_TypeDef *ADCxy_COMMON)
|
||||||
|
{
|
||||||
|
/* Check the parameters */
|
||||||
|
assert_param(IS_ADC_COMMON_INSTANCE(ADCxy_COMMON));
|
||||||
|
|
||||||
|
/* Force reset of ADC clock (core clock) */
|
||||||
|
LL_APB2_GRP1_ForceReset(LL_APB2_GRP1_PERIPH_ADC1);
|
||||||
|
|
||||||
|
/* Release reset of ADC clock (core clock) */
|
||||||
|
LL_APB2_GRP1_ReleaseReset(LL_APB2_GRP1_PERIPH_ADC1);
|
||||||
|
|
||||||
|
return SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Initialize some features of ADC common parameters
|
||||||
|
* (all ADC instances belonging to the same ADC common instance)
|
||||||
|
* and multimode (for devices with several ADC instances available).
|
||||||
|
* @note The setting of ADC common parameters is conditioned to
|
||||||
|
* ADC instances state:
|
||||||
|
* All ADC instances belonging to the same ADC common instance
|
||||||
|
* must be disabled.
|
||||||
|
* @param ADCxy_COMMON ADC common instance
|
||||||
|
* (can be set directly from CMSIS definition or by using helper macro @ref __LL_ADC_COMMON_INSTANCE() )
|
||||||
|
* @param ADC_CommonInitStruct Pointer to a @ref LL_ADC_CommonInitTypeDef structure
|
||||||
|
* @retval An ErrorStatus enumeration value:
|
||||||
|
* - SUCCESS: ADC common registers are initialized
|
||||||
|
* - ERROR: ADC common registers are not initialized
|
||||||
|
*/
|
||||||
|
ErrorStatus LL_ADC_CommonInit(ADC_Common_TypeDef *ADCxy_COMMON, LL_ADC_CommonInitTypeDef *ADC_CommonInitStruct)
|
||||||
|
{
|
||||||
|
ErrorStatus status = SUCCESS;
|
||||||
|
|
||||||
|
/* Check the parameters */
|
||||||
|
assert_param(IS_ADC_COMMON_INSTANCE(ADCxy_COMMON));
|
||||||
|
#if defined(ADC_MULTIMODE_SUPPORT)
|
||||||
|
assert_param(IS_LL_ADC_MULTI_MODE(ADC_CommonInitStruct->Multimode));
|
||||||
|
#endif /* ADC_MULTIMODE_SUPPORT */
|
||||||
|
|
||||||
|
/* Note: Hardware constraint (refer to description of functions */
|
||||||
|
/* "LL_ADC_SetCommonXXX()" and "LL_ADC_SetMultiXXX()"): */
|
||||||
|
/* On this STM32 serie, setting of these features is conditioned to */
|
||||||
|
/* ADC state: */
|
||||||
|
/* All ADC instances of the ADC common group must be disabled. */
|
||||||
|
if(__LL_ADC_IS_ENABLED_ALL_COMMON_INSTANCE(ADCxy_COMMON) == 0U)
|
||||||
|
{
|
||||||
|
/* Configuration of ADC hierarchical scope: */
|
||||||
|
/* - common to several ADC */
|
||||||
|
/* (all ADC instances belonging to the same ADC common instance) */
|
||||||
|
/* - multimode (if several ADC instances available on the */
|
||||||
|
/* selected device) */
|
||||||
|
/* - Set ADC multimode configuration */
|
||||||
|
/* - Set ADC multimode DMA transfer */
|
||||||
|
/* - Set ADC multimode: delay between 2 sampling phases */
|
||||||
|
#if defined(ADC_MULTIMODE_SUPPORT)
|
||||||
|
if(ADC_CommonInitStruct->Multimode != LL_ADC_MULTI_INDEPENDENT)
|
||||||
|
{
|
||||||
|
MODIFY_REG(ADCxy_COMMON->CR1,
|
||||||
|
ADC_CR1_DUALMOD,
|
||||||
|
ADC_CommonInitStruct->Multimode
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
MODIFY_REG(ADCxy_COMMON->CR1,
|
||||||
|
ADC_CR1_DUALMOD,
|
||||||
|
LL_ADC_MULTI_INDEPENDENT
|
||||||
|
);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Initialization error: One or several ADC instances belonging to */
|
||||||
|
/* the same ADC common instance are not disabled. */
|
||||||
|
status = ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set each @ref LL_ADC_CommonInitTypeDef field to default value.
|
||||||
|
* @param ADC_CommonInitStruct Pointer to a @ref LL_ADC_CommonInitTypeDef structure
|
||||||
|
* whose fields will be set to default values.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
void LL_ADC_CommonStructInit(LL_ADC_CommonInitTypeDef *ADC_CommonInitStruct)
|
||||||
|
{
|
||||||
|
/* Set ADC_CommonInitStruct fields to default values */
|
||||||
|
/* Set fields of ADC common */
|
||||||
|
/* (all ADC instances belonging to the same ADC common instance) */
|
||||||
|
|
||||||
|
#if defined(ADC_MULTIMODE_SUPPORT)
|
||||||
|
/* Set fields of ADC multimode */
|
||||||
|
ADC_CommonInitStruct->Multimode = LL_ADC_MULTI_INDEPENDENT;
|
||||||
|
#endif /* ADC_MULTIMODE_SUPPORT */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief De-initialize registers of the selected ADC instance
|
||||||
|
* to their default reset values.
|
||||||
|
* @note To reset all ADC instances quickly (perform a hard reset),
|
||||||
|
* use function @ref LL_ADC_CommonDeInit().
|
||||||
|
* @param ADCx ADC instance
|
||||||
|
* @retval An ErrorStatus enumeration value:
|
||||||
|
* - SUCCESS: ADC registers are de-initialized
|
||||||
|
* - ERROR: ADC registers are not de-initialized
|
||||||
|
*/
|
||||||
|
ErrorStatus LL_ADC_DeInit(ADC_TypeDef *ADCx)
|
||||||
|
{
|
||||||
|
ErrorStatus status = SUCCESS;
|
||||||
|
|
||||||
|
/* Check the parameters */
|
||||||
|
assert_param(IS_ADC_ALL_INSTANCE(ADCx));
|
||||||
|
|
||||||
|
/* Disable ADC instance if not already disabled. */
|
||||||
|
if(LL_ADC_IsEnabled(ADCx) == 1U)
|
||||||
|
{
|
||||||
|
/* Set ADC group regular trigger source to SW start to ensure to not */
|
||||||
|
/* have an external trigger event occurring during the conversion stop */
|
||||||
|
/* ADC disable process. */
|
||||||
|
LL_ADC_REG_SetTriggerSource(ADCx, LL_ADC_REG_TRIG_SOFTWARE);
|
||||||
|
|
||||||
|
/* Set ADC group injected trigger source to SW start to ensure to not */
|
||||||
|
/* have an external trigger event occurring during the conversion stop */
|
||||||
|
/* ADC disable process. */
|
||||||
|
LL_ADC_INJ_SetTriggerSource(ADCx, LL_ADC_INJ_TRIG_SOFTWARE);
|
||||||
|
|
||||||
|
/* Disable the ADC instance */
|
||||||
|
LL_ADC_Disable(ADCx);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Check whether ADC state is compliant with expected state */
|
||||||
|
/* (hardware requirements of bits state to reset registers below) */
|
||||||
|
if(READ_BIT(ADCx->CR2, ADC_CR2_ADON) == 0U)
|
||||||
|
{
|
||||||
|
/* ========== Reset ADC registers ========== */
|
||||||
|
/* Reset register SR */
|
||||||
|
CLEAR_BIT(ADCx->SR,
|
||||||
|
( LL_ADC_FLAG_STRT
|
||||||
|
| LL_ADC_FLAG_JSTRT
|
||||||
|
| LL_ADC_FLAG_EOS
|
||||||
|
| LL_ADC_FLAG_JEOS
|
||||||
|
| LL_ADC_FLAG_AWD1 )
|
||||||
|
);
|
||||||
|
|
||||||
|
/* Reset register CR1 */
|
||||||
|
#if defined (STM32F103x6) || defined (STM32F103xB) || defined (STM32F105xC) || defined (STM32F107xC) || defined (STM32F103xE) || defined (STM32F103xG)
|
||||||
|
|
||||||
|
CLEAR_BIT(ADCx->CR1,
|
||||||
|
( ADC_CR1_AWDEN | ADC_CR1_JAWDEN | ADC_CR1_DUALMOD
|
||||||
|
| ADC_CR1_DISCNUM | ADC_CR1_JDISCEN | ADC_CR1_DISCEN
|
||||||
|
| ADC_CR1_JAUTO | ADC_CR1_AWDSGL | ADC_CR1_SCAN
|
||||||
|
| ADC_CR1_JEOCIE | ADC_CR1_AWDIE | ADC_CR1_EOCIE
|
||||||
|
| ADC_CR1_AWDCH )
|
||||||
|
);
|
||||||
|
#else
|
||||||
|
|
||||||
|
CLEAR_BIT(ADCx->CR1,
|
||||||
|
( ADC_CR1_AWDEN | ADC_CR1_JAWDEN | ADC_CR1_DISCNUM
|
||||||
|
| ADC_CR1_JDISCEN | ADC_CR1_DISCEN | ADC_CR1_JAUTO
|
||||||
|
| ADC_CR1_AWDSGL | ADC_CR1_SCAN | ADC_CR1_JEOCIE
|
||||||
|
| ADC_CR1_AWDIE | ADC_CR1_EOCIE | ADC_CR1_AWDCH )
|
||||||
|
);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Reset register CR2 */
|
||||||
|
CLEAR_BIT(ADCx->CR2,
|
||||||
|
( ADC_CR2_TSVREFE
|
||||||
|
| ADC_CR2_SWSTART | ADC_CR2_EXTTRIG | ADC_CR2_EXTSEL
|
||||||
|
| ADC_CR2_JSWSTART | ADC_CR2_JEXTTRIG | ADC_CR2_JEXTSEL
|
||||||
|
| ADC_CR2_ALIGN | ADC_CR2_DMA
|
||||||
|
| ADC_CR2_RSTCAL | ADC_CR2_CAL
|
||||||
|
| ADC_CR2_CONT | ADC_CR2_ADON )
|
||||||
|
);
|
||||||
|
|
||||||
|
/* Reset register SMPR1 */
|
||||||
|
CLEAR_BIT(ADCx->SMPR1,
|
||||||
|
( ADC_SMPR1_SMP17 | ADC_SMPR1_SMP16
|
||||||
|
| ADC_SMPR1_SMP15 | ADC_SMPR1_SMP14 | ADC_SMPR1_SMP13
|
||||||
|
| ADC_SMPR1_SMP12 | ADC_SMPR1_SMP11 | ADC_SMPR1_SMP10)
|
||||||
|
);
|
||||||
|
|
||||||
|
/* Reset register SMPR2 */
|
||||||
|
CLEAR_BIT(ADCx->SMPR2,
|
||||||
|
( ADC_SMPR2_SMP9
|
||||||
|
| ADC_SMPR2_SMP8 | ADC_SMPR2_SMP7 | ADC_SMPR2_SMP6
|
||||||
|
| ADC_SMPR2_SMP5 | ADC_SMPR2_SMP4 | ADC_SMPR2_SMP3
|
||||||
|
| ADC_SMPR2_SMP2 | ADC_SMPR2_SMP1 | ADC_SMPR2_SMP0)
|
||||||
|
);
|
||||||
|
|
||||||
|
/* Reset register JOFR1 */
|
||||||
|
CLEAR_BIT(ADCx->JOFR1, ADC_JOFR1_JOFFSET1);
|
||||||
|
/* Reset register JOFR2 */
|
||||||
|
CLEAR_BIT(ADCx->JOFR2, ADC_JOFR2_JOFFSET2);
|
||||||
|
/* Reset register JOFR3 */
|
||||||
|
CLEAR_BIT(ADCx->JOFR3, ADC_JOFR3_JOFFSET3);
|
||||||
|
/* Reset register JOFR4 */
|
||||||
|
CLEAR_BIT(ADCx->JOFR4, ADC_JOFR4_JOFFSET4);
|
||||||
|
|
||||||
|
/* Reset register HTR */
|
||||||
|
SET_BIT(ADCx->HTR, ADC_HTR_HT);
|
||||||
|
/* Reset register LTR */
|
||||||
|
CLEAR_BIT(ADCx->LTR, ADC_LTR_LT);
|
||||||
|
|
||||||
|
/* Reset register SQR1 */
|
||||||
|
CLEAR_BIT(ADCx->SQR1,
|
||||||
|
( ADC_SQR1_L
|
||||||
|
| ADC_SQR1_SQ16
|
||||||
|
| ADC_SQR1_SQ15 | ADC_SQR1_SQ14 | ADC_SQR1_SQ13)
|
||||||
|
);
|
||||||
|
|
||||||
|
/* Reset register SQR2 */
|
||||||
|
CLEAR_BIT(ADCx->SQR2,
|
||||||
|
( ADC_SQR2_SQ12 | ADC_SQR2_SQ11 | ADC_SQR2_SQ10
|
||||||
|
| ADC_SQR2_SQ9 | ADC_SQR2_SQ8 | ADC_SQR2_SQ7)
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
/* Reset register JSQR */
|
||||||
|
CLEAR_BIT(ADCx->JSQR,
|
||||||
|
( ADC_JSQR_JL
|
||||||
|
| ADC_JSQR_JSQ4 | ADC_JSQR_JSQ3
|
||||||
|
| ADC_JSQR_JSQ2 | ADC_JSQR_JSQ1 )
|
||||||
|
);
|
||||||
|
|
||||||
|
/* Reset register DR */
|
||||||
|
/* bits in access mode read only, no direct reset applicable */
|
||||||
|
|
||||||
|
/* Reset registers JDR1, JDR2, JDR3, JDR4 */
|
||||||
|
/* bits in access mode read only, no direct reset applicable */
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Initialize some features of ADC instance.
|
||||||
|
* @note These parameters have an impact on ADC scope: ADC instance.
|
||||||
|
* Affects both group regular and group injected (availability
|
||||||
|
* of ADC group injected depends on STM32 families).
|
||||||
|
* Refer to corresponding unitary functions into
|
||||||
|
* @ref ADC_LL_EF_Configuration_ADC_Instance .
|
||||||
|
* @note The setting of these parameters by function @ref LL_ADC_Init()
|
||||||
|
* is conditioned to ADC state:
|
||||||
|
* ADC instance must be disabled.
|
||||||
|
* This condition is applied to all ADC features, for efficiency
|
||||||
|
* and compatibility over all STM32 families. However, the different
|
||||||
|
* features can be set under different ADC state conditions
|
||||||
|
* (setting possible with ADC enabled without conversion on going,
|
||||||
|
* ADC enabled with conversion on going, ...)
|
||||||
|
* Each feature can be updated afterwards with a unitary function
|
||||||
|
* and potentially with ADC in a different state than disabled,
|
||||||
|
* refer to description of each function for setting
|
||||||
|
* conditioned to ADC state.
|
||||||
|
* @note After using this function, some other features must be configured
|
||||||
|
* using LL unitary functions.
|
||||||
|
* The minimum configuration remaining to be done is:
|
||||||
|
* - Set ADC group regular or group injected sequencer:
|
||||||
|
* map channel on the selected sequencer rank.
|
||||||
|
* Refer to function @ref LL_ADC_REG_SetSequencerRanks().
|
||||||
|
* - Set ADC channel sampling time
|
||||||
|
* Refer to function LL_ADC_SetChannelSamplingTime();
|
||||||
|
* @param ADCx ADC instance
|
||||||
|
* @param ADC_InitStruct Pointer to a @ref LL_ADC_REG_InitTypeDef structure
|
||||||
|
* @retval An ErrorStatus enumeration value:
|
||||||
|
* - SUCCESS: ADC registers are initialized
|
||||||
|
* - ERROR: ADC registers are not initialized
|
||||||
|
*/
|
||||||
|
ErrorStatus LL_ADC_Init(ADC_TypeDef *ADCx, LL_ADC_InitTypeDef *ADC_InitStruct)
|
||||||
|
{
|
||||||
|
ErrorStatus status = SUCCESS;
|
||||||
|
|
||||||
|
/* Check the parameters */
|
||||||
|
assert_param(IS_ADC_ALL_INSTANCE(ADCx));
|
||||||
|
|
||||||
|
assert_param(IS_LL_ADC_DATA_ALIGN(ADC_InitStruct->DataAlignment));
|
||||||
|
assert_param(IS_LL_ADC_SCAN_SELECTION(ADC_InitStruct->SequencersScanMode));
|
||||||
|
|
||||||
|
/* Note: Hardware constraint (refer to description of this function): */
|
||||||
|
/* ADC instance must be disabled. */
|
||||||
|
if(LL_ADC_IsEnabled(ADCx) == 0U)
|
||||||
|
{
|
||||||
|
/* Configuration of ADC hierarchical scope: */
|
||||||
|
/* - ADC instance */
|
||||||
|
/* - Set ADC conversion data alignment */
|
||||||
|
MODIFY_REG(ADCx->CR1,
|
||||||
|
ADC_CR1_SCAN
|
||||||
|
,
|
||||||
|
ADC_InitStruct->SequencersScanMode
|
||||||
|
);
|
||||||
|
|
||||||
|
MODIFY_REG(ADCx->CR2,
|
||||||
|
ADC_CR2_ALIGN
|
||||||
|
,
|
||||||
|
ADC_InitStruct->DataAlignment
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Initialization error: ADC instance is not disabled. */
|
||||||
|
status = ERROR;
|
||||||
|
}
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set each @ref LL_ADC_InitTypeDef field to default value.
|
||||||
|
* @param ADC_InitStruct Pointer to a @ref LL_ADC_InitTypeDef structure
|
||||||
|
* whose fields will be set to default values.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
void LL_ADC_StructInit(LL_ADC_InitTypeDef *ADC_InitStruct)
|
||||||
|
{
|
||||||
|
/* Set ADC_InitStruct fields to default values */
|
||||||
|
/* Set fields of ADC instance */
|
||||||
|
ADC_InitStruct->DataAlignment = LL_ADC_DATA_ALIGN_RIGHT;
|
||||||
|
|
||||||
|
/* Enable scan mode to have a generic behavior with ADC of other */
|
||||||
|
/* STM32 families, without this setting available: */
|
||||||
|
/* ADC group regular sequencer and ADC group injected sequencer depend */
|
||||||
|
/* only of their own configuration. */
|
||||||
|
ADC_InitStruct->SequencersScanMode = LL_ADC_SEQ_SCAN_ENABLE;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Initialize some features of ADC group regular.
|
||||||
|
* @note These parameters have an impact on ADC scope: ADC group regular.
|
||||||
|
* Refer to corresponding unitary functions into
|
||||||
|
* @ref ADC_LL_EF_Configuration_ADC_Group_Regular
|
||||||
|
* (functions with prefix "REG").
|
||||||
|
* @note The setting of these parameters by function @ref LL_ADC_Init()
|
||||||
|
* is conditioned to ADC state:
|
||||||
|
* ADC instance must be disabled.
|
||||||
|
* This condition is applied to all ADC features, for efficiency
|
||||||
|
* and compatibility over all STM32 families. However, the different
|
||||||
|
* features can be set under different ADC state conditions
|
||||||
|
* (setting possible with ADC enabled without conversion on going,
|
||||||
|
* ADC enabled with conversion on going, ...)
|
||||||
|
* Each feature can be updated afterwards with a unitary function
|
||||||
|
* and potentially with ADC in a different state than disabled,
|
||||||
|
* refer to description of each function for setting
|
||||||
|
* conditioned to ADC state.
|
||||||
|
* @note After using this function, other features must be configured
|
||||||
|
* using LL unitary functions.
|
||||||
|
* The minimum configuration remaining to be done is:
|
||||||
|
* - Set ADC group regular or group injected sequencer:
|
||||||
|
* map channel on the selected sequencer rank.
|
||||||
|
* Refer to function @ref LL_ADC_REG_SetSequencerRanks().
|
||||||
|
* - Set ADC channel sampling time
|
||||||
|
* Refer to function LL_ADC_SetChannelSamplingTime();
|
||||||
|
* @param ADCx ADC instance
|
||||||
|
* @param ADC_REG_InitStruct Pointer to a @ref LL_ADC_REG_InitTypeDef structure
|
||||||
|
* @retval An ErrorStatus enumeration value:
|
||||||
|
* - SUCCESS: ADC registers are initialized
|
||||||
|
* - ERROR: ADC registers are not initialized
|
||||||
|
*/
|
||||||
|
ErrorStatus LL_ADC_REG_Init(ADC_TypeDef *ADCx, LL_ADC_REG_InitTypeDef *ADC_REG_InitStruct)
|
||||||
|
{
|
||||||
|
ErrorStatus status = SUCCESS;
|
||||||
|
|
||||||
|
/* Check the parameters */
|
||||||
|
assert_param(IS_ADC_ALL_INSTANCE(ADCx));
|
||||||
|
#if defined(ADC3)
|
||||||
|
assert_param(IS_LL_ADC_REG_TRIG_SOURCE(ADCx, ADC_REG_InitStruct->TriggerSource));
|
||||||
|
#else
|
||||||
|
assert_param(IS_LL_ADC_REG_TRIG_SOURCE(ADC_REG_InitStruct->TriggerSource));
|
||||||
|
#endif
|
||||||
|
assert_param(IS_LL_ADC_REG_SEQ_SCAN_LENGTH(ADC_REG_InitStruct->SequencerLength));
|
||||||
|
if(ADC_REG_InitStruct->SequencerLength != LL_ADC_REG_SEQ_SCAN_DISABLE)
|
||||||
|
{
|
||||||
|
assert_param(IS_LL_ADC_REG_SEQ_SCAN_DISCONT_MODE(ADC_REG_InitStruct->SequencerDiscont));
|
||||||
|
}
|
||||||
|
assert_param(IS_LL_ADC_REG_CONTINUOUS_MODE(ADC_REG_InitStruct->ContinuousMode));
|
||||||
|
assert_param(IS_LL_ADC_REG_DMA_TRANSFER(ADC_REG_InitStruct->DMATransfer));
|
||||||
|
|
||||||
|
/* Note: Hardware constraint (refer to description of this function): */
|
||||||
|
/* ADC instance must be disabled. */
|
||||||
|
if(LL_ADC_IsEnabled(ADCx) == 0U)
|
||||||
|
{
|
||||||
|
/* Configuration of ADC hierarchical scope: */
|
||||||
|
/* - ADC group regular */
|
||||||
|
/* - Set ADC group regular trigger source */
|
||||||
|
/* - Set ADC group regular sequencer length */
|
||||||
|
/* - Set ADC group regular sequencer discontinuous mode */
|
||||||
|
/* - Set ADC group regular continuous mode */
|
||||||
|
/* - Set ADC group regular conversion data transfer: no transfer or */
|
||||||
|
/* transfer by DMA, and DMA requests mode */
|
||||||
|
/* Note: On this STM32 serie, ADC trigger edge is set when starting */
|
||||||
|
/* ADC conversion. */
|
||||||
|
/* Refer to function @ref LL_ADC_REG_StartConversionExtTrig(). */
|
||||||
|
if(ADC_REG_InitStruct->SequencerLength != LL_ADC_REG_SEQ_SCAN_DISABLE)
|
||||||
|
{
|
||||||
|
MODIFY_REG(ADCx->CR1,
|
||||||
|
ADC_CR1_DISCEN
|
||||||
|
| ADC_CR1_DISCNUM
|
||||||
|
,
|
||||||
|
ADC_REG_InitStruct->SequencerLength
|
||||||
|
| ADC_REG_InitStruct->SequencerDiscont
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
MODIFY_REG(ADCx->CR1,
|
||||||
|
ADC_CR1_DISCEN
|
||||||
|
| ADC_CR1_DISCNUM
|
||||||
|
,
|
||||||
|
ADC_REG_InitStruct->SequencerLength
|
||||||
|
| LL_ADC_REG_SEQ_DISCONT_DISABLE
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
MODIFY_REG(ADCx->CR2,
|
||||||
|
ADC_CR2_EXTSEL
|
||||||
|
| ADC_CR2_CONT
|
||||||
|
| ADC_CR2_DMA
|
||||||
|
,
|
||||||
|
ADC_REG_InitStruct->TriggerSource
|
||||||
|
| ADC_REG_InitStruct->ContinuousMode
|
||||||
|
| ADC_REG_InitStruct->DMATransfer
|
||||||
|
);
|
||||||
|
|
||||||
|
/* Set ADC group regular sequencer length and scan direction */
|
||||||
|
/* Note: Hardware constraint (refer to description of this function): */
|
||||||
|
/* Note: If ADC instance feature scan mode is disabled */
|
||||||
|
/* (refer to ADC instance initialization structure */
|
||||||
|
/* parameter @ref SequencersScanMode */
|
||||||
|
/* or function @ref LL_ADC_SetSequencersScanMode() ), */
|
||||||
|
/* this parameter is discarded. */
|
||||||
|
LL_ADC_REG_SetSequencerLength(ADCx, ADC_REG_InitStruct->SequencerLength);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Initialization error: ADC instance is not disabled. */
|
||||||
|
status = ERROR;
|
||||||
|
}
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set each @ref LL_ADC_REG_InitTypeDef field to default value.
|
||||||
|
* @param ADC_REG_InitStruct Pointer to a @ref LL_ADC_REG_InitTypeDef structure
|
||||||
|
* whose fields will be set to default values.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
void LL_ADC_REG_StructInit(LL_ADC_REG_InitTypeDef *ADC_REG_InitStruct)
|
||||||
|
{
|
||||||
|
/* Set ADC_REG_InitStruct fields to default values */
|
||||||
|
/* Set fields of ADC group regular */
|
||||||
|
/* Note: On this STM32 serie, ADC trigger edge is set when starting */
|
||||||
|
/* ADC conversion. */
|
||||||
|
/* Refer to function @ref LL_ADC_REG_StartConversionExtTrig(). */
|
||||||
|
ADC_REG_InitStruct->TriggerSource = LL_ADC_REG_TRIG_SOFTWARE;
|
||||||
|
ADC_REG_InitStruct->SequencerLength = LL_ADC_REG_SEQ_SCAN_DISABLE;
|
||||||
|
ADC_REG_InitStruct->SequencerDiscont = LL_ADC_REG_SEQ_DISCONT_DISABLE;
|
||||||
|
ADC_REG_InitStruct->ContinuousMode = LL_ADC_REG_CONV_SINGLE;
|
||||||
|
ADC_REG_InitStruct->DMATransfer = LL_ADC_REG_DMA_TRANSFER_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Initialize some features of ADC group injected.
|
||||||
|
* @note These parameters have an impact on ADC scope: ADC group injected.
|
||||||
|
* Refer to corresponding unitary functions into
|
||||||
|
* @ref ADC_LL_EF_Configuration_ADC_Group_Regular
|
||||||
|
* (functions with prefix "INJ").
|
||||||
|
* @note The setting of these parameters by function @ref LL_ADC_Init()
|
||||||
|
* is conditioned to ADC state:
|
||||||
|
* ADC instance must be disabled.
|
||||||
|
* This condition is applied to all ADC features, for efficiency
|
||||||
|
* and compatibility over all STM32 families. However, the different
|
||||||
|
* features can be set under different ADC state conditions
|
||||||
|
* (setting possible with ADC enabled without conversion on going,
|
||||||
|
* ADC enabled with conversion on going, ...)
|
||||||
|
* Each feature can be updated afterwards with a unitary function
|
||||||
|
* and potentially with ADC in a different state than disabled,
|
||||||
|
* refer to description of each function for setting
|
||||||
|
* conditioned to ADC state.
|
||||||
|
* @note After using this function, other features must be configured
|
||||||
|
* using LL unitary functions.
|
||||||
|
* The minimum configuration remaining to be done is:
|
||||||
|
* - Set ADC group injected sequencer:
|
||||||
|
* map channel on the selected sequencer rank.
|
||||||
|
* Refer to function @ref LL_ADC_INJ_SetSequencerRanks().
|
||||||
|
* - Set ADC channel sampling time
|
||||||
|
* Refer to function LL_ADC_SetChannelSamplingTime();
|
||||||
|
* @param ADCx ADC instance
|
||||||
|
* @param ADC_INJ_InitStruct Pointer to a @ref LL_ADC_INJ_InitTypeDef structure
|
||||||
|
* @retval An ErrorStatus enumeration value:
|
||||||
|
* - SUCCESS: ADC registers are initialized
|
||||||
|
* - ERROR: ADC registers are not initialized
|
||||||
|
*/
|
||||||
|
ErrorStatus LL_ADC_INJ_Init(ADC_TypeDef *ADCx, LL_ADC_INJ_InitTypeDef *ADC_INJ_InitStruct)
|
||||||
|
{
|
||||||
|
ErrorStatus status = SUCCESS;
|
||||||
|
|
||||||
|
/* Check the parameters */
|
||||||
|
assert_param(IS_ADC_ALL_INSTANCE(ADCx));
|
||||||
|
#if defined(ADC3)
|
||||||
|
assert_param(IS_LL_ADC_INJ_TRIG_SOURCE(ADCx, ADC_INJ_InitStruct->TriggerSource));
|
||||||
|
#else
|
||||||
|
assert_param(IS_LL_ADC_INJ_TRIG_SOURCE(ADC_INJ_InitStruct->TriggerSource));
|
||||||
|
#endif
|
||||||
|
assert_param(IS_LL_ADC_INJ_SEQ_SCAN_LENGTH(ADC_INJ_InitStruct->SequencerLength));
|
||||||
|
if(ADC_INJ_InitStruct->SequencerLength != LL_ADC_INJ_SEQ_SCAN_DISABLE)
|
||||||
|
{
|
||||||
|
assert_param(IS_LL_ADC_INJ_SEQ_SCAN_DISCONT_MODE(ADC_INJ_InitStruct->SequencerDiscont));
|
||||||
|
}
|
||||||
|
assert_param(IS_LL_ADC_INJ_TRIG_AUTO(ADC_INJ_InitStruct->TrigAuto));
|
||||||
|
|
||||||
|
/* Note: Hardware constraint (refer to description of this function): */
|
||||||
|
/* ADC instance must be disabled. */
|
||||||
|
if(LL_ADC_IsEnabled(ADCx) == 0U)
|
||||||
|
{
|
||||||
|
/* Configuration of ADC hierarchical scope: */
|
||||||
|
/* - ADC group injected */
|
||||||
|
/* - Set ADC group injected trigger source */
|
||||||
|
/* - Set ADC group injected sequencer length */
|
||||||
|
/* - Set ADC group injected sequencer discontinuous mode */
|
||||||
|
/* - Set ADC group injected conversion trigger: independent or */
|
||||||
|
/* from ADC group regular */
|
||||||
|
/* Note: On this STM32 serie, ADC trigger edge is set when starting */
|
||||||
|
/* ADC conversion. */
|
||||||
|
/* Refer to function @ref LL_ADC_INJ_StartConversionExtTrig(). */
|
||||||
|
if(ADC_INJ_InitStruct->SequencerLength != LL_ADC_REG_SEQ_SCAN_DISABLE)
|
||||||
|
{
|
||||||
|
MODIFY_REG(ADCx->CR1,
|
||||||
|
ADC_CR1_JDISCEN
|
||||||
|
| ADC_CR1_JAUTO
|
||||||
|
,
|
||||||
|
ADC_INJ_InitStruct->SequencerDiscont
|
||||||
|
| ADC_INJ_InitStruct->TrigAuto
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
MODIFY_REG(ADCx->CR1,
|
||||||
|
ADC_CR1_JDISCEN
|
||||||
|
| ADC_CR1_JAUTO
|
||||||
|
,
|
||||||
|
LL_ADC_REG_SEQ_DISCONT_DISABLE
|
||||||
|
| ADC_INJ_InitStruct->TrigAuto
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
MODIFY_REG(ADCx->CR2,
|
||||||
|
ADC_CR2_JEXTSEL
|
||||||
|
,
|
||||||
|
ADC_INJ_InitStruct->TriggerSource
|
||||||
|
);
|
||||||
|
|
||||||
|
/* Note: Hardware constraint (refer to description of this function): */
|
||||||
|
/* Note: If ADC instance feature scan mode is disabled */
|
||||||
|
/* (refer to ADC instance initialization structure */
|
||||||
|
/* parameter @ref SequencersScanMode */
|
||||||
|
/* or function @ref LL_ADC_SetSequencersScanMode() ), */
|
||||||
|
/* this parameter is discarded. */
|
||||||
|
LL_ADC_INJ_SetSequencerLength(ADCx, ADC_INJ_InitStruct->SequencerLength);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Initialization error: ADC instance is not disabled. */
|
||||||
|
status = ERROR;
|
||||||
|
}
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set each @ref LL_ADC_INJ_InitTypeDef field to default value.
|
||||||
|
* @param ADC_INJ_InitStruct Pointer to a @ref LL_ADC_INJ_InitTypeDef structure
|
||||||
|
* whose fields will be set to default values.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
void LL_ADC_INJ_StructInit(LL_ADC_INJ_InitTypeDef *ADC_INJ_InitStruct)
|
||||||
|
{
|
||||||
|
/* Set ADC_INJ_InitStruct fields to default values */
|
||||||
|
/* Set fields of ADC group injected */
|
||||||
|
ADC_INJ_InitStruct->TriggerSource = LL_ADC_INJ_TRIG_SOFTWARE;
|
||||||
|
ADC_INJ_InitStruct->SequencerLength = LL_ADC_INJ_SEQ_SCAN_DISABLE;
|
||||||
|
ADC_INJ_InitStruct->SequencerDiscont = LL_ADC_INJ_SEQ_DISCONT_DISABLE;
|
||||||
|
ADC_INJ_InitStruct->TrigAuto = LL_ADC_INJ_TRIG_INDEPENDENT;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#endif /* ADC1 || ADC2 || ADC3 */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#endif /* USE_FULL_LL_DRIVER */
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
108
LLDrivers/src/stm32f1xx_ll_crc.c
Normal file
108
LLDrivers/src/stm32f1xx_ll_crc.c
Normal file
|
@ -0,0 +1,108 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file stm32f1xx_ll_crc.c
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @brief CRC LL module driver.
|
||||||
|
******************************************************************************
|
||||||
|
* @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
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
#if defined(USE_FULL_LL_DRIVER)
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "stm32f1xx_ll_crc.h"
|
||||||
|
#include "stm32f1xx_ll_bus.h"
|
||||||
|
|
||||||
|
#ifdef USE_FULL_ASSERT
|
||||||
|
#include "stm32_assert.h"
|
||||||
|
#else
|
||||||
|
#define assert_param(expr) ((void)0U)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/** @addtogroup STM32F1xx_LL_Driver
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined (CRC)
|
||||||
|
|
||||||
|
/** @addtogroup CRC_LL
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Private types -------------------------------------------------------------*/
|
||||||
|
/* Private variables ---------------------------------------------------------*/
|
||||||
|
/* Private constants ---------------------------------------------------------*/
|
||||||
|
/* Private macros ------------------------------------------------------------*/
|
||||||
|
/* Private function prototypes -----------------------------------------------*/
|
||||||
|
|
||||||
|
/* Exported functions --------------------------------------------------------*/
|
||||||
|
/** @addtogroup CRC_LL_Exported_Functions
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @addtogroup CRC_LL_EF_Init
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief De-initialize CRC registers (Registers restored to their default values).
|
||||||
|
* @param CRCx CRC Instance
|
||||||
|
* @retval An ErrorStatus enumeration value:
|
||||||
|
* - SUCCESS: CRC registers are de-initialized
|
||||||
|
* - ERROR: CRC registers are not de-initialized
|
||||||
|
*/
|
||||||
|
ErrorStatus LL_CRC_DeInit(CRC_TypeDef *CRCx)
|
||||||
|
{
|
||||||
|
ErrorStatus status = SUCCESS;
|
||||||
|
|
||||||
|
/* Check the parameters */
|
||||||
|
assert_param(IS_CRC_ALL_INSTANCE(CRCx));
|
||||||
|
|
||||||
|
if (CRCx == CRC)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* Reset the CRC calculation unit */
|
||||||
|
LL_CRC_ResetCRCCalculationUnit(CRCx);
|
||||||
|
|
||||||
|
/* Reset IDR register */
|
||||||
|
LL_CRC_Write_IDR(CRCx, 0x00U);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
status = ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (status);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#endif /* defined (CRC) */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#endif /* USE_FULL_LL_DRIVER */
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
||||||
|
|
274
LLDrivers/src/stm32f1xx_ll_dac.c
Normal file
274
LLDrivers/src/stm32f1xx_ll_dac.c
Normal file
|
@ -0,0 +1,274 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file stm32f1xx_ll_dac.c
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @brief DAC LL module driver
|
||||||
|
******************************************************************************
|
||||||
|
* @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
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
#if defined(USE_FULL_LL_DRIVER)
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "stm32f1xx_ll_dac.h"
|
||||||
|
#include "stm32f1xx_ll_bus.h"
|
||||||
|
|
||||||
|
#ifdef USE_FULL_ASSERT
|
||||||
|
#include "stm32_assert.h"
|
||||||
|
#else
|
||||||
|
#define assert_param(expr) ((void)0U)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/** @addtogroup STM32F1xx_LL_Driver
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(DAC)
|
||||||
|
|
||||||
|
/** @addtogroup DAC_LL DAC
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Private types -------------------------------------------------------------*/
|
||||||
|
/* Private variables ---------------------------------------------------------*/
|
||||||
|
/* Private constants ---------------------------------------------------------*/
|
||||||
|
/* Private macros ------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/** @addtogroup DAC_LL_Private_Macros
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define IS_LL_DAC_CHANNEL(__DAC_CHANNEL__) \
|
||||||
|
( \
|
||||||
|
((__DAC_CHANNEL__) == LL_DAC_CHANNEL_1) \
|
||||||
|
|| ((__DAC_CHANNEL__) == LL_DAC_CHANNEL_2) \
|
||||||
|
)
|
||||||
|
|
||||||
|
#define IS_LL_DAC_TRIGGER_SOURCE(__TRIGGER_SOURCE__) \
|
||||||
|
( ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_SOFTWARE) \
|
||||||
|
|| ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM3_TRGO) \
|
||||||
|
|| ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM15_TRGO) \
|
||||||
|
|| ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM2_TRGO) \
|
||||||
|
|| ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM4_TRGO) \
|
||||||
|
|| ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM5_TRGO) \
|
||||||
|
|| ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM6_TRGO) \
|
||||||
|
|| ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM7_TRGO) \
|
||||||
|
|| ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM8_TRGO) \
|
||||||
|
|| ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_EXTI_LINE9) \
|
||||||
|
)
|
||||||
|
|
||||||
|
#define IS_LL_DAC_WAVE_AUTO_GENER_MODE(__WAVE_AUTO_GENERATION_MODE__) \
|
||||||
|
( ((__WAVE_AUTO_GENERATION_MODE__) == LL_DAC_WAVE_AUTO_GENERATION_NONE) \
|
||||||
|
|| ((__WAVE_AUTO_GENERATION_MODE__) == LL_DAC_WAVE_AUTO_GENERATION_NOISE) \
|
||||||
|
|| ((__WAVE_AUTO_GENERATION_MODE__) == LL_DAC_WAVE_AUTO_GENERATION_TRIANGLE) \
|
||||||
|
)
|
||||||
|
|
||||||
|
#define IS_LL_DAC_WAVE_AUTO_GENER_CONFIG(__WAVE_AUTO_GENERATION_MODE__, __WAVE_AUTO_GENERATION_CONFIG__) \
|
||||||
|
( (((__WAVE_AUTO_GENERATION_MODE__) == LL_DAC_WAVE_AUTO_GENERATION_NOISE) \
|
||||||
|
&& ( ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BIT0) \
|
||||||
|
|| ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS1_0) \
|
||||||
|
|| ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS2_0) \
|
||||||
|
|| ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS3_0) \
|
||||||
|
|| ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS4_0) \
|
||||||
|
|| ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS5_0) \
|
||||||
|
|| ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS6_0) \
|
||||||
|
|| ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS7_0) \
|
||||||
|
|| ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS8_0) \
|
||||||
|
|| ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS9_0) \
|
||||||
|
|| ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS10_0) \
|
||||||
|
|| ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS11_0)) \
|
||||||
|
) \
|
||||||
|
||(((__WAVE_AUTO_GENERATION_MODE__) == LL_DAC_WAVE_AUTO_GENERATION_TRIANGLE) \
|
||||||
|
&& ( ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_1) \
|
||||||
|
|| ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_3) \
|
||||||
|
|| ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_7) \
|
||||||
|
|| ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_15) \
|
||||||
|
|| ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_31) \
|
||||||
|
|| ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_63) \
|
||||||
|
|| ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_127) \
|
||||||
|
|| ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_255) \
|
||||||
|
|| ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_511) \
|
||||||
|
|| ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_1023) \
|
||||||
|
|| ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_2047) \
|
||||||
|
|| ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_4095)) \
|
||||||
|
) \
|
||||||
|
)
|
||||||
|
|
||||||
|
#define IS_LL_DAC_OUTPUT_BUFFER(__OUTPUT_BUFFER__) \
|
||||||
|
( ((__OUTPUT_BUFFER__) == LL_DAC_OUTPUT_BUFFER_ENABLE) \
|
||||||
|
|| ((__OUTPUT_BUFFER__) == LL_DAC_OUTPUT_BUFFER_DISABLE) \
|
||||||
|
)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/* Private function prototypes -----------------------------------------------*/
|
||||||
|
|
||||||
|
/* Exported functions --------------------------------------------------------*/
|
||||||
|
/** @addtogroup DAC_LL_Exported_Functions
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @addtogroup DAC_LL_EF_Init
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief De-initialize registers of the selected DAC instance
|
||||||
|
* to their default reset values.
|
||||||
|
* @param DACx DAC instance
|
||||||
|
* @retval An ErrorStatus enumeration value:
|
||||||
|
* - SUCCESS: DAC registers are de-initialized
|
||||||
|
* - ERROR: not applicable
|
||||||
|
*/
|
||||||
|
ErrorStatus LL_DAC_DeInit(DAC_TypeDef *DACx)
|
||||||
|
{
|
||||||
|
/* Check the parameters */
|
||||||
|
assert_param(IS_DAC_ALL_INSTANCE(DACx));
|
||||||
|
|
||||||
|
/* Force reset of DAC clock */
|
||||||
|
LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_DAC1);
|
||||||
|
|
||||||
|
/* Release reset of DAC clock */
|
||||||
|
LL_APB1_GRP1_ReleaseReset(LL_APB1_GRP1_PERIPH_DAC1);
|
||||||
|
|
||||||
|
return SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Initialize some features of DAC channel.
|
||||||
|
* @note @ref LL_DAC_Init() aims to ease basic configuration of a DAC channel.
|
||||||
|
* Leaving it ready to be enabled and output:
|
||||||
|
* a level by calling one of
|
||||||
|
* @ref LL_DAC_ConvertData12RightAligned
|
||||||
|
* @ref LL_DAC_ConvertData12LeftAligned
|
||||||
|
* @ref LL_DAC_ConvertData8RightAligned
|
||||||
|
* or one of the supported autogenerated wave.
|
||||||
|
* @note This function allows configuration of:
|
||||||
|
* - Output mode
|
||||||
|
* - Trigger
|
||||||
|
* - Wave generation
|
||||||
|
* @note The setting of these parameters by function @ref LL_DAC_Init()
|
||||||
|
* is conditioned to DAC state:
|
||||||
|
* DAC channel must be disabled.
|
||||||
|
* @param DACx DAC instance
|
||||||
|
* @param DAC_Channel This parameter can be one of the following values:
|
||||||
|
* @arg @ref LL_DAC_CHANNEL_1
|
||||||
|
* @arg @ref LL_DAC_CHANNEL_2
|
||||||
|
* @param DAC_InitStruct Pointer to a @ref LL_DAC_InitTypeDef structure
|
||||||
|
* @retval An ErrorStatus enumeration value:
|
||||||
|
* - SUCCESS: DAC registers are initialized
|
||||||
|
* - ERROR: DAC registers are not initialized
|
||||||
|
*/
|
||||||
|
ErrorStatus LL_DAC_Init(DAC_TypeDef *DACx, uint32_t DAC_Channel, LL_DAC_InitTypeDef *DAC_InitStruct)
|
||||||
|
{
|
||||||
|
ErrorStatus status = SUCCESS;
|
||||||
|
|
||||||
|
/* Check the parameters */
|
||||||
|
assert_param(IS_DAC_ALL_INSTANCE(DACx));
|
||||||
|
assert_param(IS_LL_DAC_CHANNEL(DAC_Channel));
|
||||||
|
assert_param(IS_LL_DAC_TRIGGER_SOURCE(DAC_InitStruct->TriggerSource));
|
||||||
|
assert_param(IS_LL_DAC_OUTPUT_BUFFER(DAC_InitStruct->OutputBuffer));
|
||||||
|
assert_param(IS_LL_DAC_WAVE_AUTO_GENER_MODE(DAC_InitStruct->WaveAutoGeneration));
|
||||||
|
if (DAC_InitStruct->WaveAutoGeneration != LL_DAC_WAVE_AUTO_GENERATION_NONE)
|
||||||
|
{
|
||||||
|
assert_param(IS_LL_DAC_WAVE_AUTO_GENER_CONFIG(DAC_InitStruct->WaveAutoGeneration,
|
||||||
|
DAC_InitStruct->WaveAutoGenerationConfig));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Note: Hardware constraint (refer to description of this function) */
|
||||||
|
/* DAC instance must be disabled. */
|
||||||
|
if (LL_DAC_IsEnabled(DACx, DAC_Channel) == 0U)
|
||||||
|
{
|
||||||
|
/* Configuration of DAC channel: */
|
||||||
|
/* - TriggerSource */
|
||||||
|
/* - WaveAutoGeneration */
|
||||||
|
/* - OutputBuffer */
|
||||||
|
/* - OutputMode */
|
||||||
|
if (DAC_InitStruct->WaveAutoGeneration != LL_DAC_WAVE_AUTO_GENERATION_NONE)
|
||||||
|
{
|
||||||
|
MODIFY_REG(DACx->CR,
|
||||||
|
(DAC_CR_TSEL1
|
||||||
|
| DAC_CR_WAVE1
|
||||||
|
| DAC_CR_MAMP1
|
||||||
|
| DAC_CR_BOFF1
|
||||||
|
) << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)
|
||||||
|
,
|
||||||
|
(DAC_InitStruct->TriggerSource
|
||||||
|
| DAC_InitStruct->WaveAutoGeneration
|
||||||
|
| DAC_InitStruct->WaveAutoGenerationConfig
|
||||||
|
| DAC_InitStruct->OutputBuffer
|
||||||
|
) << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
MODIFY_REG(DACx->CR,
|
||||||
|
(DAC_CR_TSEL1
|
||||||
|
| DAC_CR_WAVE1
|
||||||
|
| DAC_CR_BOFF1
|
||||||
|
) << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)
|
||||||
|
,
|
||||||
|
(DAC_InitStruct->TriggerSource
|
||||||
|
| LL_DAC_WAVE_AUTO_GENERATION_NONE
|
||||||
|
| DAC_InitStruct->OutputBuffer
|
||||||
|
) << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Initialization error: DAC instance is not disabled. */
|
||||||
|
status = ERROR;
|
||||||
|
}
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set each @ref LL_DAC_InitTypeDef field to default value.
|
||||||
|
* @param DAC_InitStruct pointer to a @ref LL_DAC_InitTypeDef structure
|
||||||
|
* whose fields will be set to default values.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
void LL_DAC_StructInit(LL_DAC_InitTypeDef *DAC_InitStruct)
|
||||||
|
{
|
||||||
|
/* Set DAC_InitStruct fields to default values */
|
||||||
|
DAC_InitStruct->TriggerSource = LL_DAC_TRIG_SOFTWARE;
|
||||||
|
DAC_InitStruct->WaveAutoGeneration = LL_DAC_WAVE_AUTO_GENERATION_NONE;
|
||||||
|
/* Note: Parameter discarded if wave auto generation is disabled, */
|
||||||
|
/* set anyway to its default value. */
|
||||||
|
DAC_InitStruct->WaveAutoGenerationConfig = LL_DAC_NOISE_LFSR_UNMASK_BIT0;
|
||||||
|
DAC_InitStruct->OutputBuffer = LL_DAC_OUTPUT_BUFFER_ENABLE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#endif /* DAC */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#endif /* USE_FULL_LL_DRIVER */
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
314
LLDrivers/src/stm32f1xx_ll_dma.c
Normal file
314
LLDrivers/src/stm32f1xx_ll_dma.c
Normal file
|
@ -0,0 +1,314 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file stm32f1xx_ll_dma.c
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @brief DMA LL module driver.
|
||||||
|
******************************************************************************
|
||||||
|
* @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
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(USE_FULL_LL_DRIVER)
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "stm32f1xx_ll_dma.h"
|
||||||
|
#include "stm32f1xx_ll_bus.h"
|
||||||
|
#ifdef USE_FULL_ASSERT
|
||||||
|
#include "stm32_assert.h"
|
||||||
|
#else
|
||||||
|
#define assert_param(expr) ((void)0U)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/** @addtogroup STM32F1xx_LL_Driver
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined (DMA1) || defined (DMA2)
|
||||||
|
|
||||||
|
/** @defgroup DMA_LL DMA
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Private types -------------------------------------------------------------*/
|
||||||
|
/* Private variables ---------------------------------------------------------*/
|
||||||
|
/* Private constants ---------------------------------------------------------*/
|
||||||
|
/* Private macros ------------------------------------------------------------*/
|
||||||
|
/** @addtogroup DMA_LL_Private_Macros
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define IS_LL_DMA_DIRECTION(__VALUE__) (((__VALUE__) == LL_DMA_DIRECTION_PERIPH_TO_MEMORY) || \
|
||||||
|
((__VALUE__) == LL_DMA_DIRECTION_MEMORY_TO_PERIPH) || \
|
||||||
|
((__VALUE__) == LL_DMA_DIRECTION_MEMORY_TO_MEMORY))
|
||||||
|
|
||||||
|
#define IS_LL_DMA_MODE(__VALUE__) (((__VALUE__) == LL_DMA_MODE_NORMAL) || \
|
||||||
|
((__VALUE__) == LL_DMA_MODE_CIRCULAR))
|
||||||
|
|
||||||
|
#define IS_LL_DMA_PERIPHINCMODE(__VALUE__) (((__VALUE__) == LL_DMA_PERIPH_INCREMENT) || \
|
||||||
|
((__VALUE__) == LL_DMA_PERIPH_NOINCREMENT))
|
||||||
|
|
||||||
|
#define IS_LL_DMA_MEMORYINCMODE(__VALUE__) (((__VALUE__) == LL_DMA_MEMORY_INCREMENT) || \
|
||||||
|
((__VALUE__) == LL_DMA_MEMORY_NOINCREMENT))
|
||||||
|
|
||||||
|
#define IS_LL_DMA_PERIPHDATASIZE(__VALUE__) (((__VALUE__) == LL_DMA_PDATAALIGN_BYTE) || \
|
||||||
|
((__VALUE__) == LL_DMA_PDATAALIGN_HALFWORD) || \
|
||||||
|
((__VALUE__) == LL_DMA_PDATAALIGN_WORD))
|
||||||
|
|
||||||
|
#define IS_LL_DMA_MEMORYDATASIZE(__VALUE__) (((__VALUE__) == LL_DMA_MDATAALIGN_BYTE) || \
|
||||||
|
((__VALUE__) == LL_DMA_MDATAALIGN_HALFWORD) || \
|
||||||
|
((__VALUE__) == LL_DMA_MDATAALIGN_WORD))
|
||||||
|
|
||||||
|
#define IS_LL_DMA_NBDATA(__VALUE__) ((__VALUE__) <= 0x0000FFFFU)
|
||||||
|
|
||||||
|
#define IS_LL_DMA_PRIORITY(__VALUE__) (((__VALUE__) == LL_DMA_PRIORITY_LOW) || \
|
||||||
|
((__VALUE__) == LL_DMA_PRIORITY_MEDIUM) || \
|
||||||
|
((__VALUE__) == LL_DMA_PRIORITY_HIGH) || \
|
||||||
|
((__VALUE__) == LL_DMA_PRIORITY_VERYHIGH))
|
||||||
|
|
||||||
|
#if defined (DMA2)
|
||||||
|
#define IS_LL_DMA_ALL_CHANNEL_INSTANCE(INSTANCE, CHANNEL) ((((INSTANCE) == DMA1) && \
|
||||||
|
(((CHANNEL) == LL_DMA_CHANNEL_1) || \
|
||||||
|
((CHANNEL) == LL_DMA_CHANNEL_2) || \
|
||||||
|
((CHANNEL) == LL_DMA_CHANNEL_3) || \
|
||||||
|
((CHANNEL) == LL_DMA_CHANNEL_4) || \
|
||||||
|
((CHANNEL) == LL_DMA_CHANNEL_5) || \
|
||||||
|
((CHANNEL) == LL_DMA_CHANNEL_6) || \
|
||||||
|
((CHANNEL) == LL_DMA_CHANNEL_7))) || \
|
||||||
|
(((INSTANCE) == DMA2) && \
|
||||||
|
(((CHANNEL) == LL_DMA_CHANNEL_1) || \
|
||||||
|
((CHANNEL) == LL_DMA_CHANNEL_2) || \
|
||||||
|
((CHANNEL) == LL_DMA_CHANNEL_3) || \
|
||||||
|
((CHANNEL) == LL_DMA_CHANNEL_4) || \
|
||||||
|
((CHANNEL) == LL_DMA_CHANNEL_5))))
|
||||||
|
#else
|
||||||
|
#define IS_LL_DMA_ALL_CHANNEL_INSTANCE(INSTANCE, CHANNEL) ((((INSTANCE) == DMA1) && \
|
||||||
|
(((CHANNEL) == LL_DMA_CHANNEL_1) || \
|
||||||
|
((CHANNEL) == LL_DMA_CHANNEL_2) || \
|
||||||
|
((CHANNEL) == LL_DMA_CHANNEL_3) || \
|
||||||
|
((CHANNEL) == LL_DMA_CHANNEL_4) || \
|
||||||
|
((CHANNEL) == LL_DMA_CHANNEL_5) || \
|
||||||
|
((CHANNEL) == LL_DMA_CHANNEL_6) || \
|
||||||
|
((CHANNEL) == LL_DMA_CHANNEL_7))))
|
||||||
|
#endif
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Private function prototypes -----------------------------------------------*/
|
||||||
|
/* Exported functions --------------------------------------------------------*/
|
||||||
|
/** @addtogroup DMA_LL_Exported_Functions
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @addtogroup DMA_LL_EF_Init
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief De-initialize the DMA registers to their default reset values.
|
||||||
|
* @param DMAx DMAx Instance
|
||||||
|
* @param Channel This parameter can be one of the following values:
|
||||||
|
* @arg @ref LL_DMA_CHANNEL_1
|
||||||
|
* @arg @ref LL_DMA_CHANNEL_2
|
||||||
|
* @arg @ref LL_DMA_CHANNEL_3
|
||||||
|
* @arg @ref LL_DMA_CHANNEL_4
|
||||||
|
* @arg @ref LL_DMA_CHANNEL_5
|
||||||
|
* @arg @ref LL_DMA_CHANNEL_6
|
||||||
|
* @arg @ref LL_DMA_CHANNEL_7
|
||||||
|
* @retval An ErrorStatus enumeration value:
|
||||||
|
* - SUCCESS: DMA registers are de-initialized
|
||||||
|
* - ERROR: DMA registers are not de-initialized
|
||||||
|
*/
|
||||||
|
uint32_t LL_DMA_DeInit(DMA_TypeDef *DMAx, uint32_t Channel)
|
||||||
|
{
|
||||||
|
DMA_Channel_TypeDef *tmp = (DMA_Channel_TypeDef *)DMA1_Channel1;
|
||||||
|
ErrorStatus status = SUCCESS;
|
||||||
|
|
||||||
|
/* Check the DMA Instance DMAx and Channel parameters*/
|
||||||
|
assert_param(IS_LL_DMA_ALL_CHANNEL_INSTANCE(DMAx, Channel));
|
||||||
|
|
||||||
|
tmp = (DMA_Channel_TypeDef *)(__LL_DMA_GET_CHANNEL_INSTANCE(DMAx, Channel));
|
||||||
|
|
||||||
|
/* Disable the selected DMAx_Channely */
|
||||||
|
CLEAR_BIT(tmp->CCR, DMA_CCR_EN);
|
||||||
|
|
||||||
|
/* Reset DMAx_Channely control register */
|
||||||
|
LL_DMA_WriteReg(tmp, CCR, 0U);
|
||||||
|
|
||||||
|
/* Reset DMAx_Channely remaining bytes register */
|
||||||
|
LL_DMA_WriteReg(tmp, CNDTR, 0U);
|
||||||
|
|
||||||
|
/* Reset DMAx_Channely peripheral address register */
|
||||||
|
LL_DMA_WriteReg(tmp, CPAR, 0U);
|
||||||
|
|
||||||
|
/* Reset DMAx_Channely memory address register */
|
||||||
|
LL_DMA_WriteReg(tmp, CMAR, 0U);
|
||||||
|
|
||||||
|
if (Channel == LL_DMA_CHANNEL_1)
|
||||||
|
{
|
||||||
|
/* Reset interrupt pending bits for DMAx Channel1 */
|
||||||
|
LL_DMA_ClearFlag_GI1(DMAx);
|
||||||
|
}
|
||||||
|
else if (Channel == LL_DMA_CHANNEL_2)
|
||||||
|
{
|
||||||
|
/* Reset interrupt pending bits for DMAx Channel2 */
|
||||||
|
LL_DMA_ClearFlag_GI2(DMAx);
|
||||||
|
}
|
||||||
|
else if (Channel == LL_DMA_CHANNEL_3)
|
||||||
|
{
|
||||||
|
/* Reset interrupt pending bits for DMAx Channel3 */
|
||||||
|
LL_DMA_ClearFlag_GI3(DMAx);
|
||||||
|
}
|
||||||
|
else if (Channel == LL_DMA_CHANNEL_4)
|
||||||
|
{
|
||||||
|
/* Reset interrupt pending bits for DMAx Channel4 */
|
||||||
|
LL_DMA_ClearFlag_GI4(DMAx);
|
||||||
|
}
|
||||||
|
else if (Channel == LL_DMA_CHANNEL_5)
|
||||||
|
{
|
||||||
|
/* Reset interrupt pending bits for DMAx Channel5 */
|
||||||
|
LL_DMA_ClearFlag_GI5(DMAx);
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (Channel == LL_DMA_CHANNEL_6)
|
||||||
|
{
|
||||||
|
/* Reset interrupt pending bits for DMAx Channel6 */
|
||||||
|
LL_DMA_ClearFlag_GI6(DMAx);
|
||||||
|
}
|
||||||
|
else if (Channel == LL_DMA_CHANNEL_7)
|
||||||
|
{
|
||||||
|
/* Reset interrupt pending bits for DMAx Channel7 */
|
||||||
|
LL_DMA_ClearFlag_GI7(DMAx);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
status = ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Initialize the DMA registers according to the specified parameters in DMA_InitStruct.
|
||||||
|
* @note To convert DMAx_Channely Instance to DMAx Instance and Channely, use helper macros :
|
||||||
|
* @arg @ref __LL_DMA_GET_INSTANCE
|
||||||
|
* @arg @ref __LL_DMA_GET_CHANNEL
|
||||||
|
* @param DMAx DMAx Instance
|
||||||
|
* @param Channel This parameter can be one of the following values:
|
||||||
|
* @arg @ref LL_DMA_CHANNEL_1
|
||||||
|
* @arg @ref LL_DMA_CHANNEL_2
|
||||||
|
* @arg @ref LL_DMA_CHANNEL_3
|
||||||
|
* @arg @ref LL_DMA_CHANNEL_4
|
||||||
|
* @arg @ref LL_DMA_CHANNEL_5
|
||||||
|
* @arg @ref LL_DMA_CHANNEL_6
|
||||||
|
* @arg @ref LL_DMA_CHANNEL_7
|
||||||
|
* @param DMA_InitStruct pointer to a @ref LL_DMA_InitTypeDef structure.
|
||||||
|
* @retval An ErrorStatus enumeration value:
|
||||||
|
* - SUCCESS: DMA registers are initialized
|
||||||
|
* - ERROR: Not applicable
|
||||||
|
*/
|
||||||
|
uint32_t LL_DMA_Init(DMA_TypeDef *DMAx, uint32_t Channel, LL_DMA_InitTypeDef *DMA_InitStruct)
|
||||||
|
{
|
||||||
|
/* Check the DMA Instance DMAx and Channel parameters*/
|
||||||
|
assert_param(IS_LL_DMA_ALL_CHANNEL_INSTANCE(DMAx, Channel));
|
||||||
|
|
||||||
|
/* Check the DMA parameters from DMA_InitStruct */
|
||||||
|
assert_param(IS_LL_DMA_DIRECTION(DMA_InitStruct->Direction));
|
||||||
|
assert_param(IS_LL_DMA_MODE(DMA_InitStruct->Mode));
|
||||||
|
assert_param(IS_LL_DMA_PERIPHINCMODE(DMA_InitStruct->PeriphOrM2MSrcIncMode));
|
||||||
|
assert_param(IS_LL_DMA_MEMORYINCMODE(DMA_InitStruct->MemoryOrM2MDstIncMode));
|
||||||
|
assert_param(IS_LL_DMA_PERIPHDATASIZE(DMA_InitStruct->PeriphOrM2MSrcDataSize));
|
||||||
|
assert_param(IS_LL_DMA_MEMORYDATASIZE(DMA_InitStruct->MemoryOrM2MDstDataSize));
|
||||||
|
assert_param(IS_LL_DMA_NBDATA(DMA_InitStruct->NbData));
|
||||||
|
assert_param(IS_LL_DMA_PRIORITY(DMA_InitStruct->Priority));
|
||||||
|
|
||||||
|
/*---------------------------- DMAx CCR Configuration ------------------------
|
||||||
|
* Configure DMAx_Channely: data transfer direction, data transfer mode,
|
||||||
|
* peripheral and memory increment mode,
|
||||||
|
* data size alignment and priority level with parameters :
|
||||||
|
* - Direction: DMA_CCR_DIR and DMA_CCR_MEM2MEM bits
|
||||||
|
* - Mode: DMA_CCR_CIRC bit
|
||||||
|
* - PeriphOrM2MSrcIncMode: DMA_CCR_PINC bit
|
||||||
|
* - MemoryOrM2MDstIncMode: DMA_CCR_MINC bit
|
||||||
|
* - PeriphOrM2MSrcDataSize: DMA_CCR_PSIZE[1:0] bits
|
||||||
|
* - MemoryOrM2MDstDataSize: DMA_CCR_MSIZE[1:0] bits
|
||||||
|
* - Priority: DMA_CCR_PL[1:0] bits
|
||||||
|
*/
|
||||||
|
LL_DMA_ConfigTransfer(DMAx, Channel, DMA_InitStruct->Direction | \
|
||||||
|
DMA_InitStruct->Mode | \
|
||||||
|
DMA_InitStruct->PeriphOrM2MSrcIncMode | \
|
||||||
|
DMA_InitStruct->MemoryOrM2MDstIncMode | \
|
||||||
|
DMA_InitStruct->PeriphOrM2MSrcDataSize | \
|
||||||
|
DMA_InitStruct->MemoryOrM2MDstDataSize | \
|
||||||
|
DMA_InitStruct->Priority);
|
||||||
|
|
||||||
|
/*-------------------------- DMAx CMAR Configuration -------------------------
|
||||||
|
* Configure the memory or destination base address with parameter :
|
||||||
|
* - MemoryOrM2MDstAddress: DMA_CMAR_MA[31:0] bits
|
||||||
|
*/
|
||||||
|
LL_DMA_SetMemoryAddress(DMAx, Channel, DMA_InitStruct->MemoryOrM2MDstAddress);
|
||||||
|
|
||||||
|
/*-------------------------- DMAx CPAR Configuration -------------------------
|
||||||
|
* Configure the peripheral or source base address with parameter :
|
||||||
|
* - PeriphOrM2MSrcAddress: DMA_CPAR_PA[31:0] bits
|
||||||
|
*/
|
||||||
|
LL_DMA_SetPeriphAddress(DMAx, Channel, DMA_InitStruct->PeriphOrM2MSrcAddress);
|
||||||
|
|
||||||
|
/*--------------------------- DMAx CNDTR Configuration -----------------------
|
||||||
|
* Configure the peripheral base address with parameter :
|
||||||
|
* - NbData: DMA_CNDTR_NDT[15:0] bits
|
||||||
|
*/
|
||||||
|
LL_DMA_SetDataLength(DMAx, Channel, DMA_InitStruct->NbData);
|
||||||
|
|
||||||
|
return SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set each @ref LL_DMA_InitTypeDef field to default value.
|
||||||
|
* @param DMA_InitStruct Pointer to a @ref LL_DMA_InitTypeDef structure.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
void LL_DMA_StructInit(LL_DMA_InitTypeDef *DMA_InitStruct)
|
||||||
|
{
|
||||||
|
/* Set DMA_InitStruct fields to default values */
|
||||||
|
DMA_InitStruct->PeriphOrM2MSrcAddress = 0x00000000U;
|
||||||
|
DMA_InitStruct->MemoryOrM2MDstAddress = 0x00000000U;
|
||||||
|
DMA_InitStruct->Direction = LL_DMA_DIRECTION_PERIPH_TO_MEMORY;
|
||||||
|
DMA_InitStruct->Mode = LL_DMA_MODE_NORMAL;
|
||||||
|
DMA_InitStruct->PeriphOrM2MSrcIncMode = LL_DMA_PERIPH_NOINCREMENT;
|
||||||
|
DMA_InitStruct->MemoryOrM2MDstIncMode = LL_DMA_MEMORY_NOINCREMENT;
|
||||||
|
DMA_InitStruct->PeriphOrM2MSrcDataSize = LL_DMA_PDATAALIGN_BYTE;
|
||||||
|
DMA_InitStruct->MemoryOrM2MDstDataSize = LL_DMA_MDATAALIGN_BYTE;
|
||||||
|
DMA_InitStruct->NbData = 0x00000000U;
|
||||||
|
DMA_InitStruct->Priority = LL_DMA_PRIORITY_LOW;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#endif /* DMA1 || DMA2 */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#endif /* USE_FULL_LL_DRIVER */
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
215
LLDrivers/src/stm32f1xx_ll_exti.c
Normal file
215
LLDrivers/src/stm32f1xx_ll_exti.c
Normal file
|
@ -0,0 +1,215 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file stm32f1xx_ll_exti.c
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @brief EXTI LL module driver.
|
||||||
|
******************************************************************************
|
||||||
|
* @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
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(USE_FULL_LL_DRIVER)
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "stm32f1xx_ll_exti.h"
|
||||||
|
#ifdef USE_FULL_ASSERT
|
||||||
|
#include "stm32_assert.h"
|
||||||
|
#else
|
||||||
|
#define assert_param(expr) ((void)0U)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/** @addtogroup STM32F1xx_LL_Driver
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined (EXTI)
|
||||||
|
|
||||||
|
/** @defgroup EXTI_LL EXTI
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Private types -------------------------------------------------------------*/
|
||||||
|
/* Private variables ---------------------------------------------------------*/
|
||||||
|
/* Private constants ---------------------------------------------------------*/
|
||||||
|
/* Private macros ------------------------------------------------------------*/
|
||||||
|
/** @addtogroup EXTI_LL_Private_Macros
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define IS_LL_EXTI_LINE_0_31(__VALUE__) (((__VALUE__) & ~LL_EXTI_LINE_ALL_0_31) == 0x00000000U)
|
||||||
|
|
||||||
|
#define IS_LL_EXTI_MODE(__VALUE__) (((__VALUE__) == LL_EXTI_MODE_IT) \
|
||||||
|
|| ((__VALUE__) == LL_EXTI_MODE_EVENT) \
|
||||||
|
|| ((__VALUE__) == LL_EXTI_MODE_IT_EVENT))
|
||||||
|
|
||||||
|
|
||||||
|
#define IS_LL_EXTI_TRIGGER(__VALUE__) (((__VALUE__) == LL_EXTI_TRIGGER_NONE) \
|
||||||
|
|| ((__VALUE__) == LL_EXTI_TRIGGER_RISING) \
|
||||||
|
|| ((__VALUE__) == LL_EXTI_TRIGGER_FALLING) \
|
||||||
|
|| ((__VALUE__) == LL_EXTI_TRIGGER_RISING_FALLING))
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Private function prototypes -----------------------------------------------*/
|
||||||
|
|
||||||
|
/* Exported functions --------------------------------------------------------*/
|
||||||
|
/** @addtogroup EXTI_LL_Exported_Functions
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @addtogroup EXTI_LL_EF_Init
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief De-initialize the EXTI registers to their default reset values.
|
||||||
|
* @retval An ErrorStatus enumeration value:
|
||||||
|
* - SUCCESS: EXTI registers are de-initialized
|
||||||
|
* - ERROR: not applicable
|
||||||
|
*/
|
||||||
|
uint32_t LL_EXTI_DeInit(void)
|
||||||
|
{
|
||||||
|
/* Interrupt mask register set to default reset values */
|
||||||
|
LL_EXTI_WriteReg(IMR, 0x00000000U);
|
||||||
|
/* Event mask register set to default reset values */
|
||||||
|
LL_EXTI_WriteReg(EMR, 0x00000000U);
|
||||||
|
/* Rising Trigger selection register set to default reset values */
|
||||||
|
LL_EXTI_WriteReg(RTSR, 0x00000000U);
|
||||||
|
/* Falling Trigger selection register set to default reset values */
|
||||||
|
LL_EXTI_WriteReg(FTSR, 0x00000000U);
|
||||||
|
/* Software interrupt event register set to default reset values */
|
||||||
|
LL_EXTI_WriteReg(SWIER, 0x00000000U);
|
||||||
|
/* Pending register clear */
|
||||||
|
LL_EXTI_WriteReg(PR, 0x000FFFFFU);
|
||||||
|
|
||||||
|
return SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Initialize the EXTI registers according to the specified parameters in EXTI_InitStruct.
|
||||||
|
* @param EXTI_InitStruct pointer to a @ref LL_EXTI_InitTypeDef structure.
|
||||||
|
* @retval An ErrorStatus enumeration value:
|
||||||
|
* - SUCCESS: EXTI registers are initialized
|
||||||
|
* - ERROR: not applicable
|
||||||
|
*/
|
||||||
|
uint32_t LL_EXTI_Init(LL_EXTI_InitTypeDef *EXTI_InitStruct)
|
||||||
|
{
|
||||||
|
ErrorStatus status = SUCCESS;
|
||||||
|
/* Check the parameters */
|
||||||
|
assert_param(IS_LL_EXTI_LINE_0_31(EXTI_InitStruct->Line_0_31));
|
||||||
|
assert_param(IS_FUNCTIONAL_STATE(EXTI_InitStruct->LineCommand));
|
||||||
|
assert_param(IS_LL_EXTI_MODE(EXTI_InitStruct->Mode));
|
||||||
|
|
||||||
|
/* ENABLE LineCommand */
|
||||||
|
if (EXTI_InitStruct->LineCommand != DISABLE)
|
||||||
|
{
|
||||||
|
assert_param(IS_LL_EXTI_TRIGGER(EXTI_InitStruct->Trigger));
|
||||||
|
|
||||||
|
/* Configure EXTI Lines in range from 0 to 31 */
|
||||||
|
if (EXTI_InitStruct->Line_0_31 != LL_EXTI_LINE_NONE)
|
||||||
|
{
|
||||||
|
switch (EXTI_InitStruct->Mode)
|
||||||
|
{
|
||||||
|
case LL_EXTI_MODE_IT:
|
||||||
|
/* First Disable Event on provided Lines */
|
||||||
|
LL_EXTI_DisableEvent_0_31(EXTI_InitStruct->Line_0_31);
|
||||||
|
/* Then Enable IT on provided Lines */
|
||||||
|
LL_EXTI_EnableIT_0_31(EXTI_InitStruct->Line_0_31);
|
||||||
|
break;
|
||||||
|
case LL_EXTI_MODE_EVENT:
|
||||||
|
/* First Disable IT on provided Lines */
|
||||||
|
LL_EXTI_DisableIT_0_31(EXTI_InitStruct->Line_0_31);
|
||||||
|
/* Then Enable Event on provided Lines */
|
||||||
|
LL_EXTI_EnableEvent_0_31(EXTI_InitStruct->Line_0_31);
|
||||||
|
break;
|
||||||
|
case LL_EXTI_MODE_IT_EVENT:
|
||||||
|
/* Directly Enable IT & Event on provided Lines */
|
||||||
|
LL_EXTI_EnableIT_0_31(EXTI_InitStruct->Line_0_31);
|
||||||
|
LL_EXTI_EnableEvent_0_31(EXTI_InitStruct->Line_0_31);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
status = ERROR;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (EXTI_InitStruct->Trigger != LL_EXTI_TRIGGER_NONE)
|
||||||
|
{
|
||||||
|
switch (EXTI_InitStruct->Trigger)
|
||||||
|
{
|
||||||
|
case LL_EXTI_TRIGGER_RISING:
|
||||||
|
/* First Disable Falling Trigger on provided Lines */
|
||||||
|
LL_EXTI_DisableFallingTrig_0_31(EXTI_InitStruct->Line_0_31);
|
||||||
|
/* Then Enable Rising Trigger on provided Lines */
|
||||||
|
LL_EXTI_EnableRisingTrig_0_31(EXTI_InitStruct->Line_0_31);
|
||||||
|
break;
|
||||||
|
case LL_EXTI_TRIGGER_FALLING:
|
||||||
|
/* First Disable Rising Trigger on provided Lines */
|
||||||
|
LL_EXTI_DisableRisingTrig_0_31(EXTI_InitStruct->Line_0_31);
|
||||||
|
/* Then Enable Falling Trigger on provided Lines */
|
||||||
|
LL_EXTI_EnableFallingTrig_0_31(EXTI_InitStruct->Line_0_31);
|
||||||
|
break;
|
||||||
|
case LL_EXTI_TRIGGER_RISING_FALLING:
|
||||||
|
LL_EXTI_EnableRisingTrig_0_31(EXTI_InitStruct->Line_0_31);
|
||||||
|
LL_EXTI_EnableFallingTrig_0_31(EXTI_InitStruct->Line_0_31);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
status = ERROR;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* DISABLE LineCommand */
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* De-configure EXTI Lines in range from 0 to 31 */
|
||||||
|
LL_EXTI_DisableIT_0_31(EXTI_InitStruct->Line_0_31);
|
||||||
|
LL_EXTI_DisableEvent_0_31(EXTI_InitStruct->Line_0_31);
|
||||||
|
}
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set each @ref LL_EXTI_InitTypeDef field to default value.
|
||||||
|
* @param EXTI_InitStruct Pointer to a @ref LL_EXTI_InitTypeDef structure.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
void LL_EXTI_StructInit(LL_EXTI_InitTypeDef *EXTI_InitStruct)
|
||||||
|
{
|
||||||
|
EXTI_InitStruct->Line_0_31 = LL_EXTI_LINE_NONE;
|
||||||
|
EXTI_InitStruct->LineCommand = DISABLE;
|
||||||
|
EXTI_InitStruct->Mode = LL_EXTI_MODE_IT;
|
||||||
|
EXTI_InitStruct->Trigger = LL_EXTI_TRIGGER_FALLING;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#endif /* defined (EXTI) */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#endif /* USE_FULL_LL_DRIVER */
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
985
LLDrivers/src/stm32f1xx_ll_fsmc.c
Normal file
985
LLDrivers/src/stm32f1xx_ll_fsmc.c
Normal file
|
@ -0,0 +1,985 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file stm32f1xx_ll_fsmc.c
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @brief FSMC Low Layer HAL module driver.
|
||||||
|
*
|
||||||
|
* This file provides firmware functions to manage the following
|
||||||
|
* functionalities of the Flexible Memory Controller (FSMC) peripheral memories:
|
||||||
|
* + Initialization/de-initialization functions
|
||||||
|
* + Peripheral Control functions
|
||||||
|
* + Peripheral State functions
|
||||||
|
*
|
||||||
|
@verbatim
|
||||||
|
==============================================================================
|
||||||
|
##### FSMC peripheral features #####
|
||||||
|
==============================================================================
|
||||||
|
[..] The Flexible memory controller (FSMC) includes following memory controllers:
|
||||||
|
(+) The NOR/PSRAM memory controller
|
||||||
|
(+) The NAND/PC Card memory controller
|
||||||
|
|
||||||
|
[..] The FSMC functional block makes the interface with synchronous and asynchronous static
|
||||||
|
memories and 16-bit PC memory cards. Its main purposes are:
|
||||||
|
(+) to translate AHB transactions into the appropriate external device protocol
|
||||||
|
(+) to meet the access time requirements of the external memory devices
|
||||||
|
|
||||||
|
[..] All external memories share the addresses, data and control signals with the controller.
|
||||||
|
Each external device is accessed by means of a unique Chip Select. The FSMC performs
|
||||||
|
only one access at a time to an external device.
|
||||||
|
The main features of the FSMC controller are the following:
|
||||||
|
(+) Interface with static-memory mapped devices including:
|
||||||
|
(++) Static random access memory (SRAM)
|
||||||
|
(++) Read-only memory (ROM)
|
||||||
|
(++) NOR Flash memory/OneNAND Flash memory
|
||||||
|
(++) PSRAM (4 memory banks)
|
||||||
|
(++) 16-bit PC Card compatible devices
|
||||||
|
(++) Two banks of NAND Flash memory with ECC hardware to check up to 8 Kbytes of
|
||||||
|
data
|
||||||
|
(+) Independent Chip Select control for each memory bank
|
||||||
|
(+) Independent configuration for each memory bank
|
||||||
|
|
||||||
|
@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
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#if (((defined HAL_NOR_MODULE_ENABLED || defined HAL_SRAM_MODULE_ENABLED)) || defined HAL_NAND_MODULE_ENABLED || defined HAL_PCCARD_MODULE_ENABLED )
|
||||||
|
|
||||||
|
/** @defgroup FSMC_LL FSMC Low Layer
|
||||||
|
* @brief FSMC driver modules
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Private typedef -----------------------------------------------------------*/
|
||||||
|
/* Private define ------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/** @defgroup FSMC_LL_Private_Constants FSMC Low Layer Private Constants
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* ----------------------- FSMC registers bit mask --------------------------- */
|
||||||
|
|
||||||
|
#if defined FSMC_BANK1
|
||||||
|
/* --- BCR Register ---*/
|
||||||
|
/* BCR register clear mask */
|
||||||
|
|
||||||
|
/* --- BTR Register ---*/
|
||||||
|
/* BTR register clear mask */
|
||||||
|
#define BTR_CLEAR_MASK ((uint32_t)(FSMC_BTRx_ADDSET | FSMC_BTRx_ADDHLD |\
|
||||||
|
FSMC_BTRx_DATAST | FSMC_BTRx_BUSTURN |\
|
||||||
|
FSMC_BTRx_CLKDIV | FSMC_BTRx_DATLAT |\
|
||||||
|
FSMC_BTRx_ACCMOD))
|
||||||
|
|
||||||
|
/* --- BWTR Register ---*/
|
||||||
|
/* BWTR register clear mask */
|
||||||
|
#if defined(FSMC_BWTRx_BUSTURN)
|
||||||
|
#define BWTR_CLEAR_MASK ((uint32_t)(FSMC_BWTRx_ADDSET | FSMC_BWTRx_ADDHLD |\
|
||||||
|
FSMC_BWTRx_DATAST | FSMC_BWTRx_BUSTURN |\
|
||||||
|
FSMC_BWTRx_ACCMOD))
|
||||||
|
#else
|
||||||
|
#define BWTR_CLEAR_MASK ((uint32_t)(FSMC_BWTRx_ADDSET | FSMC_BWTRx_ADDHLD |\
|
||||||
|
FSMC_BWTRx_DATAST | FSMC_BWTRx_ACCMOD))
|
||||||
|
#endif /* FSMC_BWTRx_BUSTURN */
|
||||||
|
#endif /* FSMC_BANK1 */
|
||||||
|
#if defined(FSMC_BANK3)
|
||||||
|
|
||||||
|
/* --- PCR Register ---*/
|
||||||
|
/* PCR register clear mask */
|
||||||
|
#define PCR_CLEAR_MASK ((uint32_t)(FSMC_PCRx_PWAITEN | FSMC_PCRx_PBKEN | \
|
||||||
|
FSMC_PCRx_PTYP | FSMC_PCRx_PWID | \
|
||||||
|
FSMC_PCRx_ECCEN | FSMC_PCRx_TCLR | \
|
||||||
|
FSMC_PCRx_TAR | FSMC_PCRx_ECCPS))
|
||||||
|
/* --- PMEM Register ---*/
|
||||||
|
/* PMEM register clear mask */
|
||||||
|
#define PMEM_CLEAR_MASK ((uint32_t)(FSMC_PMEMx_MEMSETx | FSMC_PMEMx_MEMWAITx |\
|
||||||
|
FSMC_PMEMx_MEMHOLDx | FSMC_PMEMx_MEMHIZx))
|
||||||
|
|
||||||
|
/* --- PATT Register ---*/
|
||||||
|
/* PATT register clear mask */
|
||||||
|
#define PATT_CLEAR_MASK ((uint32_t)(FSMC_PATTx_ATTSETx | FSMC_PATTx_ATTWAITx |\
|
||||||
|
FSMC_PATTx_ATTHOLDx | FSMC_PATTx_ATTHIZx))
|
||||||
|
|
||||||
|
#endif /* FSMC_BANK3 */
|
||||||
|
#if defined(FSMC_BANK4)
|
||||||
|
/* --- PCR Register ---*/
|
||||||
|
/* PCR register clear mask */
|
||||||
|
#define PCR4_CLEAR_MASK ((uint32_t)(FSMC_PCR4_PWAITEN | FSMC_PCR4_PBKEN | \
|
||||||
|
FSMC_PCR4_PTYP | FSMC_PCR4_PWID | \
|
||||||
|
FSMC_PCR4_ECCEN | FSMC_PCR4_TCLR | \
|
||||||
|
FSMC_PCR4_TAR | FSMC_PCR4_ECCPS))
|
||||||
|
/* --- PMEM Register ---*/
|
||||||
|
/* PMEM register clear mask */
|
||||||
|
#define PMEM4_CLEAR_MASK ((uint32_t)(FSMC_PMEM4_MEMSET4 | FSMC_PMEM4_MEMWAIT4 |\
|
||||||
|
FSMC_PMEM4_MEMHOLD4 | FSMC_PMEM4_MEMHIZ4))
|
||||||
|
|
||||||
|
/* --- PATT Register ---*/
|
||||||
|
/* PATT register clear mask */
|
||||||
|
#define PATT4_CLEAR_MASK ((uint32_t)(FSMC_PATT4_ATTSET4 | FSMC_PATT4_ATTWAIT4 |\
|
||||||
|
FSMC_PATT4_ATTHOLD4 | FSMC_PATT4_ATTHIZ4))
|
||||||
|
|
||||||
|
/* --- PIO4 Register ---*/
|
||||||
|
/* PIO4 register clear mask */
|
||||||
|
#define PIO4_CLEAR_MASK ((uint32_t)(FSMC_PIO4_IOSET4 | FSMC_PIO4_IOWAIT4 | \
|
||||||
|
FSMC_PIO4_IOHOLD4 | FSMC_PIO4_IOHIZ4))
|
||||||
|
|
||||||
|
#endif /* FSMC_BANK4 */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Private macro -------------------------------------------------------------*/
|
||||||
|
/* Private variables ---------------------------------------------------------*/
|
||||||
|
/* Private function prototypes -----------------------------------------------*/
|
||||||
|
/* Exported functions --------------------------------------------------------*/
|
||||||
|
|
||||||
|
/** @defgroup FSMC_LL_Exported_Functions FSMC Low Layer Exported Functions
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined FSMC_BANK1
|
||||||
|
|
||||||
|
/** @defgroup FSMC_LL_Exported_Functions_NORSRAM FSMC Low Layer NOR SRAM Exported Functions
|
||||||
|
* @brief NORSRAM Controller functions
|
||||||
|
*
|
||||||
|
@verbatim
|
||||||
|
==============================================================================
|
||||||
|
##### How to use NORSRAM device driver #####
|
||||||
|
==============================================================================
|
||||||
|
|
||||||
|
[..]
|
||||||
|
This driver contains a set of APIs to interface with the FSMC NORSRAM banks in order
|
||||||
|
to run the NORSRAM external devices.
|
||||||
|
|
||||||
|
(+) FSMC NORSRAM bank reset using the function FSMC_NORSRAM_DeInit()
|
||||||
|
(+) FSMC NORSRAM bank control configuration using the function FSMC_NORSRAM_Init()
|
||||||
|
(+) FSMC NORSRAM bank timing configuration using the function FSMC_NORSRAM_Timing_Init()
|
||||||
|
(+) FSMC NORSRAM bank extended timing configuration using the function
|
||||||
|
FSMC_NORSRAM_Extended_Timing_Init()
|
||||||
|
(+) FSMC NORSRAM bank enable/disable write operation using the functions
|
||||||
|
FSMC_NORSRAM_WriteOperation_Enable()/FSMC_NORSRAM_WriteOperation_Disable()
|
||||||
|
|
||||||
|
@endverbatim
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup FSMC_LL_NORSRAM_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 configure the FSMC NORSRAM interface
|
||||||
|
(+) De-initialize the FSMC NORSRAM interface
|
||||||
|
(+) Configure the FSMC clock and associated GPIOs
|
||||||
|
|
||||||
|
@endverbatim
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Initialize the FSMC_NORSRAM device according to the specified
|
||||||
|
* control parameters in the FSMC_NORSRAM_InitTypeDef
|
||||||
|
* @param Device Pointer to NORSRAM device instance
|
||||||
|
* @param Init Pointer to NORSRAM Initialization structure
|
||||||
|
* @retval HAL status
|
||||||
|
*/
|
||||||
|
HAL_StatusTypeDef FSMC_NORSRAM_Init(FSMC_NORSRAM_TypeDef *Device, FSMC_NORSRAM_InitTypeDef *Init)
|
||||||
|
{
|
||||||
|
uint32_t flashaccess;
|
||||||
|
|
||||||
|
/* Check the parameters */
|
||||||
|
assert_param(IS_FSMC_NORSRAM_DEVICE(Device));
|
||||||
|
assert_param(IS_FSMC_NORSRAM_BANK(Init->NSBank));
|
||||||
|
assert_param(IS_FSMC_MUX(Init->DataAddressMux));
|
||||||
|
assert_param(IS_FSMC_MEMORY(Init->MemoryType));
|
||||||
|
assert_param(IS_FSMC_NORSRAM_MEMORY_WIDTH(Init->MemoryDataWidth));
|
||||||
|
assert_param(IS_FSMC_BURSTMODE(Init->BurstAccessMode));
|
||||||
|
assert_param(IS_FSMC_WAIT_POLARITY(Init->WaitSignalPolarity));
|
||||||
|
assert_param(IS_FSMC_WRAP_MODE(Init->WrapMode));
|
||||||
|
assert_param(IS_FSMC_WAIT_SIGNAL_ACTIVE(Init->WaitSignalActive));
|
||||||
|
assert_param(IS_FSMC_WRITE_OPERATION(Init->WriteOperation));
|
||||||
|
assert_param(IS_FSMC_WAITE_SIGNAL(Init->WaitSignal));
|
||||||
|
assert_param(IS_FSMC_EXTENDED_MODE(Init->ExtendedMode));
|
||||||
|
assert_param(IS_FSMC_ASYNWAIT(Init->AsynchronousWait));
|
||||||
|
assert_param(IS_FSMC_WRITE_BURST(Init->WriteBurst));
|
||||||
|
assert_param(IS_FSMC_PAGESIZE(Init->PageSize));
|
||||||
|
|
||||||
|
/* Disable NORSRAM Device */
|
||||||
|
__FSMC_NORSRAM_DISABLE(Device, Init->NSBank);
|
||||||
|
|
||||||
|
/* Set NORSRAM device control parameters */
|
||||||
|
if (Init->MemoryType == FSMC_MEMORY_TYPE_NOR)
|
||||||
|
{
|
||||||
|
flashaccess = FSMC_NORSRAM_FLASH_ACCESS_ENABLE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
flashaccess = FSMC_NORSRAM_FLASH_ACCESS_DISABLE;
|
||||||
|
}
|
||||||
|
|
||||||
|
MODIFY_REG(Device->BTCR[Init->NSBank],
|
||||||
|
(FSMC_BCRx_MBKEN |
|
||||||
|
FSMC_BCRx_MUXEN |
|
||||||
|
FSMC_BCRx_MTYP |
|
||||||
|
FSMC_BCRx_MWID |
|
||||||
|
FSMC_BCRx_FACCEN |
|
||||||
|
FSMC_BCRx_BURSTEN |
|
||||||
|
FSMC_BCRx_WAITPOL |
|
||||||
|
FSMC_BCRx_WRAPMOD |
|
||||||
|
FSMC_BCRx_WAITCFG |
|
||||||
|
FSMC_BCRx_WREN |
|
||||||
|
FSMC_BCRx_WAITEN |
|
||||||
|
FSMC_BCRx_EXTMOD |
|
||||||
|
FSMC_BCRx_ASYNCWAIT |
|
||||||
|
FSMC_BCRx_CBURSTRW |
|
||||||
|
0x00070000U), /* CPSIZE to be defined in CMSIS file */
|
||||||
|
(flashaccess |
|
||||||
|
Init->DataAddressMux |
|
||||||
|
Init->MemoryType |
|
||||||
|
Init->MemoryDataWidth |
|
||||||
|
Init->BurstAccessMode |
|
||||||
|
Init->WaitSignalPolarity |
|
||||||
|
Init->WrapMode |
|
||||||
|
Init->WaitSignalActive |
|
||||||
|
Init->WriteOperation |
|
||||||
|
Init->WaitSignal |
|
||||||
|
Init->ExtendedMode |
|
||||||
|
Init->AsynchronousWait |
|
||||||
|
Init->WriteBurst |
|
||||||
|
Init->PageSize));
|
||||||
|
|
||||||
|
|
||||||
|
return HAL_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief DeInitialize the FSMC_NORSRAM peripheral
|
||||||
|
* @param Device Pointer to NORSRAM device instance
|
||||||
|
* @param ExDevice Pointer to NORSRAM extended mode device instance
|
||||||
|
* @param Bank NORSRAM bank number
|
||||||
|
* @retval HAL status
|
||||||
|
*/
|
||||||
|
HAL_StatusTypeDef FSMC_NORSRAM_DeInit(FSMC_NORSRAM_TypeDef *Device, FSMC_NORSRAM_EXTENDED_TypeDef *ExDevice, uint32_t Bank)
|
||||||
|
{
|
||||||
|
/* Check the parameters */
|
||||||
|
assert_param(IS_FSMC_NORSRAM_DEVICE(Device));
|
||||||
|
assert_param(IS_FSMC_NORSRAM_EXTENDED_DEVICE(ExDevice));
|
||||||
|
assert_param(IS_FSMC_NORSRAM_BANK(Bank));
|
||||||
|
|
||||||
|
/* Disable the FSMC_NORSRAM device */
|
||||||
|
__FSMC_NORSRAM_DISABLE(Device, Bank);
|
||||||
|
|
||||||
|
/* De-initialize the FSMC_NORSRAM device */
|
||||||
|
/* FSMC_NORSRAM_BANK1 */
|
||||||
|
if (Bank == FSMC_NORSRAM_BANK1)
|
||||||
|
{
|
||||||
|
Device->BTCR[Bank] = 0x000030DBU;
|
||||||
|
}
|
||||||
|
/* FSMC_NORSRAM_BANK2, FSMC_NORSRAM_BANK3 or FSMC_NORSRAM_BANK4 */
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Device->BTCR[Bank] = 0x000030D2U;
|
||||||
|
}
|
||||||
|
|
||||||
|
Device->BTCR[Bank + 1U] = 0x0FFFFFFFU;
|
||||||
|
ExDevice->BWTR[Bank] = 0x0FFFFFFFU;
|
||||||
|
|
||||||
|
return HAL_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Initialize the FSMC_NORSRAM Timing according to the specified
|
||||||
|
* parameters in the FSMC_NORSRAM_TimingTypeDef
|
||||||
|
* @param Device Pointer to NORSRAM device instance
|
||||||
|
* @param Timing Pointer to NORSRAM Timing structure
|
||||||
|
* @param Bank NORSRAM bank number
|
||||||
|
* @retval HAL status
|
||||||
|
*/
|
||||||
|
HAL_StatusTypeDef FSMC_NORSRAM_Timing_Init(FSMC_NORSRAM_TypeDef *Device, FSMC_NORSRAM_TimingTypeDef *Timing, uint32_t Bank)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* Check the parameters */
|
||||||
|
assert_param(IS_FSMC_NORSRAM_DEVICE(Device));
|
||||||
|
assert_param(IS_FSMC_ADDRESS_SETUP_TIME(Timing->AddressSetupTime));
|
||||||
|
assert_param(IS_FSMC_ADDRESS_HOLD_TIME(Timing->AddressHoldTime));
|
||||||
|
assert_param(IS_FSMC_DATASETUP_TIME(Timing->DataSetupTime));
|
||||||
|
assert_param(IS_FSMC_TURNAROUND_TIME(Timing->BusTurnAroundDuration));
|
||||||
|
assert_param(IS_FSMC_CLK_DIV(Timing->CLKDivision));
|
||||||
|
assert_param(IS_FSMC_DATA_LATENCY(Timing->DataLatency));
|
||||||
|
assert_param(IS_FSMC_ACCESS_MODE(Timing->AccessMode));
|
||||||
|
assert_param(IS_FSMC_NORSRAM_BANK(Bank));
|
||||||
|
|
||||||
|
/* Set FSMC_NORSRAM device timing parameters */
|
||||||
|
MODIFY_REG(Device->BTCR[Bank + 1U], BTR_CLEAR_MASK, (Timing->AddressSetupTime |
|
||||||
|
((Timing->AddressHoldTime) << FSMC_BTRx_ADDHLD_Pos) |
|
||||||
|
((Timing->DataSetupTime) << FSMC_BTRx_DATAST_Pos) |
|
||||||
|
((Timing->BusTurnAroundDuration) << FSMC_BTRx_BUSTURN_Pos) |
|
||||||
|
(((Timing->CLKDivision) - 1U) << FSMC_BTRx_CLKDIV_Pos) |
|
||||||
|
(((Timing->DataLatency) - 2U) << FSMC_BTRx_DATLAT_Pos) |
|
||||||
|
(Timing->AccessMode)));
|
||||||
|
|
||||||
|
return HAL_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Initialize the FSMC_NORSRAM Extended mode Timing according to the specified
|
||||||
|
* parameters in the FSMC_NORSRAM_TimingTypeDef
|
||||||
|
* @param Device Pointer to NORSRAM device instance
|
||||||
|
* @param Timing Pointer to NORSRAM Timing structure
|
||||||
|
* @param Bank NORSRAM bank number
|
||||||
|
* @param ExtendedMode FSMC Extended Mode
|
||||||
|
* This parameter can be one of the following values:
|
||||||
|
* @arg FSMC_EXTENDED_MODE_DISABLE
|
||||||
|
* @arg FSMC_EXTENDED_MODE_ENABLE
|
||||||
|
* @retval HAL status
|
||||||
|
*/
|
||||||
|
HAL_StatusTypeDef FSMC_NORSRAM_Extended_Timing_Init(FSMC_NORSRAM_EXTENDED_TypeDef *Device, FSMC_NORSRAM_TimingTypeDef *Timing, uint32_t Bank, uint32_t ExtendedMode)
|
||||||
|
{
|
||||||
|
/* Check the parameters */
|
||||||
|
assert_param(IS_FSMC_EXTENDED_MODE(ExtendedMode));
|
||||||
|
|
||||||
|
/* Set NORSRAM device timing register for write configuration, if extended mode is used */
|
||||||
|
if (ExtendedMode == FSMC_EXTENDED_MODE_ENABLE)
|
||||||
|
{
|
||||||
|
/* Check the parameters */
|
||||||
|
assert_param(IS_FSMC_NORSRAM_EXTENDED_DEVICE(Device));
|
||||||
|
assert_param(IS_FSMC_ADDRESS_SETUP_TIME(Timing->AddressSetupTime));
|
||||||
|
assert_param(IS_FSMC_ADDRESS_HOLD_TIME(Timing->AddressHoldTime));
|
||||||
|
assert_param(IS_FSMC_DATASETUP_TIME(Timing->DataSetupTime));
|
||||||
|
#if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG) || defined(STM32F103xG)
|
||||||
|
assert_param(IS_FSMC_TURNAROUND_TIME(Timing->BusTurnAroundDuration));
|
||||||
|
#else
|
||||||
|
assert_param(IS_FSMC_CLK_DIV(Timing->CLKDivision));
|
||||||
|
assert_param(IS_FSMC_DATA_LATENCY(Timing->DataLatency));
|
||||||
|
#endif /* STM32F101xE || STM32F103xE || STM32F101xG || STM32F103xG */
|
||||||
|
assert_param(IS_FSMC_ACCESS_MODE(Timing->AccessMode));
|
||||||
|
assert_param(IS_FSMC_NORSRAM_BANK(Bank));
|
||||||
|
|
||||||
|
/* Set NORSRAM device timing register for write configuration, if extended mode is used */
|
||||||
|
#if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG) || defined(STM32F103xG)
|
||||||
|
MODIFY_REG(Device->BWTR[Bank], BWTR_CLEAR_MASK, (Timing->AddressSetupTime |
|
||||||
|
((Timing->AddressHoldTime) << FSMC_BWTRx_ADDHLD_Pos) |
|
||||||
|
((Timing->DataSetupTime) << FSMC_BWTRx_DATAST_Pos) |
|
||||||
|
Timing->AccessMode |
|
||||||
|
((Timing->BusTurnAroundDuration) << FSMC_BWTRx_BUSTURN_Pos)));
|
||||||
|
#else
|
||||||
|
MODIFY_REG(Device->BWTR[Bank], BWTR_CLEAR_MASK, (Timing->AddressSetupTime |
|
||||||
|
((Timing->AddressHoldTime) << FSMC_BWTRx_ADDHLD_Pos) |
|
||||||
|
((Timing->DataSetupTime) << FSMC_BWTRx_DATAST_Pos) |
|
||||||
|
Timing->AccessMode |
|
||||||
|
(((Timing->CLKDivision) - 1U) << FSMC_BTRx_CLKDIV_Pos) |
|
||||||
|
(((Timing->DataLatency) - 2U) << FSMC_BWTRx_DATLAT_Pos)));
|
||||||
|
#endif /* STM32F101xE || STM32F103xE || STM32F101xG || STM32F103xG */
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Device->BWTR[Bank] = 0x0FFFFFFFU;
|
||||||
|
}
|
||||||
|
|
||||||
|
return HAL_OK;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @addtogroup FSMC_LL_NORSRAM_Private_Functions_Group2
|
||||||
|
* @brief management functions
|
||||||
|
*
|
||||||
|
@verbatim
|
||||||
|
==============================================================================
|
||||||
|
##### FSMC_NORSRAM Control functions #####
|
||||||
|
==============================================================================
|
||||||
|
[..]
|
||||||
|
This subsection provides a set of functions allowing to control dynamically
|
||||||
|
the FSMC NORSRAM interface.
|
||||||
|
|
||||||
|
@endverbatim
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Enables dynamically FSMC_NORSRAM write operation.
|
||||||
|
* @param Device Pointer to NORSRAM device instance
|
||||||
|
* @param Bank NORSRAM bank number
|
||||||
|
* @retval HAL status
|
||||||
|
*/
|
||||||
|
HAL_StatusTypeDef FSMC_NORSRAM_WriteOperation_Enable(FSMC_NORSRAM_TypeDef *Device, uint32_t Bank)
|
||||||
|
{
|
||||||
|
/* Check the parameters */
|
||||||
|
assert_param(IS_FSMC_NORSRAM_DEVICE(Device));
|
||||||
|
assert_param(IS_FSMC_NORSRAM_BANK(Bank));
|
||||||
|
|
||||||
|
/* Enable write operation */
|
||||||
|
SET_BIT(Device->BTCR[Bank], FSMC_WRITE_OPERATION_ENABLE);
|
||||||
|
|
||||||
|
return HAL_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Disables dynamically FSMC_NORSRAM write operation.
|
||||||
|
* @param Device Pointer to NORSRAM device instance
|
||||||
|
* @param Bank NORSRAM bank number
|
||||||
|
* @retval HAL status
|
||||||
|
*/
|
||||||
|
HAL_StatusTypeDef FSMC_NORSRAM_WriteOperation_Disable(FSMC_NORSRAM_TypeDef *Device, uint32_t Bank)
|
||||||
|
{
|
||||||
|
/* Check the parameters */
|
||||||
|
assert_param(IS_FSMC_NORSRAM_DEVICE(Device));
|
||||||
|
assert_param(IS_FSMC_NORSRAM_BANK(Bank));
|
||||||
|
|
||||||
|
/* Disable write operation */
|
||||||
|
CLEAR_BIT(Device->BTCR[Bank], FSMC_WRITE_OPERATION_ENABLE);
|
||||||
|
|
||||||
|
return HAL_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
#endif /* FSMC_BANK1 */
|
||||||
|
|
||||||
|
#if defined(FSMC_BANK3)
|
||||||
|
|
||||||
|
/** @defgroup FSMC_LL_Exported_Functions_NAND FSMC Low Layer NAND Exported Functions
|
||||||
|
* @brief NAND Controller functions
|
||||||
|
*
|
||||||
|
@verbatim
|
||||||
|
==============================================================================
|
||||||
|
##### How to use NAND device driver #####
|
||||||
|
==============================================================================
|
||||||
|
[..]
|
||||||
|
This driver contains a set of APIs to interface with the FSMC NAND banks in order
|
||||||
|
to run the NAND external devices.
|
||||||
|
|
||||||
|
(+) FSMC NAND bank reset using the function FSMC_NAND_DeInit()
|
||||||
|
(+) FSMC NAND bank control configuration using the function FSMC_NAND_Init()
|
||||||
|
(+) FSMC NAND bank common space timing configuration using the function
|
||||||
|
FSMC_NAND_CommonSpace_Timing_Init()
|
||||||
|
(+) FSMC NAND bank attribute space timing configuration using the function
|
||||||
|
FSMC_NAND_AttributeSpace_Timing_Init()
|
||||||
|
(+) FSMC NAND bank enable/disable ECC correction feature using the functions
|
||||||
|
FSMC_NAND_ECC_Enable()/FSMC_NAND_ECC_Disable()
|
||||||
|
(+) FSMC NAND bank get ECC correction code using the function FSMC_NAND_GetECC()
|
||||||
|
|
||||||
|
@endverbatim
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup FSMC_LL_NAND_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 configure the FSMC NAND interface
|
||||||
|
(+) De-initialize the FSMC NAND interface
|
||||||
|
(+) Configure the FSMC clock and associated GPIOs
|
||||||
|
|
||||||
|
@endverbatim
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Initializes the FSMC_NAND device according to the specified
|
||||||
|
* control parameters in the FSMC_NAND_HandleTypeDef
|
||||||
|
* @param Device Pointer to NAND device instance
|
||||||
|
* @param Init Pointer to NAND Initialization structure
|
||||||
|
* @retval HAL status
|
||||||
|
*/
|
||||||
|
HAL_StatusTypeDef FSMC_NAND_Init(FSMC_NAND_TypeDef *Device, FSMC_NAND_InitTypeDef *Init)
|
||||||
|
{
|
||||||
|
/* Check the parameters */
|
||||||
|
assert_param(IS_FSMC_NAND_DEVICE(Device));
|
||||||
|
assert_param(IS_FSMC_NAND_BANK(Init->NandBank));
|
||||||
|
assert_param(IS_FSMC_WAIT_FEATURE(Init->Waitfeature));
|
||||||
|
assert_param(IS_FSMC_NAND_MEMORY_WIDTH(Init->MemoryDataWidth));
|
||||||
|
assert_param(IS_FSMC_ECC_STATE(Init->EccComputation));
|
||||||
|
assert_param(IS_FSMC_ECCPAGE_SIZE(Init->ECCPageSize));
|
||||||
|
assert_param(IS_FSMC_TCLR_TIME(Init->TCLRSetupTime));
|
||||||
|
assert_param(IS_FSMC_TAR_TIME(Init->TARSetupTime));
|
||||||
|
|
||||||
|
/* Set NAND device control parameters */
|
||||||
|
if (Init->NandBank == FSMC_NAND_BANK2)
|
||||||
|
{
|
||||||
|
/* NAND bank 2 registers configuration */
|
||||||
|
MODIFY_REG(Device->PCR2, PCR_CLEAR_MASK, (Init->Waitfeature |
|
||||||
|
FSMC_PCR_MEMORY_TYPE_NAND |
|
||||||
|
Init->MemoryDataWidth |
|
||||||
|
Init->EccComputation |
|
||||||
|
Init->ECCPageSize |
|
||||||
|
((Init->TCLRSetupTime) << FSMC_PCRx_TCLR_Pos) |
|
||||||
|
((Init->TARSetupTime) << FSMC_PCRx_TAR_Pos)));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* NAND bank 3 registers configuration */
|
||||||
|
MODIFY_REG(Device->PCR3, PCR_CLEAR_MASK, (Init->Waitfeature |
|
||||||
|
FSMC_PCR_MEMORY_TYPE_NAND |
|
||||||
|
Init->MemoryDataWidth |
|
||||||
|
Init->EccComputation |
|
||||||
|
Init->ECCPageSize |
|
||||||
|
((Init->TCLRSetupTime) << FSMC_PCRx_TCLR_Pos) |
|
||||||
|
((Init->TARSetupTime) << FSMC_PCRx_TAR_Pos)));
|
||||||
|
}
|
||||||
|
|
||||||
|
return HAL_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Initializes the FSMC_NAND Common space Timing according to the specified
|
||||||
|
* parameters in the FSMC_NAND_PCC_TimingTypeDef
|
||||||
|
* @param Device Pointer to NAND device instance
|
||||||
|
* @param Timing Pointer to NAND timing structure
|
||||||
|
* @param Bank NAND bank number
|
||||||
|
* @retval HAL status
|
||||||
|
*/
|
||||||
|
HAL_StatusTypeDef FSMC_NAND_CommonSpace_Timing_Init(FSMC_NAND_TypeDef *Device, FSMC_NAND_PCC_TimingTypeDef *Timing, uint32_t Bank)
|
||||||
|
{
|
||||||
|
/* Check the parameters */
|
||||||
|
assert_param(IS_FSMC_NAND_DEVICE(Device));
|
||||||
|
assert_param(IS_FSMC_SETUP_TIME(Timing->SetupTime));
|
||||||
|
assert_param(IS_FSMC_WAIT_TIME(Timing->WaitSetupTime));
|
||||||
|
assert_param(IS_FSMC_HOLD_TIME(Timing->HoldSetupTime));
|
||||||
|
assert_param(IS_FSMC_HIZ_TIME(Timing->HiZSetupTime));
|
||||||
|
assert_param(IS_FSMC_NAND_BANK(Bank));
|
||||||
|
|
||||||
|
/* Set FSMC_NAND device timing parameters */
|
||||||
|
if (Bank == FSMC_NAND_BANK2)
|
||||||
|
{
|
||||||
|
/* NAND bank 2 registers configuration */
|
||||||
|
MODIFY_REG(Device->PMEM2, PMEM_CLEAR_MASK, (Timing->SetupTime |
|
||||||
|
((Timing->WaitSetupTime) << FSMC_PMEMx_MEMWAITx_Pos) |
|
||||||
|
((Timing->HoldSetupTime) << FSMC_PMEMx_MEMHOLDx_Pos) |
|
||||||
|
((Timing->HiZSetupTime) << FSMC_PMEMx_MEMHIZx_Pos)));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* NAND bank 3 registers configuration */
|
||||||
|
MODIFY_REG(Device->PMEM3, PMEM_CLEAR_MASK, (Timing->SetupTime |
|
||||||
|
((Timing->WaitSetupTime) << FSMC_PMEMx_MEMWAITx_Pos) |
|
||||||
|
((Timing->HoldSetupTime) << FSMC_PMEMx_MEMHOLDx_Pos) |
|
||||||
|
((Timing->HiZSetupTime) << FSMC_PMEMx_MEMHIZx_Pos)));
|
||||||
|
}
|
||||||
|
|
||||||
|
return HAL_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Initializes the FSMC_NAND Attribute space Timing according to the specified
|
||||||
|
* parameters in the FSMC_NAND_PCC_TimingTypeDef
|
||||||
|
* @param Device Pointer to NAND device instance
|
||||||
|
* @param Timing Pointer to NAND timing structure
|
||||||
|
* @param Bank NAND bank number
|
||||||
|
* @retval HAL status
|
||||||
|
*/
|
||||||
|
HAL_StatusTypeDef FSMC_NAND_AttributeSpace_Timing_Init(FSMC_NAND_TypeDef *Device, FSMC_NAND_PCC_TimingTypeDef *Timing, uint32_t Bank)
|
||||||
|
{
|
||||||
|
/* Check the parameters */
|
||||||
|
assert_param(IS_FSMC_NAND_DEVICE(Device));
|
||||||
|
assert_param(IS_FSMC_SETUP_TIME(Timing->SetupTime));
|
||||||
|
assert_param(IS_FSMC_WAIT_TIME(Timing->WaitSetupTime));
|
||||||
|
assert_param(IS_FSMC_HOLD_TIME(Timing->HoldSetupTime));
|
||||||
|
assert_param(IS_FSMC_HIZ_TIME(Timing->HiZSetupTime));
|
||||||
|
assert_param(IS_FSMC_NAND_BANK(Bank));
|
||||||
|
|
||||||
|
/* Set FSMC_NAND device timing parameters */
|
||||||
|
if (Bank == FSMC_NAND_BANK2)
|
||||||
|
{
|
||||||
|
/* NAND bank 2 registers configuration */
|
||||||
|
MODIFY_REG(Device->PATT2, PATT_CLEAR_MASK, (Timing->SetupTime |
|
||||||
|
((Timing->WaitSetupTime) << FSMC_PATTx_ATTWAITx_Pos) |
|
||||||
|
((Timing->HoldSetupTime) << FSMC_PATTx_ATTHOLDx_Pos) |
|
||||||
|
((Timing->HiZSetupTime) << FSMC_PATTx_ATTHIZx_Pos)));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* NAND bank 3 registers configuration */
|
||||||
|
MODIFY_REG(Device->PATT3, PATT_CLEAR_MASK, (Timing->SetupTime |
|
||||||
|
((Timing->WaitSetupTime) << FSMC_PATTx_ATTWAITx_Pos) |
|
||||||
|
((Timing->HoldSetupTime) << FSMC_PATTx_ATTHOLDx_Pos) |
|
||||||
|
((Timing->HiZSetupTime) << FSMC_PATTx_ATTHIZx_Pos)));
|
||||||
|
}
|
||||||
|
|
||||||
|
return HAL_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief DeInitializes the FSMC_NAND device
|
||||||
|
* @param Device Pointer to NAND device instance
|
||||||
|
* @param Bank NAND bank number
|
||||||
|
* @retval HAL status
|
||||||
|
*/
|
||||||
|
HAL_StatusTypeDef FSMC_NAND_DeInit(FSMC_NAND_TypeDef *Device, uint32_t Bank)
|
||||||
|
{
|
||||||
|
/* Check the parameters */
|
||||||
|
assert_param(IS_FSMC_NAND_DEVICE(Device));
|
||||||
|
assert_param(IS_FSMC_NAND_BANK(Bank));
|
||||||
|
|
||||||
|
/* Disable the NAND Bank */
|
||||||
|
__FSMC_NAND_DISABLE(Device, Bank);
|
||||||
|
|
||||||
|
/* De-initialize the NAND Bank */
|
||||||
|
if (Bank == FSMC_NAND_BANK2)
|
||||||
|
{
|
||||||
|
/* Set the FSMC_NAND_BANK2 registers to their reset values */
|
||||||
|
WRITE_REG(Device->PCR2, 0x00000018U);
|
||||||
|
WRITE_REG(Device->SR2, 0x00000040U);
|
||||||
|
WRITE_REG(Device->PMEM2, 0xFCFCFCFCU);
|
||||||
|
WRITE_REG(Device->PATT2, 0xFCFCFCFCU);
|
||||||
|
}
|
||||||
|
/* FSMC_Bank3_NAND */
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Set the FSMC_NAND_BANK3 registers to their reset values */
|
||||||
|
WRITE_REG(Device->PCR3, 0x00000018U);
|
||||||
|
WRITE_REG(Device->SR3, 0x00000040U);
|
||||||
|
WRITE_REG(Device->PMEM3, 0xFCFCFCFCU);
|
||||||
|
WRITE_REG(Device->PATT3, 0xFCFCFCFCU);
|
||||||
|
}
|
||||||
|
|
||||||
|
return HAL_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup HAL_FSMC_NAND_Group2 Peripheral Control functions
|
||||||
|
* @brief management functions
|
||||||
|
*
|
||||||
|
@verbatim
|
||||||
|
==============================================================================
|
||||||
|
##### FSMC_NAND Control functions #####
|
||||||
|
==============================================================================
|
||||||
|
[..]
|
||||||
|
This subsection provides a set of functions allowing to control dynamically
|
||||||
|
the FSMC NAND interface.
|
||||||
|
|
||||||
|
@endverbatim
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Enables dynamically FSMC_NAND ECC feature.
|
||||||
|
* @param Device Pointer to NAND device instance
|
||||||
|
* @param Bank NAND bank number
|
||||||
|
* @retval HAL status
|
||||||
|
*/
|
||||||
|
HAL_StatusTypeDef FSMC_NAND_ECC_Enable(FSMC_NAND_TypeDef *Device, uint32_t Bank)
|
||||||
|
{
|
||||||
|
/* Check the parameters */
|
||||||
|
assert_param(IS_FSMC_NAND_DEVICE(Device));
|
||||||
|
assert_param(IS_FSMC_NAND_BANK(Bank));
|
||||||
|
|
||||||
|
/* Enable ECC feature */
|
||||||
|
if (Bank == FSMC_NAND_BANK2)
|
||||||
|
{
|
||||||
|
SET_BIT(Device->PCR2, FSMC_PCRx_ECCEN);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SET_BIT(Device->PCR3, FSMC_PCRx_ECCEN);
|
||||||
|
}
|
||||||
|
|
||||||
|
return HAL_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Disables dynamically FSMC_NAND ECC feature.
|
||||||
|
* @param Device Pointer to NAND device instance
|
||||||
|
* @param Bank NAND bank number
|
||||||
|
* @retval HAL status
|
||||||
|
*/
|
||||||
|
HAL_StatusTypeDef FSMC_NAND_ECC_Disable(FSMC_NAND_TypeDef *Device, uint32_t Bank)
|
||||||
|
{
|
||||||
|
/* Check the parameters */
|
||||||
|
assert_param(IS_FSMC_NAND_DEVICE(Device));
|
||||||
|
assert_param(IS_FSMC_NAND_BANK(Bank));
|
||||||
|
|
||||||
|
/* Disable ECC feature */
|
||||||
|
if (Bank == FSMC_NAND_BANK2)
|
||||||
|
{
|
||||||
|
CLEAR_BIT(Device->PCR2, FSMC_PCRx_ECCEN);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
CLEAR_BIT(Device->PCR3, FSMC_PCRx_ECCEN);
|
||||||
|
}
|
||||||
|
|
||||||
|
return HAL_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Disables dynamically FSMC_NAND ECC feature.
|
||||||
|
* @param Device Pointer to NAND device instance
|
||||||
|
* @param ECCval Pointer to ECC value
|
||||||
|
* @param Bank NAND bank number
|
||||||
|
* @param Timeout Timeout wait value
|
||||||
|
* @retval HAL status
|
||||||
|
*/
|
||||||
|
HAL_StatusTypeDef FSMC_NAND_GetECC(FSMC_NAND_TypeDef *Device, uint32_t *ECCval, uint32_t Bank, uint32_t Timeout)
|
||||||
|
{
|
||||||
|
uint32_t tickstart;
|
||||||
|
|
||||||
|
/* Check the parameters */
|
||||||
|
assert_param(IS_FSMC_NAND_DEVICE(Device));
|
||||||
|
assert_param(IS_FSMC_NAND_BANK(Bank));
|
||||||
|
|
||||||
|
/* Get tick */
|
||||||
|
tickstart = HAL_GetTick();
|
||||||
|
|
||||||
|
/* Wait until FIFO is empty */
|
||||||
|
while (__FSMC_NAND_GET_FLAG(Device, Bank, FSMC_FLAG_FEMPT) == RESET)
|
||||||
|
{
|
||||||
|
/* Check for the Timeout */
|
||||||
|
if (Timeout != HAL_MAX_DELAY)
|
||||||
|
{
|
||||||
|
if (((HAL_GetTick() - tickstart) > Timeout) || (Timeout == 0U))
|
||||||
|
{
|
||||||
|
return HAL_TIMEOUT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Bank == FSMC_NAND_BANK2)
|
||||||
|
{
|
||||||
|
/* Get the ECCR2 register value */
|
||||||
|
*ECCval = (uint32_t)Device->ECCR2;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Get the ECCR3 register value */
|
||||||
|
*ECCval = (uint32_t)Device->ECCR3;
|
||||||
|
}
|
||||||
|
|
||||||
|
return HAL_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
#endif /* FSMC_BANK3 */
|
||||||
|
|
||||||
|
#if defined(FSMC_BANK4)
|
||||||
|
|
||||||
|
/** @addtogroup FSMC_LL_PCCARD
|
||||||
|
* @brief PCCARD Controller functions
|
||||||
|
*
|
||||||
|
@verbatim
|
||||||
|
==============================================================================
|
||||||
|
##### How to use PCCARD device driver #####
|
||||||
|
==============================================================================
|
||||||
|
[..]
|
||||||
|
This driver contains a set of APIs to interface with the FSMC PCCARD bank in order
|
||||||
|
to run the PCCARD/compact flash external devices.
|
||||||
|
|
||||||
|
(+) FSMC PCCARD bank reset using the function FSMC_PCCARD_DeInit()
|
||||||
|
(+) FSMC PCCARD bank control configuration using the function FSMC_PCCARD_Init()
|
||||||
|
(+) FSMC PCCARD bank common space timing configuration using the function
|
||||||
|
FSMC_PCCARD_CommonSpace_Timing_Init()
|
||||||
|
(+) FSMC PCCARD bank attribute space timing configuration using the function
|
||||||
|
FSMC_PCCARD_AttributeSpace_Timing_Init()
|
||||||
|
(+) FSMC PCCARD bank IO space timing configuration using the function
|
||||||
|
FSMC_PCCARD_IOSpace_Timing_Init()
|
||||||
|
@endverbatim
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @addtogroup FSMC_LL_PCCARD_Private_Functions_Group1
|
||||||
|
* @brief Initialization and Configuration functions
|
||||||
|
*
|
||||||
|
@verbatim
|
||||||
|
==============================================================================
|
||||||
|
##### Initialization and de_initialization functions #####
|
||||||
|
==============================================================================
|
||||||
|
[..]
|
||||||
|
This section provides functions allowing to:
|
||||||
|
(+) Initialize and configure the FSMC PCCARD interface
|
||||||
|
(+) De-initialize the FSMC PCCARD interface
|
||||||
|
(+) Configure the FSMC clock and associated GPIOs
|
||||||
|
|
||||||
|
@endverbatim
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Initializes the FSMC_PCCARD device according to the specified
|
||||||
|
* control parameters in the FSMC_PCCARD_HandleTypeDef
|
||||||
|
* @param Device Pointer to PCCARD device instance
|
||||||
|
* @param Init Pointer to PCCARD Initialization structure
|
||||||
|
* @retval HAL status
|
||||||
|
*/
|
||||||
|
HAL_StatusTypeDef FSMC_PCCARD_Init(FSMC_PCCARD_TypeDef *Device, FSMC_PCCARD_InitTypeDef *Init)
|
||||||
|
{
|
||||||
|
/* Check the parameters */
|
||||||
|
assert_param(IS_FSMC_PCCARD_DEVICE(Device));
|
||||||
|
assert_param(IS_FSMC_WAIT_FEATURE(Init->Waitfeature));
|
||||||
|
assert_param(IS_FSMC_TCLR_TIME(Init->TCLRSetupTime));
|
||||||
|
assert_param(IS_FSMC_TAR_TIME(Init->TARSetupTime));
|
||||||
|
|
||||||
|
/* Set FSMC_PCCARD device control parameters */
|
||||||
|
MODIFY_REG(Device->PCR4,
|
||||||
|
(FSMC_PCRx_PTYP |
|
||||||
|
FSMC_PCRx_PWAITEN |
|
||||||
|
FSMC_PCRx_PWID |
|
||||||
|
FSMC_PCRx_TCLR |
|
||||||
|
FSMC_PCRx_TAR),
|
||||||
|
(FSMC_PCR_MEMORY_TYPE_PCCARD |
|
||||||
|
Init->Waitfeature |
|
||||||
|
FSMC_NAND_PCC_MEM_BUS_WIDTH_16 |
|
||||||
|
(Init->TCLRSetupTime << FSMC_PCRx_TCLR_Pos) |
|
||||||
|
(Init->TARSetupTime << FSMC_PCRx_TAR_Pos)));
|
||||||
|
|
||||||
|
return HAL_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Initializes the FSMC_PCCARD Common space Timing according to the specified
|
||||||
|
* parameters in the FSMC_NAND_PCC_TimingTypeDef
|
||||||
|
* @param Device Pointer to PCCARD device instance
|
||||||
|
* @param Timing Pointer to PCCARD timing structure
|
||||||
|
* @retval HAL status
|
||||||
|
*/
|
||||||
|
HAL_StatusTypeDef FSMC_PCCARD_CommonSpace_Timing_Init(FSMC_PCCARD_TypeDef *Device, FSMC_NAND_PCC_TimingTypeDef *Timing)
|
||||||
|
{
|
||||||
|
/* Check the parameters */
|
||||||
|
assert_param(IS_FSMC_PCCARD_DEVICE(Device));
|
||||||
|
assert_param(IS_FSMC_SETUP_TIME(Timing->SetupTime));
|
||||||
|
assert_param(IS_FSMC_WAIT_TIME(Timing->WaitSetupTime));
|
||||||
|
assert_param(IS_FSMC_HOLD_TIME(Timing->HoldSetupTime));
|
||||||
|
assert_param(IS_FSMC_HIZ_TIME(Timing->HiZSetupTime));
|
||||||
|
|
||||||
|
/* Set PCCARD timing parameters */
|
||||||
|
MODIFY_REG(Device->PMEM4, PMEM_CLEAR_MASK,
|
||||||
|
(Timing->SetupTime |
|
||||||
|
((Timing->WaitSetupTime) << FSMC_PMEMx_MEMWAITx_Pos) |
|
||||||
|
((Timing->HoldSetupTime) << FSMC_PMEMx_MEMHOLDx_Pos) |
|
||||||
|
((Timing->HiZSetupTime) << FSMC_PMEMx_MEMHIZx_Pos)));
|
||||||
|
|
||||||
|
return HAL_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Initializes the FSMC_PCCARD Attribute space Timing according to the specified
|
||||||
|
* parameters in the FSMC_NAND_PCC_TimingTypeDef
|
||||||
|
* @param Device Pointer to PCCARD device instance
|
||||||
|
* @param Timing Pointer to PCCARD timing structure
|
||||||
|
* @retval HAL status
|
||||||
|
*/
|
||||||
|
HAL_StatusTypeDef FSMC_PCCARD_AttributeSpace_Timing_Init(FSMC_PCCARD_TypeDef *Device, FSMC_NAND_PCC_TimingTypeDef *Timing)
|
||||||
|
{
|
||||||
|
/* Check the parameters */
|
||||||
|
assert_param(IS_FSMC_PCCARD_DEVICE(Device));
|
||||||
|
assert_param(IS_FSMC_SETUP_TIME(Timing->SetupTime));
|
||||||
|
assert_param(IS_FSMC_WAIT_TIME(Timing->WaitSetupTime));
|
||||||
|
assert_param(IS_FSMC_HOLD_TIME(Timing->HoldSetupTime));
|
||||||
|
assert_param(IS_FSMC_HIZ_TIME(Timing->HiZSetupTime));
|
||||||
|
|
||||||
|
/* Set PCCARD timing parameters */
|
||||||
|
MODIFY_REG(Device->PATT4, PATT_CLEAR_MASK,
|
||||||
|
(Timing->SetupTime |
|
||||||
|
((Timing->WaitSetupTime) << FSMC_PATTx_ATTWAITx_Pos) |
|
||||||
|
((Timing->HoldSetupTime) << FSMC_PATTx_ATTHOLDx_Pos) |
|
||||||
|
((Timing->HiZSetupTime) << FSMC_PATTx_ATTHIZx_Pos)));
|
||||||
|
|
||||||
|
return HAL_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Initializes the FSMC_PCCARD IO space Timing according to the specified
|
||||||
|
* parameters in the FSMC_NAND_PCC_TimingTypeDef
|
||||||
|
* @param Device Pointer to PCCARD device instance
|
||||||
|
* @param Timing Pointer to PCCARD timing structure
|
||||||
|
* @retval HAL status
|
||||||
|
*/
|
||||||
|
HAL_StatusTypeDef FSMC_PCCARD_IOSpace_Timing_Init(FSMC_PCCARD_TypeDef *Device, FSMC_NAND_PCC_TimingTypeDef *Timing)
|
||||||
|
{
|
||||||
|
/* Check the parameters */
|
||||||
|
assert_param(IS_FSMC_PCCARD_DEVICE(Device));
|
||||||
|
assert_param(IS_FSMC_SETUP_TIME(Timing->SetupTime));
|
||||||
|
assert_param(IS_FSMC_WAIT_TIME(Timing->WaitSetupTime));
|
||||||
|
assert_param(IS_FSMC_HOLD_TIME(Timing->HoldSetupTime));
|
||||||
|
assert_param(IS_FSMC_HIZ_TIME(Timing->HiZSetupTime));
|
||||||
|
|
||||||
|
/* Set FSMC_PCCARD device timing parameters */
|
||||||
|
MODIFY_REG(Device->PIO4, PIO4_CLEAR_MASK,
|
||||||
|
(Timing->SetupTime |
|
||||||
|
(Timing->WaitSetupTime << FSMC_PIO4_IOWAIT4_Pos) |
|
||||||
|
(Timing->HoldSetupTime << FSMC_PIO4_IOHOLD4_Pos) |
|
||||||
|
(Timing->HiZSetupTime << FSMC_PIO4_IOHIZ4_Pos)));
|
||||||
|
|
||||||
|
return HAL_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief DeInitializes the FSMC_PCCARD device
|
||||||
|
* @param Device Pointer to PCCARD device instance
|
||||||
|
* @retval HAL status
|
||||||
|
*/
|
||||||
|
HAL_StatusTypeDef FSMC_PCCARD_DeInit(FSMC_PCCARD_TypeDef *Device)
|
||||||
|
{
|
||||||
|
/* Check the parameters */
|
||||||
|
assert_param(IS_FSMC_PCCARD_DEVICE(Device));
|
||||||
|
|
||||||
|
/* Disable the FSMC_PCCARD device */
|
||||||
|
__FSMC_PCCARD_DISABLE(Device);
|
||||||
|
|
||||||
|
/* De-initialize the FSMC_PCCARD device */
|
||||||
|
Device->PCR4 = 0x00000018U;
|
||||||
|
Device->SR4 = 0x00000040U;
|
||||||
|
Device->PMEM4 = 0xFCFCFCFCU;
|
||||||
|
Device->PATT4 = 0xFCFCFCFCU;
|
||||||
|
Device->PIO4 = 0xFCFCFCFCU;
|
||||||
|
|
||||||
|
return HAL_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
#endif /* FSMC_BANK4 */
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#endif /* HAL_NOR_MODULE_ENABLED */
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
253
LLDrivers/src/stm32f1xx_ll_gpio.c
Normal file
253
LLDrivers/src/stm32f1xx_ll_gpio.c
Normal file
|
@ -0,0 +1,253 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file stm32f1xx_ll_gpio.c
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @brief GPIO LL module driver.
|
||||||
|
******************************************************************************
|
||||||
|
* @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
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(USE_FULL_LL_DRIVER)
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "stm32f1xx_ll_gpio.h"
|
||||||
|
#include "stm32f1xx_ll_bus.h"
|
||||||
|
#ifdef USE_FULL_ASSERT
|
||||||
|
#include "stm32_assert.h"
|
||||||
|
#else
|
||||||
|
#define assert_param(expr) ((void)0U)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/** @addtogroup STM32F1xx_LL_Driver
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined (GPIOA) || defined (GPIOB) || defined (GPIOC) || defined (GPIOD) || defined (GPIOE) || defined (GPIOF) || defined (GPIOG)
|
||||||
|
|
||||||
|
/** @addtogroup GPIO_LL
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Private types -------------------------------------------------------------*/
|
||||||
|
/* Private variables ---------------------------------------------------------*/
|
||||||
|
/* Private constants ---------------------------------------------------------*/
|
||||||
|
/* Private macros ------------------------------------------------------------*/
|
||||||
|
/** @addtogroup GPIO_LL_Private_Macros
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define IS_LL_GPIO_PIN(__VALUE__) ((((__VALUE__) & LL_GPIO_PIN_ALL)!= 0u) &&\
|
||||||
|
(((__VALUE__) & (~LL_GPIO_PIN_ALL))== 0u))
|
||||||
|
|
||||||
|
#define IS_LL_GPIO_MODE(__VALUE__) (((__VALUE__) == LL_GPIO_MODE_ANALOG) ||\
|
||||||
|
((__VALUE__) == LL_GPIO_MODE_FLOATING) ||\
|
||||||
|
((__VALUE__) == LL_GPIO_MODE_INPUT) ||\
|
||||||
|
((__VALUE__) == LL_GPIO_MODE_OUTPUT) ||\
|
||||||
|
((__VALUE__) == LL_GPIO_MODE_ALTERNATE))
|
||||||
|
|
||||||
|
#define IS_LL_GPIO_SPEED(__VALUE__) (((__VALUE__) == LL_GPIO_SPEED_FREQ_LOW) ||\
|
||||||
|
((__VALUE__) == LL_GPIO_SPEED_FREQ_MEDIUM) ||\
|
||||||
|
((__VALUE__) == LL_GPIO_SPEED_FREQ_HIGH))
|
||||||
|
|
||||||
|
#define IS_LL_GPIO_OUTPUT_TYPE(__VALUE__) (((__VALUE__) == LL_GPIO_OUTPUT_PUSHPULL) ||\
|
||||||
|
((__VALUE__) == LL_GPIO_OUTPUT_OPENDRAIN))
|
||||||
|
|
||||||
|
#define IS_LL_GPIO_PULL(__VALUE__) (((__VALUE__) == LL_GPIO_PULL_DOWN) ||\
|
||||||
|
((__VALUE__) == LL_GPIO_PULL_UP))
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Private function prototypes -----------------------------------------------*/
|
||||||
|
|
||||||
|
/* Exported functions --------------------------------------------------------*/
|
||||||
|
/** @addtogroup GPIO_LL_Exported_Functions
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @addtogroup GPIO_LL_EF_Init
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief De-initialize GPIO registers (Registers restored to their default values).
|
||||||
|
* @param GPIOx GPIO Port
|
||||||
|
* @retval An ErrorStatus enumeration value:
|
||||||
|
* - SUCCESS: GPIO registers are de-initialized
|
||||||
|
* - ERROR: Wrong GPIO Port
|
||||||
|
*/
|
||||||
|
ErrorStatus LL_GPIO_DeInit(GPIO_TypeDef *GPIOx)
|
||||||
|
{
|
||||||
|
ErrorStatus status = SUCCESS;
|
||||||
|
|
||||||
|
/* Check the parameters */
|
||||||
|
assert_param(IS_GPIO_ALL_INSTANCE(GPIOx));
|
||||||
|
|
||||||
|
/* Force and Release reset on clock of GPIOx Port */
|
||||||
|
if (GPIOx == GPIOA)
|
||||||
|
{
|
||||||
|
LL_APB2_GRP1_ForceReset(LL_APB2_GRP1_PERIPH_GPIOA);
|
||||||
|
LL_APB2_GRP1_ReleaseReset(LL_APB2_GRP1_PERIPH_GPIOA);
|
||||||
|
}
|
||||||
|
else if (GPIOx == GPIOB)
|
||||||
|
{
|
||||||
|
LL_APB2_GRP1_ForceReset(LL_APB2_GRP1_PERIPH_GPIOB);
|
||||||
|
LL_APB2_GRP1_ReleaseReset(LL_APB2_GRP1_PERIPH_GPIOB);
|
||||||
|
}
|
||||||
|
else if (GPIOx == GPIOC)
|
||||||
|
{
|
||||||
|
LL_APB2_GRP1_ForceReset(LL_APB2_GRP1_PERIPH_GPIOC);
|
||||||
|
LL_APB2_GRP1_ReleaseReset(LL_APB2_GRP1_PERIPH_GPIOC);
|
||||||
|
}
|
||||||
|
else if (GPIOx == GPIOD)
|
||||||
|
{
|
||||||
|
LL_APB2_GRP1_ForceReset(LL_APB2_GRP1_PERIPH_GPIOD);
|
||||||
|
LL_APB2_GRP1_ReleaseReset(LL_APB2_GRP1_PERIPH_GPIOD);
|
||||||
|
}
|
||||||
|
#if defined(GPIOE)
|
||||||
|
else if (GPIOx == GPIOE)
|
||||||
|
{
|
||||||
|
LL_APB2_GRP1_ForceReset(LL_APB2_GRP1_PERIPH_GPIOE);
|
||||||
|
LL_APB2_GRP1_ReleaseReset(LL_APB2_GRP1_PERIPH_GPIOE);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#if defined(GPIOF)
|
||||||
|
else if (GPIOx == GPIOF)
|
||||||
|
{
|
||||||
|
LL_APB2_GRP1_ForceReset(LL_APB2_GRP1_PERIPH_GPIOF);
|
||||||
|
LL_APB2_GRP1_ReleaseReset(LL_APB2_GRP1_PERIPH_GPIOF);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#if defined(GPIOG)
|
||||||
|
else if (GPIOx == GPIOG)
|
||||||
|
{
|
||||||
|
LL_APB2_GRP1_ForceReset(LL_APB2_GRP1_PERIPH_GPIOG);
|
||||||
|
LL_APB2_GRP1_ReleaseReset(LL_APB2_GRP1_PERIPH_GPIOG);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
else
|
||||||
|
{
|
||||||
|
status = ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (status);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Initialize GPIO registers according to the specified parameters in GPIO_InitStruct.
|
||||||
|
* @param GPIOx GPIO Port
|
||||||
|
* @param GPIO_InitStruct: pointer to a @ref LL_GPIO_InitTypeDef structure
|
||||||
|
* that contains the configuration information for the specified GPIO peripheral.
|
||||||
|
* @retval An ErrorStatus enumeration value:
|
||||||
|
* - SUCCESS: GPIO registers are initialized according to GPIO_InitStruct content
|
||||||
|
* - ERROR: Not applicable
|
||||||
|
*/
|
||||||
|
ErrorStatus LL_GPIO_Init(GPIO_TypeDef *GPIOx, LL_GPIO_InitTypeDef *GPIO_InitStruct)
|
||||||
|
{
|
||||||
|
uint32_t pinmask;
|
||||||
|
uint32_t pinpos;
|
||||||
|
uint32_t currentpin;
|
||||||
|
|
||||||
|
/* Check the parameters */
|
||||||
|
assert_param(IS_GPIO_ALL_INSTANCE(GPIOx));
|
||||||
|
assert_param(IS_LL_GPIO_PIN(GPIO_InitStruct->Pin));
|
||||||
|
|
||||||
|
/* ------------------------- Configure the port pins ---------------- */
|
||||||
|
/* Initialize pinpos on first pin set */
|
||||||
|
|
||||||
|
pinmask = ((GPIO_InitStruct->Pin) << GPIO_PIN_MASK_POS) >> GPIO_PIN_NB;
|
||||||
|
pinpos = POSITION_VAL(pinmask);
|
||||||
|
|
||||||
|
/* Configure the port pins */
|
||||||
|
while ((pinmask >> pinpos) != 0u)
|
||||||
|
{
|
||||||
|
/* skip if bit is not set */
|
||||||
|
if ((pinmask & (1u << pinpos)) != 0u)
|
||||||
|
{
|
||||||
|
/* Get current io position */
|
||||||
|
if (pinpos < GPIO_PIN_MASK_POS)
|
||||||
|
{
|
||||||
|
currentpin = (0x00000101uL << pinpos);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
currentpin = ((0x00010001u << (pinpos - GPIO_PIN_MASK_POS)) | 0x04000000u);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Check Pin Mode and Pin Pull parameters */
|
||||||
|
assert_param(IS_LL_GPIO_MODE(GPIO_InitStruct->Mode));
|
||||||
|
assert_param(IS_LL_GPIO_PULL(GPIO_InitStruct->Pull));
|
||||||
|
|
||||||
|
/* Pin Mode configuration */
|
||||||
|
LL_GPIO_SetPinMode(GPIOx, currentpin, GPIO_InitStruct->Mode);
|
||||||
|
|
||||||
|
/* Pull-up Pull-down resistor configuration*/
|
||||||
|
LL_GPIO_SetPinPull(GPIOx, currentpin, GPIO_InitStruct->Pull);
|
||||||
|
|
||||||
|
if ((GPIO_InitStruct->Mode == LL_GPIO_MODE_OUTPUT) || (GPIO_InitStruct->Mode == LL_GPIO_MODE_ALTERNATE))
|
||||||
|
{
|
||||||
|
/* Check speed and Output mode parameters */
|
||||||
|
assert_param(IS_LL_GPIO_SPEED(GPIO_InitStruct->Speed));
|
||||||
|
assert_param(IS_LL_GPIO_OUTPUT_TYPE(GPIO_InitStruct->OutputType));
|
||||||
|
|
||||||
|
/* Speed mode configuration */
|
||||||
|
LL_GPIO_SetPinSpeed(GPIOx, currentpin, GPIO_InitStruct->Speed);
|
||||||
|
|
||||||
|
/* Output mode configuration*/
|
||||||
|
LL_GPIO_SetPinOutputType(GPIOx, currentpin, GPIO_InitStruct->OutputType);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pinpos++;
|
||||||
|
}
|
||||||
|
return (SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set each @ref LL_GPIO_InitTypeDef field to default value.
|
||||||
|
* @param GPIO_InitStruct: pointer to a @ref LL_GPIO_InitTypeDef structure
|
||||||
|
* whose fields will be set to default values.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
|
||||||
|
void LL_GPIO_StructInit(LL_GPIO_InitTypeDef *GPIO_InitStruct)
|
||||||
|
{
|
||||||
|
/* Reset GPIO init structure parameters values */
|
||||||
|
GPIO_InitStruct->Pin = LL_GPIO_PIN_ALL;
|
||||||
|
GPIO_InitStruct->Mode = LL_GPIO_MODE_FLOATING;
|
||||||
|
GPIO_InitStruct->Speed = LL_GPIO_SPEED_FREQ_LOW;
|
||||||
|
GPIO_InitStruct->OutputType = LL_GPIO_OUTPUT_OPENDRAIN;
|
||||||
|
GPIO_InitStruct->Pull = LL_GPIO_PULL_DOWN;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#endif /* defined (GPIOA) || defined (GPIOB) || defined (GPIOC) || defined (GPIOD) || defined (GPIOE) || defined (GPIOF) || defined (GPIOG) */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#endif /* USE_FULL_LL_DRIVER */
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
221
LLDrivers/src/stm32f1xx_ll_i2c.c
Normal file
221
LLDrivers/src/stm32f1xx_ll_i2c.c
Normal file
|
@ -0,0 +1,221 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file stm32f1xx_ll_i2c.c
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @brief I2C LL module driver.
|
||||||
|
******************************************************************************
|
||||||
|
* @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
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
#if defined(USE_FULL_LL_DRIVER)
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "stm32f1xx_ll_i2c.h"
|
||||||
|
#include "stm32f1xx_ll_bus.h"
|
||||||
|
#include "stm32f1xx_ll_rcc.h"
|
||||||
|
#ifdef USE_FULL_ASSERT
|
||||||
|
#include "stm32_assert.h"
|
||||||
|
#else
|
||||||
|
#define assert_param(expr) ((void)0U)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/** @addtogroup STM32F1xx_LL_Driver
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined (I2C1) || defined (I2C2)
|
||||||
|
|
||||||
|
/** @defgroup I2C_LL I2C
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Private types -------------------------------------------------------------*/
|
||||||
|
/* Private variables ---------------------------------------------------------*/
|
||||||
|
/* Private constants ---------------------------------------------------------*/
|
||||||
|
/* Private macros ------------------------------------------------------------*/
|
||||||
|
/** @addtogroup I2C_LL_Private_Macros
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define IS_LL_I2C_PERIPHERAL_MODE(__VALUE__) (((__VALUE__) == LL_I2C_MODE_I2C) || \
|
||||||
|
((__VALUE__) == LL_I2C_MODE_SMBUS_HOST) || \
|
||||||
|
((__VALUE__) == LL_I2C_MODE_SMBUS_DEVICE) || \
|
||||||
|
((__VALUE__) == LL_I2C_MODE_SMBUS_DEVICE_ARP))
|
||||||
|
|
||||||
|
#define IS_LL_I2C_CLOCK_SPEED(__VALUE__) (((__VALUE__) > 0U) && ((__VALUE__) <= LL_I2C_MAX_SPEED_FAST))
|
||||||
|
|
||||||
|
#define IS_LL_I2C_DUTY_CYCLE(__VALUE__) (((__VALUE__) == LL_I2C_DUTYCYCLE_2) || \
|
||||||
|
((__VALUE__) == LL_I2C_DUTYCYCLE_16_9))
|
||||||
|
|
||||||
|
#define IS_LL_I2C_OWN_ADDRESS1(__VALUE__) ((__VALUE__) <= 0x000003FFU)
|
||||||
|
|
||||||
|
#define IS_LL_I2C_TYPE_ACKNOWLEDGE(__VALUE__) (((__VALUE__) == LL_I2C_ACK) || \
|
||||||
|
((__VALUE__) == LL_I2C_NACK))
|
||||||
|
|
||||||
|
#define IS_LL_I2C_OWN_ADDRSIZE(__VALUE__) (((__VALUE__) == LL_I2C_OWNADDRESS1_7BIT) || \
|
||||||
|
((__VALUE__) == LL_I2C_OWNADDRESS1_10BIT))
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Private function prototypes -----------------------------------------------*/
|
||||||
|
|
||||||
|
/* Exported functions --------------------------------------------------------*/
|
||||||
|
/** @addtogroup I2C_LL_Exported_Functions
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @addtogroup I2C_LL_EF_Init
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief De-initialize the I2C registers to their default reset values.
|
||||||
|
* @param I2Cx I2C Instance.
|
||||||
|
* @retval An ErrorStatus enumeration value:
|
||||||
|
* - SUCCESS I2C registers are de-initialized
|
||||||
|
* - ERROR I2C registers are not de-initialized
|
||||||
|
*/
|
||||||
|
uint32_t LL_I2C_DeInit(I2C_TypeDef *I2Cx)
|
||||||
|
{
|
||||||
|
ErrorStatus status = SUCCESS;
|
||||||
|
|
||||||
|
/* Check the I2C Instance I2Cx */
|
||||||
|
assert_param(IS_I2C_ALL_INSTANCE(I2Cx));
|
||||||
|
|
||||||
|
if (I2Cx == I2C1)
|
||||||
|
{
|
||||||
|
/* Force reset of I2C clock */
|
||||||
|
LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_I2C1);
|
||||||
|
|
||||||
|
/* Release reset of I2C clock */
|
||||||
|
LL_APB1_GRP1_ReleaseReset(LL_APB1_GRP1_PERIPH_I2C1);
|
||||||
|
}
|
||||||
|
#if defined(I2C2)
|
||||||
|
else if (I2Cx == I2C2)
|
||||||
|
{
|
||||||
|
/* Force reset of I2C clock */
|
||||||
|
LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_I2C2);
|
||||||
|
|
||||||
|
/* Release reset of I2C clock */
|
||||||
|
LL_APB1_GRP1_ReleaseReset(LL_APB1_GRP1_PERIPH_I2C2);
|
||||||
|
|
||||||
|
}
|
||||||
|
#endif /* I2C2 */
|
||||||
|
else
|
||||||
|
{
|
||||||
|
status = ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Initialize the I2C registers according to the specified parameters in I2C_InitStruct.
|
||||||
|
* @param I2Cx I2C Instance.
|
||||||
|
* @param I2C_InitStruct pointer to a @ref LL_I2C_InitTypeDef structure.
|
||||||
|
* @retval An ErrorStatus enumeration value:
|
||||||
|
* - SUCCESS I2C registers are initialized
|
||||||
|
* - ERROR Not applicable
|
||||||
|
*/
|
||||||
|
uint32_t LL_I2C_Init(I2C_TypeDef *I2Cx, LL_I2C_InitTypeDef *I2C_InitStruct)
|
||||||
|
{
|
||||||
|
LL_RCC_ClocksTypeDef rcc_clocks;
|
||||||
|
|
||||||
|
/* Check the I2C Instance I2Cx */
|
||||||
|
assert_param(IS_I2C_ALL_INSTANCE(I2Cx));
|
||||||
|
|
||||||
|
/* Check the I2C parameters from I2C_InitStruct */
|
||||||
|
assert_param(IS_LL_I2C_PERIPHERAL_MODE(I2C_InitStruct->PeripheralMode));
|
||||||
|
assert_param(IS_LL_I2C_CLOCK_SPEED(I2C_InitStruct->ClockSpeed));
|
||||||
|
assert_param(IS_LL_I2C_DUTY_CYCLE(I2C_InitStruct->DutyCycle));
|
||||||
|
assert_param(IS_LL_I2C_OWN_ADDRESS1(I2C_InitStruct->OwnAddress1));
|
||||||
|
assert_param(IS_LL_I2C_TYPE_ACKNOWLEDGE(I2C_InitStruct->TypeAcknowledge));
|
||||||
|
assert_param(IS_LL_I2C_OWN_ADDRSIZE(I2C_InitStruct->OwnAddrSize));
|
||||||
|
|
||||||
|
/* Disable the selected I2Cx Peripheral */
|
||||||
|
LL_I2C_Disable(I2Cx);
|
||||||
|
|
||||||
|
/* Retrieve Clock frequencies */
|
||||||
|
LL_RCC_GetSystemClocksFreq(&rcc_clocks);
|
||||||
|
|
||||||
|
/*---------------------------- I2Cx SCL Clock Speed Configuration ------------
|
||||||
|
* Configure the SCL speed :
|
||||||
|
* - ClockSpeed: I2C_CR2_FREQ[5:0], I2C_TRISE_TRISE[5:0], I2C_CCR_FS,
|
||||||
|
* and I2C_CCR_CCR[11:0] bits
|
||||||
|
* - DutyCycle: I2C_CCR_DUTY[7:0] bits
|
||||||
|
*/
|
||||||
|
LL_I2C_ConfigSpeed(I2Cx, rcc_clocks.PCLK1_Frequency, I2C_InitStruct->ClockSpeed, I2C_InitStruct->DutyCycle);
|
||||||
|
|
||||||
|
/*---------------------------- I2Cx OAR1 Configuration -----------------------
|
||||||
|
* Disable, Configure and Enable I2Cx device own address 1 with parameters :
|
||||||
|
* - OwnAddress1: I2C_OAR1_ADD[9:8], I2C_OAR1_ADD[7:1] and I2C_OAR1_ADD0 bits
|
||||||
|
* - OwnAddrSize: I2C_OAR1_ADDMODE bit
|
||||||
|
*/
|
||||||
|
LL_I2C_SetOwnAddress1(I2Cx, I2C_InitStruct->OwnAddress1, I2C_InitStruct->OwnAddrSize);
|
||||||
|
|
||||||
|
/*---------------------------- I2Cx MODE Configuration -----------------------
|
||||||
|
* Configure I2Cx peripheral mode with parameter :
|
||||||
|
* - PeripheralMode: I2C_CR1_SMBUS, I2C_CR1_SMBTYPE and I2C_CR1_ENARP bits
|
||||||
|
*/
|
||||||
|
LL_I2C_SetMode(I2Cx, I2C_InitStruct->PeripheralMode);
|
||||||
|
|
||||||
|
/* Enable the selected I2Cx Peripheral */
|
||||||
|
LL_I2C_Enable(I2Cx);
|
||||||
|
|
||||||
|
/*---------------------------- I2Cx CR2 Configuration ------------------------
|
||||||
|
* Configure the ACKnowledge or Non ACKnowledge condition
|
||||||
|
* after the address receive match code or next received byte with parameter :
|
||||||
|
* - TypeAcknowledge: I2C_CR2_NACK bit
|
||||||
|
*/
|
||||||
|
LL_I2C_AcknowledgeNextData(I2Cx, I2C_InitStruct->TypeAcknowledge);
|
||||||
|
|
||||||
|
return SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set each @ref LL_I2C_InitTypeDef field to default value.
|
||||||
|
* @param I2C_InitStruct Pointer to a @ref LL_I2C_InitTypeDef structure.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
void LL_I2C_StructInit(LL_I2C_InitTypeDef *I2C_InitStruct)
|
||||||
|
{
|
||||||
|
/* Set I2C_InitStruct fields to default values */
|
||||||
|
I2C_InitStruct->PeripheralMode = LL_I2C_MODE_I2C;
|
||||||
|
I2C_InitStruct->ClockSpeed = 5000U;
|
||||||
|
I2C_InitStruct->DutyCycle = LL_I2C_DUTYCYCLE_2;
|
||||||
|
I2C_InitStruct->OwnAddress1 = 0U;
|
||||||
|
I2C_InitStruct->TypeAcknowledge = LL_I2C_NACK;
|
||||||
|
I2C_InitStruct->OwnAddrSize = LL_I2C_OWNADDRESS1_7BIT;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#endif /* I2C1 || I2C2 */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#endif /* USE_FULL_LL_DRIVER */
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
86
LLDrivers/src/stm32f1xx_ll_pwr.c
Normal file
86
LLDrivers/src/stm32f1xx_ll_pwr.c
Normal file
|
@ -0,0 +1,86 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file stm32f1xx_ll_pwr.c
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @brief PWR LL module driver.
|
||||||
|
******************************************************************************
|
||||||
|
* @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
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(USE_FULL_LL_DRIVER)
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "stm32f1xx_ll_pwr.h"
|
||||||
|
#include "stm32f1xx_ll_bus.h"
|
||||||
|
|
||||||
|
/** @addtogroup STM32F1xx_LL_Driver
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(PWR)
|
||||||
|
|
||||||
|
/** @defgroup PWR_LL PWR
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Private types -------------------------------------------------------------*/
|
||||||
|
/* Private variables ---------------------------------------------------------*/
|
||||||
|
/* Private constants ---------------------------------------------------------*/
|
||||||
|
/* Private macros ------------------------------------------------------------*/
|
||||||
|
/* Private function prototypes -----------------------------------------------*/
|
||||||
|
|
||||||
|
/* Exported functions --------------------------------------------------------*/
|
||||||
|
/** @addtogroup PWR_LL_Exported_Functions
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @addtogroup PWR_LL_EF_Init
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief De-initialize the PWR registers to their default reset values.
|
||||||
|
* @retval An ErrorStatus enumeration value:
|
||||||
|
* - SUCCESS: PWR registers are de-initialized
|
||||||
|
* - ERROR: not applicable
|
||||||
|
*/
|
||||||
|
ErrorStatus LL_PWR_DeInit(void)
|
||||||
|
{
|
||||||
|
/* Force reset of PWR clock */
|
||||||
|
LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_PWR);
|
||||||
|
|
||||||
|
/* Release reset of PWR clock */
|
||||||
|
LL_APB1_GRP1_ReleaseReset(LL_APB1_GRP1_PERIPH_PWR);
|
||||||
|
|
||||||
|
return SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
#endif /* defined(PWR) */
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#endif /* USE_FULL_LL_DRIVER */
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
544
LLDrivers/src/stm32f1xx_ll_rtc.c
Normal file
544
LLDrivers/src/stm32f1xx_ll_rtc.c
Normal file
|
@ -0,0 +1,544 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file stm32f1xx_ll_rtc.c
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @brief RTC LL module driver.
|
||||||
|
******************************************************************************
|
||||||
|
* @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
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(USE_FULL_LL_DRIVER)
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "stm32f1xx_ll_rtc.h"
|
||||||
|
#include "stm32f1xx_ll_cortex.h"
|
||||||
|
#ifdef USE_FULL_ASSERT
|
||||||
|
#include "stm32_assert.h"
|
||||||
|
#else
|
||||||
|
#define assert_param(expr) ((void)0U)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/** @addtogroup STM32F1xx_LL_Driver
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(RTC)
|
||||||
|
|
||||||
|
/** @addtogroup RTC_LL
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Private types -------------------------------------------------------------*/
|
||||||
|
/* Private variables ---------------------------------------------------------*/
|
||||||
|
/* Private constants ---------------------------------------------------------*/
|
||||||
|
/** @addtogroup RTC_LL_Private_Constants
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
/* Default values used for prescaler */
|
||||||
|
#define RTC_ASYNCH_PRESC_DEFAULT 0x00007FFFU
|
||||||
|
|
||||||
|
/* Values used for timeout */
|
||||||
|
#define RTC_INITMODE_TIMEOUT 1000U /* 1s when tick set to 1ms */
|
||||||
|
#define RTC_SYNCHRO_TIMEOUT 1000U /* 1s when tick set to 1ms */
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Private macros ------------------------------------------------------------*/
|
||||||
|
/** @addtogroup RTC_LL_Private_Macros
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define IS_LL_RTC_ASYNCH_PREDIV(__VALUE__) ((__VALUE__) <= 0xFFFFFU)
|
||||||
|
|
||||||
|
#define IS_LL_RTC_FORMAT(__VALUE__) (((__VALUE__) == LL_RTC_FORMAT_BIN) \
|
||||||
|
|| ((__VALUE__) == LL_RTC_FORMAT_BCD))
|
||||||
|
|
||||||
|
#define IS_LL_RTC_HOUR24(__HOUR__) ((__HOUR__) <= 23U)
|
||||||
|
#define IS_LL_RTC_MINUTES(__MINUTES__) ((__MINUTES__) <= 59U)
|
||||||
|
#define IS_LL_RTC_SECONDS(__SECONDS__) ((__SECONDS__) <= 59U)
|
||||||
|
#define IS_LL_RTC_CALIB_OUTPUT(__OUTPUT__) (((__OUTPUT__) == LL_RTC_CALIB_OUTPUT_NONE) || \
|
||||||
|
((__OUTPUT__) == LL_RTC_CALIB_OUTPUT_RTCCLOCK) || \
|
||||||
|
((__OUTPUT__) == LL_RTC_CALIB_OUTPUT_ALARM) || \
|
||||||
|
((__OUTPUT__) == LL_RTC_CALIB_OUTPUT_SECOND))
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
/* Private function prototypes -----------------------------------------------*/
|
||||||
|
/* Exported functions --------------------------------------------------------*/
|
||||||
|
/** @addtogroup RTC_LL_Exported_Functions
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @addtogroup RTC_LL_EF_Init
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief De-Initializes the RTC registers to their default reset values.
|
||||||
|
* @note This function doesn't reset the RTC Clock source and RTC Backup Data
|
||||||
|
* registers.
|
||||||
|
* @param RTCx RTC Instance
|
||||||
|
* @retval An ErrorStatus enumeration value:
|
||||||
|
* - SUCCESS: RTC registers are de-initialized
|
||||||
|
* - ERROR: RTC registers are not de-initialized
|
||||||
|
*/
|
||||||
|
ErrorStatus LL_RTC_DeInit(RTC_TypeDef *RTCx)
|
||||||
|
{
|
||||||
|
ErrorStatus status = ERROR;
|
||||||
|
|
||||||
|
/* Check the parameter */
|
||||||
|
assert_param(IS_RTC_ALL_INSTANCE(RTCx));
|
||||||
|
|
||||||
|
/* Disable the write protection for RTC registers */
|
||||||
|
LL_RTC_DisableWriteProtection(RTCx);
|
||||||
|
|
||||||
|
/* Set Initialization mode */
|
||||||
|
if (LL_RTC_EnterInitMode(RTCx) != ERROR)
|
||||||
|
{
|
||||||
|
LL_RTC_WriteReg(RTCx, CNTL, 0x0000);
|
||||||
|
LL_RTC_WriteReg(RTCx, CNTH, 0x0000);
|
||||||
|
LL_RTC_WriteReg(RTCx, PRLH, 0x0000);
|
||||||
|
LL_RTC_WriteReg(RTCx, PRLL, 0x8000);
|
||||||
|
LL_RTC_WriteReg(RTCx, CRH, 0x0000);
|
||||||
|
LL_RTC_WriteReg(RTCx, CRL, 0x0020);
|
||||||
|
|
||||||
|
/* Reset Tamper and alternate functions configuration register */
|
||||||
|
LL_RTC_WriteReg(BKP, RTCCR, 0x00000000U);
|
||||||
|
LL_RTC_WriteReg(BKP, CR, 0x00000000U);
|
||||||
|
LL_RTC_WriteReg(BKP, CSR, 0x00000000U);
|
||||||
|
|
||||||
|
/* Exit Initialization Mode */
|
||||||
|
if (LL_RTC_ExitInitMode(RTCx) != ERROR)
|
||||||
|
{
|
||||||
|
/* Wait till the RTC RSF flag is set */
|
||||||
|
status = LL_RTC_WaitForSynchro(RTCx);
|
||||||
|
|
||||||
|
/* Clear RSF Flag */
|
||||||
|
LL_RTC_ClearFlag_RS(RTCx);
|
||||||
|
|
||||||
|
/* Enable the write protection for RTC registers */
|
||||||
|
LL_RTC_EnableWriteProtection(RTCx);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Enable the write protection for RTC registers */
|
||||||
|
LL_RTC_EnableWriteProtection(RTCx);
|
||||||
|
}
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Initializes the RTC registers according to the specified parameters
|
||||||
|
* in RTC_InitStruct.
|
||||||
|
* @param RTCx RTC Instance
|
||||||
|
* @param RTC_InitStruct pointer to a @ref LL_RTC_InitTypeDef structure that contains
|
||||||
|
* the configuration information for the RTC peripheral.
|
||||||
|
* @note The RTC Prescaler register is write protected and can be written in
|
||||||
|
* initialization mode only.
|
||||||
|
* @note the user should call LL_RTC_StructInit() or the structure of Prescaler
|
||||||
|
* need to be initialized before RTC init()
|
||||||
|
* @retval An ErrorStatus enumeration value:
|
||||||
|
* - SUCCESS: RTC registers are initialized
|
||||||
|
* - ERROR: RTC registers are not initialized
|
||||||
|
*/
|
||||||
|
ErrorStatus LL_RTC_Init(RTC_TypeDef *RTCx, LL_RTC_InitTypeDef *RTC_InitStruct)
|
||||||
|
{
|
||||||
|
ErrorStatus status = ERROR;
|
||||||
|
|
||||||
|
/* Check the parameters */
|
||||||
|
assert_param(IS_RTC_ALL_INSTANCE(RTCx));
|
||||||
|
assert_param(IS_LL_RTC_ASYNCH_PREDIV(RTC_InitStruct->AsynchPrescaler));
|
||||||
|
assert_param(IS_LL_RTC_CALIB_OUTPUT(RTC_InitStruct->OutPutSource));
|
||||||
|
/* Waiting for synchro */
|
||||||
|
if (LL_RTC_WaitForSynchro(RTCx) != ERROR)
|
||||||
|
{
|
||||||
|
/* Set Initialization mode */
|
||||||
|
if (LL_RTC_EnterInitMode(RTCx) != ERROR)
|
||||||
|
{
|
||||||
|
/* Clear Flag Bits */
|
||||||
|
LL_RTC_ClearFlag_ALR(RTCx);
|
||||||
|
LL_RTC_ClearFlag_OW(RTCx);
|
||||||
|
LL_RTC_ClearFlag_SEC(RTCx);
|
||||||
|
|
||||||
|
if (RTC_InitStruct->OutPutSource != LL_RTC_CALIB_OUTPUT_NONE)
|
||||||
|
{
|
||||||
|
/* Disable the selected Tamper Pin */
|
||||||
|
LL_RTC_TAMPER_Disable(BKP);
|
||||||
|
}
|
||||||
|
/* Set the signal which will be routed to RTC Tamper Pin */
|
||||||
|
LL_RTC_SetOutputSource(BKP, RTC_InitStruct->OutPutSource);
|
||||||
|
|
||||||
|
/* Configure Synchronous and Asynchronous prescaler factor */
|
||||||
|
LL_RTC_SetAsynchPrescaler(RTCx, RTC_InitStruct->AsynchPrescaler);
|
||||||
|
|
||||||
|
/* Exit Initialization Mode */
|
||||||
|
LL_RTC_ExitInitMode(RTCx);
|
||||||
|
|
||||||
|
status = SUCCESS;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set each @ref LL_RTC_InitTypeDef field to default value.
|
||||||
|
* @param RTC_InitStruct pointer to a @ref LL_RTC_InitTypeDef structure which will be initialized.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
void LL_RTC_StructInit(LL_RTC_InitTypeDef *RTC_InitStruct)
|
||||||
|
{
|
||||||
|
/* Set RTC_InitStruct fields to default values */
|
||||||
|
RTC_InitStruct->AsynchPrescaler = RTC_ASYNCH_PRESC_DEFAULT;
|
||||||
|
RTC_InitStruct->OutPutSource = LL_RTC_CALIB_OUTPUT_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set the RTC current time.
|
||||||
|
* @param RTCx RTC Instance
|
||||||
|
* @param RTC_Format This parameter can be one of the following values:
|
||||||
|
* @arg @ref LL_RTC_FORMAT_BIN
|
||||||
|
* @arg @ref LL_RTC_FORMAT_BCD
|
||||||
|
* @param RTC_TimeStruct pointer to a RTC_TimeTypeDef structure that contains
|
||||||
|
* the time configuration information for the RTC.
|
||||||
|
* @note The user should call LL_RTC_TIME_StructInit() or the structure
|
||||||
|
* of time need to be initialized before time init()
|
||||||
|
* @retval An ErrorStatus enumeration value:
|
||||||
|
* - SUCCESS: RTC Time register is configured
|
||||||
|
* - ERROR: RTC Time register is not configured
|
||||||
|
*/
|
||||||
|
ErrorStatus LL_RTC_TIME_Init(RTC_TypeDef *RTCx, uint32_t RTC_Format, LL_RTC_TimeTypeDef *RTC_TimeStruct)
|
||||||
|
{
|
||||||
|
ErrorStatus status = ERROR;
|
||||||
|
uint32_t counter_time = 0U;
|
||||||
|
|
||||||
|
/* Check the parameters */
|
||||||
|
assert_param(IS_RTC_ALL_INSTANCE(RTCx));
|
||||||
|
assert_param(IS_LL_RTC_FORMAT(RTC_Format));
|
||||||
|
|
||||||
|
if (RTC_Format == LL_RTC_FORMAT_BIN)
|
||||||
|
{
|
||||||
|
assert_param(IS_LL_RTC_HOUR24(RTC_TimeStruct->Hours));
|
||||||
|
assert_param(IS_LL_RTC_MINUTES(RTC_TimeStruct->Minutes));
|
||||||
|
assert_param(IS_LL_RTC_SECONDS(RTC_TimeStruct->Seconds));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
assert_param(IS_LL_RTC_HOUR24(__LL_RTC_CONVERT_BCD2BIN(RTC_TimeStruct->Hours)));
|
||||||
|
assert_param(IS_LL_RTC_MINUTES(__LL_RTC_CONVERT_BCD2BIN(RTC_TimeStruct->Minutes)));
|
||||||
|
assert_param(IS_LL_RTC_SECONDS(__LL_RTC_CONVERT_BCD2BIN(RTC_TimeStruct->Seconds)));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Enter Initialization mode */
|
||||||
|
if (LL_RTC_EnterInitMode(RTCx) != ERROR)
|
||||||
|
{
|
||||||
|
/* Check the input parameters format */
|
||||||
|
if (RTC_Format != LL_RTC_FORMAT_BIN)
|
||||||
|
{
|
||||||
|
counter_time = (uint32_t)(((uint32_t)RTC_TimeStruct->Hours * 3600U) + \
|
||||||
|
((uint32_t)RTC_TimeStruct->Minutes * 60U) + \
|
||||||
|
((uint32_t)RTC_TimeStruct->Seconds));
|
||||||
|
LL_RTC_TIME_Set(RTCx, counter_time);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
counter_time = (((uint32_t)(__LL_RTC_CONVERT_BCD2BIN(RTC_TimeStruct->Hours)) * 3600U) + \
|
||||||
|
((uint32_t)(__LL_RTC_CONVERT_BCD2BIN(RTC_TimeStruct->Minutes)) * 60U) + \
|
||||||
|
((uint32_t)(__LL_RTC_CONVERT_BCD2BIN(RTC_TimeStruct->Seconds))));
|
||||||
|
LL_RTC_TIME_Set(RTCx, counter_time);
|
||||||
|
}
|
||||||
|
status = SUCCESS;
|
||||||
|
}
|
||||||
|
/* Exit Initialization mode */
|
||||||
|
LL_RTC_ExitInitMode(RTCx);
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set each @ref LL_RTC_TimeTypeDef field to default value (Time = 00h:00min:00sec).
|
||||||
|
* @param RTC_TimeStruct pointer to a @ref LL_RTC_TimeTypeDef structure which will be initialized.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
void LL_RTC_TIME_StructInit(LL_RTC_TimeTypeDef *RTC_TimeStruct)
|
||||||
|
{
|
||||||
|
/* Time = 00h:00min:00sec */
|
||||||
|
RTC_TimeStruct->Hours = 0U;
|
||||||
|
RTC_TimeStruct->Minutes = 0U;
|
||||||
|
RTC_TimeStruct->Seconds = 0U;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set the RTC Alarm.
|
||||||
|
* @param RTCx RTC Instance
|
||||||
|
* @param RTC_Format This parameter can be one of the following values:
|
||||||
|
* @arg @ref LL_RTC_FORMAT_BIN
|
||||||
|
* @arg @ref LL_RTC_FORMAT_BCD
|
||||||
|
* @param RTC_AlarmStruct pointer to a @ref LL_RTC_AlarmTypeDef structure that
|
||||||
|
* contains the alarm configuration parameters.
|
||||||
|
* @note the user should call LL_RTC_ALARM_StructInit() or the structure
|
||||||
|
* of Alarm need to be initialized before Alarm init()
|
||||||
|
* @retval An ErrorStatus enumeration value:
|
||||||
|
* - SUCCESS: ALARM registers are configured
|
||||||
|
* - ERROR: ALARM registers are not configured
|
||||||
|
*/
|
||||||
|
ErrorStatus LL_RTC_ALARM_Init(RTC_TypeDef *RTCx, uint32_t RTC_Format, LL_RTC_AlarmTypeDef *RTC_AlarmStruct)
|
||||||
|
{
|
||||||
|
ErrorStatus status = ERROR;
|
||||||
|
uint32_t counter_alarm = 0U;
|
||||||
|
/* Check the parameters */
|
||||||
|
assert_param(IS_RTC_ALL_INSTANCE(RTCx));
|
||||||
|
assert_param(IS_LL_RTC_FORMAT(RTC_Format));
|
||||||
|
|
||||||
|
if (RTC_Format == LL_RTC_FORMAT_BIN)
|
||||||
|
{
|
||||||
|
assert_param(IS_LL_RTC_HOUR24(RTC_AlarmStruct->AlarmTime.Hours));
|
||||||
|
assert_param(IS_LL_RTC_MINUTES(RTC_AlarmStruct->AlarmTime.Minutes));
|
||||||
|
assert_param(IS_LL_RTC_SECONDS(RTC_AlarmStruct->AlarmTime.Seconds));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
assert_param(IS_LL_RTC_HOUR24(__LL_RTC_CONVERT_BCD2BIN(RTC_AlarmStruct->AlarmTime.Hours)));
|
||||||
|
assert_param(IS_LL_RTC_MINUTES(__LL_RTC_CONVERT_BCD2BIN(RTC_AlarmStruct->AlarmTime.Minutes)));
|
||||||
|
assert_param(IS_LL_RTC_SECONDS(__LL_RTC_CONVERT_BCD2BIN(RTC_AlarmStruct->AlarmTime.Seconds)));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Enter Initialization mode */
|
||||||
|
if (LL_RTC_EnterInitMode(RTCx) != ERROR)
|
||||||
|
{
|
||||||
|
/* Check the input parameters format */
|
||||||
|
if (RTC_Format != LL_RTC_FORMAT_BIN)
|
||||||
|
{
|
||||||
|
counter_alarm = (uint32_t)(((uint32_t)RTC_AlarmStruct->AlarmTime.Hours * 3600U) + \
|
||||||
|
((uint32_t)RTC_AlarmStruct->AlarmTime.Minutes * 60U) + \
|
||||||
|
((uint32_t)RTC_AlarmStruct->AlarmTime.Seconds));
|
||||||
|
LL_RTC_ALARM_Set(RTCx, counter_alarm);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
counter_alarm = (((uint32_t)(__LL_RTC_CONVERT_BCD2BIN(RTC_AlarmStruct->AlarmTime.Hours)) * 3600U) + \
|
||||||
|
((uint32_t)(__LL_RTC_CONVERT_BCD2BIN(RTC_AlarmStruct->AlarmTime.Minutes)) * 60U) + \
|
||||||
|
((uint32_t)(__LL_RTC_CONVERT_BCD2BIN(RTC_AlarmStruct->AlarmTime.Seconds))));
|
||||||
|
LL_RTC_ALARM_Set(RTCx, counter_alarm);
|
||||||
|
}
|
||||||
|
status = SUCCESS;
|
||||||
|
}
|
||||||
|
/* Exit Initialization mode */
|
||||||
|
LL_RTC_ExitInitMode(RTCx);
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set each @ref LL_RTC_AlarmTypeDef of ALARM field to default value (Time = 00h:00mn:00sec /
|
||||||
|
* Day = 1st day of the month/Mask = all fields are masked).
|
||||||
|
* @param RTC_AlarmStruct pointer to a @ref LL_RTC_AlarmTypeDef structure which will be initialized.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
void LL_RTC_ALARM_StructInit(LL_RTC_AlarmTypeDef *RTC_AlarmStruct)
|
||||||
|
{
|
||||||
|
/* Alarm Time Settings : Time = 00h:00mn:00sec */
|
||||||
|
RTC_AlarmStruct->AlarmTime.Hours = 0U;
|
||||||
|
RTC_AlarmStruct->AlarmTime.Minutes = 0U;
|
||||||
|
RTC_AlarmStruct->AlarmTime.Seconds = 0U;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Enters the RTC Initialization mode.
|
||||||
|
* @param RTCx RTC Instance
|
||||||
|
* @retval An ErrorStatus enumeration value:
|
||||||
|
* - SUCCESS: RTC is in Init mode
|
||||||
|
* - ERROR: RTC is not in Init mode
|
||||||
|
*/
|
||||||
|
ErrorStatus LL_RTC_EnterInitMode(RTC_TypeDef *RTCx)
|
||||||
|
{
|
||||||
|
__IO uint32_t timeout = RTC_INITMODE_TIMEOUT;
|
||||||
|
ErrorStatus status = SUCCESS;
|
||||||
|
uint32_t tmp = 0U;
|
||||||
|
|
||||||
|
/* Check the parameter */
|
||||||
|
assert_param(IS_RTC_ALL_INSTANCE(RTCx));
|
||||||
|
|
||||||
|
/* Wait till RTC is in INIT state and if Time out is reached exit */
|
||||||
|
tmp = LL_RTC_IsActiveFlag_RTOF(RTCx);
|
||||||
|
while ((timeout != 0U) && (tmp != 1U))
|
||||||
|
{
|
||||||
|
if (LL_SYSTICK_IsActiveCounterFlag() == 1U)
|
||||||
|
{
|
||||||
|
timeout --;
|
||||||
|
}
|
||||||
|
tmp = LL_RTC_IsActiveFlag_RTOF(RTCx);
|
||||||
|
if (timeout == 0U)
|
||||||
|
{
|
||||||
|
status = ERROR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Disable the write protection for RTC registers */
|
||||||
|
LL_RTC_DisableWriteProtection(RTCx);
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Exit the RTC Initialization mode.
|
||||||
|
* @note When the initialization sequence is complete, the calendar restarts
|
||||||
|
* counting after 4 RTCCLK cycles.
|
||||||
|
* @param RTCx RTC Instance
|
||||||
|
* @retval An ErrorStatus enumeration value:
|
||||||
|
* - SUCCESS: RTC exited from in Init mode
|
||||||
|
* - ERROR: Not applicable
|
||||||
|
*/
|
||||||
|
ErrorStatus LL_RTC_ExitInitMode(RTC_TypeDef *RTCx)
|
||||||
|
{
|
||||||
|
__IO uint32_t timeout = RTC_INITMODE_TIMEOUT;
|
||||||
|
ErrorStatus status = SUCCESS;
|
||||||
|
uint32_t tmp = 0U;
|
||||||
|
|
||||||
|
/* Check the parameter */
|
||||||
|
assert_param(IS_RTC_ALL_INSTANCE(RTCx));
|
||||||
|
|
||||||
|
/* Disable initialization mode */
|
||||||
|
LL_RTC_EnableWriteProtection(RTCx);
|
||||||
|
|
||||||
|
/* Wait till RTC is in INIT state and if Time out is reached exit */
|
||||||
|
tmp = LL_RTC_IsActiveFlag_RTOF(RTCx);
|
||||||
|
while ((timeout != 0U) && (tmp != 1U))
|
||||||
|
{
|
||||||
|
if (LL_SYSTICK_IsActiveCounterFlag() == 1U)
|
||||||
|
{
|
||||||
|
timeout --;
|
||||||
|
}
|
||||||
|
tmp = LL_RTC_IsActiveFlag_RTOF(RTCx);
|
||||||
|
if (timeout == 0U)
|
||||||
|
{
|
||||||
|
status = ERROR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set the Time Counter
|
||||||
|
* @param RTCx RTC Instance
|
||||||
|
* @param TimeCounter this value can be from 0 to 0xFFFFFFFF
|
||||||
|
* @retval An ErrorStatus enumeration value:
|
||||||
|
* - SUCCESS: RTC Counter register configured
|
||||||
|
* - ERROR: Not applicable
|
||||||
|
*/
|
||||||
|
ErrorStatus LL_RTC_TIME_SetCounter(RTC_TypeDef *RTCx, uint32_t TimeCounter)
|
||||||
|
{
|
||||||
|
ErrorStatus status = ERROR;
|
||||||
|
/* Check the parameter */
|
||||||
|
assert_param(IS_RTC_ALL_INSTANCE(RTCx));
|
||||||
|
|
||||||
|
/* Enter Initialization mode */
|
||||||
|
if (LL_RTC_EnterInitMode(RTCx) != ERROR)
|
||||||
|
{
|
||||||
|
LL_RTC_TIME_Set(RTCx, TimeCounter);
|
||||||
|
status = SUCCESS;
|
||||||
|
}
|
||||||
|
/* Exit Initialization mode */
|
||||||
|
LL_RTC_ExitInitMode(RTCx);
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set Alarm Counter.
|
||||||
|
* @param RTCx RTC Instance
|
||||||
|
* @param AlarmCounter this value can be from 0 to 0xFFFFFFFF
|
||||||
|
* @retval An ErrorStatus enumeration value:
|
||||||
|
* - SUCCESS: RTC exited from in Init mode
|
||||||
|
* - ERROR: Not applicable
|
||||||
|
*/
|
||||||
|
ErrorStatus LL_RTC_ALARM_SetCounter(RTC_TypeDef *RTCx, uint32_t AlarmCounter)
|
||||||
|
{
|
||||||
|
ErrorStatus status = ERROR;
|
||||||
|
/* Check the parameter */
|
||||||
|
assert_param(IS_RTC_ALL_INSTANCE(RTCx));
|
||||||
|
|
||||||
|
/* Enter Initialization mode */
|
||||||
|
if (LL_RTC_EnterInitMode(RTCx) != ERROR)
|
||||||
|
{
|
||||||
|
LL_RTC_ALARM_Set(RTCx, AlarmCounter);
|
||||||
|
status = SUCCESS;
|
||||||
|
}
|
||||||
|
/* Exit Initialization mode */
|
||||||
|
LL_RTC_ExitInitMode(RTCx);
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Waits until the RTC registers are synchronized with RTC APB clock.
|
||||||
|
* @note The RTC Resynchronization mode is write protected, use the
|
||||||
|
* @ref LL_RTC_DisableWriteProtection before calling this function.
|
||||||
|
* @param RTCx RTC Instance
|
||||||
|
* @retval An ErrorStatus enumeration value:
|
||||||
|
* - SUCCESS: RTC registers are synchronised
|
||||||
|
* - ERROR: RTC registers are not synchronised
|
||||||
|
*/
|
||||||
|
ErrorStatus LL_RTC_WaitForSynchro(RTC_TypeDef *RTCx)
|
||||||
|
{
|
||||||
|
__IO uint32_t timeout = RTC_SYNCHRO_TIMEOUT;
|
||||||
|
ErrorStatus status = SUCCESS;
|
||||||
|
uint32_t tmp = 0U;
|
||||||
|
|
||||||
|
/* Check the parameter */
|
||||||
|
assert_param(IS_RTC_ALL_INSTANCE(RTCx));
|
||||||
|
|
||||||
|
/* Clear RSF flag */
|
||||||
|
LL_RTC_ClearFlag_RS(RTCx);
|
||||||
|
|
||||||
|
/* Wait the registers to be synchronised */
|
||||||
|
tmp = LL_RTC_IsActiveFlag_RS(RTCx);
|
||||||
|
while ((timeout != 0U) && (tmp != 0U))
|
||||||
|
{
|
||||||
|
if (LL_SYSTICK_IsActiveCounterFlag() == 1U)
|
||||||
|
{
|
||||||
|
timeout--;
|
||||||
|
}
|
||||||
|
tmp = LL_RTC_IsActiveFlag_RS(RTCx);
|
||||||
|
if (timeout == 0U)
|
||||||
|
{
|
||||||
|
status = ERROR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return (status);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#endif /* defined(RTC) */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#endif /* USE_FULL_LL_DRIVER */
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
1521
LLDrivers/src/stm32f1xx_ll_sdmmc.c
Normal file
1521
LLDrivers/src/stm32f1xx_ll_sdmmc.c
Normal file
File diff suppressed because it is too large
Load diff
530
LLDrivers/src/stm32f1xx_ll_spi.c
Normal file
530
LLDrivers/src/stm32f1xx_ll_spi.c
Normal file
|
@ -0,0 +1,530 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file stm32f1xx_ll_spi.c
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @brief SPI LL module driver.
|
||||||
|
******************************************************************************
|
||||||
|
* @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
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
#if defined(USE_FULL_LL_DRIVER)
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "stm32f1xx_ll_spi.h"
|
||||||
|
#include "stm32f1xx_ll_bus.h"
|
||||||
|
#include "stm32f1xx_ll_rcc.h"
|
||||||
|
|
||||||
|
#ifdef USE_FULL_ASSERT
|
||||||
|
#include "stm32_assert.h"
|
||||||
|
#else
|
||||||
|
#define assert_param(expr) ((void)0U)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/** @addtogroup STM32F1xx_LL_Driver
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined (SPI1) || defined (SPI2) || defined (SPI3)
|
||||||
|
|
||||||
|
/** @addtogroup SPI_LL
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Private types -------------------------------------------------------------*/
|
||||||
|
/* Private variables ---------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* Private constants ---------------------------------------------------------*/
|
||||||
|
/** @defgroup SPI_LL_Private_Constants SPI Private Constants
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
/* SPI registers Masks */
|
||||||
|
#define SPI_CR1_CLEAR_MASK (SPI_CR1_CPHA | SPI_CR1_CPOL | SPI_CR1_MSTR | \
|
||||||
|
SPI_CR1_BR | SPI_CR1_LSBFIRST | SPI_CR1_SSI | \
|
||||||
|
SPI_CR1_SSM | SPI_CR1_RXONLY | SPI_CR1_DFF | \
|
||||||
|
SPI_CR1_CRCNEXT | SPI_CR1_CRCEN | SPI_CR1_BIDIOE | \
|
||||||
|
SPI_CR1_BIDIMODE)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Private macros ------------------------------------------------------------*/
|
||||||
|
/** @defgroup SPI_LL_Private_Macros SPI Private Macros
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define IS_LL_SPI_TRANSFER_DIRECTION(__VALUE__) (((__VALUE__) == LL_SPI_FULL_DUPLEX) \
|
||||||
|
|| ((__VALUE__) == LL_SPI_SIMPLEX_RX) \
|
||||||
|
|| ((__VALUE__) == LL_SPI_HALF_DUPLEX_RX) \
|
||||||
|
|| ((__VALUE__) == LL_SPI_HALF_DUPLEX_TX))
|
||||||
|
|
||||||
|
#define IS_LL_SPI_MODE(__VALUE__) (((__VALUE__) == LL_SPI_MODE_MASTER) \
|
||||||
|
|| ((__VALUE__) == LL_SPI_MODE_SLAVE))
|
||||||
|
|
||||||
|
#define IS_LL_SPI_DATAWIDTH(__VALUE__) (((__VALUE__) == LL_SPI_DATAWIDTH_8BIT) \
|
||||||
|
|| ((__VALUE__) == LL_SPI_DATAWIDTH_16BIT))
|
||||||
|
|
||||||
|
#define IS_LL_SPI_POLARITY(__VALUE__) (((__VALUE__) == LL_SPI_POLARITY_LOW) \
|
||||||
|
|| ((__VALUE__) == LL_SPI_POLARITY_HIGH))
|
||||||
|
|
||||||
|
#define IS_LL_SPI_PHASE(__VALUE__) (((__VALUE__) == LL_SPI_PHASE_1EDGE) \
|
||||||
|
|| ((__VALUE__) == LL_SPI_PHASE_2EDGE))
|
||||||
|
|
||||||
|
#define IS_LL_SPI_NSS(__VALUE__) (((__VALUE__) == LL_SPI_NSS_SOFT) \
|
||||||
|
|| ((__VALUE__) == LL_SPI_NSS_HARD_INPUT) \
|
||||||
|
|| ((__VALUE__) == LL_SPI_NSS_HARD_OUTPUT))
|
||||||
|
|
||||||
|
#define IS_LL_SPI_BAUDRATE(__VALUE__) (((__VALUE__) == LL_SPI_BAUDRATEPRESCALER_DIV2) \
|
||||||
|
|| ((__VALUE__) == LL_SPI_BAUDRATEPRESCALER_DIV4) \
|
||||||
|
|| ((__VALUE__) == LL_SPI_BAUDRATEPRESCALER_DIV8) \
|
||||||
|
|| ((__VALUE__) == LL_SPI_BAUDRATEPRESCALER_DIV16) \
|
||||||
|
|| ((__VALUE__) == LL_SPI_BAUDRATEPRESCALER_DIV32) \
|
||||||
|
|| ((__VALUE__) == LL_SPI_BAUDRATEPRESCALER_DIV64) \
|
||||||
|
|| ((__VALUE__) == LL_SPI_BAUDRATEPRESCALER_DIV128) \
|
||||||
|
|| ((__VALUE__) == LL_SPI_BAUDRATEPRESCALER_DIV256))
|
||||||
|
|
||||||
|
#define IS_LL_SPI_BITORDER(__VALUE__) (((__VALUE__) == LL_SPI_LSB_FIRST) \
|
||||||
|
|| ((__VALUE__) == LL_SPI_MSB_FIRST))
|
||||||
|
|
||||||
|
#define IS_LL_SPI_CRCCALCULATION(__VALUE__) (((__VALUE__) == LL_SPI_CRCCALCULATION_ENABLE) \
|
||||||
|
|| ((__VALUE__) == LL_SPI_CRCCALCULATION_DISABLE))
|
||||||
|
|
||||||
|
#define IS_LL_SPI_CRC_POLYNOMIAL(__VALUE__) ((__VALUE__) >= 0x1U)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Private function prototypes -----------------------------------------------*/
|
||||||
|
|
||||||
|
/* Exported functions --------------------------------------------------------*/
|
||||||
|
/** @addtogroup SPI_LL_Exported_Functions
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @addtogroup SPI_LL_EF_Init
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief De-initialize the SPI registers to their default reset values.
|
||||||
|
* @param SPIx SPI Instance
|
||||||
|
* @retval An ErrorStatus enumeration value:
|
||||||
|
* - SUCCESS: SPI registers are de-initialized
|
||||||
|
* - ERROR: SPI registers are not de-initialized
|
||||||
|
*/
|
||||||
|
ErrorStatus LL_SPI_DeInit(SPI_TypeDef *SPIx)
|
||||||
|
{
|
||||||
|
ErrorStatus status = ERROR;
|
||||||
|
|
||||||
|
/* Check the parameters */
|
||||||
|
assert_param(IS_SPI_ALL_INSTANCE(SPIx));
|
||||||
|
|
||||||
|
#if defined(SPI1)
|
||||||
|
if (SPIx == SPI1)
|
||||||
|
{
|
||||||
|
/* Force reset of SPI clock */
|
||||||
|
LL_APB2_GRP1_ForceReset(LL_APB2_GRP1_PERIPH_SPI1);
|
||||||
|
|
||||||
|
/* Release reset of SPI clock */
|
||||||
|
LL_APB2_GRP1_ReleaseReset(LL_APB2_GRP1_PERIPH_SPI1);
|
||||||
|
|
||||||
|
status = SUCCESS;
|
||||||
|
}
|
||||||
|
#endif /* SPI1 */
|
||||||
|
#if defined(SPI2)
|
||||||
|
if (SPIx == SPI2)
|
||||||
|
{
|
||||||
|
/* Force reset of SPI clock */
|
||||||
|
LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_SPI2);
|
||||||
|
|
||||||
|
/* Release reset of SPI clock */
|
||||||
|
LL_APB1_GRP1_ReleaseReset(LL_APB1_GRP1_PERIPH_SPI2);
|
||||||
|
|
||||||
|
status = SUCCESS;
|
||||||
|
}
|
||||||
|
#endif /* SPI2 */
|
||||||
|
#if defined(SPI3)
|
||||||
|
if (SPIx == SPI3)
|
||||||
|
{
|
||||||
|
/* Force reset of SPI clock */
|
||||||
|
LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_SPI3);
|
||||||
|
|
||||||
|
/* Release reset of SPI clock */
|
||||||
|
LL_APB1_GRP1_ReleaseReset(LL_APB1_GRP1_PERIPH_SPI3);
|
||||||
|
|
||||||
|
status = SUCCESS;
|
||||||
|
}
|
||||||
|
#endif /* SPI3 */
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Initialize the SPI registers according to the specified parameters in SPI_InitStruct.
|
||||||
|
* @note As some bits in SPI configuration registers can only be written when the SPI is disabled (SPI_CR1_SPE bit =0),
|
||||||
|
* SPI peripheral should be in disabled state prior calling this function. Otherwise, ERROR result will be returned.
|
||||||
|
* @param SPIx SPI Instance
|
||||||
|
* @param SPI_InitStruct pointer to a @ref LL_SPI_InitTypeDef structure
|
||||||
|
* @retval An ErrorStatus enumeration value. (Return always SUCCESS)
|
||||||
|
*/
|
||||||
|
ErrorStatus LL_SPI_Init(SPI_TypeDef *SPIx, LL_SPI_InitTypeDef *SPI_InitStruct)
|
||||||
|
{
|
||||||
|
ErrorStatus status = ERROR;
|
||||||
|
|
||||||
|
/* Check the SPI Instance SPIx*/
|
||||||
|
assert_param(IS_SPI_ALL_INSTANCE(SPIx));
|
||||||
|
|
||||||
|
/* Check the SPI parameters from SPI_InitStruct*/
|
||||||
|
assert_param(IS_LL_SPI_TRANSFER_DIRECTION(SPI_InitStruct->TransferDirection));
|
||||||
|
assert_param(IS_LL_SPI_MODE(SPI_InitStruct->Mode));
|
||||||
|
assert_param(IS_LL_SPI_DATAWIDTH(SPI_InitStruct->DataWidth));
|
||||||
|
assert_param(IS_LL_SPI_POLARITY(SPI_InitStruct->ClockPolarity));
|
||||||
|
assert_param(IS_LL_SPI_PHASE(SPI_InitStruct->ClockPhase));
|
||||||
|
assert_param(IS_LL_SPI_NSS(SPI_InitStruct->NSS));
|
||||||
|
assert_param(IS_LL_SPI_BAUDRATE(SPI_InitStruct->BaudRate));
|
||||||
|
assert_param(IS_LL_SPI_BITORDER(SPI_InitStruct->BitOrder));
|
||||||
|
assert_param(IS_LL_SPI_CRCCALCULATION(SPI_InitStruct->CRCCalculation));
|
||||||
|
|
||||||
|
if (LL_SPI_IsEnabled(SPIx) == 0x00000000U)
|
||||||
|
{
|
||||||
|
/*---------------------------- SPIx CR1 Configuration ------------------------
|
||||||
|
* Configure SPIx CR1 with parameters:
|
||||||
|
* - TransferDirection: SPI_CR1_BIDIMODE, SPI_CR1_BIDIOE and SPI_CR1_RXONLY bits
|
||||||
|
* - Master/Slave Mode: SPI_CR1_MSTR bit
|
||||||
|
* - DataWidth: SPI_CR1_DFF bit
|
||||||
|
* - ClockPolarity: SPI_CR1_CPOL bit
|
||||||
|
* - ClockPhase: SPI_CR1_CPHA bit
|
||||||
|
* - NSS management: SPI_CR1_SSM bit
|
||||||
|
* - BaudRate prescaler: SPI_CR1_BR[2:0] bits
|
||||||
|
* - BitOrder: SPI_CR1_LSBFIRST bit
|
||||||
|
* - CRCCalculation: SPI_CR1_CRCEN bit
|
||||||
|
*/
|
||||||
|
MODIFY_REG(SPIx->CR1,
|
||||||
|
SPI_CR1_CLEAR_MASK,
|
||||||
|
SPI_InitStruct->TransferDirection | SPI_InitStruct->Mode | SPI_InitStruct->DataWidth |
|
||||||
|
SPI_InitStruct->ClockPolarity | SPI_InitStruct->ClockPhase |
|
||||||
|
SPI_InitStruct->NSS | SPI_InitStruct->BaudRate |
|
||||||
|
SPI_InitStruct->BitOrder | SPI_InitStruct->CRCCalculation);
|
||||||
|
|
||||||
|
/*---------------------------- SPIx CR2 Configuration ------------------------
|
||||||
|
* Configure SPIx CR2 with parameters:
|
||||||
|
* - NSS management: SSOE bit
|
||||||
|
*/
|
||||||
|
MODIFY_REG(SPIx->CR2, SPI_CR2_SSOE, (SPI_InitStruct->NSS >> 16U));
|
||||||
|
|
||||||
|
/*---------------------------- SPIx CRCPR Configuration ----------------------
|
||||||
|
* Configure SPIx CRCPR with parameters:
|
||||||
|
* - CRCPoly: CRCPOLY[15:0] bits
|
||||||
|
*/
|
||||||
|
if (SPI_InitStruct->CRCCalculation == LL_SPI_CRCCALCULATION_ENABLE)
|
||||||
|
{
|
||||||
|
assert_param(IS_LL_SPI_CRC_POLYNOMIAL(SPI_InitStruct->CRCPoly));
|
||||||
|
LL_SPI_SetCRCPolynomial(SPIx, SPI_InitStruct->CRCPoly);
|
||||||
|
}
|
||||||
|
status = SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined (SPI_I2S_SUPPORT)
|
||||||
|
/* Activate the SPI mode (Reset I2SMOD bit in I2SCFGR register) */
|
||||||
|
CLEAR_BIT(SPIx->I2SCFGR, SPI_I2SCFGR_I2SMOD);
|
||||||
|
#endif /* SPI_I2S_SUPPORT */
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set each @ref LL_SPI_InitTypeDef field to default value.
|
||||||
|
* @param SPI_InitStruct pointer to a @ref LL_SPI_InitTypeDef structure
|
||||||
|
* whose fields will be set to default values.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
void LL_SPI_StructInit(LL_SPI_InitTypeDef *SPI_InitStruct)
|
||||||
|
{
|
||||||
|
/* Set SPI_InitStruct fields to default values */
|
||||||
|
SPI_InitStruct->TransferDirection = LL_SPI_FULL_DUPLEX;
|
||||||
|
SPI_InitStruct->Mode = LL_SPI_MODE_SLAVE;
|
||||||
|
SPI_InitStruct->DataWidth = LL_SPI_DATAWIDTH_8BIT;
|
||||||
|
SPI_InitStruct->ClockPolarity = LL_SPI_POLARITY_LOW;
|
||||||
|
SPI_InitStruct->ClockPhase = LL_SPI_PHASE_1EDGE;
|
||||||
|
SPI_InitStruct->NSS = LL_SPI_NSS_HARD_INPUT;
|
||||||
|
SPI_InitStruct->BaudRate = LL_SPI_BAUDRATEPRESCALER_DIV2;
|
||||||
|
SPI_InitStruct->BitOrder = LL_SPI_MSB_FIRST;
|
||||||
|
SPI_InitStruct->CRCCalculation = LL_SPI_CRCCALCULATION_DISABLE;
|
||||||
|
SPI_InitStruct->CRCPoly = 7U;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(SPI_I2S_SUPPORT)
|
||||||
|
/** @addtogroup I2S_LL
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Private types -------------------------------------------------------------*/
|
||||||
|
/* Private variables ---------------------------------------------------------*/
|
||||||
|
/* Private constants ---------------------------------------------------------*/
|
||||||
|
/** @defgroup I2S_LL_Private_Constants I2S Private Constants
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
/* I2S registers Masks */
|
||||||
|
#define I2S_I2SCFGR_CLEAR_MASK (SPI_I2SCFGR_CHLEN | SPI_I2SCFGR_DATLEN | \
|
||||||
|
SPI_I2SCFGR_CKPOL | SPI_I2SCFGR_I2SSTD | \
|
||||||
|
SPI_I2SCFGR_I2SCFG | SPI_I2SCFGR_I2SMOD )
|
||||||
|
|
||||||
|
#define I2S_I2SPR_CLEAR_MASK 0x0002U
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
/* Private macros ------------------------------------------------------------*/
|
||||||
|
/** @defgroup I2S_LL_Private_Macros I2S Private Macros
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define IS_LL_I2S_DATAFORMAT(__VALUE__) (((__VALUE__) == LL_I2S_DATAFORMAT_16B) \
|
||||||
|
|| ((__VALUE__) == LL_I2S_DATAFORMAT_16B_EXTENDED) \
|
||||||
|
|| ((__VALUE__) == LL_I2S_DATAFORMAT_24B) \
|
||||||
|
|| ((__VALUE__) == LL_I2S_DATAFORMAT_32B))
|
||||||
|
|
||||||
|
#define IS_LL_I2S_CPOL(__VALUE__) (((__VALUE__) == LL_I2S_POLARITY_LOW) \
|
||||||
|
|| ((__VALUE__) == LL_I2S_POLARITY_HIGH))
|
||||||
|
|
||||||
|
#define IS_LL_I2S_STANDARD(__VALUE__) (((__VALUE__) == LL_I2S_STANDARD_PHILIPS) \
|
||||||
|
|| ((__VALUE__) == LL_I2S_STANDARD_MSB) \
|
||||||
|
|| ((__VALUE__) == LL_I2S_STANDARD_LSB) \
|
||||||
|
|| ((__VALUE__) == LL_I2S_STANDARD_PCM_SHORT) \
|
||||||
|
|| ((__VALUE__) == LL_I2S_STANDARD_PCM_LONG))
|
||||||
|
|
||||||
|
#define IS_LL_I2S_MODE(__VALUE__) (((__VALUE__) == LL_I2S_MODE_SLAVE_TX) \
|
||||||
|
|| ((__VALUE__) == LL_I2S_MODE_SLAVE_RX) \
|
||||||
|
|| ((__VALUE__) == LL_I2S_MODE_MASTER_TX) \
|
||||||
|
|| ((__VALUE__) == LL_I2S_MODE_MASTER_RX))
|
||||||
|
|
||||||
|
#define IS_LL_I2S_MCLK_OUTPUT(__VALUE__) (((__VALUE__) == LL_I2S_MCLK_OUTPUT_ENABLE) \
|
||||||
|
|| ((__VALUE__) == LL_I2S_MCLK_OUTPUT_DISABLE))
|
||||||
|
|
||||||
|
#define IS_LL_I2S_AUDIO_FREQ(__VALUE__) ((((__VALUE__) >= LL_I2S_AUDIOFREQ_8K) \
|
||||||
|
&& ((__VALUE__) <= LL_I2S_AUDIOFREQ_192K)) \
|
||||||
|
|| ((__VALUE__) == LL_I2S_AUDIOFREQ_DEFAULT))
|
||||||
|
|
||||||
|
#define IS_LL_I2S_PRESCALER_LINEAR(__VALUE__) ((__VALUE__) >= 0x2U)
|
||||||
|
|
||||||
|
#define IS_LL_I2S_PRESCALER_PARITY(__VALUE__) (((__VALUE__) == LL_I2S_PRESCALER_PARITY_EVEN) \
|
||||||
|
|| ((__VALUE__) == LL_I2S_PRESCALER_PARITY_ODD))
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Private function prototypes -----------------------------------------------*/
|
||||||
|
|
||||||
|
/* Exported functions --------------------------------------------------------*/
|
||||||
|
/** @addtogroup I2S_LL_Exported_Functions
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @addtogroup I2S_LL_EF_Init
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief De-initialize the SPI/I2S registers to their default reset values.
|
||||||
|
* @param SPIx SPI Instance
|
||||||
|
* @retval An ErrorStatus enumeration value:
|
||||||
|
* - SUCCESS: SPI registers are de-initialized
|
||||||
|
* - ERROR: SPI registers are not de-initialized
|
||||||
|
*/
|
||||||
|
ErrorStatus LL_I2S_DeInit(SPI_TypeDef *SPIx)
|
||||||
|
{
|
||||||
|
return LL_SPI_DeInit(SPIx);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Initializes the SPI/I2S registers according to the specified parameters in I2S_InitStruct.
|
||||||
|
* @note As some bits in SPI configuration registers can only be written when the SPI is disabled (SPI_CR1_SPE bit =0),
|
||||||
|
* SPI peripheral should be in disabled state prior calling this function. Otherwise, ERROR result will be returned.
|
||||||
|
* @param SPIx SPI Instance
|
||||||
|
* @param I2S_InitStruct pointer to a @ref LL_I2S_InitTypeDef structure
|
||||||
|
* @retval An ErrorStatus enumeration value:
|
||||||
|
* - SUCCESS: SPI registers are Initialized
|
||||||
|
* - ERROR: SPI registers are not Initialized
|
||||||
|
*/
|
||||||
|
ErrorStatus LL_I2S_Init(SPI_TypeDef *SPIx, LL_I2S_InitTypeDef *I2S_InitStruct)
|
||||||
|
{
|
||||||
|
uint32_t i2sdiv = 2U;
|
||||||
|
uint32_t i2sodd = 0U;
|
||||||
|
uint32_t packetlength = 1U;
|
||||||
|
uint32_t tmp;
|
||||||
|
LL_RCC_ClocksTypeDef rcc_clocks;
|
||||||
|
uint32_t sourceclock;
|
||||||
|
ErrorStatus status = ERROR;
|
||||||
|
|
||||||
|
/* Check the I2S parameters */
|
||||||
|
assert_param(IS_I2S_ALL_INSTANCE(SPIx));
|
||||||
|
assert_param(IS_LL_I2S_MODE(I2S_InitStruct->Mode));
|
||||||
|
assert_param(IS_LL_I2S_STANDARD(I2S_InitStruct->Standard));
|
||||||
|
assert_param(IS_LL_I2S_DATAFORMAT(I2S_InitStruct->DataFormat));
|
||||||
|
assert_param(IS_LL_I2S_MCLK_OUTPUT(I2S_InitStruct->MCLKOutput));
|
||||||
|
assert_param(IS_LL_I2S_AUDIO_FREQ(I2S_InitStruct->AudioFreq));
|
||||||
|
assert_param(IS_LL_I2S_CPOL(I2S_InitStruct->ClockPolarity));
|
||||||
|
|
||||||
|
if (LL_I2S_IsEnabled(SPIx) == 0x00000000U)
|
||||||
|
{
|
||||||
|
/*---------------------------- SPIx I2SCFGR Configuration --------------------
|
||||||
|
* Configure SPIx I2SCFGR with parameters:
|
||||||
|
* - Mode: SPI_I2SCFGR_I2SCFG[1:0] bit
|
||||||
|
* - Standard: SPI_I2SCFGR_I2SSTD[1:0] and SPI_I2SCFGR_PCMSYNC bits
|
||||||
|
* - DataFormat: SPI_I2SCFGR_CHLEN and SPI_I2SCFGR_DATLEN bits
|
||||||
|
* - ClockPolarity: SPI_I2SCFGR_CKPOL bit
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Write to SPIx I2SCFGR */
|
||||||
|
MODIFY_REG(SPIx->I2SCFGR,
|
||||||
|
I2S_I2SCFGR_CLEAR_MASK,
|
||||||
|
I2S_InitStruct->Mode | I2S_InitStruct->Standard |
|
||||||
|
I2S_InitStruct->DataFormat | I2S_InitStruct->ClockPolarity |
|
||||||
|
SPI_I2SCFGR_I2SMOD);
|
||||||
|
|
||||||
|
/*---------------------------- SPIx I2SPR Configuration ----------------------
|
||||||
|
* Configure SPIx I2SPR with parameters:
|
||||||
|
* - MCLKOutput: SPI_I2SPR_MCKOE bit
|
||||||
|
* - AudioFreq: SPI_I2SPR_I2SDIV[7:0] and SPI_I2SPR_ODD bits
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* If the requested audio frequency is not the default, compute the prescaler (i2sodd, i2sdiv)
|
||||||
|
* else, default values are used: i2sodd = 0U, i2sdiv = 2U.
|
||||||
|
*/
|
||||||
|
if (I2S_InitStruct->AudioFreq != LL_I2S_AUDIOFREQ_DEFAULT)
|
||||||
|
{
|
||||||
|
/* Check the frame length (For the Prescaler computing)
|
||||||
|
* Default value: LL_I2S_DATAFORMAT_16B (packetlength = 1U).
|
||||||
|
*/
|
||||||
|
if (I2S_InitStruct->DataFormat != LL_I2S_DATAFORMAT_16B)
|
||||||
|
{
|
||||||
|
/* Packet length is 32 bits */
|
||||||
|
packetlength = 2U;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* I2S Clock source is System clock: Get System Clock frequency */
|
||||||
|
LL_RCC_GetSystemClocksFreq(&rcc_clocks);
|
||||||
|
|
||||||
|
/* Get the source clock value: based on System Clock value */
|
||||||
|
sourceclock = rcc_clocks.SYSCLK_Frequency;
|
||||||
|
|
||||||
|
/* Compute the Real divider depending on the MCLK output state with a floating point */
|
||||||
|
if (I2S_InitStruct->MCLKOutput == LL_I2S_MCLK_OUTPUT_ENABLE)
|
||||||
|
{
|
||||||
|
/* MCLK output is enabled */
|
||||||
|
tmp = (((((sourceclock / 256U) * 10U) / I2S_InitStruct->AudioFreq)) + 5U);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* MCLK output is disabled */
|
||||||
|
tmp = (((((sourceclock / (32U * packetlength)) * 10U) / I2S_InitStruct->AudioFreq)) + 5U);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Remove the floating point */
|
||||||
|
tmp = tmp / 10U;
|
||||||
|
|
||||||
|
/* Check the parity of the divider */
|
||||||
|
i2sodd = (tmp & (uint16_t)0x0001U);
|
||||||
|
|
||||||
|
/* Compute the i2sdiv prescaler */
|
||||||
|
i2sdiv = ((tmp - i2sodd) / 2U);
|
||||||
|
|
||||||
|
/* Get the Mask for the Odd bit (SPI_I2SPR[8]) register */
|
||||||
|
i2sodd = (i2sodd << 8U);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Test if the divider is 1 or 0 or greater than 0xFF */
|
||||||
|
if ((i2sdiv < 2U) || (i2sdiv > 0xFFU))
|
||||||
|
{
|
||||||
|
/* Set the default values */
|
||||||
|
i2sdiv = 2U;
|
||||||
|
i2sodd = 0U;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Write to SPIx I2SPR register the computed value */
|
||||||
|
WRITE_REG(SPIx->I2SPR, i2sdiv | i2sodd | I2S_InitStruct->MCLKOutput);
|
||||||
|
|
||||||
|
status = SUCCESS;
|
||||||
|
}
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set each @ref LL_I2S_InitTypeDef field to default value.
|
||||||
|
* @param I2S_InitStruct pointer to a @ref LL_I2S_InitTypeDef structure
|
||||||
|
* whose fields will be set to default values.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
void LL_I2S_StructInit(LL_I2S_InitTypeDef *I2S_InitStruct)
|
||||||
|
{
|
||||||
|
/*--------------- Reset I2S init structure parameters values -----------------*/
|
||||||
|
I2S_InitStruct->Mode = LL_I2S_MODE_SLAVE_TX;
|
||||||
|
I2S_InitStruct->Standard = LL_I2S_STANDARD_PHILIPS;
|
||||||
|
I2S_InitStruct->DataFormat = LL_I2S_DATAFORMAT_16B;
|
||||||
|
I2S_InitStruct->MCLKOutput = LL_I2S_MCLK_OUTPUT_DISABLE;
|
||||||
|
I2S_InitStruct->AudioFreq = LL_I2S_AUDIOFREQ_DEFAULT;
|
||||||
|
I2S_InitStruct->ClockPolarity = LL_I2S_POLARITY_LOW;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set linear and parity prescaler.
|
||||||
|
* @note To calculate value of PrescalerLinear(I2SDIV[7:0] bits) and PrescalerParity(ODD bit)\n
|
||||||
|
* Check Audio frequency table and formulas inside Reference Manual (SPI/I2S).
|
||||||
|
* @param SPIx SPI Instance
|
||||||
|
* @param PrescalerLinear value Min_Data=0x02 and Max_Data=0xFF.
|
||||||
|
* @param PrescalerParity This parameter can be one of the following values:
|
||||||
|
* @arg @ref LL_I2S_PRESCALER_PARITY_EVEN
|
||||||
|
* @arg @ref LL_I2S_PRESCALER_PARITY_ODD
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
void LL_I2S_ConfigPrescaler(SPI_TypeDef *SPIx, uint32_t PrescalerLinear, uint32_t PrescalerParity)
|
||||||
|
{
|
||||||
|
/* Check the I2S parameters */
|
||||||
|
assert_param(IS_I2S_ALL_INSTANCE(SPIx));
|
||||||
|
assert_param(IS_LL_I2S_PRESCALER_LINEAR(PrescalerLinear));
|
||||||
|
assert_param(IS_LL_I2S_PRESCALER_PARITY(PrescalerParity));
|
||||||
|
|
||||||
|
/* Write to SPIx I2SPR */
|
||||||
|
MODIFY_REG(SPIx->I2SPR, SPI_I2SPR_I2SDIV | SPI_I2SPR_ODD, PrescalerLinear | (PrescalerParity << 8U));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
#endif /* SPI_I2S_SUPPORT */
|
||||||
|
|
||||||
|
#endif /* defined (SPI1) || defined (SPI2) || defined (SPI3) */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#endif /* USE_FULL_LL_DRIVER */
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
1198
LLDrivers/src/stm32f1xx_ll_tim.c
Normal file
1198
LLDrivers/src/stm32f1xx_ll_tim.c
Normal file
File diff suppressed because it is too large
Load diff
446
LLDrivers/src/stm32f1xx_ll_usart.c
Normal file
446
LLDrivers/src/stm32f1xx_ll_usart.c
Normal file
|
@ -0,0 +1,446 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file stm32f1xx_ll_usart.c
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @brief USART LL module driver.
|
||||||
|
******************************************************************************
|
||||||
|
* @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
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(USE_FULL_LL_DRIVER)
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "stm32f1xx_ll_usart.h"
|
||||||
|
#include "stm32f1xx_ll_rcc.h"
|
||||||
|
#include "stm32f1xx_ll_bus.h"
|
||||||
|
#ifdef USE_FULL_ASSERT
|
||||||
|
#include "stm32_assert.h"
|
||||||
|
#else
|
||||||
|
#define assert_param(expr) ((void)0U)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/** @addtogroup STM32F1xx_LL_Driver
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined (USART1) || defined (USART2) || defined (USART3) || defined (UART4) || defined (UART5)
|
||||||
|
|
||||||
|
/** @addtogroup USART_LL
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Private types -------------------------------------------------------------*/
|
||||||
|
/* Private variables ---------------------------------------------------------*/
|
||||||
|
/* Private constants ---------------------------------------------------------*/
|
||||||
|
/** @addtogroup USART_LL_Private_Constants
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/* Private macros ------------------------------------------------------------*/
|
||||||
|
/** @addtogroup USART_LL_Private_Macros
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* __BAUDRATE__ The maximum Baud Rate is derived from the maximum clock available
|
||||||
|
* divided by the smallest oversampling used on the USART (i.e. 8) */
|
||||||
|
#define IS_LL_USART_BAUDRATE(__BAUDRATE__) ((__BAUDRATE__) <= 4500000U)
|
||||||
|
|
||||||
|
/* __VALUE__ In case of oversampling by 16 and 8, BRR content must be greater than or equal to 16d. */
|
||||||
|
#define IS_LL_USART_BRR_MIN(__VALUE__) ((__VALUE__) >= 16U)
|
||||||
|
|
||||||
|
/* __VALUE__ BRR content must be lower than or equal to 0xFFFF. */
|
||||||
|
#define IS_LL_USART_BRR_MAX(__VALUE__) ((__VALUE__) <= 0x0000FFFFU)
|
||||||
|
|
||||||
|
#define IS_LL_USART_DIRECTION(__VALUE__) (((__VALUE__) == LL_USART_DIRECTION_NONE) \
|
||||||
|
|| ((__VALUE__) == LL_USART_DIRECTION_RX) \
|
||||||
|
|| ((__VALUE__) == LL_USART_DIRECTION_TX) \
|
||||||
|
|| ((__VALUE__) == LL_USART_DIRECTION_TX_RX))
|
||||||
|
|
||||||
|
#define IS_LL_USART_PARITY(__VALUE__) (((__VALUE__) == LL_USART_PARITY_NONE) \
|
||||||
|
|| ((__VALUE__) == LL_USART_PARITY_EVEN) \
|
||||||
|
|| ((__VALUE__) == LL_USART_PARITY_ODD))
|
||||||
|
|
||||||
|
#define IS_LL_USART_DATAWIDTH(__VALUE__) (((__VALUE__) == LL_USART_DATAWIDTH_8B) \
|
||||||
|
|| ((__VALUE__) == LL_USART_DATAWIDTH_9B))
|
||||||
|
|
||||||
|
#define IS_LL_USART_OVERSAMPLING(__VALUE__) (((__VALUE__) == LL_USART_OVERSAMPLING_16) \
|
||||||
|
|| ((__VALUE__) == LL_USART_OVERSAMPLING_8))
|
||||||
|
|
||||||
|
#define IS_LL_USART_LASTBITCLKOUTPUT(__VALUE__) (((__VALUE__) == LL_USART_LASTCLKPULSE_NO_OUTPUT) \
|
||||||
|
|| ((__VALUE__) == LL_USART_LASTCLKPULSE_OUTPUT))
|
||||||
|
|
||||||
|
#define IS_LL_USART_CLOCKPHASE(__VALUE__) (((__VALUE__) == LL_USART_PHASE_1EDGE) \
|
||||||
|
|| ((__VALUE__) == LL_USART_PHASE_2EDGE))
|
||||||
|
|
||||||
|
#define IS_LL_USART_CLOCKPOLARITY(__VALUE__) (((__VALUE__) == LL_USART_POLARITY_LOW) \
|
||||||
|
|| ((__VALUE__) == LL_USART_POLARITY_HIGH))
|
||||||
|
|
||||||
|
#define IS_LL_USART_CLOCKOUTPUT(__VALUE__) (((__VALUE__) == LL_USART_CLOCK_DISABLE) \
|
||||||
|
|| ((__VALUE__) == LL_USART_CLOCK_ENABLE))
|
||||||
|
|
||||||
|
#define IS_LL_USART_STOPBITS(__VALUE__) (((__VALUE__) == LL_USART_STOPBITS_0_5) \
|
||||||
|
|| ((__VALUE__) == LL_USART_STOPBITS_1) \
|
||||||
|
|| ((__VALUE__) == LL_USART_STOPBITS_1_5) \
|
||||||
|
|| ((__VALUE__) == LL_USART_STOPBITS_2))
|
||||||
|
|
||||||
|
#define IS_LL_USART_HWCONTROL(__VALUE__) (((__VALUE__) == LL_USART_HWCONTROL_NONE) \
|
||||||
|
|| ((__VALUE__) == LL_USART_HWCONTROL_RTS) \
|
||||||
|
|| ((__VALUE__) == LL_USART_HWCONTROL_CTS) \
|
||||||
|
|| ((__VALUE__) == LL_USART_HWCONTROL_RTS_CTS))
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Private function prototypes -----------------------------------------------*/
|
||||||
|
|
||||||
|
/* Exported functions --------------------------------------------------------*/
|
||||||
|
/** @addtogroup USART_LL_Exported_Functions
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @addtogroup USART_LL_EF_Init
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief De-initialize USART registers (Registers restored to their default values).
|
||||||
|
* @param USARTx USART Instance
|
||||||
|
* @retval An ErrorStatus enumeration value:
|
||||||
|
* - SUCCESS: USART registers are de-initialized
|
||||||
|
* - ERROR: USART registers are not de-initialized
|
||||||
|
*/
|
||||||
|
ErrorStatus LL_USART_DeInit(USART_TypeDef *USARTx)
|
||||||
|
{
|
||||||
|
ErrorStatus status = SUCCESS;
|
||||||
|
|
||||||
|
/* Check the parameters */
|
||||||
|
assert_param(IS_UART_INSTANCE(USARTx));
|
||||||
|
|
||||||
|
if (USARTx == USART1)
|
||||||
|
{
|
||||||
|
/* Force reset of USART clock */
|
||||||
|
LL_APB2_GRP1_ForceReset(LL_APB2_GRP1_PERIPH_USART1);
|
||||||
|
|
||||||
|
/* Release reset of USART clock */
|
||||||
|
LL_APB2_GRP1_ReleaseReset(LL_APB2_GRP1_PERIPH_USART1);
|
||||||
|
}
|
||||||
|
else if (USARTx == USART2)
|
||||||
|
{
|
||||||
|
/* Force reset of USART clock */
|
||||||
|
LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_USART2);
|
||||||
|
|
||||||
|
/* Release reset of USART clock */
|
||||||
|
LL_APB1_GRP1_ReleaseReset(LL_APB1_GRP1_PERIPH_USART2);
|
||||||
|
}
|
||||||
|
#if defined(USART3)
|
||||||
|
else if (USARTx == USART3)
|
||||||
|
{
|
||||||
|
/* Force reset of USART clock */
|
||||||
|
LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_USART3);
|
||||||
|
|
||||||
|
/* Release reset of USART clock */
|
||||||
|
LL_APB1_GRP1_ReleaseReset(LL_APB1_GRP1_PERIPH_USART3);
|
||||||
|
}
|
||||||
|
#endif /* USART3 */
|
||||||
|
#if defined(UART4)
|
||||||
|
else if (USARTx == UART4)
|
||||||
|
{
|
||||||
|
/* Force reset of UART clock */
|
||||||
|
LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_UART4);
|
||||||
|
|
||||||
|
/* Release reset of UART clock */
|
||||||
|
LL_APB1_GRP1_ReleaseReset(LL_APB1_GRP1_PERIPH_UART4);
|
||||||
|
}
|
||||||
|
#endif /* UART4 */
|
||||||
|
#if defined(UART5)
|
||||||
|
else if (USARTx == UART5)
|
||||||
|
{
|
||||||
|
/* Force reset of UART clock */
|
||||||
|
LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_UART5);
|
||||||
|
|
||||||
|
/* Release reset of UART clock */
|
||||||
|
LL_APB1_GRP1_ReleaseReset(LL_APB1_GRP1_PERIPH_UART5);
|
||||||
|
}
|
||||||
|
#endif /* UART5 */
|
||||||
|
else
|
||||||
|
{
|
||||||
|
status = ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (status);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Initialize USART registers according to the specified
|
||||||
|
* parameters in USART_InitStruct.
|
||||||
|
* @note As some bits in USART configuration registers can only be written when the USART is disabled (USART_CR1_UE bit =0),
|
||||||
|
* USART IP should be in disabled state prior calling this function. Otherwise, ERROR result will be returned.
|
||||||
|
* @note Baud rate value stored in USART_InitStruct BaudRate field, should be valid (different from 0).
|
||||||
|
* @param USARTx USART Instance
|
||||||
|
* @param USART_InitStruct pointer to a LL_USART_InitTypeDef structure
|
||||||
|
* that contains the configuration information for the specified USART peripheral.
|
||||||
|
* @retval An ErrorStatus enumeration value:
|
||||||
|
* - SUCCESS: USART registers are initialized according to USART_InitStruct content
|
||||||
|
* - ERROR: Problem occurred during USART Registers initialization
|
||||||
|
*/
|
||||||
|
ErrorStatus LL_USART_Init(USART_TypeDef *USARTx, LL_USART_InitTypeDef *USART_InitStruct)
|
||||||
|
{
|
||||||
|
ErrorStatus status = ERROR;
|
||||||
|
uint32_t periphclk = LL_RCC_PERIPH_FREQUENCY_NO;
|
||||||
|
LL_RCC_ClocksTypeDef rcc_clocks;
|
||||||
|
|
||||||
|
/* Check the parameters */
|
||||||
|
assert_param(IS_UART_INSTANCE(USARTx));
|
||||||
|
assert_param(IS_LL_USART_BAUDRATE(USART_InitStruct->BaudRate));
|
||||||
|
assert_param(IS_LL_USART_DATAWIDTH(USART_InitStruct->DataWidth));
|
||||||
|
assert_param(IS_LL_USART_STOPBITS(USART_InitStruct->StopBits));
|
||||||
|
assert_param(IS_LL_USART_PARITY(USART_InitStruct->Parity));
|
||||||
|
assert_param(IS_LL_USART_DIRECTION(USART_InitStruct->TransferDirection));
|
||||||
|
assert_param(IS_LL_USART_HWCONTROL(USART_InitStruct->HardwareFlowControl));
|
||||||
|
#if defined(USART_CR1_OVER8)
|
||||||
|
assert_param(IS_LL_USART_OVERSAMPLING(USART_InitStruct->OverSampling));
|
||||||
|
#endif /* USART_OverSampling_Feature */
|
||||||
|
|
||||||
|
/* USART needs to be in disabled state, in order to be able to configure some bits in
|
||||||
|
CRx registers */
|
||||||
|
if (LL_USART_IsEnabled(USARTx) == 0U)
|
||||||
|
{
|
||||||
|
/*---------------------------- USART CR1 Configuration -----------------------
|
||||||
|
* Configure USARTx CR1 (USART Word Length, Parity, Mode and Oversampling bits) with parameters:
|
||||||
|
* - DataWidth: USART_CR1_M bits according to USART_InitStruct->DataWidth value
|
||||||
|
* - Parity: USART_CR1_PCE, USART_CR1_PS bits according to USART_InitStruct->Parity value
|
||||||
|
* - TransferDirection: USART_CR1_TE, USART_CR1_RE bits according to USART_InitStruct->TransferDirection value
|
||||||
|
* - Oversampling: USART_CR1_OVER8 bit according to USART_InitStruct->OverSampling value.
|
||||||
|
*/
|
||||||
|
#if defined(USART_CR1_OVER8)
|
||||||
|
MODIFY_REG(USARTx->CR1,
|
||||||
|
(USART_CR1_M | USART_CR1_PCE | USART_CR1_PS |
|
||||||
|
USART_CR1_TE | USART_CR1_RE | USART_CR1_OVER8),
|
||||||
|
(USART_InitStruct->DataWidth | USART_InitStruct->Parity |
|
||||||
|
USART_InitStruct->TransferDirection | USART_InitStruct->OverSampling));
|
||||||
|
#else
|
||||||
|
MODIFY_REG(USARTx->CR1,
|
||||||
|
(USART_CR1_M | USART_CR1_PCE | USART_CR1_PS |
|
||||||
|
USART_CR1_TE | USART_CR1_RE),
|
||||||
|
(USART_InitStruct->DataWidth | USART_InitStruct->Parity |
|
||||||
|
USART_InitStruct->TransferDirection));
|
||||||
|
#endif /* USART_OverSampling_Feature */
|
||||||
|
|
||||||
|
/*---------------------------- USART CR2 Configuration -----------------------
|
||||||
|
* Configure USARTx CR2 (Stop bits) with parameters:
|
||||||
|
* - Stop Bits: USART_CR2_STOP bits according to USART_InitStruct->StopBits value.
|
||||||
|
* - CLKEN, CPOL, CPHA and LBCL bits are to be configured using LL_USART_ClockInit().
|
||||||
|
*/
|
||||||
|
LL_USART_SetStopBitsLength(USARTx, USART_InitStruct->StopBits);
|
||||||
|
|
||||||
|
/*---------------------------- USART CR3 Configuration -----------------------
|
||||||
|
* Configure USARTx CR3 (Hardware Flow Control) with parameters:
|
||||||
|
* - HardwareFlowControl: USART_CR3_RTSE, USART_CR3_CTSE bits according to USART_InitStruct->HardwareFlowControl value.
|
||||||
|
*/
|
||||||
|
LL_USART_SetHWFlowCtrl(USARTx, USART_InitStruct->HardwareFlowControl);
|
||||||
|
|
||||||
|
/*---------------------------- USART BRR Configuration -----------------------
|
||||||
|
* Retrieve Clock frequency used for USART Peripheral
|
||||||
|
*/
|
||||||
|
LL_RCC_GetSystemClocksFreq(&rcc_clocks);
|
||||||
|
if (USARTx == USART1)
|
||||||
|
{
|
||||||
|
periphclk = rcc_clocks.PCLK2_Frequency;
|
||||||
|
}
|
||||||
|
else if (USARTx == USART2)
|
||||||
|
{
|
||||||
|
periphclk = rcc_clocks.PCLK1_Frequency;
|
||||||
|
}
|
||||||
|
#if defined(USART3)
|
||||||
|
else if (USARTx == USART3)
|
||||||
|
{
|
||||||
|
periphclk = rcc_clocks.PCLK1_Frequency;
|
||||||
|
}
|
||||||
|
#endif /* USART3 */
|
||||||
|
#if defined(UART4)
|
||||||
|
else if (USARTx == UART4)
|
||||||
|
{
|
||||||
|
periphclk = rcc_clocks.PCLK1_Frequency;
|
||||||
|
}
|
||||||
|
#endif /* UART4 */
|
||||||
|
#if defined(UART5)
|
||||||
|
else if (USARTx == UART5)
|
||||||
|
{
|
||||||
|
periphclk = rcc_clocks.PCLK1_Frequency;
|
||||||
|
}
|
||||||
|
#endif /* UART5 */
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Nothing to do, as error code is already assigned to ERROR value */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Configure the USART Baud Rate :
|
||||||
|
- valid baud rate value (different from 0) is required
|
||||||
|
- Peripheral clock as returned by RCC service, should be valid (different from 0).
|
||||||
|
*/
|
||||||
|
if ((periphclk != LL_RCC_PERIPH_FREQUENCY_NO)
|
||||||
|
&& (USART_InitStruct->BaudRate != 0U))
|
||||||
|
{
|
||||||
|
status = SUCCESS;
|
||||||
|
#if defined(USART_CR1_OVER8)
|
||||||
|
LL_USART_SetBaudRate(USARTx,
|
||||||
|
periphclk,
|
||||||
|
USART_InitStruct->OverSampling,
|
||||||
|
USART_InitStruct->BaudRate);
|
||||||
|
#else
|
||||||
|
LL_USART_SetBaudRate(USARTx,
|
||||||
|
periphclk,
|
||||||
|
USART_InitStruct->BaudRate);
|
||||||
|
#endif /* USART_OverSampling_Feature */
|
||||||
|
|
||||||
|
/* Check BRR is greater than or equal to 16d */
|
||||||
|
assert_param(IS_LL_USART_BRR_MIN(USARTx->BRR));
|
||||||
|
|
||||||
|
/* Check BRR is greater than or equal to 16d */
|
||||||
|
assert_param(IS_LL_USART_BRR_MAX(USARTx->BRR));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* Endif (=> USART not in Disabled state => return ERROR) */
|
||||||
|
|
||||||
|
return (status);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set each @ref LL_USART_InitTypeDef field to default value.
|
||||||
|
* @param USART_InitStruct Pointer to a @ref LL_USART_InitTypeDef structure
|
||||||
|
* whose fields will be set to default values.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
|
||||||
|
void LL_USART_StructInit(LL_USART_InitTypeDef *USART_InitStruct)
|
||||||
|
{
|
||||||
|
/* Set USART_InitStruct fields to default values */
|
||||||
|
USART_InitStruct->BaudRate = 9600U;
|
||||||
|
USART_InitStruct->DataWidth = LL_USART_DATAWIDTH_8B;
|
||||||
|
USART_InitStruct->StopBits = LL_USART_STOPBITS_1;
|
||||||
|
USART_InitStruct->Parity = LL_USART_PARITY_NONE ;
|
||||||
|
USART_InitStruct->TransferDirection = LL_USART_DIRECTION_TX_RX;
|
||||||
|
USART_InitStruct->HardwareFlowControl = LL_USART_HWCONTROL_NONE;
|
||||||
|
#if defined(USART_CR1_OVER8)
|
||||||
|
USART_InitStruct->OverSampling = LL_USART_OVERSAMPLING_16;
|
||||||
|
#endif /* USART_OverSampling_Feature */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Initialize USART Clock related settings according to the
|
||||||
|
* specified parameters in the USART_ClockInitStruct.
|
||||||
|
* @note As some bits in USART configuration registers can only be written when the USART is disabled (USART_CR1_UE bit =0),
|
||||||
|
* USART IP should be in disabled state prior calling this function. Otherwise, ERROR result will be returned.
|
||||||
|
* @param USARTx USART Instance
|
||||||
|
* @param USART_ClockInitStruct Pointer to a @ref LL_USART_ClockInitTypeDef structure
|
||||||
|
* that contains the Clock configuration information for the specified USART peripheral.
|
||||||
|
* @retval An ErrorStatus enumeration value:
|
||||||
|
* - SUCCESS: USART registers related to Clock settings are initialized according to USART_ClockInitStruct content
|
||||||
|
* - ERROR: Problem occurred during USART Registers initialization
|
||||||
|
*/
|
||||||
|
ErrorStatus LL_USART_ClockInit(USART_TypeDef *USARTx, LL_USART_ClockInitTypeDef *USART_ClockInitStruct)
|
||||||
|
{
|
||||||
|
ErrorStatus status = SUCCESS;
|
||||||
|
|
||||||
|
/* Check USART Instance and Clock signal output parameters */
|
||||||
|
assert_param(IS_UART_INSTANCE(USARTx));
|
||||||
|
assert_param(IS_LL_USART_CLOCKOUTPUT(USART_ClockInitStruct->ClockOutput));
|
||||||
|
|
||||||
|
/* USART needs to be in disabled state, in order to be able to configure some bits in
|
||||||
|
CRx registers */
|
||||||
|
if (LL_USART_IsEnabled(USARTx) == 0U)
|
||||||
|
{
|
||||||
|
/*---------------------------- USART CR2 Configuration -----------------------*/
|
||||||
|
/* If Clock signal has to be output */
|
||||||
|
if (USART_ClockInitStruct->ClockOutput == LL_USART_CLOCK_DISABLE)
|
||||||
|
{
|
||||||
|
/* Deactivate Clock signal delivery :
|
||||||
|
* - Disable Clock Output: USART_CR2_CLKEN cleared
|
||||||
|
*/
|
||||||
|
LL_USART_DisableSCLKOutput(USARTx);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Ensure USART instance is USART capable */
|
||||||
|
assert_param(IS_USART_INSTANCE(USARTx));
|
||||||
|
|
||||||
|
/* Check clock related parameters */
|
||||||
|
assert_param(IS_LL_USART_CLOCKPOLARITY(USART_ClockInitStruct->ClockPolarity));
|
||||||
|
assert_param(IS_LL_USART_CLOCKPHASE(USART_ClockInitStruct->ClockPhase));
|
||||||
|
assert_param(IS_LL_USART_LASTBITCLKOUTPUT(USART_ClockInitStruct->LastBitClockPulse));
|
||||||
|
|
||||||
|
/*---------------------------- USART CR2 Configuration -----------------------
|
||||||
|
* Configure USARTx CR2 (Clock signal related bits) with parameters:
|
||||||
|
* - Enable Clock Output: USART_CR2_CLKEN set
|
||||||
|
* - Clock Polarity: USART_CR2_CPOL bit according to USART_ClockInitStruct->ClockPolarity value
|
||||||
|
* - Clock Phase: USART_CR2_CPHA bit according to USART_ClockInitStruct->ClockPhase value
|
||||||
|
* - Last Bit Clock Pulse Output: USART_CR2_LBCL bit according to USART_ClockInitStruct->LastBitClockPulse value.
|
||||||
|
*/
|
||||||
|
MODIFY_REG(USARTx->CR2,
|
||||||
|
USART_CR2_CLKEN | USART_CR2_CPHA | USART_CR2_CPOL | USART_CR2_LBCL,
|
||||||
|
USART_CR2_CLKEN | USART_ClockInitStruct->ClockPolarity |
|
||||||
|
USART_ClockInitStruct->ClockPhase | USART_ClockInitStruct->LastBitClockPulse);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* Else (USART not in Disabled state => return ERROR */
|
||||||
|
else
|
||||||
|
{
|
||||||
|
status = ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (status);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set each field of a @ref LL_USART_ClockInitTypeDef type structure to default value.
|
||||||
|
* @param USART_ClockInitStruct Pointer to a @ref LL_USART_ClockInitTypeDef structure
|
||||||
|
* whose fields will be set to default values.
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
void LL_USART_ClockStructInit(LL_USART_ClockInitTypeDef *USART_ClockInitStruct)
|
||||||
|
{
|
||||||
|
/* Set LL_USART_ClockInitStruct fields with default values */
|
||||||
|
USART_ClockInitStruct->ClockOutput = LL_USART_CLOCK_DISABLE;
|
||||||
|
USART_ClockInitStruct->ClockPolarity = LL_USART_POLARITY_LOW; /* Not relevant when ClockOutput = LL_USART_CLOCK_DISABLE */
|
||||||
|
USART_ClockInitStruct->ClockPhase = LL_USART_PHASE_1EDGE; /* Not relevant when ClockOutput = LL_USART_CLOCK_DISABLE */
|
||||||
|
USART_ClockInitStruct->LastBitClockPulse = LL_USART_LASTCLKPULSE_NO_OUTPUT; /* Not relevant when ClockOutput = LL_USART_CLOCK_DISABLE */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#endif /* USART1 || USART2 || USART3 || UART4 || UART5 */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#endif /* USE_FULL_LL_DRIVER */
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
||||||
|
|
2591
LLDrivers/src/stm32f1xx_ll_usb.c
Normal file
2591
LLDrivers/src/stm32f1xx_ll_usb.c
Normal file
File diff suppressed because it is too large
Load diff
|
@ -101,9 +101,7 @@
|
||||||
<sRunDeb>0</sRunDeb>
|
<sRunDeb>0</sRunDeb>
|
||||||
<sLrtime>0</sLrtime>
|
<sLrtime>0</sLrtime>
|
||||||
<bEvRecOn>1</bEvRecOn>
|
<bEvRecOn>1</bEvRecOn>
|
||||||
<bSchkAxf>0</bSchkAxf>
|
<nTsel>5</nTsel>
|
||||||
<bTchkAxf>0</bTchkAxf>
|
|
||||||
<nTsel>6</nTsel>
|
|
||||||
<sDll></sDll>
|
<sDll></sDll>
|
||||||
<sDllPa></sDllPa>
|
<sDllPa></sDllPa>
|
||||||
<sDlgDll></sDlgDll>
|
<sDlgDll></sDlgDll>
|
||||||
|
@ -130,7 +128,7 @@
|
||||||
<SetRegEntry>
|
<SetRegEntry>
|
||||||
<Number>0</Number>
|
<Number>0</Number>
|
||||||
<Key>DLGTARM</Key>
|
<Key>DLGTARM</Key>
|
||||||
<Name>(1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(100=-1,-1,-1,-1,0)(110=-1,-1,-1,-1,0)(111=-1,-1,-1,-1,0)(1011=-1,-1,-1,-1,0)(180=-1,-1,-1,-1,0)(120=100,127,658,622,0)(121=-1,-1,-1,-1,0)(122=834,179,1255,584,0)(123=-1,-1,-1,-1,0)(140=-1,-1,-1,-1,0)(240=-1,-1,-1,-1,0)(190=-1,-1,-1,-1,0)(200=-1,-1,-1,-1,0)(170=-1,-1,-1,-1,0)(130=-1,-1,-1,-1,0)(131=-1,-1,-1,-1,0)(132=-1,-1,-1,-1,0)(133=-1,-1,-1,-1,0)(160=-1,-1,-1,-1,0)(161=-1,-1,-1,-1,0)(162=-1,-1,-1,-1,0)(210=-1,-1,-1,-1,0)(211=-1,-1,-1,-1,0)(220=-1,-1,-1,-1,0)(221=-1,-1,-1,-1,0)(230=-1,-1,-1,-1,0)(231=-1,-1,-1,-1,0)(232=-1,-1,-1,-1,0)(233=-1,-1,-1,-1,0)(150=-1,-1,-1,-1,0)(151=-1,-1,-1,-1,0)</Name>
|
<Name>(1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(100=-1,-1,-1,-1,0)(110=-1,-1,-1,-1,0)(111=-1,-1,-1,-1,0)(1011=-1,-1,-1,-1,0)(180=-1,-1,-1,-1,0)(120=100,127,658,622,0)(121=-1,-1,-1,-1,0)(122=-1,-1,-1,-1,0)(123=-1,-1,-1,-1,0)(140=-1,-1,-1,-1,0)(240=-1,-1,-1,-1,0)(190=-1,-1,-1,-1,0)(200=-1,-1,-1,-1,0)(170=-1,-1,-1,-1,0)(130=-1,-1,-1,-1,0)(131=-1,-1,-1,-1,0)(132=-1,-1,-1,-1,0)(133=-1,-1,-1,-1,0)(160=-1,-1,-1,-1,0)(161=-1,-1,-1,-1,0)(162=-1,-1,-1,-1,0)(210=-1,-1,-1,-1,0)(211=-1,-1,-1,-1,0)(220=-1,-1,-1,-1,0)(221=-1,-1,-1,-1,0)(230=-1,-1,-1,-1,0)(231=-1,-1,-1,-1,0)(232=-1,-1,-1,-1,0)(233=-1,-1,-1,-1,0)(150=-1,-1,-1,-1,0)(151=-1,-1,-1,-1,0)</Name>
|
||||||
</SetRegEntry>
|
</SetRegEntry>
|
||||||
<SetRegEntry>
|
<SetRegEntry>
|
||||||
<Number>0</Number>
|
<Number>0</Number>
|
||||||
|
@ -150,10 +148,50 @@
|
||||||
<SetRegEntry>
|
<SetRegEntry>
|
||||||
<Number>0</Number>
|
<Number>0</Number>
|
||||||
<Key>ST-LINKIII-KEIL_SWO</Key>
|
<Key>ST-LINKIII-KEIL_SWO</Key>
|
||||||
<Name>-U-O142 -O2254 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP (ARM Core") -D00(1BA01477) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL020000 -FP0($$Device:STM32F103RB$Flash\STM32F10x_128.FLM)</Name>
|
<Name>-U-O142 -O2254 -S0 -C0 -A0 -N00("ARM CoreSight SW-DP") -D00(1BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL020000 -FP0($$Device:STM32F103RB$Flash\STM32F10x_128.FLM)</Name>
|
||||||
</SetRegEntry>
|
</SetRegEntry>
|
||||||
</TargetDriverDllRegistry>
|
</TargetDriverDllRegistry>
|
||||||
<Breakpoint/>
|
<Breakpoint>
|
||||||
|
<Bp>
|
||||||
|
<Number>0</Number>
|
||||||
|
<Type>0</Type>
|
||||||
|
<LineNumber>47</LineNumber>
|
||||||
|
<EnabledFlag>1</EnabledFlag>
|
||||||
|
<Address>134219058</Address>
|
||||||
|
<ByteObject>0</ByteObject>
|
||||||
|
<HtxType>0</HtxType>
|
||||||
|
<ManyObjects>0</ManyObjects>
|
||||||
|
<SizeOfObject>0</SizeOfObject>
|
||||||
|
<BreakByAccess>0</BreakByAccess>
|
||||||
|
<BreakIfRCount>1</BreakIfRCount>
|
||||||
|
<Filename>../Src/main.c</Filename>
|
||||||
|
<ExecCommand></ExecCommand>
|
||||||
|
<Expression>\\NUCLEO_F103RB\../Src/main.c\47</Expression>
|
||||||
|
</Bp>
|
||||||
|
<Bp>
|
||||||
|
<Number>1</Number>
|
||||||
|
<Type>0</Type>
|
||||||
|
<LineNumber>44</LineNumber>
|
||||||
|
<EnabledFlag>1</EnabledFlag>
|
||||||
|
<Address>134219052</Address>
|
||||||
|
<ByteObject>0</ByteObject>
|
||||||
|
<HtxType>0</HtxType>
|
||||||
|
<ManyObjects>0</ManyObjects>
|
||||||
|
<SizeOfObject>0</SizeOfObject>
|
||||||
|
<BreakByAccess>0</BreakByAccess>
|
||||||
|
<BreakIfRCount>1</BreakIfRCount>
|
||||||
|
<Filename>../Src/main.c</Filename>
|
||||||
|
<ExecCommand></ExecCommand>
|
||||||
|
<Expression>\\NUCLEO_F103RB\../Src/main.c\44</Expression>
|
||||||
|
</Bp>
|
||||||
|
</Breakpoint>
|
||||||
|
<WatchWindow1>
|
||||||
|
<Ww>
|
||||||
|
<count>0</count>
|
||||||
|
<WinNumber>1</WinNumber>
|
||||||
|
<ItemText>Main_Time</ItemText>
|
||||||
|
</Ww>
|
||||||
|
</WatchWindow1>
|
||||||
<Tracepoint>
|
<Tracepoint>
|
||||||
<THDelay>0</THDelay>
|
<THDelay>0</THDelay>
|
||||||
</Tracepoint>
|
</Tracepoint>
|
||||||
|
@ -192,13 +230,8 @@
|
||||||
<pszMrule></pszMrule>
|
<pszMrule></pszMrule>
|
||||||
<pSingCmds></pSingCmds>
|
<pSingCmds></pSingCmds>
|
||||||
<pMultCmds></pMultCmds>
|
<pMultCmds></pMultCmds>
|
||||||
<pMisraNamep></pMisraNamep>
|
|
||||||
<pszMrulep></pszMrulep>
|
|
||||||
<pSingCmdsp></pSingCmdsp>
|
|
||||||
<pMultCmdsp></pMultCmdsp>
|
|
||||||
<DebugDescription>
|
<DebugDescription>
|
||||||
<Enable>1</Enable>
|
<Enable>1</Enable>
|
||||||
<EnableFlashSeq>0</EnableFlashSeq>
|
|
||||||
<EnableLog>0</EnableLog>
|
<EnableLog>0</EnableLog>
|
||||||
<Protocol>2</Protocol>
|
<Protocol>2</Protocol>
|
||||||
<DbgClock>10000000</DbgClock>
|
<DbgClock>10000000</DbgClock>
|
||||||
|
@ -286,8 +319,6 @@
|
||||||
<sRunDeb>0</sRunDeb>
|
<sRunDeb>0</sRunDeb>
|
||||||
<sLrtime>0</sLrtime>
|
<sLrtime>0</sLrtime>
|
||||||
<bEvRecOn>1</bEvRecOn>
|
<bEvRecOn>1</bEvRecOn>
|
||||||
<bSchkAxf>0</bSchkAxf>
|
|
||||||
<bTchkAxf>0</bTchkAxf>
|
|
||||||
<nTsel>5</nTsel>
|
<nTsel>5</nTsel>
|
||||||
<sDll></sDll>
|
<sDll></sDll>
|
||||||
<sDllPa></sDllPa>
|
<sDllPa></sDllPa>
|
||||||
|
@ -305,7 +336,7 @@
|
||||||
<SetRegEntry>
|
<SetRegEntry>
|
||||||
<Number>0</Number>
|
<Number>0</Number>
|
||||||
<Key>DLGDARM</Key>
|
<Key>DLGDARM</Key>
|
||||||
<Name>(1010=75,104,451,661,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(100=-1,-1,-1,-1,0)(110=-1,-1,-1,-1,0)(111=-1,-1,-1,-1,0)(1011=-1,-1,-1,-1,0)(180=-1,-1,-1,-1,0)(120=-1,-1,-1,-1,0)(121=-1,-1,-1,-1,0)(122=738,132,1159,559,0)(123=-1,-1,-1,-1,0)(140=-1,-1,-1,-1,0)(240=-1,-1,-1,-1,0)(190=-1,-1,-1,-1,0)(200=-1,-1,-1,-1,0)(170=-1,-1,-1,-1,0)(130=859,49,1453,800,0)(131=828,47,1422,798,0)(132=-1,-1,-1,-1,0)(133=-1,-1,-1,-1,0)(160=-1,-1,-1,-1,0)(161=-1,-1,-1,-1,0)(162=-1,-1,-1,-1,0)(210=-1,-1,-1,-1,0)(211=-1,-1,-1,-1,0)(220=-1,-1,-1,-1,0)(221=-1,-1,-1,-1,0)(230=-1,-1,-1,-1,0)(234=-1,-1,-1,-1,0)(231=-1,-1,-1,-1,0)(232=-1,-1,-1,-1,0)(233=-1,-1,-1,-1,0)(150=-1,-1,-1,-1,0)(151=-1,-1,-1,-1,0)</Name>
|
<Name>(1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(100=-1,-1,-1,-1,0)(110=-1,-1,-1,-1,0)(111=-1,-1,-1,-1,0)(1011=-1,-1,-1,-1,0)(180=-1,-1,-1,-1,0)(120=-1,-1,-1,-1,0)(121=-1,-1,-1,-1,0)(122=-1,-1,-1,-1,0)(123=-1,-1,-1,-1,0)(140=-1,-1,-1,-1,0)(240=-1,-1,-1,-1,0)(190=-1,-1,-1,-1,0)(200=-1,-1,-1,-1,0)(170=-1,-1,-1,-1,0)(130=-1,-1,-1,-1,0)(131=-1,-1,-1,-1,0)(132=-1,-1,-1,-1,0)(133=-1,-1,-1,-1,0)(160=-1,-1,-1,-1,0)(161=-1,-1,-1,-1,0)(162=-1,-1,-1,-1,0)(210=-1,-1,-1,-1,0)(211=-1,-1,-1,-1,0)(220=-1,-1,-1,-1,0)(221=-1,-1,-1,-1,0)(230=-1,-1,-1,-1,0)(234=-1,-1,-1,-1,0)(231=-1,-1,-1,-1,0)(232=-1,-1,-1,-1,0)(233=-1,-1,-1,-1,0)(150=-1,-1,-1,-1,0)(151=-1,-1,-1,-1,0)</Name>
|
||||||
</SetRegEntry>
|
</SetRegEntry>
|
||||||
<SetRegEntry>
|
<SetRegEntry>
|
||||||
<Number>0</Number>
|
<Number>0</Number>
|
||||||
|
@ -342,57 +373,9 @@
|
||||||
<Bp>
|
<Bp>
|
||||||
<Number>0</Number>
|
<Number>0</Number>
|
||||||
<Type>0</Type>
|
<Type>0</Type>
|
||||||
<LineNumber>32</LineNumber>
|
<LineNumber>46</LineNumber>
|
||||||
<EnabledFlag>1</EnabledFlag>
|
<EnabledFlag>1</EnabledFlag>
|
||||||
<Address>134218060</Address>
|
<Address>134219406</Address>
|
||||||
<ByteObject>0</ByteObject>
|
|
||||||
<HtxType>0</HtxType>
|
|
||||||
<ManyObjects>0</ManyObjects>
|
|
||||||
<SizeOfObject>0</SizeOfObject>
|
|
||||||
<BreakByAccess>0</BreakByAccess>
|
|
||||||
<BreakIfRCount>1</BreakIfRCount>
|
|
||||||
<Filename>..\Services\Chrono.c</Filename>
|
|
||||||
<ExecCommand></ExecCommand>
|
|
||||||
<Expression>\\NUCLEO_F103RB\../Services/Chrono.c\32</Expression>
|
|
||||||
</Bp>
|
|
||||||
<Bp>
|
|
||||||
<Number>1</Number>
|
|
||||||
<Type>0</Type>
|
|
||||||
<LineNumber>117</LineNumber>
|
|
||||||
<EnabledFlag>1</EnabledFlag>
|
|
||||||
<Address>134218120</Address>
|
|
||||||
<ByteObject>0</ByteObject>
|
|
||||||
<HtxType>0</HtxType>
|
|
||||||
<ManyObjects>0</ManyObjects>
|
|
||||||
<SizeOfObject>0</SizeOfObject>
|
|
||||||
<BreakByAccess>0</BreakByAccess>
|
|
||||||
<BreakIfRCount>1</BreakIfRCount>
|
|
||||||
<Filename>..\Services\Chrono.c</Filename>
|
|
||||||
<ExecCommand></ExecCommand>
|
|
||||||
<Expression>\\NUCLEO_F103RB\../Services/Chrono.c\117</Expression>
|
|
||||||
</Bp>
|
|
||||||
<Bp>
|
|
||||||
<Number>2</Number>
|
|
||||||
<Type>0</Type>
|
|
||||||
<LineNumber>20</LineNumber>
|
|
||||||
<EnabledFlag>1</EnabledFlag>
|
|
||||||
<Address>134218204</Address>
|
|
||||||
<ByteObject>0</ByteObject>
|
|
||||||
<HtxType>0</HtxType>
|
|
||||||
<ManyObjects>0</ManyObjects>
|
|
||||||
<SizeOfObject>0</SizeOfObject>
|
|
||||||
<BreakByAccess>0</BreakByAccess>
|
|
||||||
<BreakIfRCount>1</BreakIfRCount>
|
|
||||||
<Filename>..\MyDrivers\MyTimer.c</Filename>
|
|
||||||
<ExecCommand></ExecCommand>
|
|
||||||
<Expression>\\NUCLEO_F103RB\../MyDrivers/MyTimer.c\20</Expression>
|
|
||||||
</Bp>
|
|
||||||
<Bp>
|
|
||||||
<Number>3</Number>
|
|
||||||
<Type>0</Type>
|
|
||||||
<LineNumber>67</LineNumber>
|
|
||||||
<EnabledFlag>1</EnabledFlag>
|
|
||||||
<Address>134219134</Address>
|
|
||||||
<ByteObject>0</ByteObject>
|
<ByteObject>0</ByteObject>
|
||||||
<HtxType>0</HtxType>
|
<HtxType>0</HtxType>
|
||||||
<ManyObjects>0</ManyObjects>
|
<ManyObjects>0</ManyObjects>
|
||||||
|
@ -401,41 +384,9 @@
|
||||||
<BreakIfRCount>1</BreakIfRCount>
|
<BreakIfRCount>1</BreakIfRCount>
|
||||||
<Filename>../Src/main.c</Filename>
|
<Filename>../Src/main.c</Filename>
|
||||||
<ExecCommand></ExecCommand>
|
<ExecCommand></ExecCommand>
|
||||||
<Expression>\\NUCLEO_F103RB\../Src/main.c\67</Expression>
|
<Expression>\\NUCLEO_F103RB\../Src/main.c\46</Expression>
|
||||||
</Bp>
|
</Bp>
|
||||||
</Breakpoint>
|
</Breakpoint>
|
||||||
<WatchWindow1>
|
|
||||||
<Ww>
|
|
||||||
<count>0</count>
|
|
||||||
<WinNumber>1</WinNumber>
|
|
||||||
<ItemText>TIM1</ItemText>
|
|
||||||
</Ww>
|
|
||||||
<Ww>
|
|
||||||
<count>1</count>
|
|
||||||
<WinNumber>1</WinNumber>
|
|
||||||
<ItemText>GPIOB</ItemText>
|
|
||||||
</Ww>
|
|
||||||
<Ww>
|
|
||||||
<count>2</count>
|
|
||||||
<WinNumber>1</WinNumber>
|
|
||||||
<ItemText>SPI1</ItemText>
|
|
||||||
</Ww>
|
|
||||||
<Ww>
|
|
||||||
<count>3</count>
|
|
||||||
<WinNumber>1</WinNumber>
|
|
||||||
<ItemText>USART1</ItemText>
|
|
||||||
</Ww>
|
|
||||||
<Ww>
|
|
||||||
<count>4</count>
|
|
||||||
<WinNumber>1</WinNumber>
|
|
||||||
<ItemText>TIM2</ItemText>
|
|
||||||
</Ww>
|
|
||||||
<Ww>
|
|
||||||
<count>5</count>
|
|
||||||
<WinNumber>1</WinNumber>
|
|
||||||
<ItemText>Chrono_Time</ItemText>
|
|
||||||
</Ww>
|
|
||||||
</WatchWindow1>
|
|
||||||
<Tracepoint>
|
<Tracepoint>
|
||||||
<THDelay>0</THDelay>
|
<THDelay>0</THDelay>
|
||||||
</Tracepoint>
|
</Tracepoint>
|
||||||
|
@ -474,20 +425,8 @@
|
||||||
<pszMrule></pszMrule>
|
<pszMrule></pszMrule>
|
||||||
<pSingCmds></pSingCmds>
|
<pSingCmds></pSingCmds>
|
||||||
<pMultCmds></pMultCmds>
|
<pMultCmds></pMultCmds>
|
||||||
<pMisraNamep></pMisraNamep>
|
|
||||||
<pszMrulep></pszMrulep>
|
|
||||||
<pSingCmdsp></pSingCmdsp>
|
|
||||||
<pMultCmdsp></pMultCmdsp>
|
|
||||||
<LogicAnalyzers>
|
|
||||||
<Wi>
|
|
||||||
<IntNumber>0</IntNumber>
|
|
||||||
<FirstString>`TIM2_CNT</FirstString>
|
|
||||||
<SecondString>FF00000000000000000000000000E0FFFFFFEF410000000000000000000000000000000054494D325F434E540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000001000000000000000000F03F1800000000000000000000000000000000000000CE020008</SecondString>
|
|
||||||
</Wi>
|
|
||||||
</LogicAnalyzers>
|
|
||||||
<DebugDescription>
|
<DebugDescription>
|
||||||
<Enable>1</Enable>
|
<Enable>1</Enable>
|
||||||
<EnableFlashSeq>0</EnableFlashSeq>
|
|
||||||
<EnableLog>0</EnableLog>
|
<EnableLog>0</EnableLog>
|
||||||
<Protocol>2</Protocol>
|
<Protocol>2</Protocol>
|
||||||
<DbgClock>10000000</DbgClock>
|
<DbgClock>10000000</DbgClock>
|
||||||
|
@ -525,7 +464,7 @@
|
||||||
<GroupNumber>2</GroupNumber>
|
<GroupNumber>2</GroupNumber>
|
||||||
<FileNumber>2</FileNumber>
|
<FileNumber>2</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>1</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<bDave2>0</bDave2>
|
<bDave2>0</bDave2>
|
||||||
<PathWithFileName>..\Services\Chrono.c</PathWithFileName>
|
<PathWithFileName>..\Services\Chrono.c</PathWithFileName>
|
||||||
|
@ -545,7 +484,7 @@
|
||||||
<GroupNumber>3</GroupNumber>
|
<GroupNumber>3</GroupNumber>
|
||||||
<FileNumber>3</FileNumber>
|
<FileNumber>3</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>1</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<bDave2>0</bDave2>
|
<bDave2>0</bDave2>
|
||||||
<PathWithFileName>..\MyDrivers\MyTimer.c</PathWithFileName>
|
<PathWithFileName>..\MyDrivers\MyTimer.c</PathWithFileName>
|
||||||
|
@ -585,6 +524,18 @@
|
||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
<bShared>0</bShared>
|
<bShared>0</bShared>
|
||||||
</File>
|
</File>
|
||||||
|
<File>
|
||||||
|
<GroupNumber>4</GroupNumber>
|
||||||
|
<FileNumber>6</FileNumber>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<tvExp>0</tvExp>
|
||||||
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
<bDave2>0</bDave2>
|
||||||
|
<PathWithFileName>..\LLDrivers\src\stm32f1xx_ll_tim.c</PathWithFileName>
|
||||||
|
<FilenameWithoutPath>stm32f1xx_ll_tim.c</FilenameWithoutPath>
|
||||||
|
<RteFlg>0</RteFlg>
|
||||||
|
<bShared>0</bShared>
|
||||||
|
</File>
|
||||||
</Group>
|
</Group>
|
||||||
|
|
||||||
<Group>
|
<Group>
|
||||||
|
@ -595,7 +546,7 @@
|
||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>5</GroupNumber>
|
<GroupNumber>5</GroupNumber>
|
||||||
<FileNumber>6</FileNumber>
|
<FileNumber>7</FileNumber>
|
||||||
<FileType>5</FileType>
|
<FileType>5</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
@ -615,7 +566,7 @@
|
||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>6</GroupNumber>
|
<GroupNumber>6</GroupNumber>
|
||||||
<FileNumber>7</FileNumber>
|
<FileNumber>8</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
@ -635,7 +586,7 @@
|
||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
<File>
|
<File>
|
||||||
<GroupNumber>7</GroupNumber>
|
<GroupNumber>7</GroupNumber>
|
||||||
<FileNumber>8</FileNumber>
|
<FileNumber>9</FileNumber>
|
||||||
<FileType>2</FileType>
|
<FileType>2</FileType>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
|
|
|
@ -10,13 +10,12 @@
|
||||||
<TargetName>NUCLEO-F103RB</TargetName>
|
<TargetName>NUCLEO-F103RB</TargetName>
|
||||||
<ToolsetNumber>0x4</ToolsetNumber>
|
<ToolsetNumber>0x4</ToolsetNumber>
|
||||||
<ToolsetName>ARM-ADS</ToolsetName>
|
<ToolsetName>ARM-ADS</ToolsetName>
|
||||||
<pCCUsed>5060750::V5.06 update 6 (build 750)::ARMCC</pCCUsed>
|
<pCCUsed>5060422::V5.06 update 4 (build 422)::ARMCC</pCCUsed>
|
||||||
<uAC6>0</uAC6>
|
|
||||||
<TargetOption>
|
<TargetOption>
|
||||||
<TargetCommonOption>
|
<TargetCommonOption>
|
||||||
<Device>STM32F103RB</Device>
|
<Device>STM32F103RB</Device>
|
||||||
<Vendor>STMicroelectronics</Vendor>
|
<Vendor>STMicroelectronics</Vendor>
|
||||||
<PackID>Keil.STM32F1xx_DFP.2.3.0</PackID>
|
<PackID>Keil.STM32F1xx_DFP.2.2.0</PackID>
|
||||||
<PackURL>http://www.keil.com/pack/</PackURL>
|
<PackURL>http://www.keil.com/pack/</PackURL>
|
||||||
<Cpu>IRAM(0x20000000-0x20004FFF) IROM(0x8000000-0x801FFFF) CLOCK(8000000) CPUTYPE("Cortex-M3")</Cpu>
|
<Cpu>IRAM(0x20000000-0x20004FFF) IROM(0x8000000-0x801FFFF) CLOCK(8000000) CPUTYPE("Cortex-M3")</Cpu>
|
||||||
<FlashUtilSpec></FlashUtilSpec>
|
<FlashUtilSpec></FlashUtilSpec>
|
||||||
|
@ -184,460 +183,6 @@
|
||||||
<hadXRAM>0</hadXRAM>
|
<hadXRAM>0</hadXRAM>
|
||||||
<uocXRam>0</uocXRam>
|
<uocXRam>0</uocXRam>
|
||||||
<RvdsVP>0</RvdsVP>
|
<RvdsVP>0</RvdsVP>
|
||||||
<RvdsMve>0</RvdsMve>
|
|
||||||
<hadIRAM2>0</hadIRAM2>
|
|
||||||
<hadIROM2>0</hadIROM2>
|
|
||||||
<StupSel>8</StupSel>
|
|
||||||
<useUlib>1</useUlib>
|
|
||||||
<EndSel>0</EndSel>
|
|
||||||
<uLtcg>0</uLtcg>
|
|
||||||
<nSecure>0</nSecure>
|
|
||||||
<RoSelD>3</RoSelD>
|
|
||||||
<RwSelD>3</RwSelD>
|
|
||||||
<CodeSel>0</CodeSel>
|
|
||||||
<OptFeed>0</OptFeed>
|
|
||||||
<NoZi1>0</NoZi1>
|
|
||||||
<NoZi2>0</NoZi2>
|
|
||||||
<NoZi3>0</NoZi3>
|
|
||||||
<NoZi4>0</NoZi4>
|
|
||||||
<NoZi5>0</NoZi5>
|
|
||||||
<Ro1Chk>0</Ro1Chk>
|
|
||||||
<Ro2Chk>0</Ro2Chk>
|
|
||||||
<Ro3Chk>0</Ro3Chk>
|
|
||||||
<Ir1Chk>1</Ir1Chk>
|
|
||||||
<Ir2Chk>0</Ir2Chk>
|
|
||||||
<Ra1Chk>0</Ra1Chk>
|
|
||||||
<Ra2Chk>0</Ra2Chk>
|
|
||||||
<Ra3Chk>0</Ra3Chk>
|
|
||||||
<Im1Chk>1</Im1Chk>
|
|
||||||
<Im2Chk>0</Im2Chk>
|
|
||||||
<OnChipMemories>
|
|
||||||
<Ocm1>
|
|
||||||
<Type>0</Type>
|
|
||||||
<StartAddress>0x0</StartAddress>
|
|
||||||
<Size>0x0</Size>
|
|
||||||
</Ocm1>
|
|
||||||
<Ocm2>
|
|
||||||
<Type>0</Type>
|
|
||||||
<StartAddress>0x0</StartAddress>
|
|
||||||
<Size>0x0</Size>
|
|
||||||
</Ocm2>
|
|
||||||
<Ocm3>
|
|
||||||
<Type>0</Type>
|
|
||||||
<StartAddress>0x0</StartAddress>
|
|
||||||
<Size>0x0</Size>
|
|
||||||
</Ocm3>
|
|
||||||
<Ocm4>
|
|
||||||
<Type>0</Type>
|
|
||||||
<StartAddress>0x0</StartAddress>
|
|
||||||
<Size>0x0</Size>
|
|
||||||
</Ocm4>
|
|
||||||
<Ocm5>
|
|
||||||
<Type>0</Type>
|
|
||||||
<StartAddress>0x0</StartAddress>
|
|
||||||
<Size>0x0</Size>
|
|
||||||
</Ocm5>
|
|
||||||
<Ocm6>
|
|
||||||
<Type>0</Type>
|
|
||||||
<StartAddress>0x0</StartAddress>
|
|
||||||
<Size>0x0</Size>
|
|
||||||
</Ocm6>
|
|
||||||
<IRAM>
|
|
||||||
<Type>0</Type>
|
|
||||||
<StartAddress>0x20000000</StartAddress>
|
|
||||||
<Size>0x5000</Size>
|
|
||||||
</IRAM>
|
|
||||||
<IROM>
|
|
||||||
<Type>1</Type>
|
|
||||||
<StartAddress>0x8000000</StartAddress>
|
|
||||||
<Size>0x20000</Size>
|
|
||||||
</IROM>
|
|
||||||
<XRAM>
|
|
||||||
<Type>0</Type>
|
|
||||||
<StartAddress>0x0</StartAddress>
|
|
||||||
<Size>0x0</Size>
|
|
||||||
</XRAM>
|
|
||||||
<OCR_RVCT1>
|
|
||||||
<Type>1</Type>
|
|
||||||
<StartAddress>0x0</StartAddress>
|
|
||||||
<Size>0x0</Size>
|
|
||||||
</OCR_RVCT1>
|
|
||||||
<OCR_RVCT2>
|
|
||||||
<Type>1</Type>
|
|
||||||
<StartAddress>0x0</StartAddress>
|
|
||||||
<Size>0x0</Size>
|
|
||||||
</OCR_RVCT2>
|
|
||||||
<OCR_RVCT3>
|
|
||||||
<Type>1</Type>
|
|
||||||
<StartAddress>0x0</StartAddress>
|
|
||||||
<Size>0x0</Size>
|
|
||||||
</OCR_RVCT3>
|
|
||||||
<OCR_RVCT4>
|
|
||||||
<Type>1</Type>
|
|
||||||
<StartAddress>0x8000000</StartAddress>
|
|
||||||
<Size>0x20000</Size>
|
|
||||||
</OCR_RVCT4>
|
|
||||||
<OCR_RVCT5>
|
|
||||||
<Type>1</Type>
|
|
||||||
<StartAddress>0x0</StartAddress>
|
|
||||||
<Size>0x0</Size>
|
|
||||||
</OCR_RVCT5>
|
|
||||||
<OCR_RVCT6>
|
|
||||||
<Type>0</Type>
|
|
||||||
<StartAddress>0x0</StartAddress>
|
|
||||||
<Size>0x0</Size>
|
|
||||||
</OCR_RVCT6>
|
|
||||||
<OCR_RVCT7>
|
|
||||||
<Type>0</Type>
|
|
||||||
<StartAddress>0x0</StartAddress>
|
|
||||||
<Size>0x0</Size>
|
|
||||||
</OCR_RVCT7>
|
|
||||||
<OCR_RVCT8>
|
|
||||||
<Type>0</Type>
|
|
||||||
<StartAddress>0x0</StartAddress>
|
|
||||||
<Size>0x0</Size>
|
|
||||||
</OCR_RVCT8>
|
|
||||||
<OCR_RVCT9>
|
|
||||||
<Type>0</Type>
|
|
||||||
<StartAddress>0x20000000</StartAddress>
|
|
||||||
<Size>0x5000</Size>
|
|
||||||
</OCR_RVCT9>
|
|
||||||
<OCR_RVCT10>
|
|
||||||
<Type>0</Type>
|
|
||||||
<StartAddress>0x0</StartAddress>
|
|
||||||
<Size>0x0</Size>
|
|
||||||
</OCR_RVCT10>
|
|
||||||
</OnChipMemories>
|
|
||||||
<RvctStartVector></RvctStartVector>
|
|
||||||
</ArmAdsMisc>
|
|
||||||
<Cads>
|
|
||||||
<interw>1</interw>
|
|
||||||
<Optim>4</Optim>
|
|
||||||
<oTime>0</oTime>
|
|
||||||
<SplitLS>0</SplitLS>
|
|
||||||
<OneElfS>1</OneElfS>
|
|
||||||
<Strict>0</Strict>
|
|
||||||
<EnumInt>0</EnumInt>
|
|
||||||
<PlainCh>0</PlainCh>
|
|
||||||
<Ropi>0</Ropi>
|
|
||||||
<Rwpi>0</Rwpi>
|
|
||||||
<wLevel>2</wLevel>
|
|
||||||
<uThumb>0</uThumb>
|
|
||||||
<uSurpInc>0</uSurpInc>
|
|
||||||
<uC99>0</uC99>
|
|
||||||
<uGnu>0</uGnu>
|
|
||||||
<useXO>0</useXO>
|
|
||||||
<v6Lang>1</v6Lang>
|
|
||||||
<v6LangP>1</v6LangP>
|
|
||||||
<vShortEn>1</vShortEn>
|
|
||||||
<vShortWch>1</vShortWch>
|
|
||||||
<v6Lto>0</v6Lto>
|
|
||||||
<v6WtE>0</v6WtE>
|
|
||||||
<v6Rtti>0</v6Rtti>
|
|
||||||
<VariousControls>
|
|
||||||
<MiscControls>--C99</MiscControls>
|
|
||||||
<Define>STM32F103xB,USE_FULL_LL_DRIVER,HSE_VALUE=8000000U</Define>
|
|
||||||
<Undefine></Undefine>
|
|
||||||
<IncludePath>..\Inc;..\LLDrivers\inc;..\Services;..\MyDrivers</IncludePath>
|
|
||||||
</VariousControls>
|
|
||||||
</Cads>
|
|
||||||
<Aads>
|
|
||||||
<interw>1</interw>
|
|
||||||
<Ropi>0</Ropi>
|
|
||||||
<Rwpi>0</Rwpi>
|
|
||||||
<thumb>0</thumb>
|
|
||||||
<SplitLS>0</SplitLS>
|
|
||||||
<SwStkChk>0</SwStkChk>
|
|
||||||
<NoWarn>0</NoWarn>
|
|
||||||
<uSurpInc>0</uSurpInc>
|
|
||||||
<useXO>0</useXO>
|
|
||||||
<uClangAs>0</uClangAs>
|
|
||||||
<VariousControls>
|
|
||||||
<MiscControls></MiscControls>
|
|
||||||
<Define></Define>
|
|
||||||
<Undefine></Undefine>
|
|
||||||
<IncludePath></IncludePath>
|
|
||||||
</VariousControls>
|
|
||||||
</Aads>
|
|
||||||
<LDads>
|
|
||||||
<umfTarg>1</umfTarg>
|
|
||||||
<Ropi>0</Ropi>
|
|
||||||
<Rwpi>0</Rwpi>
|
|
||||||
<noStLib>0</noStLib>
|
|
||||||
<RepFail>1</RepFail>
|
|
||||||
<useFile>0</useFile>
|
|
||||||
<TextAddressRange>0x08000000</TextAddressRange>
|
|
||||||
<DataAddressRange>0x20000000</DataAddressRange>
|
|
||||||
<pXoBase></pXoBase>
|
|
||||||
<ScatterFile></ScatterFile>
|
|
||||||
<IncludeLibs></IncludeLibs>
|
|
||||||
<IncludeLibsPath></IncludeLibsPath>
|
|
||||||
<Misc></Misc>
|
|
||||||
<LinkerInputFile></LinkerInputFile>
|
|
||||||
<DisabledWarnings></DisabledWarnings>
|
|
||||||
</LDads>
|
|
||||||
</TargetArmAds>
|
|
||||||
</TargetOption>
|
|
||||||
<Groups>
|
|
||||||
<Group>
|
|
||||||
<GroupName>User Application</GroupName>
|
|
||||||
<Files>
|
|
||||||
<File>
|
|
||||||
<FileName>main.c</FileName>
|
|
||||||
<FileType>1</FileType>
|
|
||||||
<FilePath>../Src/main.c</FilePath>
|
|
||||||
</File>
|
|
||||||
</Files>
|
|
||||||
</Group>
|
|
||||||
<Group>
|
|
||||||
<GroupName>User Services</GroupName>
|
|
||||||
<Files>
|
|
||||||
<File>
|
|
||||||
<FileName>Chrono.c</FileName>
|
|
||||||
<FileType>1</FileType>
|
|
||||||
<FilePath>..\Services\Chrono.c</FilePath>
|
|
||||||
</File>
|
|
||||||
</Files>
|
|
||||||
</Group>
|
|
||||||
<Group>
|
|
||||||
<GroupName>MyDrivers</GroupName>
|
|
||||||
<Files>
|
|
||||||
<File>
|
|
||||||
<FileName>MyTimer.c</FileName>
|
|
||||||
<FileType>1</FileType>
|
|
||||||
<FilePath>..\MyDrivers\MyTimer.c</FilePath>
|
|
||||||
</File>
|
|
||||||
</Files>
|
|
||||||
</Group>
|
|
||||||
<Group>
|
|
||||||
<GroupName>Drivers/STM32f1xx_LL_Driver</GroupName>
|
|
||||||
<Files>
|
|
||||||
<File>
|
|
||||||
<FileName>stm32f1xx_ll_rcc.c</FileName>
|
|
||||||
<FileType>1</FileType>
|
|
||||||
<FilePath>..\LLDrivers\src\stm32f1xx_ll_rcc.c</FilePath>
|
|
||||||
</File>
|
|
||||||
<File>
|
|
||||||
<FileName>stm32f1xx_ll_utils.c</FileName>
|
|
||||||
<FileType>1</FileType>
|
|
||||||
<FilePath>..\LLDrivers\src\stm32f1xx_ll_utils.c</FilePath>
|
|
||||||
</File>
|
|
||||||
</Files>
|
|
||||||
</Group>
|
|
||||||
<Group>
|
|
||||||
<GroupName>Doc</GroupName>
|
|
||||||
<Files>
|
|
||||||
<File>
|
|
||||||
<FileName>readme.txt</FileName>
|
|
||||||
<FileType>5</FileType>
|
|
||||||
<FilePath>../readme.txt</FilePath>
|
|
||||||
</File>
|
|
||||||
</Files>
|
|
||||||
</Group>
|
|
||||||
<Group>
|
|
||||||
<GroupName>Drivers/CMSIS</GroupName>
|
|
||||||
<Files>
|
|
||||||
<File>
|
|
||||||
<FileName>system_stm32f1xx.c</FileName>
|
|
||||||
<FileType>1</FileType>
|
|
||||||
<FilePath>../Src/system_stm32f1xx.c</FilePath>
|
|
||||||
</File>
|
|
||||||
</Files>
|
|
||||||
</Group>
|
|
||||||
<Group>
|
|
||||||
<GroupName>Example/MDK-ARM</GroupName>
|
|
||||||
<Files>
|
|
||||||
<File>
|
|
||||||
<FileName>startup_stm32f103xb.s</FileName>
|
|
||||||
<FileType>2</FileType>
|
|
||||||
<FilePath>startup_stm32f103xb.s</FilePath>
|
|
||||||
</File>
|
|
||||||
</Files>
|
|
||||||
</Group>
|
|
||||||
<Group>
|
|
||||||
<GroupName>::CMSIS</GroupName>
|
|
||||||
</Group>
|
|
||||||
</Groups>
|
|
||||||
</Target>
|
|
||||||
<Target>
|
|
||||||
<TargetName>Simulateur</TargetName>
|
|
||||||
<ToolsetNumber>0x4</ToolsetNumber>
|
|
||||||
<ToolsetName>ARM-ADS</ToolsetName>
|
|
||||||
<pCCUsed>5060750::V5.06 update 6 (build 750)::ARMCC</pCCUsed>
|
|
||||||
<uAC6>0</uAC6>
|
|
||||||
<TargetOption>
|
|
||||||
<TargetCommonOption>
|
|
||||||
<Device>STM32F103RB</Device>
|
|
||||||
<Vendor>STMicroelectronics</Vendor>
|
|
||||||
<PackID>Keil.STM32F1xx_DFP.2.3.0</PackID>
|
|
||||||
<PackURL>http://www.keil.com/pack/</PackURL>
|
|
||||||
<Cpu>IRAM(0x20000000-0x20004FFF) IROM(0x8000000-0x801FFFF) CLOCK(8000000) CPUTYPE("Cortex-M3")</Cpu>
|
|
||||||
<FlashUtilSpec></FlashUtilSpec>
|
|
||||||
<StartupFile></StartupFile>
|
|
||||||
<FlashDriverDll></FlashDriverDll>
|
|
||||||
<DeviceId></DeviceId>
|
|
||||||
<RegisterFile></RegisterFile>
|
|
||||||
<MemoryEnv></MemoryEnv>
|
|
||||||
<Cmp></Cmp>
|
|
||||||
<Asm></Asm>
|
|
||||||
<Linker></Linker>
|
|
||||||
<OHString></OHString>
|
|
||||||
<InfinionOptionDll></InfinionOptionDll>
|
|
||||||
<SLE66CMisc></SLE66CMisc>
|
|
||||||
<SLE66AMisc></SLE66AMisc>
|
|
||||||
<SLE66LinkerMisc></SLE66LinkerMisc>
|
|
||||||
<SFDFile>$$Device:STM32F103RB$SVD\STM32F103xx.svd</SFDFile>
|
|
||||||
<bCustSvd>0</bCustSvd>
|
|
||||||
<UseEnv>0</UseEnv>
|
|
||||||
<BinPath></BinPath>
|
|
||||||
<IncludePath></IncludePath>
|
|
||||||
<LibPath></LibPath>
|
|
||||||
<RegisterFilePath></RegisterFilePath>
|
|
||||||
<DBRegisterFilePath></DBRegisterFilePath>
|
|
||||||
<TargetStatus>
|
|
||||||
<Error>0</Error>
|
|
||||||
<ExitCodeStop>0</ExitCodeStop>
|
|
||||||
<ButtonStop>0</ButtonStop>
|
|
||||||
<NotGenerated>0</NotGenerated>
|
|
||||||
<InvalidFlash>1</InvalidFlash>
|
|
||||||
</TargetStatus>
|
|
||||||
<OutputDirectory>NUCLEO-F103RB\</OutputDirectory>
|
|
||||||
<OutputName>NUCLEO-F103RB</OutputName>
|
|
||||||
<CreateExecutable>1</CreateExecutable>
|
|
||||||
<CreateLib>0</CreateLib>
|
|
||||||
<CreateHexFile>0</CreateHexFile>
|
|
||||||
<DebugInformation>1</DebugInformation>
|
|
||||||
<BrowseInformation>1</BrowseInformation>
|
|
||||||
<ListingPath></ListingPath>
|
|
||||||
<HexFormatSelection>1</HexFormatSelection>
|
|
||||||
<Merge32K>0</Merge32K>
|
|
||||||
<CreateBatchFile>0</CreateBatchFile>
|
|
||||||
<BeforeCompile>
|
|
||||||
<RunUserProg1>0</RunUserProg1>
|
|
||||||
<RunUserProg2>0</RunUserProg2>
|
|
||||||
<UserProg1Name></UserProg1Name>
|
|
||||||
<UserProg2Name></UserProg2Name>
|
|
||||||
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
|
|
||||||
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
|
|
||||||
<nStopU1X>0</nStopU1X>
|
|
||||||
<nStopU2X>0</nStopU2X>
|
|
||||||
</BeforeCompile>
|
|
||||||
<BeforeMake>
|
|
||||||
<RunUserProg1>0</RunUserProg1>
|
|
||||||
<RunUserProg2>0</RunUserProg2>
|
|
||||||
<UserProg1Name></UserProg1Name>
|
|
||||||
<UserProg2Name></UserProg2Name>
|
|
||||||
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
|
|
||||||
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
|
|
||||||
<nStopB1X>0</nStopB1X>
|
|
||||||
<nStopB2X>0</nStopB2X>
|
|
||||||
</BeforeMake>
|
|
||||||
<AfterMake>
|
|
||||||
<RunUserProg1>0</RunUserProg1>
|
|
||||||
<RunUserProg2>0</RunUserProg2>
|
|
||||||
<UserProg1Name></UserProg1Name>
|
|
||||||
<UserProg2Name></UserProg2Name>
|
|
||||||
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
|
|
||||||
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
|
|
||||||
<nStopA1X>0</nStopA1X>
|
|
||||||
<nStopA2X>0</nStopA2X>
|
|
||||||
</AfterMake>
|
|
||||||
<SelectedForBatchBuild>0</SelectedForBatchBuild>
|
|
||||||
<SVCSIdString></SVCSIdString>
|
|
||||||
</TargetCommonOption>
|
|
||||||
<CommonProperty>
|
|
||||||
<UseCPPCompiler>0</UseCPPCompiler>
|
|
||||||
<RVCTCodeConst>0</RVCTCodeConst>
|
|
||||||
<RVCTZI>0</RVCTZI>
|
|
||||||
<RVCTOtherData>0</RVCTOtherData>
|
|
||||||
<ModuleSelection>0</ModuleSelection>
|
|
||||||
<IncludeInBuild>1</IncludeInBuild>
|
|
||||||
<AlwaysBuild>0</AlwaysBuild>
|
|
||||||
<GenerateAssemblyFile>0</GenerateAssemblyFile>
|
|
||||||
<AssembleAssemblyFile>0</AssembleAssemblyFile>
|
|
||||||
<PublicsOnly>0</PublicsOnly>
|
|
||||||
<StopOnExitCode>3</StopOnExitCode>
|
|
||||||
<CustomArgument></CustomArgument>
|
|
||||||
<IncludeLibraryModules></IncludeLibraryModules>
|
|
||||||
<ComprImg>0</ComprImg>
|
|
||||||
</CommonProperty>
|
|
||||||
<DllOption>
|
|
||||||
<SimDllName>SARMCM3.DLL</SimDllName>
|
|
||||||
<SimDllArguments></SimDllArguments>
|
|
||||||
<SimDlgDll>DARMSTM.DLL</SimDlgDll>
|
|
||||||
<SimDlgDllArguments>-pSTM32F103RB</SimDlgDllArguments>
|
|
||||||
<TargetDllName>SARMCM3.DLL</TargetDllName>
|
|
||||||
<TargetDllArguments></TargetDllArguments>
|
|
||||||
<TargetDlgDll>TARMSTM.DLL</TargetDlgDll>
|
|
||||||
<TargetDlgDllArguments>-pSTM32F103RB</TargetDlgDllArguments>
|
|
||||||
</DllOption>
|
|
||||||
<DebugOption>
|
|
||||||
<OPTHX>
|
|
||||||
<HexSelection>1</HexSelection>
|
|
||||||
<HexRangeLowAddress>0</HexRangeLowAddress>
|
|
||||||
<HexRangeHighAddress>0</HexRangeHighAddress>
|
|
||||||
<HexOffset>0</HexOffset>
|
|
||||||
<Oh166RecLen>16</Oh166RecLen>
|
|
||||||
</OPTHX>
|
|
||||||
</DebugOption>
|
|
||||||
<Utilities>
|
|
||||||
<Flash1>
|
|
||||||
<UseTargetDll>1</UseTargetDll>
|
|
||||||
<UseExternalTool>0</UseExternalTool>
|
|
||||||
<RunIndependent>0</RunIndependent>
|
|
||||||
<UpdateFlashBeforeDebugging>1</UpdateFlashBeforeDebugging>
|
|
||||||
<Capability>1</Capability>
|
|
||||||
<DriverSelection>4107</DriverSelection>
|
|
||||||
</Flash1>
|
|
||||||
<bUseTDR>1</bUseTDR>
|
|
||||||
<Flash2>STLink\ST-LINKIII-KEIL_SWO.dll</Flash2>
|
|
||||||
<Flash3></Flash3>
|
|
||||||
<Flash4></Flash4>
|
|
||||||
<pFcarmOut></pFcarmOut>
|
|
||||||
<pFcarmGrp></pFcarmGrp>
|
|
||||||
<pFcArmRoot></pFcArmRoot>
|
|
||||||
<FcArmLst>0</FcArmLst>
|
|
||||||
</Utilities>
|
|
||||||
<TargetArmAds>
|
|
||||||
<ArmAdsMisc>
|
|
||||||
<GenerateListings>0</GenerateListings>
|
|
||||||
<asHll>1</asHll>
|
|
||||||
<asAsm>1</asAsm>
|
|
||||||
<asMacX>1</asMacX>
|
|
||||||
<asSyms>1</asSyms>
|
|
||||||
<asFals>1</asFals>
|
|
||||||
<asDbgD>1</asDbgD>
|
|
||||||
<asForm>1</asForm>
|
|
||||||
<ldLst>0</ldLst>
|
|
||||||
<ldmm>1</ldmm>
|
|
||||||
<ldXref>1</ldXref>
|
|
||||||
<BigEnd>0</BigEnd>
|
|
||||||
<AdsALst>1</AdsALst>
|
|
||||||
<AdsACrf>1</AdsACrf>
|
|
||||||
<AdsANop>0</AdsANop>
|
|
||||||
<AdsANot>0</AdsANot>
|
|
||||||
<AdsLLst>1</AdsLLst>
|
|
||||||
<AdsLmap>1</AdsLmap>
|
|
||||||
<AdsLcgr>1</AdsLcgr>
|
|
||||||
<AdsLsym>1</AdsLsym>
|
|
||||||
<AdsLszi>1</AdsLszi>
|
|
||||||
<AdsLtoi>1</AdsLtoi>
|
|
||||||
<AdsLsun>1</AdsLsun>
|
|
||||||
<AdsLven>1</AdsLven>
|
|
||||||
<AdsLsxf>1</AdsLsxf>
|
|
||||||
<RvctClst>0</RvctClst>
|
|
||||||
<GenPPlst>0</GenPPlst>
|
|
||||||
<AdsCpuType>"Cortex-M3"</AdsCpuType>
|
|
||||||
<RvctDeviceName></RvctDeviceName>
|
|
||||||
<mOS>0</mOS>
|
|
||||||
<uocRom>0</uocRom>
|
|
||||||
<uocRam>0</uocRam>
|
|
||||||
<hadIROM>1</hadIROM>
|
|
||||||
<hadIRAM>1</hadIRAM>
|
|
||||||
<hadXRAM>0</hadXRAM>
|
|
||||||
<uocXRam>0</uocXRam>
|
|
||||||
<RvdsVP>0</RvdsVP>
|
|
||||||
<RvdsMve>0</RvdsMve>
|
|
||||||
<hadIRAM2>0</hadIRAM2>
|
<hadIRAM2>0</hadIRAM2>
|
||||||
<hadIROM2>0</hadIROM2>
|
<hadIROM2>0</hadIROM2>
|
||||||
<StupSel>8</StupSel>
|
<StupSel>8</StupSel>
|
||||||
|
@ -778,7 +323,6 @@
|
||||||
<uThumb>0</uThumb>
|
<uThumb>0</uThumb>
|
||||||
<uSurpInc>0</uSurpInc>
|
<uSurpInc>0</uSurpInc>
|
||||||
<uC99>0</uC99>
|
<uC99>0</uC99>
|
||||||
<uGnu>0</uGnu>
|
|
||||||
<useXO>0</useXO>
|
<useXO>0</useXO>
|
||||||
<v6Lang>1</v6Lang>
|
<v6Lang>1</v6Lang>
|
||||||
<v6LangP>1</v6LangP>
|
<v6LangP>1</v6LangP>
|
||||||
|
@ -789,7 +333,7 @@
|
||||||
<v6Rtti>0</v6Rtti>
|
<v6Rtti>0</v6Rtti>
|
||||||
<VariousControls>
|
<VariousControls>
|
||||||
<MiscControls>--C99</MiscControls>
|
<MiscControls>--C99</MiscControls>
|
||||||
<Define>STM32F103xB,USE_FULL_LL_DRIVER,HSE_VALUE=8000000U</Define>
|
<Define>STM32F103xB,USE_FULL_LL_DRIVER,HSE_VALUE=8000000U,USE_FULL_ASSERT</Define>
|
||||||
<Undefine></Undefine>
|
<Undefine></Undefine>
|
||||||
<IncludePath>..\Inc;..\LLDrivers\inc;..\Services;..\MyDrivers</IncludePath>
|
<IncludePath>..\Inc;..\LLDrivers\inc;..\Services;..\MyDrivers</IncludePath>
|
||||||
</VariousControls>
|
</VariousControls>
|
||||||
|
@ -875,6 +419,466 @@
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<FilePath>..\LLDrivers\src\stm32f1xx_ll_utils.c</FilePath>
|
<FilePath>..\LLDrivers\src\stm32f1xx_ll_utils.c</FilePath>
|
||||||
</File>
|
</File>
|
||||||
|
<File>
|
||||||
|
<FileName>stm32f1xx_ll_tim.c</FileName>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<FilePath>..\LLDrivers\src\stm32f1xx_ll_tim.c</FilePath>
|
||||||
|
</File>
|
||||||
|
</Files>
|
||||||
|
</Group>
|
||||||
|
<Group>
|
||||||
|
<GroupName>Doc</GroupName>
|
||||||
|
<Files>
|
||||||
|
<File>
|
||||||
|
<FileName>readme.txt</FileName>
|
||||||
|
<FileType>5</FileType>
|
||||||
|
<FilePath>../readme.txt</FilePath>
|
||||||
|
</File>
|
||||||
|
</Files>
|
||||||
|
</Group>
|
||||||
|
<Group>
|
||||||
|
<GroupName>Drivers/CMSIS</GroupName>
|
||||||
|
<Files>
|
||||||
|
<File>
|
||||||
|
<FileName>system_stm32f1xx.c</FileName>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<FilePath>../Src/system_stm32f1xx.c</FilePath>
|
||||||
|
</File>
|
||||||
|
</Files>
|
||||||
|
</Group>
|
||||||
|
<Group>
|
||||||
|
<GroupName>Example/MDK-ARM</GroupName>
|
||||||
|
<Files>
|
||||||
|
<File>
|
||||||
|
<FileName>startup_stm32f103xb.s</FileName>
|
||||||
|
<FileType>2</FileType>
|
||||||
|
<FilePath>startup_stm32f103xb.s</FilePath>
|
||||||
|
</File>
|
||||||
|
</Files>
|
||||||
|
</Group>
|
||||||
|
<Group>
|
||||||
|
<GroupName>::CMSIS</GroupName>
|
||||||
|
</Group>
|
||||||
|
</Groups>
|
||||||
|
</Target>
|
||||||
|
<Target>
|
||||||
|
<TargetName>Simulateur</TargetName>
|
||||||
|
<ToolsetNumber>0x4</ToolsetNumber>
|
||||||
|
<ToolsetName>ARM-ADS</ToolsetName>
|
||||||
|
<pCCUsed>5060422::V5.06 update 4 (build 422)::ARMCC</pCCUsed>
|
||||||
|
<TargetOption>
|
||||||
|
<TargetCommonOption>
|
||||||
|
<Device>STM32F103RB</Device>
|
||||||
|
<Vendor>STMicroelectronics</Vendor>
|
||||||
|
<PackID>Keil.STM32F1xx_DFP.2.2.0</PackID>
|
||||||
|
<PackURL>http://www.keil.com/pack/</PackURL>
|
||||||
|
<Cpu>IRAM(0x20000000-0x20004FFF) IROM(0x8000000-0x801FFFF) CLOCK(8000000) CPUTYPE("Cortex-M3")</Cpu>
|
||||||
|
<FlashUtilSpec></FlashUtilSpec>
|
||||||
|
<StartupFile></StartupFile>
|
||||||
|
<FlashDriverDll></FlashDriverDll>
|
||||||
|
<DeviceId></DeviceId>
|
||||||
|
<RegisterFile></RegisterFile>
|
||||||
|
<MemoryEnv></MemoryEnv>
|
||||||
|
<Cmp></Cmp>
|
||||||
|
<Asm></Asm>
|
||||||
|
<Linker></Linker>
|
||||||
|
<OHString></OHString>
|
||||||
|
<InfinionOptionDll></InfinionOptionDll>
|
||||||
|
<SLE66CMisc></SLE66CMisc>
|
||||||
|
<SLE66AMisc></SLE66AMisc>
|
||||||
|
<SLE66LinkerMisc></SLE66LinkerMisc>
|
||||||
|
<SFDFile>$$Device:STM32F103RB$SVD\STM32F103xx.svd</SFDFile>
|
||||||
|
<bCustSvd>0</bCustSvd>
|
||||||
|
<UseEnv>0</UseEnv>
|
||||||
|
<BinPath></BinPath>
|
||||||
|
<IncludePath></IncludePath>
|
||||||
|
<LibPath></LibPath>
|
||||||
|
<RegisterFilePath></RegisterFilePath>
|
||||||
|
<DBRegisterFilePath></DBRegisterFilePath>
|
||||||
|
<TargetStatus>
|
||||||
|
<Error>0</Error>
|
||||||
|
<ExitCodeStop>0</ExitCodeStop>
|
||||||
|
<ButtonStop>0</ButtonStop>
|
||||||
|
<NotGenerated>0</NotGenerated>
|
||||||
|
<InvalidFlash>1</InvalidFlash>
|
||||||
|
</TargetStatus>
|
||||||
|
<OutputDirectory>NUCLEO-F103RB\</OutputDirectory>
|
||||||
|
<OutputName>NUCLEO-F103RB</OutputName>
|
||||||
|
<CreateExecutable>1</CreateExecutable>
|
||||||
|
<CreateLib>0</CreateLib>
|
||||||
|
<CreateHexFile>0</CreateHexFile>
|
||||||
|
<DebugInformation>1</DebugInformation>
|
||||||
|
<BrowseInformation>1</BrowseInformation>
|
||||||
|
<ListingPath></ListingPath>
|
||||||
|
<HexFormatSelection>1</HexFormatSelection>
|
||||||
|
<Merge32K>0</Merge32K>
|
||||||
|
<CreateBatchFile>0</CreateBatchFile>
|
||||||
|
<BeforeCompile>
|
||||||
|
<RunUserProg1>0</RunUserProg1>
|
||||||
|
<RunUserProg2>0</RunUserProg2>
|
||||||
|
<UserProg1Name></UserProg1Name>
|
||||||
|
<UserProg2Name></UserProg2Name>
|
||||||
|
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
|
||||||
|
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
|
||||||
|
<nStopU1X>0</nStopU1X>
|
||||||
|
<nStopU2X>0</nStopU2X>
|
||||||
|
</BeforeCompile>
|
||||||
|
<BeforeMake>
|
||||||
|
<RunUserProg1>0</RunUserProg1>
|
||||||
|
<RunUserProg2>0</RunUserProg2>
|
||||||
|
<UserProg1Name></UserProg1Name>
|
||||||
|
<UserProg2Name></UserProg2Name>
|
||||||
|
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
|
||||||
|
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
|
||||||
|
<nStopB1X>0</nStopB1X>
|
||||||
|
<nStopB2X>0</nStopB2X>
|
||||||
|
</BeforeMake>
|
||||||
|
<AfterMake>
|
||||||
|
<RunUserProg1>0</RunUserProg1>
|
||||||
|
<RunUserProg2>0</RunUserProg2>
|
||||||
|
<UserProg1Name></UserProg1Name>
|
||||||
|
<UserProg2Name></UserProg2Name>
|
||||||
|
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
|
||||||
|
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
|
||||||
|
<nStopA1X>0</nStopA1X>
|
||||||
|
<nStopA2X>0</nStopA2X>
|
||||||
|
</AfterMake>
|
||||||
|
<SelectedForBatchBuild>0</SelectedForBatchBuild>
|
||||||
|
<SVCSIdString></SVCSIdString>
|
||||||
|
</TargetCommonOption>
|
||||||
|
<CommonProperty>
|
||||||
|
<UseCPPCompiler>0</UseCPPCompiler>
|
||||||
|
<RVCTCodeConst>0</RVCTCodeConst>
|
||||||
|
<RVCTZI>0</RVCTZI>
|
||||||
|
<RVCTOtherData>0</RVCTOtherData>
|
||||||
|
<ModuleSelection>0</ModuleSelection>
|
||||||
|
<IncludeInBuild>1</IncludeInBuild>
|
||||||
|
<AlwaysBuild>0</AlwaysBuild>
|
||||||
|
<GenerateAssemblyFile>0</GenerateAssemblyFile>
|
||||||
|
<AssembleAssemblyFile>0</AssembleAssemblyFile>
|
||||||
|
<PublicsOnly>0</PublicsOnly>
|
||||||
|
<StopOnExitCode>3</StopOnExitCode>
|
||||||
|
<CustomArgument></CustomArgument>
|
||||||
|
<IncludeLibraryModules></IncludeLibraryModules>
|
||||||
|
<ComprImg>0</ComprImg>
|
||||||
|
</CommonProperty>
|
||||||
|
<DllOption>
|
||||||
|
<SimDllName>SARMCM3.DLL</SimDllName>
|
||||||
|
<SimDllArguments></SimDllArguments>
|
||||||
|
<SimDlgDll>DARMSTM.DLL</SimDlgDll>
|
||||||
|
<SimDlgDllArguments>-pSTM32F103RB</SimDlgDllArguments>
|
||||||
|
<TargetDllName>SARMCM3.DLL</TargetDllName>
|
||||||
|
<TargetDllArguments></TargetDllArguments>
|
||||||
|
<TargetDlgDll>TARMSTM.DLL</TargetDlgDll>
|
||||||
|
<TargetDlgDllArguments>-pSTM32F103RB</TargetDlgDllArguments>
|
||||||
|
</DllOption>
|
||||||
|
<DebugOption>
|
||||||
|
<OPTHX>
|
||||||
|
<HexSelection>1</HexSelection>
|
||||||
|
<HexRangeLowAddress>0</HexRangeLowAddress>
|
||||||
|
<HexRangeHighAddress>0</HexRangeHighAddress>
|
||||||
|
<HexOffset>0</HexOffset>
|
||||||
|
<Oh166RecLen>16</Oh166RecLen>
|
||||||
|
</OPTHX>
|
||||||
|
</DebugOption>
|
||||||
|
<Utilities>
|
||||||
|
<Flash1>
|
||||||
|
<UseTargetDll>1</UseTargetDll>
|
||||||
|
<UseExternalTool>0</UseExternalTool>
|
||||||
|
<RunIndependent>0</RunIndependent>
|
||||||
|
<UpdateFlashBeforeDebugging>1</UpdateFlashBeforeDebugging>
|
||||||
|
<Capability>1</Capability>
|
||||||
|
<DriverSelection>4107</DriverSelection>
|
||||||
|
</Flash1>
|
||||||
|
<bUseTDR>1</bUseTDR>
|
||||||
|
<Flash2>STLink\ST-LINKIII-KEIL_SWO.dll</Flash2>
|
||||||
|
<Flash3></Flash3>
|
||||||
|
<Flash4></Flash4>
|
||||||
|
<pFcarmOut></pFcarmOut>
|
||||||
|
<pFcarmGrp></pFcarmGrp>
|
||||||
|
<pFcArmRoot></pFcArmRoot>
|
||||||
|
<FcArmLst>0</FcArmLst>
|
||||||
|
</Utilities>
|
||||||
|
<TargetArmAds>
|
||||||
|
<ArmAdsMisc>
|
||||||
|
<GenerateListings>0</GenerateListings>
|
||||||
|
<asHll>1</asHll>
|
||||||
|
<asAsm>1</asAsm>
|
||||||
|
<asMacX>1</asMacX>
|
||||||
|
<asSyms>1</asSyms>
|
||||||
|
<asFals>1</asFals>
|
||||||
|
<asDbgD>1</asDbgD>
|
||||||
|
<asForm>1</asForm>
|
||||||
|
<ldLst>0</ldLst>
|
||||||
|
<ldmm>1</ldmm>
|
||||||
|
<ldXref>1</ldXref>
|
||||||
|
<BigEnd>0</BigEnd>
|
||||||
|
<AdsALst>1</AdsALst>
|
||||||
|
<AdsACrf>1</AdsACrf>
|
||||||
|
<AdsANop>0</AdsANop>
|
||||||
|
<AdsANot>0</AdsANot>
|
||||||
|
<AdsLLst>1</AdsLLst>
|
||||||
|
<AdsLmap>1</AdsLmap>
|
||||||
|
<AdsLcgr>1</AdsLcgr>
|
||||||
|
<AdsLsym>1</AdsLsym>
|
||||||
|
<AdsLszi>1</AdsLszi>
|
||||||
|
<AdsLtoi>1</AdsLtoi>
|
||||||
|
<AdsLsun>1</AdsLsun>
|
||||||
|
<AdsLven>1</AdsLven>
|
||||||
|
<AdsLsxf>1</AdsLsxf>
|
||||||
|
<RvctClst>0</RvctClst>
|
||||||
|
<GenPPlst>0</GenPPlst>
|
||||||
|
<AdsCpuType>"Cortex-M3"</AdsCpuType>
|
||||||
|
<RvctDeviceName></RvctDeviceName>
|
||||||
|
<mOS>0</mOS>
|
||||||
|
<uocRom>0</uocRom>
|
||||||
|
<uocRam>0</uocRam>
|
||||||
|
<hadIROM>1</hadIROM>
|
||||||
|
<hadIRAM>1</hadIRAM>
|
||||||
|
<hadXRAM>0</hadXRAM>
|
||||||
|
<uocXRam>0</uocXRam>
|
||||||
|
<RvdsVP>0</RvdsVP>
|
||||||
|
<hadIRAM2>0</hadIRAM2>
|
||||||
|
<hadIROM2>0</hadIROM2>
|
||||||
|
<StupSel>8</StupSel>
|
||||||
|
<useUlib>1</useUlib>
|
||||||
|
<EndSel>0</EndSel>
|
||||||
|
<uLtcg>0</uLtcg>
|
||||||
|
<nSecure>0</nSecure>
|
||||||
|
<RoSelD>3</RoSelD>
|
||||||
|
<RwSelD>3</RwSelD>
|
||||||
|
<CodeSel>0</CodeSel>
|
||||||
|
<OptFeed>0</OptFeed>
|
||||||
|
<NoZi1>0</NoZi1>
|
||||||
|
<NoZi2>0</NoZi2>
|
||||||
|
<NoZi3>0</NoZi3>
|
||||||
|
<NoZi4>0</NoZi4>
|
||||||
|
<NoZi5>0</NoZi5>
|
||||||
|
<Ro1Chk>0</Ro1Chk>
|
||||||
|
<Ro2Chk>0</Ro2Chk>
|
||||||
|
<Ro3Chk>0</Ro3Chk>
|
||||||
|
<Ir1Chk>1</Ir1Chk>
|
||||||
|
<Ir2Chk>0</Ir2Chk>
|
||||||
|
<Ra1Chk>0</Ra1Chk>
|
||||||
|
<Ra2Chk>0</Ra2Chk>
|
||||||
|
<Ra3Chk>0</Ra3Chk>
|
||||||
|
<Im1Chk>1</Im1Chk>
|
||||||
|
<Im2Chk>0</Im2Chk>
|
||||||
|
<OnChipMemories>
|
||||||
|
<Ocm1>
|
||||||
|
<Type>0</Type>
|
||||||
|
<StartAddress>0x0</StartAddress>
|
||||||
|
<Size>0x0</Size>
|
||||||
|
</Ocm1>
|
||||||
|
<Ocm2>
|
||||||
|
<Type>0</Type>
|
||||||
|
<StartAddress>0x0</StartAddress>
|
||||||
|
<Size>0x0</Size>
|
||||||
|
</Ocm2>
|
||||||
|
<Ocm3>
|
||||||
|
<Type>0</Type>
|
||||||
|
<StartAddress>0x0</StartAddress>
|
||||||
|
<Size>0x0</Size>
|
||||||
|
</Ocm3>
|
||||||
|
<Ocm4>
|
||||||
|
<Type>0</Type>
|
||||||
|
<StartAddress>0x0</StartAddress>
|
||||||
|
<Size>0x0</Size>
|
||||||
|
</Ocm4>
|
||||||
|
<Ocm5>
|
||||||
|
<Type>0</Type>
|
||||||
|
<StartAddress>0x0</StartAddress>
|
||||||
|
<Size>0x0</Size>
|
||||||
|
</Ocm5>
|
||||||
|
<Ocm6>
|
||||||
|
<Type>0</Type>
|
||||||
|
<StartAddress>0x0</StartAddress>
|
||||||
|
<Size>0x0</Size>
|
||||||
|
</Ocm6>
|
||||||
|
<IRAM>
|
||||||
|
<Type>0</Type>
|
||||||
|
<StartAddress>0x20000000</StartAddress>
|
||||||
|
<Size>0x5000</Size>
|
||||||
|
</IRAM>
|
||||||
|
<IROM>
|
||||||
|
<Type>1</Type>
|
||||||
|
<StartAddress>0x8000000</StartAddress>
|
||||||
|
<Size>0x20000</Size>
|
||||||
|
</IROM>
|
||||||
|
<XRAM>
|
||||||
|
<Type>0</Type>
|
||||||
|
<StartAddress>0x0</StartAddress>
|
||||||
|
<Size>0x0</Size>
|
||||||
|
</XRAM>
|
||||||
|
<OCR_RVCT1>
|
||||||
|
<Type>1</Type>
|
||||||
|
<StartAddress>0x0</StartAddress>
|
||||||
|
<Size>0x0</Size>
|
||||||
|
</OCR_RVCT1>
|
||||||
|
<OCR_RVCT2>
|
||||||
|
<Type>1</Type>
|
||||||
|
<StartAddress>0x0</StartAddress>
|
||||||
|
<Size>0x0</Size>
|
||||||
|
</OCR_RVCT2>
|
||||||
|
<OCR_RVCT3>
|
||||||
|
<Type>1</Type>
|
||||||
|
<StartAddress>0x0</StartAddress>
|
||||||
|
<Size>0x0</Size>
|
||||||
|
</OCR_RVCT3>
|
||||||
|
<OCR_RVCT4>
|
||||||
|
<Type>1</Type>
|
||||||
|
<StartAddress>0x8000000</StartAddress>
|
||||||
|
<Size>0x20000</Size>
|
||||||
|
</OCR_RVCT4>
|
||||||
|
<OCR_RVCT5>
|
||||||
|
<Type>1</Type>
|
||||||
|
<StartAddress>0x0</StartAddress>
|
||||||
|
<Size>0x0</Size>
|
||||||
|
</OCR_RVCT5>
|
||||||
|
<OCR_RVCT6>
|
||||||
|
<Type>0</Type>
|
||||||
|
<StartAddress>0x0</StartAddress>
|
||||||
|
<Size>0x0</Size>
|
||||||
|
</OCR_RVCT6>
|
||||||
|
<OCR_RVCT7>
|
||||||
|
<Type>0</Type>
|
||||||
|
<StartAddress>0x0</StartAddress>
|
||||||
|
<Size>0x0</Size>
|
||||||
|
</OCR_RVCT7>
|
||||||
|
<OCR_RVCT8>
|
||||||
|
<Type>0</Type>
|
||||||
|
<StartAddress>0x0</StartAddress>
|
||||||
|
<Size>0x0</Size>
|
||||||
|
</OCR_RVCT8>
|
||||||
|
<OCR_RVCT9>
|
||||||
|
<Type>0</Type>
|
||||||
|
<StartAddress>0x20000000</StartAddress>
|
||||||
|
<Size>0x5000</Size>
|
||||||
|
</OCR_RVCT9>
|
||||||
|
<OCR_RVCT10>
|
||||||
|
<Type>0</Type>
|
||||||
|
<StartAddress>0x0</StartAddress>
|
||||||
|
<Size>0x0</Size>
|
||||||
|
</OCR_RVCT10>
|
||||||
|
</OnChipMemories>
|
||||||
|
<RvctStartVector></RvctStartVector>
|
||||||
|
</ArmAdsMisc>
|
||||||
|
<Cads>
|
||||||
|
<interw>1</interw>
|
||||||
|
<Optim>1</Optim>
|
||||||
|
<oTime>0</oTime>
|
||||||
|
<SplitLS>0</SplitLS>
|
||||||
|
<OneElfS>1</OneElfS>
|
||||||
|
<Strict>0</Strict>
|
||||||
|
<EnumInt>0</EnumInt>
|
||||||
|
<PlainCh>0</PlainCh>
|
||||||
|
<Ropi>0</Ropi>
|
||||||
|
<Rwpi>0</Rwpi>
|
||||||
|
<wLevel>2</wLevel>
|
||||||
|
<uThumb>0</uThumb>
|
||||||
|
<uSurpInc>0</uSurpInc>
|
||||||
|
<uC99>0</uC99>
|
||||||
|
<useXO>0</useXO>
|
||||||
|
<v6Lang>1</v6Lang>
|
||||||
|
<v6LangP>1</v6LangP>
|
||||||
|
<vShortEn>1</vShortEn>
|
||||||
|
<vShortWch>1</vShortWch>
|
||||||
|
<v6Lto>0</v6Lto>
|
||||||
|
<v6WtE>0</v6WtE>
|
||||||
|
<v6Rtti>0</v6Rtti>
|
||||||
|
<VariousControls>
|
||||||
|
<MiscControls>--C99</MiscControls>
|
||||||
|
<Define>STM32F103xB,USE_FULL_LL_DRIVER,HSE_VALUE=8000000U,USE_FULL_ASSERT</Define>
|
||||||
|
<Undefine></Undefine>
|
||||||
|
<IncludePath>..\Inc;..\LLDrivers\inc;..\Services;..\MyDrivers</IncludePath>
|
||||||
|
</VariousControls>
|
||||||
|
</Cads>
|
||||||
|
<Aads>
|
||||||
|
<interw>1</interw>
|
||||||
|
<Ropi>0</Ropi>
|
||||||
|
<Rwpi>0</Rwpi>
|
||||||
|
<thumb>0</thumb>
|
||||||
|
<SplitLS>0</SplitLS>
|
||||||
|
<SwStkChk>0</SwStkChk>
|
||||||
|
<NoWarn>0</NoWarn>
|
||||||
|
<uSurpInc>0</uSurpInc>
|
||||||
|
<useXO>0</useXO>
|
||||||
|
<uClangAs>0</uClangAs>
|
||||||
|
<VariousControls>
|
||||||
|
<MiscControls></MiscControls>
|
||||||
|
<Define></Define>
|
||||||
|
<Undefine></Undefine>
|
||||||
|
<IncludePath></IncludePath>
|
||||||
|
</VariousControls>
|
||||||
|
</Aads>
|
||||||
|
<LDads>
|
||||||
|
<umfTarg>1</umfTarg>
|
||||||
|
<Ropi>0</Ropi>
|
||||||
|
<Rwpi>0</Rwpi>
|
||||||
|
<noStLib>0</noStLib>
|
||||||
|
<RepFail>1</RepFail>
|
||||||
|
<useFile>0</useFile>
|
||||||
|
<TextAddressRange>0x08000000</TextAddressRange>
|
||||||
|
<DataAddressRange>0x20000000</DataAddressRange>
|
||||||
|
<pXoBase></pXoBase>
|
||||||
|
<ScatterFile></ScatterFile>
|
||||||
|
<IncludeLibs></IncludeLibs>
|
||||||
|
<IncludeLibsPath></IncludeLibsPath>
|
||||||
|
<Misc></Misc>
|
||||||
|
<LinkerInputFile></LinkerInputFile>
|
||||||
|
<DisabledWarnings></DisabledWarnings>
|
||||||
|
</LDads>
|
||||||
|
</TargetArmAds>
|
||||||
|
</TargetOption>
|
||||||
|
<Groups>
|
||||||
|
<Group>
|
||||||
|
<GroupName>User Application</GroupName>
|
||||||
|
<Files>
|
||||||
|
<File>
|
||||||
|
<FileName>main.c</FileName>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<FilePath>../Src/main.c</FilePath>
|
||||||
|
</File>
|
||||||
|
</Files>
|
||||||
|
</Group>
|
||||||
|
<Group>
|
||||||
|
<GroupName>User Services</GroupName>
|
||||||
|
<Files>
|
||||||
|
<File>
|
||||||
|
<FileName>Chrono.c</FileName>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<FilePath>..\Services\Chrono.c</FilePath>
|
||||||
|
</File>
|
||||||
|
</Files>
|
||||||
|
</Group>
|
||||||
|
<Group>
|
||||||
|
<GroupName>MyDrivers</GroupName>
|
||||||
|
<Files>
|
||||||
|
<File>
|
||||||
|
<FileName>MyTimer.c</FileName>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<FilePath>..\MyDrivers\MyTimer.c</FilePath>
|
||||||
|
</File>
|
||||||
|
</Files>
|
||||||
|
</Group>
|
||||||
|
<Group>
|
||||||
|
<GroupName>Drivers/STM32f1xx_LL_Driver</GroupName>
|
||||||
|
<Files>
|
||||||
|
<File>
|
||||||
|
<FileName>stm32f1xx_ll_rcc.c</FileName>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<FilePath>..\LLDrivers\src\stm32f1xx_ll_rcc.c</FilePath>
|
||||||
|
</File>
|
||||||
|
<File>
|
||||||
|
<FileName>stm32f1xx_ll_utils.c</FileName>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<FilePath>..\LLDrivers\src\stm32f1xx_ll_utils.c</FilePath>
|
||||||
|
</File>
|
||||||
|
<File>
|
||||||
|
<FileName>stm32f1xx_ll_tim.c</FileName>
|
||||||
|
<FileType>1</FileType>
|
||||||
|
<FilePath>..\LLDrivers\src\stm32f1xx_ll_tim.c</FilePath>
|
||||||
|
</File>
|
||||||
</Files>
|
</Files>
|
||||||
</Group>
|
</Group>
|
||||||
<Group>
|
<Group>
|
||||||
|
|
|
@ -10,103 +10,173 @@
|
||||||
pour mettre à 0 , reg = reg&~ Mask (ou Mask est le représente le ou les bits à positionner à 0)
|
pour mettre à 0 , reg = reg&~ Mask (ou Mask est le représente le ou les bits à positionner à 0)
|
||||||
|
|
||||||
*/
|
*/
|
||||||
#include "stm32f103xb.h"
|
|
||||||
|
|
||||||
void (* ptrfonc1)(void);
|
#include "MyTimer.h"
|
||||||
void (* ptrfonc2)(void);
|
#include "stm32f1xx_ll_bus.h" // Pour l'activation des horloges
|
||||||
void (* ptrfonc3)(void);
|
#include "stm32f1xx_ll_tim.h"
|
||||||
void (* ptrfonc4)(void);
|
|
||||||
|
|
||||||
void MyTimer_Conf(TIM_TypeDef * Timer,int Arr, int Psc) {
|
|
||||||
int valid = 1;
|
// variable pointeur de fonction permettant de mémoriser le callback à appeler depuis
|
||||||
if (Timer == TIM1) {
|
// le handler d'IT
|
||||||
RCC->APB2ENR |= RCC_APB2ENR_TIM1EN;
|
void (*Ptr_ItFct_TIM1)(void);
|
||||||
} else if (Timer == TIM2) {
|
void (*Ptr_ItFct_TIM2)(void);
|
||||||
RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;
|
void (*Ptr_ItFct_TIM3)(void);
|
||||||
} else if (Timer == TIM3) {
|
void (*Ptr_ItFct_TIM4)(void);
|
||||||
RCC->APB1ENR |= RCC_APB1ENR_TIM3EN;
|
|
||||||
} else if (Timer == TIM4) {
|
|
||||||
RCC->APB1ENR |= RCC_APB1ENR_TIM4EN;
|
|
||||||
} else {
|
|
||||||
valid = 0;
|
/**
|
||||||
}
|
* @brief Active l'horloge et règle l'ARR et le PSC du timer visé
|
||||||
|
* @note Fonction à lancer avant toute autre. Le timer n'est pas encore lancé (voir MyTimerStart)
|
||||||
|
* @param TIM_TypeDef Timer : indique le timer à utiliser par le chronomètre, TIM1, TIM2, TIM3 ou TIM4
|
||||||
|
* int Arr : valeur à placer dans ARR
|
||||||
|
* int Psc : valeur à placer dans PSC
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
void MyTimer_Conf(TIM_TypeDef * Timer,int Arr, int Psc)
|
||||||
|
{
|
||||||
|
LL_TIM_InitTypeDef My_LL_Tim_Init_Struct;
|
||||||
|
|
||||||
|
// Validation horloge locale
|
||||||
|
if (Timer==TIM1) LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_TIM1);
|
||||||
|
else if (Timer==TIM2) LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_TIM2);
|
||||||
|
else if (Timer==TIM3) LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_TIM3);
|
||||||
|
else LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_TIM4);
|
||||||
|
|
||||||
|
// chargement structure Arr, Psc, Up Count
|
||||||
|
My_LL_Tim_Init_Struct.Autoreload=Arr;
|
||||||
|
My_LL_Tim_Init_Struct.Prescaler=Psc;
|
||||||
|
My_LL_Tim_Init_Struct.ClockDivision=LL_TIM_CLOCKDIVISION_DIV1;
|
||||||
|
My_LL_Tim_Init_Struct.CounterMode=LL_TIM_COUNTERMODE_UP;
|
||||||
|
My_LL_Tim_Init_Struct.RepetitionCounter=0;
|
||||||
|
|
||||||
|
LL_TIM_Init(Timer,&My_LL_Tim_Init_Struct);
|
||||||
|
|
||||||
if (valid) {
|
|
||||||
Timer->ARR = Arr;
|
|
||||||
Timer->PSC = Psc;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void MyTimer_Start(TIM_TypeDef * Timer) {
|
// Blocage IT
|
||||||
Timer->CR1 |= TIM_CR1_CEN;
|
LL_TIM_DisableIT_UPDATE(Timer);
|
||||||
}
|
|
||||||
|
|
||||||
|
// Blocage Timer
|
||||||
|
LL_TIM_DisableCounter(Timer);
|
||||||
|
|
||||||
|
|
||||||
void MyTimer_Stop(TIM_TypeDef * Timer) {
|
|
||||||
Timer->CR1 &= ~TIM_CR1_CEN;
|
|
||||||
}
|
|
||||||
|
|
||||||
void MyTimer_IT_Conf(TIM_TypeDef * Timer, void (*IT_function) (void),int Prio) {
|
|
||||||
if (Timer == TIM1) {
|
|
||||||
NVIC->ISER[0] = NVIC->ISER[0] | (1 << 25);
|
|
||||||
NVIC->IP[25] = NVIC->IP[25] | (Prio << 4);
|
|
||||||
ptrfonc1 = IT_function;
|
|
||||||
} else if (Timer == TIM2) {
|
|
||||||
NVIC->ISER[0] = NVIC->ISER[0] | (1 << 28);
|
|
||||||
NVIC->IP[28] = NVIC->IP[28] | (Prio << 4);
|
|
||||||
ptrfonc2 = IT_function;
|
|
||||||
} else if (Timer == TIM3) {
|
|
||||||
NVIC->ISER[0] = NVIC->ISER[0] | (1 << 29);
|
|
||||||
NVIC->IP[29] = NVIC->IP[29] | (Prio << 4);
|
|
||||||
ptrfonc3 = IT_function;
|
|
||||||
} else if (Timer == TIM4) {
|
|
||||||
NVIC->ISER[0] = NVIC->ISER[0] | (1 << 30);
|
|
||||||
NVIC->IP[30] = NVIC->IP[30] | (Prio << 4);
|
|
||||||
ptrfonc4 = IT_function;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void MyTimer_IT_Enable(TIM_TypeDef * Timer) {
|
/**
|
||||||
if (Timer == TIM1) {
|
* @brief Démarre le timer considéré
|
||||||
TIM1->DIER |= TIM_DIER_UIE;
|
* @note
|
||||||
} else if (Timer == TIM2) {
|
* @param TIM_TypeDef Timer : indique le timer à utiliser par le chronomètre, TIM1, TIM2, TIM3 ou TIM4
|
||||||
TIM2->DIER |= TIM_DIER_UIE;
|
* @retval None
|
||||||
} else if (Timer == TIM3) {
|
*/
|
||||||
TIM3->DIER |= TIM_DIER_UIE;
|
void MyTimer_Start(TIM_TypeDef * Timer)
|
||||||
} else if (Timer == TIM4) {
|
{
|
||||||
TIM4->DIER |= TIM_DIER_UIE;
|
LL_TIM_EnableCounter(Timer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Arrêt le timer considéré
|
||||||
|
* @note
|
||||||
|
* @param TIM_TypeDef Timer : indique le timer à utiliser par le chronomètre, TIM1, TIM2, TIM3 ou TIM4
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
void MyTimer_Stop(TIM_TypeDef * Timer)
|
||||||
|
{
|
||||||
|
LL_TIM_DisableCounter(Timer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void MyTimer_IT_Disable(TIM_TypeDef * Timer) {
|
/**
|
||||||
if (Timer == TIM1) {
|
* @brief Configure le Timer considéré en interruption sur débordement.
|
||||||
TIM1->DIER &= ~TIM_DIER_UIE;
|
* @note A ce stade, les interruptions ne sont pas validés (voir MyTimer_IT_Enable )
|
||||||
} else if (Timer == TIM2) {
|
* @param TIM_TypeDef Timer : indique le timer à utiliser par le chronomètre, TIM1, TIM2, TIM3 ou TIM4
|
||||||
TIM2->DIER &= ~TIM_DIER_UIE;
|
* void (*IT_function) (void) : nom (adresse) de la fonction à lancer sur interruption
|
||||||
} else if (Timer == TIM3) {
|
* int Prio : priorité associée à l'interruption
|
||||||
TIM3->DIER &= ~TIM_DIER_UIE;
|
* @retval None
|
||||||
} else if (Timer == TIM4) {
|
*/
|
||||||
TIM4->DIER &= ~TIM_DIER_UIE;
|
void MyTimer_IT_Conf(TIM_TypeDef * Timer, void (*IT_function) (void),int Prio)
|
||||||
}
|
{
|
||||||
|
// affectation de la fonction
|
||||||
|
if (Timer==TIM1) Ptr_ItFct_TIM1=IT_function;
|
||||||
|
else if (Timer==TIM2) Ptr_ItFct_TIM2=IT_function;
|
||||||
|
else if (Timer==TIM3) Ptr_ItFct_TIM3=IT_function;
|
||||||
|
else Ptr_ItFct_TIM4=IT_function;
|
||||||
|
|
||||||
|
|
||||||
|
// Blocage IT (il faudra la débloquer voir fct suivante)
|
||||||
|
LL_TIM_DisableIT_UPDATE(Timer);
|
||||||
|
|
||||||
|
// validation du canal NVIC
|
||||||
|
IRQn_Type TIM_irq;
|
||||||
|
|
||||||
|
if (Timer==TIM1) TIM_irq=TIM1_UP_IRQn;
|
||||||
|
else if (Timer==TIM2) TIM_irq=TIM2_IRQn;
|
||||||
|
else if (Timer==TIM3) TIM_irq=TIM3_IRQn;
|
||||||
|
else TIM_irq=TIM4_IRQn;
|
||||||
|
|
||||||
|
NVIC_SetPriority(TIM_irq, Prio);
|
||||||
|
NVIC_EnableIRQ(TIM_irq);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void TIM1_UP_IRQHandler(void) {
|
/**
|
||||||
TIM1->SR &= ~TIM_SR_UIF;
|
* @brief Autorise les interruptions
|
||||||
(*ptrfonc1)();
|
* @note
|
||||||
|
* @param TIM_TypeDef Timer : indique le timer à utiliser par le chronomètre, TIM1, TIM2, TIM3 ou TIM4
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
void MyTimer_IT_Enable(TIM_TypeDef * Timer)
|
||||||
|
{
|
||||||
|
LL_TIM_EnableIT_UPDATE(Timer);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TIM2_IRQHandler(void) {
|
|
||||||
TIM2->SR &= ~TIM_SR_UIF;
|
|
||||||
(*ptrfonc2)();
|
|
||||||
}
|
|
||||||
|
|
||||||
void TIM3_IRQHandler(void) {
|
/**
|
||||||
TIM3->SR &= ~TIM_SR_UIF;
|
* @brief Interdit les interruptions
|
||||||
(*ptrfonc3)();
|
* @note
|
||||||
}
|
* @param TIM_TypeDef Timer : indique le timer à utiliser par le chronomètre, TIM1, TIM2, TIM3 ou TIM4
|
||||||
void TIM4_IRQHandler(void) {
|
* @retval None
|
||||||
TIM4->SR &= ~TIM_SR_UIF;
|
*/
|
||||||
(*ptrfonc4)();
|
void MyTimer_IT_Disable(TIM_TypeDef * Timer)
|
||||||
}
|
{
|
||||||
|
LL_TIM_DisableIT_UPDATE(Timer);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
============ LES INTERRUPTIONS =================================
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
void TIM1_UP_IRQHandler(void)
|
||||||
|
{
|
||||||
|
// rabaisser le flag d'IT
|
||||||
|
LL_TIM_ClearFlag_UPDATE(TIM1);
|
||||||
|
(*Ptr_ItFct_TIM1)();
|
||||||
|
}
|
||||||
|
|
||||||
|
void TIM2_IRQHandler(void)
|
||||||
|
{
|
||||||
|
// rabaisser le flag d'IT
|
||||||
|
LL_TIM_ClearFlag_UPDATE(TIM2);
|
||||||
|
(*Ptr_ItFct_TIM2)();
|
||||||
|
}
|
||||||
|
|
||||||
|
void TIM3_IRQHandler(void)
|
||||||
|
{
|
||||||
|
// rabaisser le flag d'IT
|
||||||
|
LL_TIM_ClearFlag_UPDATE(TIM3);
|
||||||
|
(*Ptr_ItFct_TIM3)();
|
||||||
|
}
|
||||||
|
|
||||||
|
void TIM4_IRQHandler(void)
|
||||||
|
{
|
||||||
|
// rabaisser le flag d'IT
|
||||||
|
LL_TIM_ClearFlag_UPDATE(TIM4);
|
||||||
|
(*Ptr_ItFct_TIM4)();
|
||||||
|
}
|
||||||
|
|
|
@ -37,10 +37,10 @@ void Chrono_Conf(TIM_TypeDef * Timer)
|
||||||
Chrono_Timer=Timer;
|
Chrono_Timer=Timer;
|
||||||
|
|
||||||
// Réglage Timer pour un débordement à 10ms
|
// Réglage Timer pour un débordement à 10ms
|
||||||
MyTimer_Conf(Chrono_Timer, 99, 7199);
|
MyTimer_Conf(Chrono_Timer,999, 719);
|
||||||
|
|
||||||
// Réglage interruption du Timer avec callback : Chrono_Task_10ms()
|
// Réglage interruption du Timer avec callback : Chrono_Task_10ms()
|
||||||
MyTimer_IT_Conf(Chrono_Timer, Chrono_Task_10ms, 7);
|
MyTimer_IT_Conf(Chrono_Timer, Chrono_Task_10ms,3);
|
||||||
|
|
||||||
// Validation IT
|
// Validation IT
|
||||||
MyTimer_IT_Enable(Chrono_Timer);
|
MyTimer_IT_Enable(Chrono_Timer);
|
||||||
|
@ -57,7 +57,6 @@ void Chrono_Conf(TIM_TypeDef * Timer)
|
||||||
*/
|
*/
|
||||||
void Chrono_Start(void)
|
void Chrono_Start(void)
|
||||||
{
|
{
|
||||||
// Lancement du Timer
|
|
||||||
MyTimer_Start(Chrono_Timer);
|
MyTimer_Start(Chrono_Timer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -113,7 +112,7 @@ Time * Chrono_Read(void)
|
||||||
* @retval Aucun
|
* @retval Aucun
|
||||||
*/
|
*/
|
||||||
void Chrono_Task_10ms(void)
|
void Chrono_Task_10ms(void)
|
||||||
{
|
{
|
||||||
Chrono_Time.Hund++;
|
Chrono_Time.Hund++;
|
||||||
if (Chrono_Time.Hund==100)
|
if (Chrono_Time.Hund==100)
|
||||||
{
|
{
|
||||||
|
|
|
@ -11,6 +11,37 @@ Utilise la lib MyTimers.h /.c
|
||||||
|
|
||||||
#include "stm32f103xb.h"
|
#include "stm32f103xb.h"
|
||||||
|
|
||||||
|
/* =====================================================================================
|
||||||
|
Les fonctions qui gèrent les IO (ajout par rapport à l'activité 1)
|
||||||
|
=======================================================================================*/
|
||||||
|
|
||||||
|
|
||||||
|
#define PinStart LL_GPIO_PIN_8
|
||||||
|
#define PinStop LL_GPIO_PIN_6
|
||||||
|
// à compléter pour la pin reset du chronometre
|
||||||
|
#define PinLED LL_GPIO_PIN_10
|
||||||
|
#define GPIO_Pin GPIOC
|
||||||
|
#define GPIO_LED GPIOC
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief polle les 3 entrées et gènère les actions à faire
|
||||||
|
* @note Fct à lancer en tâche de fond (non bloquante)
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
|
||||||
|
void Chrono_Background(void);
|
||||||
|
|
||||||
|
//=======================================================================================//
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Type de donnée utilisé dans le module
|
// Type de donnée utilisé dans le module
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@ -31,6 +62,10 @@ typedef struct {
|
||||||
void Chrono_Conf(TIM_TypeDef * Timer);
|
void Chrono_Conf(TIM_TypeDef * Timer);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Démarre le chronomètre.
|
* @brief Démarre le chronomètre.
|
||||||
* @note si la durée dépasse 59mn 59sec 99 cent, elle est remise à zéro et repart
|
* @note si la durée dépasse 59mn 59sec 99 cent, elle est remise à zéro et repart
|
||||||
|
@ -66,4 +101,7 @@ void Chrono_Reset(void);
|
||||||
*/
|
*/
|
||||||
Time * Chrono_Read(void);
|
Time * Chrono_Read(void);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
44
Src/main.c
44
Src/main.c
|
@ -31,53 +31,25 @@ void SystemClock_Config(void);
|
||||||
* @param None
|
* @param None
|
||||||
* @retval None
|
* @retval None
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
/* Configure the system clock to 72 MHz */
|
/* Configure the system clock to 72 MHz */
|
||||||
SystemClock_Config();
|
SystemClock_Config();
|
||||||
|
|
||||||
|
|
||||||
/* DU BLABLA POUR JOUER AU DéBUT
|
|
||||||
TIM1->CR2|=0x1 ;
|
|
||||||
TIM1->CR2=0xFFFF ;
|
|
||||||
TIM1->CR2 &= ~0x0040 ;
|
|
||||||
TIM1->CR2=0xFFFF ;
|
|
||||||
TIM1->CR2&=~(1<<6) ;
|
|
||||||
GPIOB->CRL=(0xFFFF ) ;
|
|
||||||
GPIOB->CRL&=~(0xF<<8) ;
|
|
||||||
GPIOB->CRL|= (0x5<<8) ;
|
|
||||||
GPIOB->ODR|=GPIO_ODR_ODR1 ;
|
|
||||||
SPI1->CR1 |= 0x2;
|
|
||||||
|
|
||||||
SPI1->CR1 = 0xFFFF;
|
|
||||||
SPI1->CR1 &= ~SPI_CR1_DFF;
|
|
||||||
USART1->CR2 = 0xFFFFFFFF;
|
|
||||||
USART1->CR2 &= ~USART_CR2_STOP;
|
|
||||||
USART1->CR2 |= (0x2 << USART_CR2_STOP_Pos);*/
|
|
||||||
|
|
||||||
|
|
||||||
/* Add your application code here */
|
/* Add your application code here */
|
||||||
// Configuration chronomètre
|
// Configuration chronomètre
|
||||||
Chrono_Conf(TIM1);
|
Chrono_Conf(TIM3);
|
||||||
|
|
||||||
// Lancement chronomètre
|
// Lancement chronomètre
|
||||||
//Chrono_Start();
|
Chrono_Start();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Infinite loop */
|
/* Infinite loop */
|
||||||
RCC->APB2ENR |= RCC_APB2ENR_IOPCEN;
|
|
||||||
GPIOC->CRH &= ~(0xF << 0);
|
|
||||||
GPIOC->CRH |= (0x4 << 0);
|
|
||||||
GPIOC->CRH &= ~(0xF << 8);
|
|
||||||
GPIOC->CRH |= (0x6 << 8);
|
|
||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
int valeur_bouton = (GPIOC->IDR & (1 << 8)) >> 8;
|
|
||||||
if (valeur_bouton) {
|
|
||||||
GPIOC->ODR &= ~(1 << 10);
|
|
||||||
} else {
|
|
||||||
GPIOC->ODR |= (1 << 10);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -136,7 +108,7 @@ void SystemClock_Config(void)
|
||||||
LL_RCC_SetAPB2Prescaler(LL_RCC_APB2_DIV_1);
|
LL_RCC_SetAPB2Prescaler(LL_RCC_APB2_DIV_1);
|
||||||
|
|
||||||
/* Set systick to 1ms in using frequency set to 72MHz */
|
/* Set systick to 1ms in using frequency set to 72MHz */
|
||||||
//LL_Init1msTick(72000000); !! décommenter que si l'IT est récupérée
|
LL_Init1msTick(72000000); // utile lorsqu'on utilise la fonction LL_mDelay
|
||||||
|
|
||||||
/* Update CMSIS variable (which can be updated also through SystemCoreClockUpdate function) */
|
/* Update CMSIS variable (which can be updated also through SystemCoreClockUpdate function) */
|
||||||
LL_SetSystemCoreClock(72000000);
|
LL_SetSystemCoreClock(72000000);
|
||||||
|
|
|
@ -49,11 +49,8 @@ main.h enlevé
|
||||||
Remarque ligne 72 LL_RCC_HSE_EnableBypass();, si on devait travailler sur MCBSTM32, il faudrait commenter la ligne
|
Remarque ligne 72 LL_RCC_HSE_EnableBypass();, si on devait travailler sur MCBSTM32, il faudrait commenter la ligne
|
||||||
Ligne 108 commentée, il s'agit de l'activation systick inutile mais qui active les IT non récupérée ... donc otée
|
Ligne 108 commentée, il s'agit de l'activation systick inutile mais qui active les IT non récupérée ... donc otée
|
||||||
|
|
||||||
*********************** FIN DES MODIFICATIONS ************************************************
|
|
||||||
|
|
||||||
|
|
||||||
Readme d'origine ...
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in a new issue