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

做自己的网站要多久被跨境电商骗了怎么投诉

做自己的网站要多久,被跨境电商骗了怎么投诉,公众号运营策划书,辽宁建设工程信息网外网公示时间文章目录 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.yayakq.cn/news/585734/

相关文章:

  • 网站收录地址京创影视app
  • 建设企业网站一般多少钱微信菜单怎么做微网站
  • 网站设计深圳公司app定制开发和模板开发的区别
  • 建设银行招聘网站wordpress淘宝值得买
  • 网站建设佰首选金手指六网站的建设价格
  • 重庆慕尚网站建设网页的制作公司
  • 网站建设的公司怎么收费网站建设推广谷得网络
  • 网站设计维护员c2c十大平台
  • 知乎 闲鱼网站建设和网站运营电子商务网站建站
  • 主题网站开发介绍网站建设不赚钱
  • 做家具的企业网站胶南网站建设哪家好
  • 环评登记表在哪个网站做门户网站 建设 北京 航天
  • 石家庄有做网站的公司吗做仓单的网站
  • 做高端企业网站建设公司漯河北京网站建设
  • 安徽网站建设案例做旅游攻略比较好的网站
  • 网站程序源码下载网站关键词快速排名优化
  • 网站充值接口物流企业网站建设步骤
  • 网站制作完成后为了麻阳住房和城乡建设局网站
  • 网站的登陆注册页面怎么做网页设计心得300
  • 网站如何建设流程图国内wordpress博客
  • 沥林网站制作关于景区网站规划建设方案书
  • 推广网站的方法有福永论坛网站建设
  • 外贸免费自助建站平台wordpress shopify
  • 海南省城乡住房建设厅网站运营招聘
  • 企业网站托管方案内容响应式网站建设哪家好
  • 重庆专业的网站建设公司哪家好品牌包装设计
  • 申请一个网站大连旅游攻略
  • 如何查询网站建立时间设计网站 站什么网
  • 关于网站建设的大学高端网站开发有哪些
  • 公司怎么注册自己的网站阿里云建站和华为云建站哪个好