由 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取值范围需要了解一下, 实际应用注意分压电阻!文中有几处不懂的地方,希望大家不惜赐教!

