Hermano de Castro Pinheiro / HardwarePulseCounter
Committer:
hermano
Date:
Mon Oct 07 21:15:39 2019 +0000
Revision:
1:2bbb30dc3ed3
Parent:
0:baad428cbcc7
Child:
3:2b2c973f1549
1.1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hermano 0:baad428cbcc7 1 #include "HardwarePulseCounter.h"
hermano 0:baad428cbcc7 2
hermano 0:baad428cbcc7 3 /*Parametros ex: TIM1, GPIOA, GPIO_PIN_0*/
hermano 0:baad428cbcc7 4
hermano 0:baad428cbcc7 5 PulseCounter::PulseCounter(TIM_TypeDef *TIMx, GPIO_TypeDef *GPIOx, uint16_t PINx){
hermano 0:baad428cbcc7 6 this->TIM = TIMx;
hermano 0:baad428cbcc7 7 this->GPIO = GPIOx;
hermano 0:baad428cbcc7 8 this->PIN = PINx;
hermano 0:baad428cbcc7 9 };
hermano 0:baad428cbcc7 10
hermano 0:baad428cbcc7 11
hermano 0:baad428cbcc7 12 void PulseCounter::CounterConfig(){
hermano 0:baad428cbcc7 13
hermano 0:baad428cbcc7 14 if(this->TIM == TIM1){
hermano 0:baad428cbcc7 15 __HAL_RCC_TIM1_CLK_ENABLE();
hermano 0:baad428cbcc7 16 }
hermano 0:baad428cbcc7 17
hermano 0:baad428cbcc7 18 else if(this->TIM == TIM2){
hermano 0:baad428cbcc7 19 __HAL_RCC_TIM2_CLK_ENABLE();
hermano 0:baad428cbcc7 20 }
hermano 0:baad428cbcc7 21
hermano 0:baad428cbcc7 22 else if(this->TIM == TIM3){
hermano 0:baad428cbcc7 23 __HAL_RCC_TIM3_CLK_ENABLE();
hermano 0:baad428cbcc7 24 }
hermano 0:baad428cbcc7 25
hermano 0:baad428cbcc7 26 else if(this->TIM == TIM4){
hermano 0:baad428cbcc7 27 __HAL_RCC_TIM4_CLK_ENABLE();
hermano 0:baad428cbcc7 28 }
hermano 0:baad428cbcc7 29
hermano 0:baad428cbcc7 30 this->htim.Instance = this->TIM;
hermano 0:baad428cbcc7 31 this->htim.Init.Period = 1000;
hermano 0:baad428cbcc7 32 this->htim.Init.Prescaler = 1;
hermano 0:baad428cbcc7 33 this->htim.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
hermano 0:baad428cbcc7 34 this->htim.Init.CounterMode = TIM_COUNTERMODE_UP;
hermano 0:baad428cbcc7 35 this->htim.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
hermano 0:baad428cbcc7 36 }
hermano 0:baad428cbcc7 37
hermano 0:baad428cbcc7 38
hermano 0:baad428cbcc7 39 void PulseCounter::GpioConfig(void){
hermano 0:baad428cbcc7 40
hermano 0:baad428cbcc7 41 if(this->GPIO == GPIOA){
hermano 0:baad428cbcc7 42 __HAL_RCC_GPIOA_CLK_ENABLE();
hermano 0:baad428cbcc7 43 }
hermano 0:baad428cbcc7 44
hermano 0:baad428cbcc7 45 else if(this->GPIO == GPIOB){
hermano 0:baad428cbcc7 46 __HAL_RCC_GPIOB_CLK_ENABLE();
hermano 0:baad428cbcc7 47 }
hermano 0:baad428cbcc7 48
hermano 0:baad428cbcc7 49 else if(this->GPIO == GPIOC){
hermano 0:baad428cbcc7 50 __HAL_RCC_GPIOC_CLK_ENABLE();
hermano 0:baad428cbcc7 51 }
hermano 0:baad428cbcc7 52
hermano 0:baad428cbcc7 53 else if(this->GPIO == GPIOD){
hermano 0:baad428cbcc7 54 __HAL_RCC_GPIOD_CLK_ENABLE();
hermano 0:baad428cbcc7 55 }
hermano 0:baad428cbcc7 56
hermano 0:baad428cbcc7 57
hermano 0:baad428cbcc7 58 this->GPIO_InitStruct.Pin = this->PIN;
hermano 0:baad428cbcc7 59 this->GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;;
hermano 0:baad428cbcc7 60 this->GPIO_InitStruct.Pull = GPIO_NOPULL;
hermano 0:baad428cbcc7 61 this->GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
hermano 0:baad428cbcc7 62 HAL_GPIO_Init(this->GPIO, &this->GPIO_InitStruct);
hermano 0:baad428cbcc7 63 }
hermano 0:baad428cbcc7 64
hermano 0:baad428cbcc7 65
hermano 0:baad428cbcc7 66 void PulseCounter::SlaveConfig(){
hermano 0:baad428cbcc7 67
hermano 0:baad428cbcc7 68 this->sSlaveConfig.SlaveMode = TIM_SLAVEMODE_EXTERNAL1;
hermano 0:baad428cbcc7 69 this->sSlaveConfig.InputTrigger = TIM_TS_TI1FP1;
hermano 0:baad428cbcc7 70 this->sSlaveConfig.TriggerPolarity = TIM_TRIGGERPOLARITY_RISING;
hermano 0:baad428cbcc7 71 this->sSlaveConfig.TriggerFilter = 15;
hermano 0:baad428cbcc7 72 HAL_TIM_SlaveConfigSynchronization(&this->htim, &this->sSlaveConfig);
hermano 0:baad428cbcc7 73 }
hermano 0:baad428cbcc7 74
hermano 0:baad428cbcc7 75
hermano 0:baad428cbcc7 76 void PulseCounter::MasterConfig(){
hermano 0:baad428cbcc7 77
hermano 0:baad428cbcc7 78 this->sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE;
hermano 0:baad428cbcc7 79 this->sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
hermano 0:baad428cbcc7 80 HAL_TIMEx_MasterConfigSynchronization(&this->htim, &this->sMasterConfig);
hermano 0:baad428cbcc7 81 }
hermano 0:baad428cbcc7 82
hermano 0:baad428cbcc7 83
hermano 0:baad428cbcc7 84 void PulseCounter::sConfig(){
hermano 0:baad428cbcc7 85
hermano 0:baad428cbcc7 86 this->sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_RISING;
hermano 0:baad428cbcc7 87 this->sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;
hermano 0:baad428cbcc7 88 this->sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;
hermano 0:baad428cbcc7 89 this->sConfigIC.ICFilter = 0;
hermano 0:baad428cbcc7 90 }
hermano 0:baad428cbcc7 91
hermano 0:baad428cbcc7 92
hermano 0:baad428cbcc7 93 void PulseCounter::TIM_Start(){
hermano 0:baad428cbcc7 94
hermano 0:baad428cbcc7 95 if(this->TIM == TIM2){
hermano 0:baad428cbcc7 96 RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;
hermano 0:baad428cbcc7 97 }
hermano 0:baad428cbcc7 98
hermano 0:baad428cbcc7 99 else if(this->TIM == TIM3){
hermano 0:baad428cbcc7 100 RCC->APB1ENR |= RCC_APB1ENR_TIM3EN;
hermano 0:baad428cbcc7 101 }
hermano 0:baad428cbcc7 102
hermano 0:baad428cbcc7 103 else if(this->TIM == TIM4){
hermano 0:baad428cbcc7 104 RCC->APB1ENR |= RCC_APB1ENR_TIM4EN;
hermano 0:baad428cbcc7 105 }
hermano 0:baad428cbcc7 106
hermano 0:baad428cbcc7 107 this->TIM->CR1 |= TIM_CR1_CEN;
hermano 0:baad428cbcc7 108 }
hermano 0:baad428cbcc7 109
hermano 0:baad428cbcc7 110 void PulseCounter::Start_Configurations(){
hermano 0:baad428cbcc7 111
hermano 0:baad428cbcc7 112 this->GpioConfig();
hermano 0:baad428cbcc7 113 this->CounterConfig();
hermano 0:baad428cbcc7 114 this->SlaveConfig();
hermano 0:baad428cbcc7 115 this->MasterConfig();
hermano 0:baad428cbcc7 116 this->sConfig();
hermano 0:baad428cbcc7 117 this->TIM_Start();
hermano 0:baad428cbcc7 118
hermano 0:baad428cbcc7 119 HAL_TIM_Base_Start(&this->htim);
hermano 0:baad428cbcc7 120 }
hermano 0:baad428cbcc7 121
hermano 0:baad428cbcc7 122 uint32_t PulseCounter::getTimerValue(){
hermano 0:baad428cbcc7 123
hermano 0:baad428cbcc7 124 this->count = this->TIM->CNT;
hermano 0:baad428cbcc7 125 return this->count;
hermano 0:baad428cbcc7 126 }
hermano 0:baad428cbcc7 127
hermano 0:baad428cbcc7 128 void PulseCounter::clearTimerValue(){
hermano 0:baad428cbcc7 129
hermano 0:baad428cbcc7 130 this->TIM->CNT = 0;
hermano 0:baad428cbcc7 131 }