J'essaie de lire une valeur de 8 bits envoyée en parallèle à une carte de découverte MCU STM32L476VG. Les bits 7 et 6 des données sont respectivement envoyés aux broches PC15 et PC14, tandis que les bits 6-0 sont envoyés aux broches PE15-PE10. J'ai testé les fils à ces broches sur un oscilloscope pour garantir qu'il y a effectivement un signal venant à la carte. Je suis assez sûr que les broches GPIO en cause sont initialisés comme entrées:Lecture de l'entrée GPIO sur la carte de découverte STM
void init_adc_gpio (void) {
RCC->AHB2ENR |= RCC_AHB2ENR_GPIOCEN; // Enable clock for GPIOC
RCC->AHB2ENR |= RCC_AHB2ENR_GPIOEEN; // GPIOE
RCC->AHB2ENR |= RCC_AHB2ENR_GPIOHEN; // GPIOH
GPIOC->MODER &= (uint32_t)0x0FFFFFFFU; // Pins 14-15 of C -> input (2 most significant bits of ADC data)
GPIOE->MODER &= (uint32_t)0x000FFFFFU; // Pins 10-15 of E -> input (6 least significant bits of ADC data)
GPIOH->MODER &= (uint32_t)0xFFFFFFFCU; // Pin 0 of H -> input (ADC data ready flag)
}
Je suis en train de lire les données 8 bits en utilisant cette fonction, qui est appelée à chaque fois un indicateur est défini (ce qui indique que les données de l'ADC est prêt à traiter):
uint8_t read_adc_data (void) {
uint8_t adc_data;
adc_data = ((GPIOC->IDR & (uint32_t)0x0000C000U) >> 8);
adc_data |= ((GPIOE->IDR & (uint32_t)0x0000FC00U) >> 10);
return adc_data;
}
Cependant, selon le débogage, adc_data est toujours 0 pour une raison quelconque. Même changer à ce qui n'a pas fonctionné:
uint8_t read_adc_data (void) {
uint8_t adc_data;
adc_data = (GPIOC->IDR >> 8) | (GPIOE->IDR >> 10);
return adc_data;
}
Je me sens comme il y a quelque chose ridiculement évident que je suis absent ici, mais mon professeur et ses assistants ne pouvaient pas comprendre non plus.
Rechercher un niveau supérieur. Les registres GPIOx-> IDR contiennent-ils les valeurs correctes? – Jeroen3