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?