STM32F401RE Nucleo no puede leer el sensor DHT22

0

Este es mi primer proyecto y estoy tratando de leer las lecturas de temperatura de un sensor DHT22 utilizando una placa STM32F401RE-NUCLEO.

Mi código falla al leer la entrada del sensor DHT22 cuando uso el comando CCR1. He verificado que mi circuito está funcionando como lo probé anteriormente usando el compilador MBED.

Configuré el temporizador para usar TIM_CHANNEL_1 y la instancia de TIM3, que de acuerdo con la GUI de STM32CubeMX corresponde al pin PA6 de STM32.

Mi estructura DHT22 se parece a la siguiente:

typedef struct{
    uint8_t             bitsRX[5];
    float               temp;
    float               hum;
    uint8_t             crcErrorFlag;
    DHT22_STATE         state;
    TIM_HandleTypeDef   timHandle;
    TIM_IC_InitTypeDef  timICHandle;
    uint32_t            timChannel;
    uint16_t            gpioPin;
    GPIO_TypeDef*       gpioPort;
    int                 bitPos;
    IRQn_Type           timerIRQn;
    uint32_t            gpioAlternateFunction;
    uint16_t            lastVal;
    void                (*errorCallback)(DHT22_RESULT);
}

Configuré mi objeto DHT de la siguiente manera:

dht.gpioPin = GPIO_PIN_6;
dht.gpioPort = GPIOA;
dht.timChannel = TIM_CHANNEL_1;
dht.gpioAlternateFunction = GPIO_AF2_TIM3;
dht.timHandle.Instance = TIM3;

Estoy ejecutando el siguiente comando para intentar capturar el valor:

uint16_t val = HAL_TIM_ReadCapturedValue(&dht->timHandle, dht->timChannel);

Cuando la función se define como la siguiente (se cortaron las partes posteriores, ya que solo me importa el canal 1):

uint32_t HAL_TIM_ReadCapturedValue(TIM_HandleTypeDef *htim, uint32_t Channel)
{
uint32_t tmpreg = 0U;

__HAL_LOCK(htim);
switch (Channel)
{
case TIM_CHANNEL_1:
{
  /* Check the parameters */
  assert_param(IS_TIM_CC1_INSTANCE(htim->Instance));
  /* Return the capture 1 value */

  tmpreg = htim->Instance->CCR1; // This line is giving me the problem

  break;
}

El tmpreg = htim- > Instancia- > CCR1 siempre está devolviendo 0.

¿Alguna solución o puntero que pueda ayudarme?

    
pregunta user37357

1 respuesta

1

En casos como estos, tenga en cuenta los siguientes puntos:

  1. No se ha utilizado en MBED, pero use una herramienta de depuración como OpenOCD con gdb e intente depurar el código mientras observa los registros de entrada. En eclipse puede hacerlo con una herramienta como EmbSysRegisters . Google para algunos tutoriales y ahorrará mucho tiempo.
  2. Mirando la hoja de datos de DHT22, dice que necesita una MCU para la señal del sensor para iniciar el proceso. ¿Has comprobado eso?
respondido por el Kartik Madhira

Lea otras preguntas en las etiquetas