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

佛山新网站建设代理商小公司做网站需要注意什么

佛山新网站建设代理商,小公司做网站需要注意什么,南京seo招聘,仿08影院wordpress目录 ADC采集 ADC配置步骤 STM32F103C8T6的ADC 输入通道 ​编辑 1路ADC(A4 ADC 通道4) 1路ADC源码代码链接: 2路ADC(A4 ADC 通道4、A5 ADC 通道5)基于DMA实现 多路ADC实现采集 ADC采集 ADC配置步骤 使能GPIO…

目录

ADC采集

ADC配置步骤

STM32F103C8T6的ADC

输入通道

​编辑

1路ADC(A4 ADC 通道4)

1路ADC源码代码链接:

2路ADC(A4 ADC 通道4、A5 ADC 通道5)基于DMA实现

多路ADC实现采集


ADC采集

ADC配置步骤
  • 使能GPIO时钟和ADC时钟,设置引脚为模拟输入
  • 设置ADC的分频因子
  • 初始化ADC参数,包括ADC工作模式,规则序列等
  • 使能ADC并校准
  • 触发AD转换,读取AD转换值
STM32F103C8T6的ADC

根据中文参考手册介绍,STM32F103C8T6单片机有2个12位ADC,共有18个通道,可测量16个外部和2个内部信号源。各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中。ADC的输入时钟不得超过14MHz,它是由PCLK2经分频产生。

输入通道

内外部共18个,16个GPIO,1个内部温感,1个内部参考电压。

1路ADC(A4 ADC 通道4)

ADC初始化代码:

void Init_adc(void)
{/*1. **开启RCC时钟**:包括ADC和GPIO的时钟。2. **配置GPIO**:将GPIO配置为模拟输入模式。3. **配置多路开关**:将左边的通道接入到规则组或注入组中。4. **配置ADC转换器**:设置ADC的工作模式、数据对齐方式、外部触发方式等。5. **启动ADC和DMA**:调用相关函数使能ADC和DMA,开始数据采集和传输。*/GPIO_InitTypeDef GPIO_InitStruct;ADC_InitTypeDef ADC_InitStruct;ADC_DeInit(ADC1); //将外设 ADC1 的全部寄存器重设为缺省值RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1|RCC_APB2Periph_GPIOA,ENABLE); // 开启RCC时钟// 配置ADC时钟RCC_ADCCLKConfig(RCC_PCLK2_Div6); // 6分频,72/6GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AIN; // 模拟输入GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4;			//	|GPIO_Pin_5GPIO_Init(GPIOA,&GPIO_InitStruct);//配置GPIOADC_InitStruct.ADC_ContinuousConvMode = DISABLE; // 持续模式ADC_InitStruct.ADC_DataAlign = ADC_DataAlign_Right;	// 向右对齐模式ADC_InitStruct.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;	// 不使用外部触发模式ADC_InitStruct.ADC_Mode = ADC_Mode_Independent; // 独立ADC模式ADC_InitStruct.ADC_NbrOfChannel = 1;	// 总共两个通道ADC_InitStruct.ADC_ScanConvMode = DISABLE;	// 使用扫描模式ADC_Init(ADC1,&ADC_InitStruct);// 选择多路通道  ,配置在规则组菜单列表的第一个位置写入通道0,55.5个周期ADC_RegularChannelConfig(ADC1,ADC_Channel_4,1,ADC_SampleTime_55Cycles5 );
//	ADC_RegularChannelConfig(ADC1,ADC_Channel_5,2,ADC_SampleTime_55Cycles5 );// 开启ADC的DMA支持(要实现DMA功能,还需独立配置DMA通道等参数)
//	ADC_DMACmd(ADC1, ENABLE);ADC_Cmd(ADC1, ENABLE); //使能指定的ADC1// 校准ADC_ResetCalibration(ADC1);while(ADC_GetResetCalibrationStatus(ADC1) == SET);ADC_StartCalibration(ADC1);while(ADC_GetCalibrationStatus(ADC1));
} 

获取ADC采集值+值过滤

u16 Get_ADC_Value(void)
{u32 temp_val = 0;u8 t = 0;u8 times = 50;// 设置指定ADC的规则组通道,一个序列,采样时间// ADC1,ADC通道,239.5个周期,提高采样时间可以提高精确度ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 1, ADC_SampleTime_239Cycles5);			    for(t=0;t<times;t++){ADC_SoftwareStartConvCmd(ADC1, ENABLE);   // 使能指定的ADC1的软件转换启动功能	while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));   // 等待转换结束temp_val+=ADC_GetConversionValue(ADC1);delay_ms(5);}return temp_val/times;
} 

主函数代码实现片段:

adValue = Get_ADC_Value();
ad = adValue;
sprintf((char*)str,"AD1 = %d   ",ad);
Gui_DrawFont_GBK16(0,10,RED,GRAY0, str);//    送至液晶显示	

效果:

1路ADC源码代码链接:

STM32学习标准库实现STM32ADC采集1路、2路、多路资源-CSDN文库

2路ADC(A4 ADC 通道4、A5 ADC 通道5)基于DMA实现

初始化代码:

#define N 50 //每通道采50次
#define M 2 //为2个通道vu16 AD_Value[N][M]; //用来存放ADC转换结果,也是DMA的目标地址
vu16 After_filter[M]; //用来存放求平均值之后的结果
int i;void Init_adc(void)
{/*1. **开启RCC时钟**:包括ADC和GPIO的时钟。2. **配置GPIO**:将GPIO配置为模拟输入模式。3. **配置多路开关**:将左边的通道接入到规则组或注入组中。4. **配置ADC转换器**:设置ADC的工作模式、数据对齐方式、外部触发方式等。5. **启动ADC和DMA**:调用相关函数使能ADC和DMA,开始数据采集和传输。*/GPIO_InitTypeDef GPIO_InitStruct;ADC_InitTypeDef ADC_InitStruct;ADC_DeInit(ADC1); //将外设 ADC1 的全部寄存器重设为缺省值RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1|RCC_APB2Periph_GPIOA,ENABLE); // 开启RCC时钟// 配置ADC时钟RCC_ADCCLKConfig(RCC_PCLK2_Div8); // 6分频,72/6GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AIN; // 模拟输入GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5;GPIO_Init(GPIOA,&GPIO_InitStruct);//配置GPIOADC_InitStruct.ADC_ContinuousConvMode = ENABLE; // 持续模式ADC_InitStruct.ADC_DataAlign = ADC_DataAlign_Right;	// 向右对齐模式ADC_InitStruct.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;	// 不使用外部触发模式ADC_InitStruct.ADC_Mode = ADC_Mode_Independent; // 独立ADC模式ADC_InitStruct.ADC_NbrOfChannel = M;	// 总共两个通道ADC_InitStruct.ADC_ScanConvMode = ENABLE;	// 使用扫描模式ADC_Init(ADC1,&ADC_InitStruct);// 选择多路通道  ,配置在规则组菜单列表的第一个位置写入通道0,55.5个周期ADC_RegularChannelConfig(ADC1,ADC_Channel_4,1,ADC_SampleTime_55Cycles5 );ADC_RegularChannelConfig(ADC1,ADC_Channel_5,2,ADC_SampleTime_55Cycles5 );// 开启ADC的DMA支持(要实现DMA功能,还需独立配置DMA通道等参数)ADC_DMACmd(ADC1, ENABLE);ADC_Cmd(ADC1, ENABLE); //使能指定的ADC1// 校准ADC_ResetCalibration(ADC1);while(ADC_GetResetCalibrationStatus(ADC1) == SET);ADC_StartCalibration(ADC1);while(ADC_GetCalibrationStatus(ADC1));
} void DMA_Configuration(void)
{DMA_InitTypeDef DMA_InitStructure;RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);DMA_DeInit(DMA1_Channel1); //将DMA的通道1寄存器重设为缺省值DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)&ADC1->DR; //DMA外设ADC基地址DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&AD_Value; //DMA内存基地址DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; //内存作为数据传输的目的地DMA_InitStructure.DMA_BufferSize = N*M; //DMA通道的DMA缓存的大小DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //外设地址寄存器不变DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; //内存地址寄存器递增DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; //数据宽度为16位DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; //数据宽度为16位DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; //工作在循环缓存模式DMA_InitStructure.DMA_Priority = DMA_Priority_High; //DMA通道 x拥有高优先级DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; //DMA通道x没有设置为内存到内存传输DMA_Init(DMA1_Channel1, &DMA_InitStructure); //根据DMA_InitStruct中指定的参数初始化DMA的通道ADC_SoftwareStartConvCmd(ADC1, ENABLE);DMA_Cmd(DMA1_Channel1, ENABLE); //启动DMA通道
}

取值滤波

/// 数值滤波
void filter(void)
{int sum = 0;u8 count;for(i=0;i<M;i++){for( count=0;count<N;count++){sum += AD_Value[count][i];}After_filter[i]=sum/N;sum=0;}}

主函数代码:

while(1){  		filter();sprintf((char*)str,"AD1 = %d   ",After_filter[0]);Gui_DrawFont_GBK16(0,10,RED,GRAY0, str);sprintf((char*)str,"AD2 = %d   ",After_filter[1]);Gui_DrawFont_GBK16(0,30,RED,GRAY0, str);}

实现效果:

2路ADC源码代码链接:

STM32学习标准库实现STM32ADC采集1路、2路、多路资源-CSDN文库

多路ADC实现采集

多路和2路ADC一致,只需要在2路的基础上修改即可。修改的点如下:

#define M 2 //为2个通道

多少通道就写多少通道。

GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AIN; // 模拟输入
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5;
GPIO_Init(GPIOA,&GPIO_InitStruct);//配置GPIO

修改所选的多通道引脚。

// 选择多路通道  ,配置在规则组菜单列表的第一个位置写入通道0,55.5个周期ADC_RegularChannelConfig(ADC1,ADC_Channel_4,1,ADC_SampleTime_55Cycles5 );ADC_RegularChannelConfig(ADC1,ADC_Channel_5,2,ADC_SampleTime_55Cycles5 );

依次增加所添加的通道。

其它不需要修改,即可完成多于2通道采集。

http://www.yayakq.cn/news/34945/

相关文章:

  • 网站建设包括哪些方面的费用大连知名互联网公司
  • 中亿丰建设集团股份有限公司网站电商网站开题报告
  • 网站开发和网站制作的区别宁波营销型网站建设优化建站
  • 辽宁同鑫建设网站3seo
  • 一_ 写出几种常见的网站开发语言_试述其特点做一个基础的企业网站多少钱
  • 婚恋网站建设方案自己做qq代刷网站要钱吗
  • 广州网站开发公司有哪些临沂做四维和美家网站
  • 网站如何集成微信支付 163com箱登录
  • wordpress网站不稳定建筑培训网首页安全员
  • 网站开发公司云鲸互创怎么联系工控人如何做自己的网站
  • 营销网站优化seo中国建设企业银行官网站
  • 在北京做家教的网站优酷网站谁做的
  • 青岛哪里做网站百度地图wordpress
  • 学校网站群建设网站广东省备案系统
  • 国内优秀网站设计师app下载安装官方版
  • 网站建设与制作的流程wordpress 可视化排版
  • 郑州电商网站建设仙游有人做网站
  • 建设营销型网站的要素老婆的视频在线观看1
  • 平面设计师素材网站做网站推广的需要了解哪些知识
  • ASP网站开发技术期末考试信阳网站建设
  • 建网站公司那个比较好php网站开发要学什么
  • 永久的免费网站地址做调查的网站知乎
  • 做网站的公司好坑啊网站首页图片切换代码
  • 微网站的好处西宁城西区建设局网站
  • 防止服务器上的网站被进攻网站申请界面怎么做
  • 大型网站建设建站模板怎么买wordpress
  • 网站开站备案湖南营销型网站建设磐石网络知名
  • 政务网站模版做阿里巴巴网站有什么用
  • 保定网站制作推广网络软件开发技术
  • 抄袭网站案例seo关键词优化怎么做