ST意法半导体
直播中

cherry1989

13年用户 1021经验值
擅长:嵌入式技术
私信 关注
[问答]

怎样使用DMA从STM32F103C8T6的多个通道获取ADC值呢?

我正在尝试使用 DMA 从 STM32F103C8T6 的 ADC1 的多个通道获取 ADC 值,其中每 1ms 由 tiM3 触发一次转换。但是,我没有看到正确的值。我尝试了轮询模式并且效果很好。以上是目前主要的功能代码和CubeMX中的设置。我错过了什么?
  • int main(void)
  • {
  •         /* USER CODE BEGIN 1 */
  •         /* USER CODE END 1 */
  •         /* 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_ADC1_Init();
  •         MX_SPI1_Init();
  •         MX_TIM1_Init();
  •         MX_I2C1_Init();
  •         MX_USART1_UART_Init();
  •         MX_DMA_Init();
  •         MX_TIM2_Init();
  •         MX_TIM3_Init();
  •         /* USER CODE BEGIN 2 */
  •         HAL_ADC_Start_DMA(&hadc1, (uint32_t*) adc1_values, 2);
  •         HAL_TIM_Base_Start(&htim3);
  •         /* USER CODE END 2 */
  •         /* Infinite loop */
  •         /* USER CODE BEGIN WHILE */
  •         while (1)
  •         {
  •                 /* USER CODE END WHILE */
  •                 /* USER CODE BEGIN 3 */
  •         }
  •         /* USER CODE END 3 */
  • }


回帖(1)

王建华

2022-12-27 09:24:57
> MX_ADC1_Init();
> MX_DMA_Init();

您需要在使用它的外设之前初始化 DMA。有时 CubeMX 得到这个正确的,有时不是。

毫无疑问,如果您检查较新的工作项目,初始化顺序已经改变。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分