Mercurial > pub > halpp
comparison l476rg/Src/stm32l4xx_hal_timebase_TIM.c @ 0:32a3b1785697
a rough draft of Hardware Abstraction Layer for C++
STM32L476RG drivers
| author | cin |
|---|---|
| date | Thu, 12 Jan 2017 02:45:43 +0300 |
| parents | |
| children | ca4f5b55b391 |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:32a3b1785697 |
|---|---|
| 1 /** | |
| 2 ****************************************************************************** | |
| 3 * @file stm32l4xx_hal_timebase_TIM.c | |
| 4 * @brief HAL time base based on the hardware TIM. | |
| 5 ****************************************************************************** | |
| 6 * | |
| 7 * COPYRIGHT(c) 2017 STMicroelectronics | |
| 8 * | |
| 9 * Redistribution and use in source and binary forms, with or without modification, | |
| 10 * are permitted provided that the following conditions are met: | |
| 11 * 1. Redistributions of source code must retain the above copyright notice, | |
| 12 * this list of conditions and the following disclaimer. | |
| 13 * 2. Redistributions in binary form must reproduce the above copyright notice, | |
| 14 * this list of conditions and the following disclaimer in the documentation | |
| 15 * and/or other materials provided with the distribution. | |
| 16 * 3. Neither the name of STMicroelectronics nor the names of its contributors | |
| 17 * may be used to endorse or promote products derived from this software | |
| 18 * without specific prior written permission. | |
| 19 * | |
| 20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |
| 21 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
| 22 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |
| 23 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE | |
| 24 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |
| 25 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | |
| 26 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |
| 27 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |
| 28 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |
| 29 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
| 30 * | |
| 31 ****************************************************************************** | |
| 32 */ | |
| 33 | |
| 34 /* Includes ------------------------------------------------------------------*/ | |
| 35 #include "stm32l4xx_hal.h" | |
| 36 #include "stm32l4xx_hal_tim.h" | |
| 37 /** @addtogroup STM32F7xx_HAL_Examples | |
| 38 * @{ | |
| 39 */ | |
| 40 | |
| 41 /** @addtogroup HAL_TimeBase | |
| 42 * @{ | |
| 43 */ | |
| 44 | |
| 45 /* Private typedef -----------------------------------------------------------*/ | |
| 46 /* Private define ------------------------------------------------------------*/ | |
| 47 /* Private macro -------------------------------------------------------------*/ | |
| 48 /* Private variables ---------------------------------------------------------*/ | |
| 49 TIM_HandleTypeDef htim6; | |
| 50 uint32_t uwIncrementState = 0; | |
| 51 /* Private function prototypes -----------------------------------------------*/ | |
| 52 /* Private functions ---------------------------------------------------------*/ | |
| 53 | |
| 54 /** | |
| 55 * @brief This function configures the TIM6 as a time base source. | |
| 56 * The time source is configured to have 1ms time base with a dedicated | |
| 57 * Tick interrupt priority. | |
| 58 * @note This function is called automatically at the beginning of program after | |
| 59 * reset by HAL_Init() or at any time when clock is configured, by HAL_RCC_ClockConfig(). | |
| 60 * @param TickPriority: Tick interrupt priorty. | |
| 61 * @retval HAL status | |
| 62 */ | |
| 63 HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) | |
| 64 { | |
| 65 RCC_ClkInitTypeDef clkconfig; | |
| 66 uint32_t uwTimclock = 0; | |
| 67 uint32_t uwPrescalerValue = 0; | |
| 68 uint32_t pFLatency; | |
| 69 | |
| 70 /*Configure the TIM6 IRQ priority */ | |
| 71 HAL_NVIC_SetPriority(TIM6_DAC_IRQn, TickPriority ,0); | |
| 72 | |
| 73 /* Enable the TIM6 global Interrupt */ | |
| 74 HAL_NVIC_EnableIRQ(TIM6_DAC_IRQn); | |
| 75 | |
| 76 /* Enable TIM6 clock */ | |
| 77 __HAL_RCC_TIM6_CLK_ENABLE(); | |
| 78 | |
| 79 /* Get clock configuration */ | |
| 80 HAL_RCC_GetClockConfig(&clkconfig, &pFLatency); | |
| 81 | |
| 82 /* Compute TIM6 clock */ | |
| 83 uwTimclock = HAL_RCC_GetPCLK1Freq(); | |
| 84 | |
| 85 /* Compute the prescaler value to have TIM6 counter clock equal to 1MHz */ | |
| 86 uwPrescalerValue = (uint32_t) ((uwTimclock / 1000000) - 1); | |
| 87 | |
| 88 /* Initialize TIM6 */ | |
| 89 htim6.Instance = TIM6; | |
| 90 | |
| 91 /* Initialize TIMx peripheral as follow: | |
| 92 + Period = [(TIM6CLK/1000) - 1]. to have a (1/1000) s time base. | |
| 93 + Prescaler = (uwTimclock/1000000 - 1) to have a 1MHz counter clock. | |
| 94 + ClockDivision = 0 | |
| 95 + Counter direction = Up | |
| 96 */ | |
| 97 htim6.Init.Period = (1000000 / 1000) - 1; | |
| 98 htim6.Init.Prescaler = uwPrescalerValue; | |
| 99 htim6.Init.ClockDivision = 0; | |
| 100 htim6.Init.CounterMode = TIM_COUNTERMODE_UP; | |
| 101 if(HAL_TIM_Base_Init(&htim6) == HAL_OK) | |
| 102 { | |
| 103 /* Start the TIM time Base generation in interrupt mode */ | |
| 104 return HAL_TIM_Base_Start_IT(&htim6); | |
| 105 } | |
| 106 | |
| 107 /* Return function status */ | |
| 108 return HAL_ERROR; | |
| 109 } | |
| 110 | |
| 111 /** | |
| 112 * @brief Suspend Tick increment. | |
| 113 * @note Disable the tick increment by disabling TIM6 update interrupt. | |
| 114 * @param None | |
| 115 * @retval None | |
| 116 */ | |
| 117 void HAL_SuspendTick(void) | |
| 118 { | |
| 119 /* Disable TIM6 update Interrupt */ | |
| 120 __HAL_TIM_DISABLE_IT(&htim6, TIM_IT_UPDATE); | |
| 121 } | |
| 122 | |
| 123 /** | |
| 124 * @brief Resume Tick increment. | |
| 125 * @note Enable the tick increment by Enabling TIM6 update interrupt. | |
| 126 * @param None | |
| 127 * @retval None | |
| 128 */ | |
| 129 void HAL_ResumeTick(void) | |
| 130 { | |
| 131 /* Enable TIM6 Update interrupt */ | |
| 132 __HAL_TIM_ENABLE_IT(&htim6, TIM_IT_UPDATE); | |
| 133 } | |
| 134 | |
| 135 /** | |
| 136 * @} | |
| 137 */ | |
| 138 | |
| 139 /** | |
| 140 * @} | |
| 141 */ | |
| 142 | |
| 143 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
