IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 从零开始学习stm32(七) -> 正文阅读

[嵌入式]从零开始学习stm32(七)

从零开始学习stm32(七)

数模转换模型

? 信号是什么呢?信号是运载信息的工具,是信息的载体。生活中处处有信号,比如路口的红绿灯,这是通行的信号、机场的地面搭台信号等等。可以说信号与我们的生活息息相关。通常来说,信号可以分为两大类:数字信号模拟信号。模拟信号是连续的信号,它在一段连续的时间范围内可以任意瞬间呈现任意数值。数字信号是不连续的信号,它的自变量是离散的、因变量也是离散的,这种信号的自变量用整数来表示,因变量用有限数字中的一个数字来表示。

? 数字信号的优点有很多,数字信号加强了通信的保密性,提高了抗干扰能力,传输差错可以控制,改善了传输质量,便于使用现代数字信号处理计数来对数字信息进行处理,可构建综合数字通信网,综合传递各种消息,使得通行功能增强。数字信号也有它的缺点,它占用频带较宽,技术要求复杂,模数转换时会带来量化误差。

? 将模拟信号转换为数字信号的方法时,通过模数转换器将模拟信号转换为数字信号,它的基本原理时把输入的模拟信号按照规定时间间隔采样,并与一系列标准的数字信号比较,数字信号逐次收敛,直至两种信号相等为止,然后显示出此信号的二进制数。

stm32中的ADC功能

? stm32中使用的时逐次逼近型的模数转换器,具有12位的分辨率。

? 相关寄存器

  • SR ADC寄存器

  • CR1、CR2、CR3 ADC控制寄存器

  • SMPR1、SMPR2 ADC采样寄存器

  • JOFRx ADC注入通道数据偏移寄存器

  • HTR、LRT ADC看门狗高低阈值寄存器

  • SQRx ADC规则序列寄存器

  • JDRx、DR ADC注入数据寄存器x/ADC规则数据寄存器

    库函数配置思路

    一、初始化与配置

    1、时钟配置:GPIO、ADC的APB2时钟配置

    2、通道配置:GPIO模式——模拟输入

    3、ADC配置

    ? 基本配置:

    ? ADC模式、扫描模式使能、连续模式使能、ADC转换触发模式、结果数据对齐方式、通道组

    ? 采样时间配置:

    ? ADC时钟设置、采样时钟设置

    4、中断配置

    二、获取ADC采样数据

    相关代码

void ADCx_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStructure; //定义结构体变量	
	ADC_InitTypeDef       ADC_InitStructure;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_ADC1,ENABLE);
	
	RCC_ADCCLKConfig(RCC_PCLK2_Div6);//设置ADC分频因子6 72M/6=12,ADC最大时间不能超过14M
	
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;//ADC
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;	//模拟输入
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStructure);
	
	ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
	ADC_InitStructure.ADC_ScanConvMode = DISABLE;//非扫描模式	
	ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;//关闭连续转换
	ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//禁止触发检测,使用软件触发
	ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//右对齐	
	ADC_InitStructure.ADC_NbrOfChannel = 1;//1个转换在规则序列中 也就是只转换规则序列1 
	ADC_Init(ADC1, &ADC_InitStructure);//ADC初始化
	
	ADC_Cmd(ADC1, ENABLE);//开启AD转换器
	
	//ADC_ResetCalibration(ADC1);//重置指定的ADC的校准寄存器
	//while(ADC_GetResetCalibrationStatus(ADC1));//获取ADC重置校准寄存器的状态
	
	ADC_StartCalibration(ADC1);//开始指定ADC的校准状态
	while(ADC_GetCalibrationStatus(ADC1));//获取指定ADC的校准程序
	
	//设置指定ADC的规则组通道,一个序列,采样时间
	ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_239Cycles5);	//ADC1,ADC通道,239.5个周期,提高采样时间可以提高精确度			    
	

	ADC_SoftwareStartConvCmd(ADC1, ENABLE);//使能或者失能指定的ADC的软件转换启动功能
}


u16 Get_ADC_Value(u8 times)
{
	u32 temp_val=0;
	u8 t;
	
	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;
} 

本文为百问网韦东山7天物联网智能家居学习总结

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-03-03 16:31:24  更:2022-03-03 16:32:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 8:27:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码