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