我在使用ADC时遇到了问题,感觉已经尝试了所有方法却没有任何结果。开始怀疑是这块芯片本身存在问题,但在更换之前想先排除人为错误。ADC似乎始终无法存储任何数据,总是返回0以及错误代码1。到目前为止,已经尝试了所有ADC模式,但始终无法获取任何数据。
以下是一些具体情况:
我使用的是STM32H743ZIT6芯片,通过STLINK3和SWD在STM32CubeIDE中进行编程。
我的板上有一个48 MHz的晶体振荡器,已在IDE中配置且似乎工作正常,其他功能均运行良好。
我通过SPI连接了一个显示屏,且显示屏工作正常。
我有一个分压器连接到PA1,可提供2V至3.3V的电压(已验证),并通过DMA启用ADC输入来测量该电压。
当我调用ADC错误检查时,返回错误代码1,表示存在内部错误。
寄存器ADEN已启用,但ADRDY始终无法被设置。每次尝试设置时,都会恢复原状。
在STM32CubeIDE中配置芯片时,ADC时钟多路复用器显示为灰色。当我高亮显示该选项时,仅提示需要启用ADC,而我已经启用了ADC。试过启用多个ADC,但该选项仍然显示为灰色,不确定这是否正常。
附上我的完整代码库,这些代码大部分是由Cube生成的,仅添加了显示屏相关的代码。
#include "main.h"
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include <st7789.h>
#include <stdio.h>
#include <string.h>
#include <stdarg.h> //for va_list var arg functions
/* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */
/* USER CODE END PTD */
/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
/* USER CODE END PD */
/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */
/* USER CODE END PM */
/* Private variables ---------------------------------------------------------*/
ADC_HandleTypeDef hadc1;
DMA_HandleTypeDef hdma_adc1;
I2C_HandleTypeDef hi2c1;
SPI_HandleTypeDef hspi1;
SPI_HandleTypeDef hspi2;
DMA_HandleTypeDef hdma_spi1_tx;
DMA_HandleTypeDef hdma_spi2_tx;
DMA_HandleTypeDef hdma_spi2_rx;
UART_HandleTypeDef huart1;
UART_HandleTypeDef huart2;
/* USER CODE BEGIN PV */
/* USER CODE END PV */
/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void MPU_Config(void);
static void MX_GPIO_Init(void);
static void MX_I2C1_Init(void);
static void MX_SPI1_Init(void);
static void MX_SPI2_Init(void);
static void MX_USART1_UART_Init(void);
static void MX_DMA_Init(void);
static void MX_USART2_UART_Init(void);
static void MX_ADC1_Init(void);
/* USER CODE BEGIN PFP */
void myprintf(const char *fmt, ...);
/* USER CODE END PFP */
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
uint32_t value;
/* USER CODE END 0 */
/**
* @brief The application entry point.
* @retval int
*/
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MPU Configuration--------------------------------------------------------*/
MPU_Config();
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_I2C1_Init();
MX_SPI1_Init();
MX_SPI2_Init();
MX_USART1_UART_Init();
MX_DMA_Init();
MX_USART2_UART_Init();
MX_ADC1_Init();
/* USER CODE BEGIN 2 */
ST7789_Init();
ST7789_Fill_Color(WHITE);
HAL_ADC_Start_DMA(&hadc1,value,3);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
char buffer[100];
char buffer2[100];
uint32_t status;
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
status = HAL_ADC_GetError(&hadc1);
sprintf(buffer,"Error %X \r\n", status);
ST7789_WriteString(10, 10, buffer, Font_16x26, GBLUE, RED);
HAL_UART_Transmit(&huart1, buffer, strlen(buffer), HAL_MAX_DELAY);
sprintf(buffer2,"Current %X \r\n", value);
ST7789_WriteString(10, 60, buffer2, Font_16x26, GBLUE, RED);
HAL_UART_Transmit(&huart1, buffer2, strlen(buffer2), HAL_MAX_DELAY);
HAL_Delay(1000);
ST7789_Fill_Color(WHITE);
}
/* USER CODE END 3 */
}
|
|