STM32 LPTIM

Software e Hardware para uC STM

Moderadores: andre_luis, 51

STM32 LPTIM

Mensagempor tcpipchip » 01 Dez 2021 20:18

Estou utilizando LPTIM no STM32L0 (KEIL C), consigo receber pulsos, contar...porem nao consegui fazer gerar uma interrupt quando tenho overflow.

Alguem com experiencia ?

STM CUBE nao ajudou

Se sim...eu passo o projeto do KEIL...

PS: STM32L071
------------------------------------------
http://www.youtube.com/tcpipchip
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 6560
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!

Re: STM32 LPTIM

Mensagempor cfreund » 02 Dez 2021 04:19

Use Auto-reload match interrupt.
Cláudio F
Avatar do usuário
cfreund
Word
 
Mensagens: 672
Registrado em: 14 Out 2006 14:02
Localização: São Paulo

Re: STM32 LPTIM

Mensagempor tcpipchip » 02 Dez 2021 08:06

Opa, abusando da sua boa vontade, se usas o STM32, fazer um exemplo com Auto-reload match interrupt lptim?

Se possivel, tudo dentro do main.c
------------------------------------------
http://www.youtube.com/tcpipchip
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 6560
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!

Re: STM32 LPTIM

Mensagempor tcpipchip » 02 Dez 2021 09:00

Código: Selecionar todos

#include <stddef.h>
#include <string.h>
#include "stm32l0xx_hal.h"
#include <math.h>
#include "board.h"
#include "Utilities.h"
#include "misc.h"
#include "process.h"
#include "timer.h"
#include "init.h"
#include "timer.h"
#include "main.h"

#include "stm32l0xx_hal_lptim.h"
LPTIM_HandleTypeDef hlptim1;

/**
  * @brief LPTIM1 Initialization Function
  * @param None
  * @retval None
  */
static void MX_LPTIM1_Init(void)
{

  /* USER CODE BEGIN LPTIM1_Init 0 */

  /* USER CODE END LPTIM1_Init 0 */

  /* USER CODE BEGIN LPTIM1_Init 1 */

  /* USER CODE END LPTIM1_Init 1 */
  hlptim1.Instance = LPTIM1;
  hlptim1.Init.Clock.Source = LPTIM_CLOCKSOURCE_ULPTIM;
  hlptim1.Init.Clock.Prescaler = LPTIM_PRESCALER_DIV1;
  hlptim1.Init.UltraLowPowerClock.Polarity = LPTIM_CLOCKPOLARITY_FALLING;
  hlptim1.Init.UltraLowPowerClock.SampleTime = LPTIM_CLOCKSAMPLETIME_DIRECTTRANSITION;
  hlptim1.Init.Trigger.Source = LPTIM_TRIGSOURCE_SOFTWARE;
  hlptim1.Init.OutputPolarity = LPTIM_OUTPUTPOLARITY_HIGH;
  hlptim1.Init.UpdateMode = LPTIM_UPDATE_IMMEDIATE;
  hlptim1.Init.CounterSource = LPTIM_COUNTERSOURCE_EXTERNAL;
  if (HAL_LPTIM_Init(&hlptim1) != HAL_OK)
  {
    //Error_Handler();
  }
   
   HAL_NVIC_SetPriority(LPTIM1_IRQn, 1, 0);
  HAL_NVIC_EnableIRQ(LPTIM1_IRQn);

  /* USER CODE BEGIN LPTIM1_Init 2 */

  /* USER CODE END LPTIM1_Init 2 */

}

void LPTIM1_IRQHandler(void)
{
        if((LPTIM1->ISR & LPTIM_FLAG_CMPM) != RESET)
        {
            /*  Clear compare match interrupt */
            LPTIM1->ICR = LPTIM_FLAG_CMPM;           
            /*  Turn off overflow interrupt */
            HAL_LPTIM_TimeOut_Stop_IT(&hlptim1);           
        }
}

uint16_t Counter;

unsigned char Msg[64];

int main(void)
{
   Start_Init();
   
   MX_LPTIM1_Init();
   /* 65535 is the value loaded into LPTIM1's ARR register */
  HAL_LPTIM_Counter_Start_IT(&hlptim1, 65535);
   
   while(1)
   {   
      Counter = HAL_LPTIM_ReadCounter(&hlptim1); // hlptim1 is a global variable   
      sprintf(Msg,"%d",Counter);
      PRINTF("\r\n+++++++++++%s+++++++++++\r\n", Msg);
///AQUI JÁ ENTRO EM DEEP SLEEP...AGUARDANDO DAR OVERFLOW NO LPTIM PARA SAIR DE DEEP...
   }   
}
#endif


------------------------------------------
http://www.youtube.com/tcpipchip
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 6560
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!

Re: STM32 LPTIM

Mensagempor tcpipchip » 02 Dez 2021 11:23

Consegui, depois de ler varias vezes varias vezes como o KEIL usa HAL_, weak, VIRTUAL functions...
Agora foi....
Consegui tambem ter um contador de 32bits...

Falta agora uma dica de como alterar o LPTIM com um valor...

Ou seja...como faço ele para começar com 30.000, por exemplo ?
------------------------------------------
http://www.youtube.com/tcpipchip
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 6560
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!

Re: STM32 LPTIM

Mensagempor tcpipchip » 07 Dez 2021 18:56

Resolvi com Interrupt overflow!

Hoje minha aplicacao conta pulsos (32 bits) e salva a cada 24 horas na FLASH...

No 7 dia manda para NUVEM a contagem via LoRaWAM
------------------------------------------
http://www.youtube.com/tcpipchip
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 6560
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!


Voltar para STMicroelectronics

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x