找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 964|回复: 6
收起左侧

stm32单片机AD为什么两个通道数值一样啊?

[复制链接]
ID:1069757 发表于 2023-7-29 15:43 | 显示全部楼层 |阅读模式
int main(void)
{
  MX_GPIO_Init();
  MX_USART1_UART_Init();
  MX_ADC1_Init();
  printf("this is adc\n");

  while (1)
  {
   HAL_ADC_Start(&hadc1);
      
        while((hadc1.Instance->DR)==RESET);
        temp=HAL_ADC_GetValue(&hadc1);
        printf("light adc=%d\n",temp);
      
               
        while((hadc1.Instance->DR)==RESET);
ht adc2=%d\n",temp);

                HAL_Delay(1000);
}
        }


回复

使用道具 举报

ID:1087948 发表于 2023-7-30 13:59 | 显示全部楼层
在你的代码中,你只启动并读取了一个ADC通道(hadc1),然后两次打印出这个通道的值。所以,你看到的两个数值是一样的,因为它们都来自同一个ADC通道。

如果你想从两个不同的ADC通道获取值,你需要分别启动和读取每个通道。例如,假设你有两个ADC通道:hadc1和hadc2,你可以这样修改你的代码:

c
int main(void)
{
  MX_GPIO_Init();
  MX_USART1_UART_Init();
  MX_ADC1_Init();
  printf("this is adc\n");

  while (1)
  {
    // Start ADC for channel 1
    HAL_ADC_Start(&hadc1);
    while((hadc1.Instance->DR)==RESET);
    temp1=HAL_ADC_GetValue(&hadc1);
    printf("light adc=%d\n",temp1);

    // Start ADC for channel 2
    HAL_ADC_Start(&hadc2); // Assuming you have hadc2 for the second channel
    while((hadc2.Instance->DR)==RESET);
    temp2=HAL_ADC_GetValue(&hadc2);
    printf("ht adc2=%d\n",temp2);

    HAL_Delay(1000);
  }
}
请注意,你需要确保你已经正确地初始化了第二个ADC通道(在这个例子中是hadc2)。此外,我使用了两个不同的变量(temp1和temp2)来存储每个通道的值,以避免混淆。
回复

使用道具 举报

ID:1052053 发表于 2023-7-30 14:10 | 显示全部楼层
liyonghua111 发表于 2023-7-30 13:59
在你的代码中,你只启动并读取了一个ADC通道(hadc1),然后两次打印出这个通道的值。所以,你看到的两个数 ...

厉害厉害
回复

使用道具 举报

ID:1069757 发表于 2023-7-30 15:35 来自手机 | 显示全部楼层
你好我是用的adc多通道扫描的方式,也就是只是使用adc1
回复

使用道具 举报

ID:1069757 发表于 2023-7-30 15:36 来自手机 | 显示全部楼层
不是说每当一个通道读取完成后就会置位eoc吗
回复

使用道具 举报

ID:420836 发表于 2023-7-31 01:05 | 显示全部楼层
代码只是读取相同的通道,因此读数应该相同。
回复

使用道具 举报

ID:1069757 发表于 2023-7-31 08:56 来自手机 | 显示全部楼层
可是我是多通道连续扫描啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表