Skip to content

由 ckdsx.cn 贡献,Ai-Thinker 进行整理

WB2 示例代码入门---ADC

📜 点击展开完整代码
c
#include <stdio.h>    //引用各种头文件
#include <string.h>
#include <FreeRTOS.h>
#include <task.h>
#include <hosal_adc.h>
#include <blog.h>

/**********   BL602  ************  WB2映射关系

*    channel0   ----->     gpio12 *    channel1   ----->     gpio4 *    channel2   ----->     gpio14 *    channel3   ----->     gpio13 *    channel4   ----->     gpio5 *    channel5   ----->     gpio6 *    channel7   ----->     gpio9 *    channel9   ----->     gpio10 *    channel10  ----->     gpio11 *    channel11  ----->     gpio15 */

📜 点击展开完整代码
c
#define GPIO_ADC_PIN 11  //设置 ADC 引脚
#define ADC_CHANNEL 10   //设置通道号

void main(void)    //主函数
{
    static hosal_adc_dev_t adc0 = {  //设置 ADC 硬件参数

.cb = NULL,   //求教1         .config = {   //设置             .mode = HOSAL_ADC_ONE_SHOT,   //个人理解:模式设置为只取一次             .pin = GPIO_ADC_PIN,   //设置引脚为 11             .sampling_freq = 340,   //采样频率 340 ?         },         .dma_chan = 0, //求教2         .p_arg = NULL, //求教3         .port = 0,     //求教4

📜 点击展开完整代码
c
    };

    hosal_adc_init(&adc0); //初始化 adc0

    hosal_adc_add_channel(&adc0, ADC_CHANNEL); //为ADC0 增加通道?

    for (;;) {   //循环
        int ret = hosal_adc_value_get(&adc0, ADC_CHANNEL, 100); //获取adc0的数值,

        /// ADC         电阻分压,便于测量略高于vcc的电压;
        ///  |
        /// ┌┴┐
        /// | | 4.7 kΩ
        /// └┬┘
        ///  |
        ///  ├-----IO11
        ///  |
        /// ┌┴┐
        /// | | 1 kΩ
        /// └┬┘
        ///  |
        ///  ┴
        /// GND
        /// Actual Voltage = ADC output * 1000 / (4700 + 1000)  (Unit: mV)

        ret = ret * (4700 + 1000) / 1000; //根据上图分压电路导出的计算公式

        blog_info("ADC = %ld mV\r\n", ret);  // 输出当前测量电压,单位:mv

        vTaskDelay(pdMS_TO_TICKS(2000));  //延时函数
    }
}

WB2的adc取值范围需要了解一下, 实际应用注意分压电阻!文中有几处不懂的地方,希望大家不惜赐教!

Released under the MIT License. Build Time 2026-09-11 14:52:23