ST意法半导体
直播中

张旭

7年用户 1046经验值
私信 关注
[问答]

谁能告诉我如何正确地将看门狗与DMA结合起来?

我想仅在其中一个通道上的电压超过特定限制后才在 ADC1 块的 2 个常规通道上启动 ADC 转换,因此我使用了看门狗功能。
触发看门狗后,我需要存储每个通道的 5 个结果值。这是我到目前为止的相关代码和平:
  • void HAL_ADC_LevelOutOfWindowCallback(ADC_HandleTypeDef *hadc)
  • {
  •         HAL_ADC_Stop_IT(&hadc1);                                        // stop watchdog interrupts
  •         uint32_t adc_values[10] = {0};
  •         HAL_ADC_Start_DMA(&hadc1, adc_values, 10);        // read values from each channel after a watchdog has been triggered
  •         HAL_ADC_Stop_DMA(&hadc1);                                        // prevents continuous overwriting
  •         uint32_t A4_val = 0;
  •         uint32_t A5_val = 0;
  •         A4_val = adc_values[1];                                                // values from channel A4
  •         A5_val = adc_values[0];                                                // values from channel A5
  •         printf("A4 channel value is %lun", A4_val);
  •         printf("A5 channel value is %lun", A5_val);
  •         A4_val = adc_values[3];
  •         A5_val = adc_values[2];
  •         printf("A4 channel value is %lun", A4_val);
  •         printf("A5 channel value is %lun", A5_val);
  •         A4_val = adc_values[5];
  •         A5_val = adc_values[4];
  •         printf("A4 channel value is %lun", A4_val);
  •         printf("A5 channel value is %lun", A5_val);
  •         A4_val = adc_values[7];
  •         A5_val = adc_values[6];
  •         printf("A4 channel value is %lun", A4_val);
  •         printf("A5 channel value is %lun", A5_val);
  •         A4_val = adc_values[9];
  •         A5_val = adc_values[8];
  •         printf("A4 channel value is %lun", A4_val);
  •         printf("A5 channel value is %lun", A5_val);
  •         printf("--------------n");
  • }
问题是此代码仅在达到某个采样时间值时有效,如果我将其增加到最大值,则 DMA 开始混淆通道之间的值甚至输出 0。
看起来我遗漏了什么,谁能告诉我如何正确地将看门狗与 DMA 结合起来?


回帖(1)

廉鼎琮

2022-12-15 13:58:24
HAL_ADC_Stop_DMA(&hadc1); // 防止连续覆盖
您应该等到 DMA 自行停止(假设您没有将 DMA 设置为循环)。
在中断中打印 f() 不是最好的主意。
举报

更多回帖

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