众拳【剑齿虎STM8】开发板入门笔记(无51基础可学) 第35讲 STM8 多通道ADC输入实验 目 录 35.1 多通道ADC转换原理 多通道模拟量采集时,要循环采集。配置一个通道采集一个通道,这个过程主要就是改变通道编号。 35.2 实验目的 熟悉并掌握模拟量ADC转换器多通道数据采集的方法。 35.3 程序文件设计 34.3.1 main.c文件中的程序主程序就实现初始化和调用驱动程序,这样主程序控制思路清晰,流程简单。要想了解全面详实的程序,请大家参考光盘(网盘)中程序及程序注释。 /*********************************************************************** * 说 明: 多通道ADC输入实验 * 开发平台: 剑齿虎STM8开发板 * 关注微信公众平台微信号:"zxkj-ly",免费获取STM8资料。 * STM8技术交流QQ群【335123291】 * 哈尔滨卓恩科技开发有限公司 * * 作 者: 刘洋 张殿东 * 版 本: V1.0 * 日 期: 2016-05-12 * * IAR开发环境 版本 V2.20.1 * ST库函数 版本 V2.2.0 ***********************************************************************/ #include "pbdata.h"//引入自定义公共头文件 void BSP_Configuration(void);//硬件初始化函数声明 /*********************************************************************** * 函 数 名: main * 功能说明: c程序入口 * 形 参:无 * 返 回 值: 错误代码(无需处理) ***********************************************************************/ int main(void) { BSP_Configuration();//硬件驱动初始化函数 while(1)//主程序循环,反复执行循环体里的语句 { ADC2_MultiChannel_Demo4(); delay_ms(1000); } } /*********************************************************************** * 函 数 名: BSP_Configuration * 功能说明: 初始化硬件设备。只需要调用一次。该函数配置CPU寄存器和外设的寄存器并初始化一些全局变量。 * 形 参:无 * 返 回 值: 无 ***********************************************************************/ void BSP_Configuration(void) { CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);//时钟速度为内部16M,1分频, UART1_Congfiguration();//调用RS232串口1初始化函数 LED_Init();//调用LED初始化函数 rim();//打开总中断 } /*断言函数:它的作用是在编程的过程中为程序提供参数检查*/ #ifdef USE_FULL_ASSERT void assert_failed(u8* file,u32 line) { while(1) { } } #endif 35.3.2 pbdata.c文件中的程序……详细程序请参考程序例程 35.3.3 pbdata.h文件中的程序#ifndef _PBDATA_H//宏定义,定义文件名称 #define _PBDATA_H #include "stm8s.h"//引入STM8的头文件 #include <stdio.h>//需要引用这个头文件才能实现 #include "math.h"//需要引用这个头文件才能实现 #include "led.h" //引用LED头文件 #include "uart1.h"//引用RS232头文件 #include "adc.h" void delay_us(u16 nCount); //微秒延时程序 void delay_ms(u16 nCount); //毫秒延时程序 u16 Get_decimal(double dt,u8 deci); //获得数值小数部分 #endif //定义文件名称结束 35.3.4 adc.c文件中的程序#include "pbdata.h" u8 adc_bz=0;//定义中断进入标志 /*************************************************************************** * 函 数 名: DWQ_SINGLE_Configuration * 功能说明: 电位器模拟量通道配置 * 形 参:无 * 返 回 值: 无 ***************************************************************************/ void DWQ_SINGLE_Configuration(void) { //初始化ADC2 ADC2_Init(ADC2_CONVERSIONMODE_SINGLE,ADC2_CHANNEL_10,ADC2_PRESSEL_FCPU_D18,ADC2_EXTTRIG_TIM,DISABLE,ADC2_ALIGN_RIGHT,ADC2_SCHMITTTRIG_CHANNEL10, DISABLE);//单次转换 ADC2_ITConfig(ENABLE);//中断使能 ADC2_Cmd(ENABLE);//转换器使能 ADC2_StartConversion();//开始转换 } /*************************************************************************** * 函 数 名: Light_SINGLE_Configuration * 功能说明: 光敏电阻拟量通道配置 * 形 参:无 * 返 回 值: 无 ***************************************************************************/ void Light_SINGLE_Configuration(void) { //初始化ADC2 ADC2_Init(ADC2_CONVERSIONMODE_SINGLE,ADC2_CHANNEL_11,ADC2_PRESSEL_FCPU_D18,ADC2_EXTTRIG_TIM,DISABLE,ADC2_ALIGN_RIGHT,ADC2_SCHMITTTRIG_CHANNEL11, DISABLE);//单次转换 ADC2_ITConfig(ENABLE);//中断使能 ADC2_Cmd(ENABLE);//转换器使能 ADC2_StartConversion();//开始转换 } /*************************************************************************** * 函 数 名: ADC2_MultiChannel_Demo4 * 功能说明: 多通道模拟量采集实验 * 形 参:无 * 返 回 值: 无 ***************************************************************************/ void ADC2_MultiChannel_Demo4(void) { u16 adc_Value=0; DWQ_SINGLE_Configuration();//调用电位器模拟量通道配置函数 while(!adc_bz);//等待转换完成 adc_Value=ADC2_GetConversionValue();//获得转换结果 printf("电位器数值:%d\r\n",adc_Value);//转换结果打印输出 Light_SINGLE_Configuration();//调用光敏电阻拟量通道配置函数 while(!adc_bz);//等待转换完成 adc_Value=ADC2_GetConversionValue();//获得转换结果 printf("光敏电阻数值:%d\r\n",adc_Value);//转换结果打印输出 } 35.3.5 adc.h文件中的程序#ifndef _ADC_H //宏定义,定义文件名称 #define _ADC_H #include "stm8s.h"//引用STM8头文件 extern u8 adc_bz; void DWQ_SINGLE_Configuration(void);//电位器模拟量通道配置 void Light_SINGLE_Configuration(void);//光敏电阻拟量通道配置 void ADC2_MultiChannel_Demo4(void);//多通道模拟量采集实验 #endif //定义文件名称结束 35.3.6 uart1.c文件中的程序设计串口通讯软件是为了通过串口uart1能把光敏电阻模拟量数值和电位器模拟量数值输出到计算机上显示出来,能直观的看到通讯数据是否和设计一致。 ……详细程序请参考程序例程。 35.3.7 uart1.h文件中的程序……详细程序请参考程序例程。 35.4 实验过程 我们使用蓝精灵多功能监控软件来监控多路ADC模拟量转换过程,可以看出随着遮挡物遮盖光敏电阻的程度不同,输出到计算机上的裸数据值在不断变化,使用工具调节电位器时,输入到计算机上的裸数据值在变化,它们变化范围是0~1023。 图35.2 多路ADC模拟量转换监视界面
|