一、简介

  • CC2640R2F 的 ADC 是几位的、几个通道的?

12 位模数转换器 (ADC)、200MSPS、8 通道模拟多路复用器。

  • 使用的是什么参考源?

参考源有两种,一种是内部的固定 4.3V 参考源,一种是内部的电池电压。
本文采用的 4.3V 固定参考源,因为如果参考源使用电池,一旦电池电量下降将影响 ADC 的准确性。

  • ADC 的 8 个通道分别为什么引脚?

  • 假设读到的是 0XC00(十进制是 3072),代表 ADC 采集的是几 V 电压?

CC2640R2F 的 ADC 是 12 位的,也就是 4096,本文使用的是 4.3V 固定参考电压。
所以 4096/4.3=3072/x,则 x=3.225。
表示 ADC 采集的是 3.225V 电压。

二、硬件连接

5x5芯片

功能口 引脚
ADC_COMPB_IN_AUXIO7 DIO_7
ADC_COMPB_IN_AUXIO6 DIO_8
ADC_COMPB_IN_AUXIO5 DIO_9
ADC_COMPB_IN_AUXIO4 DIO_10
ADC_COMPB_IN_AUXIO3 DIO_11
ADC_COMPB_IN_AUXIO2 DIO_12
ADC_COMPB_IN_AUXIO1 DIO_13
ADC_COMPB_IN_AUXIO0 DIO_14

三、移植文件

链接:https://pan.baidu.com/s/1y1n-glWsh-Sl6yt-PZoX_A 提取码:b0z6
board_adc.cboard_adc.h 两个文件拖拽至CCS工程的Application文件夹下

添加文件过程中,选项选择如下

3.1 board_adc.c

/********************************************************************** INCLUDES*/
#include "_hal_types.h"
#include <ti/drivers/adc/ADCCC26XX.h>
#include <ti/drivers/pin/PINCC26XX.h>
#include <driverlib/aux_adc.h>
#include <driverlib/aux_wuc.h>#include "board_adc.h"/********************************************************************** LOCAL VARIABLES*/
static ADCCC26XX_Object s_adcCC26XXObject[BOARD_ADCCOUNT];static const ADCCC26XX_HWAttrs s_adcCC26XXHWAttrs[BOARD_ADCCOUNT] =
{{.adcDIO = BATTERY_ADC_IO,  // DIO_7.adcCompBInput = ADC_COMPB_IN_AUXIO7,.refSource = ADCCC26XX_FIXED_REFERENCE,.samplingDuration = ADCCC26XX_SAMPLING_DURATION_2P7_US,.inputScalingEnabled = true,.triggerSource = ADCCC26XX_TRIGGER_MANUAL,.returnAdjustedVal = 0},{.adcDIO = PIN_UNASSIGNED,.adcCompBInput = ADC_COMPB_IN_DCOUPL,.refSource = ADCCC26XX_FIXED_REFERENCE,.samplingDuration = ADCCC26XX_SAMPLING_DURATION_2P7_US,.inputScalingEnabled = true,.triggerSource = ADCCC26XX_TRIGGER_MANUAL,.returnAdjustedVal = 0},{.adcDIO = PIN_UNASSIGNED,.adcCompBInput = ADC_COMPB_IN_VSS,.refSource = ADCCC26XX_FIXED_REFERENCE,.samplingDuration = ADCCC26XX_SAMPLING_DURATION_2P7_US,.inputScalingEnabled = true,.triggerSource = ADCCC26XX_TRIGGER_MANUAL,.returnAdjustedVal = 0},{.adcDIO = PIN_UNASSIGNED,.adcCompBInput = ADC_COMPB_IN_VDDS,.refSource = ADCCC26XX_FIXED_REFERENCE,.samplingDuration = ADCCC26XX_SAMPLING_DURATION_2P7_US,.inputScalingEnabled = true,.triggerSource = ADCCC26XX_TRIGGER_MANUAL,.returnAdjustedVal = 0}
};static const ADC_Config s_adcConfig[BOARD_ADCCOUNT] =
{{&ADCCC26XX_fxnTable,&s_adcCC26XXObject[BOARD_ADCCHANNEL7],&s_adcCC26XXHWAttrs[BOARD_ADCCHANNEL7]},{&ADCCC26XX_fxnTable,&s_adcCC26XXObject[BOARD_ADCDCOUPL],&s_adcCC26XXHWAttrs[BOARD_ADCDCOUPL]},{&ADCCC26XX_fxnTable,&s_adcCC26XXObject[BOARD_ADCVSS],&s_adcCC26XXHWAttrs[BOARD_ADCVSS]},{&ADCCC26XX_fxnTable,&s_adcCC26XXObject[BOARD_ADCVDDS],&s_adcCC26XXHWAttrs[BOARD_ADCVDDS]},
};// ADC句柄及参数
static ADC_Handle s_adcHandle;
static ADC_Params s_adcParams;/********************************************************************** PUBLIC FUNCTIONS*/
/**@brief ADC的初始化函数@param 无@return 无
*/
void ADC_Init(void)
{ADC_Params_init(&s_adcParams);s_adcParams.isProtected = TRUE;s_adcConfig[BOARD_ADCCHANNEL7].fxnTablePtr->closeFxn((ADC_Handle)&s_adcConfig[BOARD_ADCCHANNEL7]);s_adcHandle = s_adcConfig[BOARD_ADCCHANNEL7].fxnTablePtr->openFxn((ADC_Handle)&s_adcConfig[BOARD_ADCCHANNEL7],&s_adcParams);
}/**@brief ADC读取@param 无@return 读取电压值
*/
uint16_t ADC_Read(void)
{uint16_t adcResult;s_adcConfig[BOARD_ADCCHANNEL7].fxnTablePtr->convertFxn(s_adcHandle, &adcResult);return adcResult;
}/**@brief ADC短暂读取@param 无@return 读取电压值
*/
uint32_t ADC_OneShotRead(void)
{AUXWUCClockEnable(AUX_WUC_MODCLKEN0_ANAIF_M | AUX_WUC_MODCLKEN0_AUX_ADI4_M);AUXADCSelectInput(ADC_COMPB_IN_AUXIO7);AUXADCEnableSync(AUXADC_REF_FIXED, AUXADC_SAMPLE_TIME_2P7_US, AUXADC_TRIGGER_MANUAL);AUXADCGenManualTrigger();uint32_t adcValue = AUXADCReadFifo();AUXADCDisable();return adcValue;
}

3.2 board_adc.h

#ifndef _BOARD_ADC_H_
#define _BOARD_ADC_H_/********************************************************************** INCLUDES*/
#include "_hal_types.h"/********************************************************************** DEFINITIONS*/
#define BATTERY_ADC_IO              IOID_7
#define ADC_CHANNEL_IOID7           ADC_COMPB_IN_AUXIO7typedef enum
{BOARD_ADCCHANNEL7 = 0,BOARD_ADCDCOUPL,BOARD_ADCVSS,BOARD_ADCVDDS,BOARD_ADCCOUNT
} Board_ADCName_t;/********************************************************************** API FUNCTIONS*/
void ADC_Init(void);
uint16_t ADC_Read(void);
uint32_t ADC_OneShotRead(void);#endif /* _BOARD_ADC_H_ */

四、API调用

需包含头文件 board_adc.h

ADC_Init

功能 ADC的初始化函数
函数定义 void ADC_Init(void)
参数
返回

ADC_Read

功能 ADC读取,需在ADC_Init初始化后
函数定义 uint16_t ADC_Read(void)
参数
返回 读取电压值

ADC_OneShotRead

功能 ADC读取,无需ADC_Init初始化
函数定义 uint32_t ADC_OneShotRead(void)
参数
返回 读取电压值

五、使用例子

1)添加头文件(例simple_peripheral.c中)

#include "board_adc.h"

2)添加初始化代码(simple_peripheral.c的SimplePeripheral_init函数末尾中)

ADC_Init();

3)在定时器回调或按键回调中 读取电压值(使用ADC_Read())

uint8_t electricArr[2];
uint16_t electricAdcValue = ADC_Read();
*(electricArr + 1) = (uint8_t)(0xFF & electricAdcValue);
*(electricArr) = (uint8_t)((0xFF00 & electricAdcValue) >> 8);

4)在定时器回调或按键回调中 读取电压值(使用ADC_OneShotRead())

uint8_t electricArr[4];
uint32_t electricAdcValue = ADC_OneShotRead();
*(electricArr + 3) = (uint8_t)(0xFF & electricAdcValue);
*(electricArr + 2) = (uint8_t)((0xFF00 & electricAdcValue) >> 8);
*(electricArr + 1) = (uint8_t)((0xFF0000 & electricAdcValue) >> 16);
*(electricArr) = (uint8_t)((0xFF000000 & electricAdcValue) >> 24);

• 由 Leung 写于 2019 年 11 月 12 日

• 参考:CC2640R2F ADC设置(基于SDK 1.40版本 替代ADC_open)
    CC2640R2F 之ADC驱动实现及源码
    ADCCC26XX.h File Reference

CC2640R2F学习笔记(27)——ADC使用相关推荐

  1. CC2640R2F学习笔记(一.开发环境)

    文章目录 前言 一.硬件 二.操作系统 三.SDK 四.CCS 前言 以下列出CC2640R2F学习笔记所基于的软.硬件平台,笔记的所有实验.代码都是在这些平台上来进行的. 一.硬件 开发板LAUNC ...

  2. CC2640R2F学习笔记(九.总结)

    文章目录 前言 正文 总结 前言 注意:本文章仅代表作者对开发CC2640的一些理解,并非权威,仅供参考,如有错误欢迎指正. 正文 本想用CC2640R2F开发一个小产品,看重它的是价格便宜,尤其是几 ...

  3. 英伟达DeepStream学习笔记27——deepstream下载历史版本

    英伟达DeepStream学习笔记27--deepstream下载历史版本 https://docs.nvidia.com/metropolis/deepstream-archive.html htt ...

  4. STM32F407霸天虎HAL库学习笔记——使用ADC采集MQ135的数据并通过OLED显示

    STM32F407霸天虎HAL库学习笔记--使用ADC采集MQ135的数据并通过OLED显示 一.软件准备 二.硬件准备 三.CubeMX配置 四.Keil MQ135.c MQ135.h main函 ...

  5. 影像组学视频学习笔记(27)-SimpleITK包介绍、Li‘s have a solution and plan.

    本笔记来源于B站Up主: 有Li 的影像组学的系列教学视频 本节(27)主要讲解: 功能强大的图像处理工具SimpleITK包 视频中李博士演示了SimpleITK的两个基本功能:图像格式转换以及图像 ...

  6. python面向对象编程72讲_2020-07-22 Python学习笔记27类和面向对象编程

    一些关于自己学习Python的经历的内容,遇到的问题和思考等,方便以后查询和复习. 声明:本人学习是在扇贝编程通过网络学习的,相关的知识.案例来源于扇贝编程.如果使用请说明来源. 第27关 类与面向对 ...

  7. STM32学习笔记(七) ADC模数转换测电平(普通和DMA模式)

    嵌入式系统在微控制领域(温度,湿度,压力检测,四轴飞行器)中占据着重要地位,这些功能的实现是由微处理器cpu(如stm32)和传感器以及控制器共同完成的,而连接他们,使它们能够互相正常交流的正是本小节 ...

  8. STM32学习笔记一一ADC

    前言: 为了方便查看博客,特意申请了一个公众号,附上二维码,有兴趣的朋友可以关注,和我一起讨论学习,一起享受技术,一起成长. github:my github 注:博客所涉及的关于 stm32 的代码 ...

  9. CC2640R2F学习笔记(二.gpiointerrupt例程解析)

    文章目录 前言 一.导入gpiointerrupt工程 二.主要文件功能 三.代码解析 1.main_tirtos.c 2.gpiointerrupt.c 四.实验现象 总结 参考 前言 gpioin ...

最新文章

  1. C语言一个双向链表的实现
  2. Shell中的数据重定向--输入/输出重定向
  3. C~K的班级_JAVA
  4. 前端学习(1350):用户的增删改查操作7增删改查
  5. hadoop--windows环境配置hadoop-3.2.2
  6. ubuntu -- 安装最新版的nodejs
  7. source insight技巧
  8. 二叉树遍历的一些非递归算法
  9. arcgis视频教程 定制技术服务_坐标转换_等高线生成各种问题远程解决
  10. 手机市场的竞争,用户价值才是硬道理
  11. LaTeX错误“Unable to read an entire line---bufsize=200000. Please increase buf_size in texmf.cnf.”
  12. python 编写 cgi 脚本
  13. 男生们,请珍惜爱你的女人!
  14. deny of sb sth_deny的短语
  15. 【RBF预测】基于时空 RBF-NN 实现混沌时间序列预测附matlab代码
  16. halocn标定找旋转中心_对摄像头进行标定
  17. SQL进阶之自连接的用法
  18. 浙江工业大学计算机专业是几本,浙江工业大学是几本
  19. 女人撒娇18计玩转男人心
  20. 麻省理工计算机专业,麻省理工学院计算机专业介绍_托普仕留学

热门文章

  1. 机械制造及自动化毕业设计外文翻译
  2. EUI学习笔记(持续更新中)
  3. wow(1) : UI插件_EUI[1]_配置分享
  4. 安卓学习笔记5.6—列表视图
  5. 华为手机设置页面黑色_华为手机中超炫酷的来电视频,你设置了吗?
  6. 版本管理工具git和TortoiseGit
  7. 让《百度随心听》轮播收藏的歌曲
  8. 前瞻性总结:全球未来十年不可不知的10大趋势
  9. python 排列组合
  10. UE4/UE5 使用Unreal Datasmith完全教程