| |
|
开发:
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单片机开发笔记一 |
ADC基本概念:ADC:模数转换器 DAC:数模转换器 ????????用最简单的话讲,ADC是用来捕获大量未知的信号,并把它转换成已知的描述。相反,DAC是接受完全已知的、深刻理解的描述,然后“简单地”产生等效的模拟数值。简而言之,DAC工作在确定的领域,而ADC则工作在随机输入信号和未知性领域,只要输入在规定的范围内。 STM32 ADC
STM32
拥有
1~3
个
ADC
(
STM32F101/102
系列只有
1
个
ADC
),这些
ADC
可以独立使用,
也可以使用双重模式(提高采样率)。
STM32
的
ADC
是
12
位逐次逼近型的模拟数字转换器。
它有
18
个通道,可测量
16
个外部和
2
个内部信号源。各通道的
A/D
转换可以单次、连续、扫
描或间断模式执行。
ADC
的结果可以左对齐或右对齐方式存储在
16
位数据寄存器中。 模拟看
门狗特性允许应用程序检测输入电压是否超出用户定义的高
/
低阀值。
STM32 的 ADC 最大的转换速率为 1Mhz,也就是转换时间为 1us(在 ADCCLK=14M,采样周期
为
1.5
个
ADC
时钟下得到)
STM32
将
ADC
的转换分为
2
个通道组:
规则通道相当于你正常运行的程序,而注入通道呢,就相当于中断。
STM32
其
ADC
的规则通道组最多包含
16
个转换,而注入通道组最多包含
4
个通道。
STM32
的
ADC
在单次转换模式下,只执行一次转换,该模式可以通过
ADC_CR2
寄存器
的
ADON
位(只适用于规则通道)启动,也可以通过外部触发启动(适用于规则通道和注入通
道),这是
CONT
位为
0
。
以规则通道为例,一旦所选择的通道转换完成,转换结果将被存在
ADC_DR
寄存器中,
EOC
(转换结束)标志将被置位,如果设置了
EOCIE
,则会产生中断。然后
ADC
将停止,直
到下次启动。
使用库函数的函数来设定使用 ADC1 的通道 1 进行 AD 转换
使用到的库函数分布在 stm32f10x_adc.c
文件和
stm32f10x_adc.h
文件中
1
)开启
PA
口和
ADC1
时钟,设置
PA1
为模拟输入。
STM32F103RCT6 的 ADC 通道 1 在 PA1 上,所以,我们先要使能 PORTA 的时钟,然后设
STM32
的
ADC
通道与
GPIO
对应表:
?2)复位 ADC1,同时设置 ADC1 分频因子。
复位
ADC1
,将
ADC1
的全部寄存器重设为缺省值之后我们就可以通过 RCC_CFGR
设置
ADC1
的分频因子。分频因子要确保
ADC1
的时钟(
ADCCLK
)不要超过 14Mhz
。
这个我们设置分频因子位
6
,时钟为
72/6=12MHz
库函数的实现方法是
:
ADC 时钟复位的方法是:
3)初始化 ADC1 参数,设置 ADC1 的工作模式以及规则序列的相关信息。
开始
ADC1
的模式配置了,设置单次转换模式、触发方式选择、数据对齐方式等都在这一步实现。同时,我们还要设置 ADC1
规则序列的相关信息,我们这里只有一个通道,并且是单次转换的,所以设置规则序列中通道数为 1
。
通过函数 ADC_Init 实现
第一个参数是指定 ADC 号
第二个参数,跟其他外设初始化一样,同样是通过设置结构体成员变量的值来设定参数。
参数 ADC_Mode 故名是以是用来设置 ADC 的模式。 参数 ADC_ScanConvMode 用来设置是否开启扫描模式 参数 ADC_ContinuousConvMode 用来设置是否开启连续转换模式 参数 ADC_ExternalTrigConv 是用来设置启动规则转换组转换的外部事件 参数 DataAlign 用来设置 ADC 数据对齐方式是左对齐还是右对齐 参数 ADC_NbrOfChannel 用来设置规则序列的长度?
初始化范例:
4
)使能
ADC
并校准。
使能
AD
转换器,执行复位校准和
AD
校准
使能指定的 ADC 的方法是:
?执行复位校准的方法是:
执行 ADC 校准的方法是:
每次进行校准之后要等待校准结束。这里是通过获取校准状态来判断是否校准是否结束。 列出复位校准和 AD 校准的等待结束方法
5
)读取
ADC
值。
设置规则序列
1
里面的通道,采样顺序,以及通道的采样周期,然后启动 ADC
转换。在转换结束后,读取
ADC
转换结果值就是了。
设置规则序列通道以及采样周期的函数是:
我们这里是规则序列中的第
1
个转换,同时采样周期为
239.5
,所以设置为:
软件开启
ADC
转换的方法是:
开启转换之后,就可以获取转换 ADC 转换结果数据,方法是:
同时在
AD
转换中,我们还要根据状态寄存器的标志位来获取
AD
转换的各个状态信息。库函
数获取
AD
转换的状态信息的函数是:
比如我们要判断
ADC1d
的转换是否结束,方法是:
整体代码:?
此部分代码就
3
个函数,
Adc_Init
函数用于初始化
ADC1
。这里基本上是按我们上面的步
骤来初始化的,我们仅开通了 1 个通道,即通道
1
。第二个函数
Get_Adc
,用于读取某个通道
?的 ADC 值,例如我们读取通道 1 上的 ADC 值,就可以通过 Get_Adc(1)得到。最后一个函数 Get_Adc_Average,用于多次获取 ADC 值,取平均,用来提高准确度。
每隔
250ms
读取一次
ADC 通道 0
的值,并显示读到的
ADC
值(数字量),以及其转换成模拟量后的电压值。
注:本文参考正点原子STM32板开发教程,开发环境也基于正点原子STM32F103mini板
|
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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年12日历 | -2024/12/27 10:13:34- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |