Ps:本例程主要作用是,展示如何使用ADC库函数。
主板为:逐飞RT1064 + 母板
1)简介:RT1052 有 2 个 ADC,每个 ADC 有 12 位、 10 位、 8 位可选,每个 ADC 有 16 个外部通道。 ADC 具有最高 1MS/s 采样率,支持单次或连续转换模式,可配置的采样时间和转换
速度,支持硬件求平均,支持自动比较转换结果为小于、大于或等于某一设定的值,或者
在设定的范围内、范围外。
2)两个ADC,16个通道对应的管脚
typedef enum // 枚举ADC通道
{
ADC1_CH0_B27,
ADC1_CH1_B12,
ADC1_CH2_B13,
ADC1_CH3_B14,
ADC1_CH4_B15,
ADC1_CH5_B16,
ADC1_CH6_B17,
ADC1_CH7_B18,
ADC1_CH8_B19,
ADC1_CH9_B20,
ADC1_CH10_B21,
ADC1_CH11_B22,
ADC1_CH12_B23,
ADC1_CH13_B24,
ADC1_CH14_B25,
ADC1_CH15_B26,
ADC2_CH0_B27,
ADC2_CH1_B28,
ADC2_CH2_B29,
ADC2_CH3_B30,
ADC2_CH4_B31,
ADC2_CH5_B16,
ADC2_CH6_B17,
ADC2_CH7_B18,
ADC2_CH8_B19,
ADC2_CH9_B20,
ADC2_CH10_B21,
ADC2_CH11_B22,
ADC2_CH12_B23,
ADC2_CH13_B24,
ADC2_CH14_B25,
ADC2_CH15_B26,
}ADCCH_enum;
//此枚举定义不允许用户修改
typedef enum // 枚举ADC通道
{
ADC_8BIT, //8位分辨率
ADC_10BIT, //10位分辨率
ADC_12BIT, //12位分辨率
}ADCRES_enum;
1)代码
//-------------------------------------------------------------------------------------------------------------------
// @brief ADC初始化
// @param adcn 选择ADC模块(ADC_1、ADC_2)
// @param ch 选择ADC通道
// @param resolution 选择选择通道分辨率(如果同一个模块初始化时设置了不同的分辨率 则最后一个初始化的分辨率生效)
// @return void
// Sample usage: adc_init(ADC_1,ADC1_CH0_B27,ADC_8BIT);//初始化B27为ADC功能 分辨率为8位
//-------------------------------------------------------------------------------------------------------------------
void adc_init(ADCN_enum adcn, ADCCH_enum ch, ADCRES_enum resolution)
2)adc_convert函数(AD转换值获取)
/-------------------------------------------------------------------------------------------------------------------
// @brief ADC转换一次
// @param adcn 选择ADC模块(ADC_1、ADC_2)
// @param ch 选择ADC通道
// @return void
// Sample usage: adc_convert(ADC_1,ADC1_CH0_B27);
//-------------------------------------------------------------------------------------------------------------------
uint16 adc_convert(ADCN_enum adcn, ADCCH_enum ch)
3)while循环中的初采集代码
while(1)
{
//采集一次ADC
adc_value = adc_convert(ADC_1,ADC1_CH3_B14);
systick_delay_ms(100);
}
1)整体代码展示
#include "headfile.h"
uint16 adc_value;
int main(void)
{
DisableGlobalIRQ();
board_init(); //务必保留,本函数用于初始化MPU 时钟 调试串口
//初始化ADC_1模块 3通道 引脚为B14, 精度为12位
//每一个ADC模块 所包含的通道,分辨率应设置为一样
//如果设置不一样则最后一个初始化的分辨率生效
adc_init(ADC_1,ADC1_CH3_B14,ADC_8BIT);
//通过在线调试直接查看adc_value的值
//将ADC引脚接到GND,adc_value的值在0附近
//将ADC引脚接到3.3V,adc_value的值在255附近
EnableGlobalIRQ(0);
while(1)
{
//采集一次ADC
adc_value = adc_convert(ADC_1,ADC1_CH3_B14);
systick_delay_ms(100);
}
}