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

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 回答时间:10 小时前
你是指两个通道的数据出现乱序吧。


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


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


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


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

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

楼主可采用以下两种方法试试:
1.传统方式:每次在通道寄存器只配置一个,转换次数也配置一次,这样完成转换时就是对应通道的结果。
                   注意,重新配置通道时要清除掉所有通道,也就是保证通道数转换时只有设定的一个。
2.DMA 方式:使用DMA normal模式,通道寄存器配置两个,转换次数也是2.
                    每次转换DMA搬运两次,得到两个固定顺序的数据,这样楼主可以区分出对应的结果。
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版