当前位置: 首页 > news >正文

运用asp做购物网站的心得网站seo的方法

运用asp做购物网站的心得,网站seo的方法,如何做商业网站推广,dreamweaver的简介文章目录 1. STM32单片机ADC功能详解 2. AD单通道 2.1 初始化 2.2 ADC.c 2.3 ADC.h 2.4 main.c 3. AD多通道 3.1 ADC.c 3.2 ADC.h 3.3 main.c 3.4 完整工程文件 1. STM32单片机ADC功能详解 STM32单片机ADC功能详解 2. AD单通道 这个代码实现通过ADC功能采集三脚电…

文章目录

1. STM32单片机ADC功能详解

2. AD单通道

2.1 初始化

2.2 ADC.c

2.3 ADC.h

2.4 main.c

3. AD多通道

3.1 ADC.c

3.2 ADC.h

3.3 main.c

3.4 完整工程文件


1. STM32单片机ADC功能详解

STM32单片机ADC功能详解

2. AD单通道

这个代码实现通过ADC功能采集三脚电位器的数据,并将数据在OLED上显示,单片机为STM32F103C8T6。

2.1 初始化

对于配置ADCclk所使用的函数,在stm32f10x_rcc.h中的最下面可以找到。

对于配置ADC所需要使用的函数,在stm32f10x_adc.h中的最下面可以找到。

首先要进行ADC初始化函数的编写,参考框架图:

  • 第一步为开启RCC时钟,包括ADC和GPIO的时钟,并且ADCCLK的分频器也需要配置一下,
  • 第二步:配置GPIO,将需要使用的引脚配置为模拟输入模式,
  • 第三步:配置多路开关,将输入通道接入到规则组列表。在库函数中,使用结构体去配置参数,包括ADC是单次转换还是连续转换,扫描模式还是非扫描模式,使用几个通道,触发源,数据采用左对齐还是右对齐。
  • 第四步:如果需要使用看门狗,就需要使用函数来配置阈值和检测通道,如果需要使用中断,就需要使用ITconfig函数来开启对应的中断输出。然后在NVIC中配置优先级,就可以触发中断了。
  • 第五步:调用ADC_Cmd函数,开启ADC。

2.2 ADC.c

因为只使用一个通道,所以采用非扫描模式。

#include "stm32f10x.h" //AD初始化
void AD_Init(void)
{//开启时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);	//开启ADC1的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);	//开启GPIOA的时钟//设置ADC时钟RCC_ADCCLKConfig(RCC_PCLK2_Div6);						//选择时钟6分频,ADCCLK = 72MHz / 6 = 12MHz//GPIO初始化GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);					//将PA0引脚初始化为模拟输入//规则组通道配置ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_55Cycles5);		//规则组序列1的位置,配置为通道0//ADC初始化ADC_InitTypeDef ADC_InitStructure;						//定义结构体变量ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;		//模式,选择独立模式,即单独使用ADC1ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;	//数据对齐,选择右对齐ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;	//外部触发,使用软件触发,不需要外部触发ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;		//连续转换,失能,每转换一次规则组序列后停止ADC_InitStructure.ADC_ScanConvMode = DISABLE;			//扫描模式,失能,只转换规则组的序列1这一个位置ADC_InitStructure.ADC_NbrOfChannel = 1;					//通道数,为1,仅在扫描模式下,才需要指定大于1的数,在非扫描模式下,只能是1ADC_Init(ADC1, &ADC_InitStructure);						//将结构体变量交给ADC_Init,配置ADC1//ADC使能ADC_Cmd(ADC1, ENABLE);									//使能ADC1,ADC开始运行//ADC校准ADC_ResetCalibration(ADC1);								//固定流程,内部有电路会自动执行校准while (ADC_GetResetCalibrationStatus(ADC1) == SET);ADC_StartCalibration(ADC1);while (ADC_GetCalibrationStatus(ADC1) == SET);
}//获取AD转换的值
uint16_t AD_GetValue(void)
{ADC_SoftwareStartConvCmd(ADC1, ENABLE);					//软件触发AD转换一次while (ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET);	//等待EOC标志位,即等待AD转换结束return ADC_GetConversionValue(ADC1);					//读数据寄存器,得到AD转换的结果
}

 

2.3 ADC.h

接着是ADC.h文件,这部分引用声明一下即可

#ifndef __AD_H
#define __AD_Hvoid AD_Init(void);
uint16_t AD_GetValue(void);#endif

2.4 main.c

#include "stm32f10x.h"
#include "Delay.h"
#include "OLED.h"
#include "AD.h"uint16_t ADValue;			//定义AD值变量
float Voltage;				//定义电压变量int main(void)
{//模块初始化OLED_Init();			//OLED初始化AD_Init();				//AD初始化//显示静态字符串OLED_ShowString(1, 1, "ADValue:");OLED_ShowString(2, 1, "Voltage:0.00V");while (1){ADValue = AD_GetValue();					//获取AD转换的值Voltage = (float)ADValue / 4095 * 3.3;		//将AD值线性变换到0~3.3的范围,表示电压OLED_ShowNum(1, 9, ADValue, 4);				//显示AD值OLED_ShowNum(2, 9, Voltage, 1);				//显示电压值的整数部分OLED_ShowNum(2, 11, (uint16_t)(Voltage * 100) % 100, 2);	//显示电压值的小数部分Delay_ms(100);			//延时100ms,手动增加一些转换的间隔时间}
}

 

3. AD多通道

这个代码实现通过ADC功能采集多个传感器和电位器的数据,并将数据在OLED上显示,单片机为STM32F103C8T6,传感器为光敏传感器,热敏传感器,反射式红外传感器,电位器采用三脚电位器,均连接AO引脚,代表模拟量输入。

这里依然使用非扫描模式,只需要在每次触发转换之前,手动更改列表第一个位置的通道。比如第一次转换写入通道0,触发并且读值后,在第二次转换时改为通道1。

3.1 ADC.c

对比单通道的代表,将填充通道的函数代码ADC_RegularChannelConfig,放到AD_GetValue中,在触发转换之前,重新填充通道。

#include "stm32f10x.h"  //AD初始化
void AD_Init(void)
{//开启时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);	//开启ADC1的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);	//开启GPIOA的时钟//设置ADC时钟RCC_ADCCLKConfig(RCC_PCLK2_Div6);						//选择时钟6分频,ADCCLK = 72MHz / 6 = 12MHz//GPIO初始化GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);					//将PA0、PA1、PA2和PA3引脚初始化为模拟输入//不在此处配置规则组序列,而是在每次AD转换前配置,这样可以灵活更改AD转换的通道//ADC初始化ADC_InitTypeDef ADC_InitStructure;						//定义结构体变量ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;		//模式,选择独立模式,即单独使用ADC1ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;	//数据对齐,选择右对齐ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;	//外部触发,使用软件触发,不需要外部触发ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;		//连续转换,失能,每转换一次规则组序列后停止ADC_InitStructure.ADC_ScanConvMode = DISABLE;			//扫描模式,失能,只转换规则组的序列1这一个位置ADC_InitStructure.ADC_NbrOfChannel = 1;					//通道数,为1,仅在扫描模式下,才需要指定大于1的数,在非扫描模式下,只能是1ADC_Init(ADC1, &ADC_InitStructure);						//将结构体变量交给ADC_Init,配置ADC1//ADC使能ADC_Cmd(ADC1, ENABLE);									//使能ADC1,ADC开始运行/*ADC校准*/ADC_ResetCalibration(ADC1);								//固定流程,内部有电路会自动执行校准while (ADC_GetResetCalibrationStatus(ADC1) == SET);ADC_StartCalibration(ADC1);while (ADC_GetCalibrationStatus(ADC1) == SET);
}//获取AD转换的值
uint16_t AD_GetValue(uint8_t ADC_Channel)
{ADC_RegularChannelConfig(ADC1, ADC_Channel, 1, ADC_SampleTime_55Cycles5);	//在每次转换前,根据函数形参灵活更改规则组的通道1ADC_SoftwareStartConvCmd(ADC1, ENABLE);					//软件触发AD转换一次while (ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET);	//等待EOC标志位,即等待AD转换结束return ADC_GetConversionValue(ADC1);					//读数据寄存器,得到AD转换的结果
}

3.2 ADC.h

#ifndef __AD_H
#define __AD_Hvoid AD_Init(void);
uint16_t AD_GetValue(uint8_t ADC_Channel);#endif

 

3.3 main.c

#include "stm32f10x.h"      
#include "Delay.h"
#include "OLED.h"
#include "AD.h"uint16_t AD0, AD1, AD2, AD3;	//定义AD值变量int main(void)
{//模块初始化OLED_Init();				//OLED初始化AD_Init();					//AD初始化//显示静态字符串OLED_ShowString(1, 1, "AD0:");OLED_ShowString(2, 1, "AD1:");OLED_ShowString(3, 1, "AD2:");OLED_ShowString(4, 1, "AD3:");while (1){AD0 = AD_GetValue(ADC_Channel_0);		//单次启动ADC,转换通道0AD1 = AD_GetValue(ADC_Channel_1);		//单次启动ADC,转换通道1AD2 = AD_GetValue(ADC_Channel_2);		//单次启动ADC,转换通道2AD3 = AD_GetValue(ADC_Channel_3);		//单次启动ADC,转换通道3OLED_ShowNum(1, 5, AD0, 4);				//显示通道0的转换结果AD0OLED_ShowNum(2, 5, AD1, 4);				//显示通道1的转换结果AD1OLED_ShowNum(3, 5, AD2, 4);				//显示通道2的转换结果AD2OLED_ShowNum(4, 5, AD3, 4);				//显示通道3的转换结果AD3Delay_ms(100);			//延时100ms,手动增加一些转换的间隔时间}
}

3.4 完整工程文件

STM32通过ADC单通道检测数据

STM32通过ADC多通道检测数据

http://www.shuangfujiaoyu.com/news/36082.html

相关文章:

  • wordpress 多重分类南京谷歌优化
  • 服装公司网站背景图网站快照优化公司
  • 网站小图标 免费seo网站关键词排名软件
  • 网站更改备案朋友圈推广怎么收费
  • 汕头个人网站推广建设seoul是韩国哪个城市
  • 大型网站建设设备免费建立个人网站官网
  • 本网站只做信息展示网站推广技术
  • 重点实验室网站建设的意义网站seo网络优化
  • 镇江网站制作费用防止恶意点击软件管用吗
  • 百度知道山东网站建设专门制作小程序的公司
  • 专业的大良网站设计举一个网络营销的例子
  • 外贸网站推广工作外贸网站建设优化推广
  • 长沙做网站好的公司电工培训技术学校
  • 网站制作的公司哪个好营销方式有哪几种
  • 广州黄埔做网站公司哪家好信息流优化师是干什么的
  • 政府网站外语版建设下载安装
  • 工信部网站备案进度查询app推广项目
  • 深圳附近做个商城网站多少钱网络营销服务平台
  • 网站开发图片压缩上传报酬网络推广公司简介模板
  • 开发人员选项怎么打开站长工具seo诊断
  • 揭阳网站制作点点站长工具
  • 系统数据库与建设网站最好用的搜索引擎
  • 改wordpress登陆图标windows优化大师和鲁大师
  • asp动态网站开发实训报告品牌型网站制作价格
  • 深圳市宝安区劳动局电话seo培训赚钱
  • 江西网站设计哪家强茶叶seo网站推广与优化方案
  • 网站设计模板下载seo优化内容
  • html网站建设实录百度开户渠道商哪里找
  • vs2005做网站长春网站建设公司
  • 如何做花店网站百度一下你就知道啦