STM32
直播中

好名字

9年用户 816经验值
擅长:可编程逻辑
私信 关注
[问答]

STM32F10X系列芯片ADC通道和引脚有何关系

STM32F103ZET有几个ADC呢?
STM32F10X系列芯片ADC通道和引脚有何关系?


回帖(1)

陈可

2021-12-14 11:52:13
STM32F103ZET 包含有 3 个 ADC,分别为ADC1,ADC2,ADC3。
  
           
  

  
ADC通道引脚对应关系      
           
  

  
查询和中断方式      
  
  

  

   STM32CUBEMX配置:
省略配置时钟和仿真口,直接设置IO,配置如下图。

  

  

   代码编写(阻塞式进行ADC转换):
1.因为需要将PB0采集到的电压值通过串口打印到串口调试助手,所以需要用到sprintf,所以需要增加一个头文件#include "stdio.h"
2.宏定义led灯亮灭状态+变量

#include "stdio.h"
#define LED0_ON() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_RESET)//LED0点亮
#define LED0_OFF() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_SET)//LED0熄灭
uint16_t adc_value=0,adc_volt=0;
uint8_t str_buff[64];


3.定义串口发送函数+ADC采样函数


void URE_Send_Info()
{
        sprintf((char*)str_buff,"采样值:%d,电压值:%d.%d%dVrn",adc_value,adc_volt/100,(adc_volt%100)/10,adc_volt%10);
        HAL_UART_Transmit(&huart1,str_buff,sizeof(str_buff),10000);
}


void adc_get_value()
{
        HAL_ADC_Start(&hadc1);                    //启动ADC单次转换
        LED0_ON();
        if(HAL_ADC_PollForConversion(&hadc1,10)==HAL_OK)
        {
        adc_value=HAL_ADC_GetValue(&hadc1);
        adc_volt=adc_value*330/4096;       
        }
URE_Send_Info();
LED0_OFF();       
HAL_ADC_Stop(&hadc1);  
}


4.主函数中的while(1)中加入ad采集函数


  while (1)
  {
    /* USER CODE BEGIN 3 */
        adc_get_value();
        HAL_Delay(500);
  }
  /* USER CODE END 3 */


代码编写(中断式进行ADC转换):
1.第一步是一样的,都需要用到sprintf,所以需要增加一个头文件#include "stdio.h"
2.第二步也是一样,需要用到led灯和一些变量


#include "stdio.h"
#define LED0_ON() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_RESET)//LED0点亮
#define LED0_OFF() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_SET)//LED0熄灭
uint16_t adc_value=0,adc_volt=0;
uint8_t str_buff[64];


3.定义串口发送函数+ADC采样函数。目的一样,但是函数不一样了


void URE_Send_Info()
{
        sprintf((char*)str_buff,"采样值:%d,电压值:%d.%d%dVrn",adc_value,adc_volt/100,(adc_volt%100)/10,adc_volt%10);
        HAL_UART_Transmit(&huart1,str_buff,sizeof(str_buff),10000);
}


void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{
        if(hadc->Instance==ADC1)
        {
                adc_value=HAL_ADC_GetValue(&hadc1);
                adc_volt=adc_value*330/4096;
                URE_Send_Info();
                LED0_OFF();
        }
}       


4.主函数中的while(1)中开启ADC


  while (1)
  {
    /* USER CODE BEGIN 3 */
        LED0_ON();
        HAL_ADC_Start_IT(&hadc1);
        HAL_Delay(500);
  }
    /* USER CODE END 3 */
举报

更多回帖

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