基于AT32(STM32)单片机的模块化代码之——ADC代码模块化
1.环境介绍
平台:AT32F415单片机,雅特力公司的AT32系列单片机其实跟STM32系列单片机大同小异,包括库函数等基本都是一样的,所以这款代码无论是AT32还是STM32都是适用的。
开发环境:MDK V5 for arm
简介:在实际的项目开发中,经常会用到多路ADC检测,所以特意在32的库函数之上做了2次封装,形成一个模块化的代码,以便于下次项目便捷开发
2.代码模块化思路
2.1在adc.h文件中枚举用到的adc通道
typedef enum
{
ADC1_CHAN2,
ADC1_CHAN4,
ADC1_CHAN1,
ADC1_CHAN5,
ADC1_CHAN11,
ADC1_CHAN10,
NUM_ADC1CHN
}ENUM_ADC1CHN;
typedef enum
{
//如果有用到ADC2的检测通道,在后面添加枚举类型变量即可
ADC2_CHAN1=NUM_ADC1CHN,
//...
//..
NUM_ADCCHN
}ENUM_ADC2CHN;
#define NUM_ADC2CHN (NUM_ADCCHN-NUM_ADC1CHN)
#if(NUM_ADC2CHN)
#define NUM_ADC 2
#else
#define NUM_ADC 1
#endif
因为现在用到的这个型号的单片机有两组ADC,所以特意根据用到的adc不同,对枚举类型做了区分
2.2 将每个adc通道的实际用途进行映射
//ADC通道配置,将ADC通道与实际功能应用的对应上
//added by zhl 2020/6/30 for v1.01
#define ADC_CHNTEMP1 ADC1_CHAN5
#define ADC_CHNTEMP2 ADC1_CHAN1
#define ADC_CHNCURRE1 ADC1_CHAN10
#define ADC_CHNCURRE2 ADC1_CHAN11
#define ADC_CHNERR1 ADC1_CHAN4
#define ADC_CHNERR2 ADC1_CHAN2
这样,当在app逻辑层需要对哪个adc通道进行操作时,直接用ADC_CHNTEMP1 这些宏定义去获取,这样就做到了bsp层和app层的分离,后续adc通道有变动时,只需要在bsp层进行修改,其它其它地方都不用动,方便又省事。
2.3在adc.c文件中定义几个全局变量,用来做配置和数据存储功能
/
/定义存放ADC转换结果的数组
u16 gu16_ADCResult[NUM_ADCCHN]={0,0,0,0,0,0};
//项目中各个ADC通道引脚对应关系
//AD1_IN2:PA