【发布时间】:2017-10-07 06:28:46
【问题描述】:
我正在尝试读取并行发送到 STM32L476VG MCU 探索板的 8 位值。数据的第 7 位和第 6 位分别被发送到引脚 PC15 和 PC14,而第 6-0 位被发送到引脚 PE15-PE10。我在示波器上测试了这些引脚的电线,以确保实际上有信号进入电路板。我很确定有问题的 GPIO 引脚已正确初始化为输入:
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)
}
我正在尝试使用此函数读取 8 位数据,只要设置了标志(表示来自 ADC 的数据已准备好进行处理),就会调用该函数:
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;
}
但是,根据调试,由于某种原因,adc_data 始终为 0。即使将其更改为此也不起作用:
uint8_t read_adc_data (void) {
uint8_t adc_data;
adc_data = (GPIOC->IDR >> 8) | (GPIOE->IDR >> 10);
return adc_data;
}
我觉得我在这里遗漏了一些非常明显的东西,但我的教授和他的助手们也想不通。
【问题讨论】:
-
向上搜索一级。 GPIOx->IDR 寄存器是否包含正确的值?