STM32/STM8技术论坛
直播中

meiyaolei

12年用户 424经验值
擅长:测量仪表,连接器,EMC/MEI设计,处理器/DSP,接口/总线/驱动,控制/MCU
私信 关注
[经验]

【正点原子STM32精英V2开发板免费试用】+ ADC

开发平台:MDK
开发板:正点原子STM32精英板
实现功能:ADC的使用,通过串口打印出ADC采集的值,并转换成电压值,手动转动开发板的电位器调整,实现电压值0-3.3V显示。
1.先上原理图,使用的是哪个ADC口和通道:
利用跳帽把24脚连接在一起,也就是RV1和PA1 STM ADC连接起来。
image.png

image.png

2、ADC的框图:
image.png

3、ADC时序:
image.png

4、ADC寄存器:
image.png

5、ADC转换并通过串口打印出图:

image.png

6、代码:
while中把ADC读的值给到ADCX

adcx = adc_get_result_average(ADC_ADCX_CHY, 10);    /* 获取通道5的转换值 */
temp = (float)adcx * (3.3 / 4096);                  /* 把值转换成电压 */
 LED0_TOGGLE();
 delay_ms(100);
printf(" ADC1_CH1_VOL: %.4f\r\n",temp);

ADC初始

g_adc_handle.Instance = ADC_ADCX;                        /* 选择哪个ADC */
    g_adc_handle.Init.DataAlign = ADC_DATAALIGN_RIGHT;       /* 数据对齐方式:右对齐 */
    g_adc_handle.Init.ScanConvMode = ADC_SCAN_DISABLE;       /* 非扫描模式,仅用到一个通道 */
    g_adc_handle.Init.ContinuousConvMode = DISABLE;          /* 关闭连续转换模式 */
    g_adc_handle.Init.NbrOfConversion = 1;                   /* 赋值范围是1~16,本实验用到1个规则通道序列 */
    g_adc_handle.Init.DiscontinuousConvMode = DISABLE;       /* 禁止规则通道组间断模式 */
    g_adc_handle.Init.NbrOfDiscConversion = 0;               /* 配置间断模式的规则通道个数,禁止规则通道组间断模式后,此参数忽略 */
    g_adc_handle.Init.ExternalTrigConv = ADC_SOFTWARE_START; /* 触发转换方式:软件触发 */
    HAL_ADC_Init(&g_adc_handle);                             /* 初始化 */

    HAL_ADCEx_Calibration_Start(&g_adc_handle);              /* 校准ADC */

ADC转换

adc_channel_set(&g_adc_handle , ch, ADC_REGULAR_RANK_1, ADC_SAMPLETIME_239CYCLES_5);    /* 设置通道,序列和采样时间 */

    HAL_ADC_Start(&g_adc_handle);                            /* 开启ADC */
    HAL_ADC_PollForConversion(&g_adc_handle, 10);            /* 轮询转换 */
    return (uint16_t)HAL_ADC_GetValue(&g_adc_handle);

7、视频:

f3d6ad19319e6966a353a24c254f0b15

更多回帖

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