你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

ADC各个通道转换

[复制链接]
starcave 提问时间:2024-10-30 20:14 / 未解决
```mermaid
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_DMA_Init();
  MX_USART1_UART_Init();
  MX_ADC1_Init();
  MX_ADC2_Init();
  /* USER CODE BEGIN 2 */
        /*执行ADC自动自校准校准前提:ADC必须被禁用(在执行HAL_ADC_Start()之前或者在HAL_ADC_Stop()之后执行此函数)。*/

HAL_ADCEx_Calibration_Start(&hadc1,ADC_SINGLE_ENDED);
HAL_ADCEx_Calibration_Start(&hadc2,ADC_SINGLE_ENDED);
HAL_UART_Receive_IT(&huart1, (uint8_t*)&RxData, 1);

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
        
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
                HAL_ADC_Start(&hadc1);//启用 ADC,开始常规组的转换。
        //dcbusval[0]=HAL_ADC_GetValue(&hadc1);//*0.015430500427*10;
                dcbusval[0]=HAL_ADC_GetValue(&hadc1)*0.015430500427;
                memcpy(vofaData,(uint8_t *)&dcbusval,sizeof(dcbusval));

                HAL_UART_Transmit_DMA(&huart1,vofaData,12);//将vofaData通过串口1以DMA方式传输,不以串口传输
                HAL_Delay(1);
  }
  /* USER CODE END 3 */
}
`
按照上述代码,ADC1的通道1和2,1是电压,2是温度,这样按照上述写法,1,2通道会相互影响;所以怎么样才能区分出来是那个通道想要将采集的数传出去``

收藏 评论2 发布时间:2024-10-30 20:14

举报

2个回答
xmshao 回答时间:2024-10-31 10:05:01
你是指两个通道的数据出现乱序吧。


现在轮训方式提取结果,连EOC标志都没查,会不会有点盲目?


你最好基于中断方式或DMA方式,每次启动ADC后固定转换完指定个数的通道并提取相应数据,
以保证数据结果的提取和存放顺序。


查询方式的话也可以,同样要保证每次启动后 依次转换完指定通道。


查询式接收处理代码一定要简洁,尤其是配置的转换时间比较短时。
butterflyspring 回答时间:2024-10-31 10:13:31
没看到具体型号和ADC的工作模式配置。

以G431 为例:如果配置了两个通道,单次转换模式,转换次数为2,那么启动一次ADC转换,
将连续完成两次ADC转换过程。

楼主可采用以下两种方法试试:
1.传统方式:每次在通道寄存器只配置一个,转换次数也配置一次,这样完成转换时就是对应通道的结果。
                   注意,重新配置通道时要清除掉所有通道,也就是保证通道数转换时只有设定的一个。
2.DMA 方式:使用DMA normal模式,通道寄存器配置两个,转换次数也是2.
                    每次转换DMA搬运两次,得到两个固定顺序的数据,这样楼主可以区分出对应的结果。

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版