STM32小项目总结5:ADC模数转换
创始人
2024-03-31 23:09:43
0

ADC模数转换(单通道):

解释:通过ADC将GPIO读取电压的0,1转换成0V~3.3V。即模电转为数电。

一:ADC初始化函数设计思路:

(推荐设置为AD_Init)

1.开启RCC+2.GPIO初始化部分+3.ADC选择输入通道+4.初始化ADC+5.Cmd开关控制+6.校验用四函数+7.自定义函数显示AD的值。

展开说:

1.RCC开启:RCC_APB2PeriphClockCmd(是GPIOB的)+RCC_ADCClockConfig(是ADC的)

2.GPIO_Init(),选择Mode_AIN(模拟输入专用)和Pin_0引脚

3.ADC_RegularChannelConfig(ADC1,ADC_Channel1_0,1,_55Cycle5),该函数是ADC的库函数里面的。

4.使用库函数 ADC_Init()

_Count...Mode=Disable;单通道使用单次转换。转换模式指转换一个通道,传递给EOC后中止,若需要转换下个通道,则需要重新转换

_DataAlign=_...Right;使用右对齐,因为左对齐会改变数据大小

_ExternalT..=_None;该参数选择是否使用外部触发,应该使用软件触发,所以选择不使用

_Mode=_Independent;此处选择单通道模式(其实无所谓,因为此处只用到一个通道。区别就是选择单通道之后就使其他通道无法被使用)

_NbrofChannel=1;该参数是几个通道起作用,选1,1个通道。

_ScanconvMode=DISABLE;该参数是选择是否使用扫描模式,选择非扫描模式。此处只用到一个通道。区别就是选择非扫描模式之后就使其他通道无法被使用。选择扫描模式时,就是对你指定的几个通道都进行扫描,因此是与通道数目搭配使用的。

5.开关控制为库函数ADC_Cmd();

6.校验四函数为:

ADC_ResetCalibration(ADC1);复位校验

ADC_GetresetCalibration;获取复位状态,等待校验完成

ADC_StartCalibration;开始校验

ADC_GetCalibration;获取开始校验状态,等待校验完成

7.自定义函数封装思路:

推荐封装名字为uint16_t Get_Value(void),因为要显示电压

首先使用库函数ADC_SoftwareStartConvCmd();来使ADC开始转换,并触发外部中断。

之后使用查看标志位状态函数ADC_GetFlag()判断是否被置。(因为ADC通道是要传递给EOC的)

最后返回一个值来给主函数在OLED中显示,注意,此值是未处理的2的16进制值,所以用uint16_t

二:主函数部分思路:

使用OLED通过Value显示AD值,并通过Voltage显示电压值。

因为电压需要Value先转化为浮点数,再进行/4095*3.3的操作(固定公式)。对于小数部分,通过先*100后%100即可完成操作。

三:ADC相关需要掌握的库函数

//ADCCLK相关配置函数(在rcc.h里):
//void RCC_ADCCLKConfig(uint32_t RCC_PCLK2);//配置ADCCLK分频器,对APB2的72MHz时钟选择2,4,6,8分频,输入到ADCCLK
//ADC相关库函数(在adc.h里):
//void ADC_DeInit(ADC_TypeDef* ADCx);//恢复出厂配置
//void ADC_Init(ADC_TypeDef* ADCx, ADC_InitTypeDef* ADC_InitStruct);//初始化
//void ADC_StructInit(ADC_InitTypeDef* ADC_InitStruct);//配置结构体
//void ADC_Cmd(ADC_TypeDef* ADCx, FunctionalState NewState);//给ADC上电,即最后一步的开关控制
//void ADC_DMACmd(ADC_TypeDef* ADCx, FunctionalState NewState);//开启DMA输出信号
//void ADC_ITConfig(ADC_TypeDef* ADCx, uint16_t ADC_IT, FunctionalState NewState);//中断输出控制

//以下为控制校准相关函数:
//void ADC_ResetCalibration(ADC_TypeDef* ADCx);//复位校准
//FlagStatus ADC_GetResetCalibrationStatus(ADC_TypeDef* ADCx);//获取复位校准状态,等待校准完成
//void ADC_StartCalibration(ADC_TypeDef* ADCx);//开始校准
//FlagStatus ADC_GetCalibrationStatus(ADC_TypeDef* ADCx);//获取开始校准状态,等待校准完成

//void ADC_SoftwareStartConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState);//ADC软件开始转换控制--触发控制的软件触发
//FlagStatus ADC_GetSoftwareStartInjectedConvCmdStatus(ADC_TypeDef* ADCx);//获取标志位状态,转换结束EOC置1

//以下为配置间断模式相关函数:
//void ADC_DiscModeChannelCountConfig(ADC_TypeDef* ADCx, uint8_t Number);//每个几个通道间断一次
//void ADC_DiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState);//是否启用间断模式

//void ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime);
//ADC规则组通道配置,给序列的每个位置填写指定通道(重点)
//参数二:ADC_Channel为指定的通道;   参数三:ADC_Channel序列几;   参数四:ADC_SampleTime指定通道的采样时间

//void ADC_ExternalTrigConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState);//判断是否允许ADC外部触发转换

//uint16_t ADC_GetConversionValue(ADC_TypeDef* ADCx);//ADC获取转换值,读取结果时使用该函数。(重点)
//uint32_t ADC_GetDualModeConversionValue(void);//获取双模式转换结果

//FlagStatus ADC_GetFlagStatus(ADC_TypeDef* ADCx, uint8_t ADC_FLAG);//获取标志位状态
//void ADC_ClearFlag(ADC_TypeDef* ADCx, uint8_t ADC_FLAG);//清楚标志位
//ITStatus ADC_GetITStatus(ADC_TypeDef* ADCx, uint16_t ADC_IT);//获取中断状态
//void ADC_ClearITPendingBit(ADC_TypeDef* ADCx, uint16_t ADC_IT);//清除中断挂起位

四:笔记

 

相关内容

热门资讯

韩媒:韩检方对尹锡悦、金建希等... 中新网12月29日电 据韩国媒体报道,负责调查韩国前第一夫人金建希案件的特检组29日发布最终调查结果...
着力健全有利于“长钱长投“的制... 12月29日,A 股三大指数开盘后涨跌互现,沪指强势向上,冲击9连阳。截至10:23,A500ETF...
政策性农业保险的角色演变与制度... 本文字数:4989字 阅读时间:10分钟 作者简介:马彪,首都经济贸易大学金融学院副教授。 文章来...
推动楼市政策精准落地丨社评 明年着力稳定房地产市场的大政方针已定,抓好落实是关键。刚刚召开的全国住房城乡建设工作会议,重点列出了...
Adobe 因使用 SlimP... AIPress.com.cn报道 12月29日消息,作为全球创意软件巨头,Adobe 正面临其首起重...
伟星新材:竞争优势明显 保持积... 12月28日,伟星新材(002372)发布公告,伟星新材(002372)于2025年12月25日召开...
健全数据制度 释放乘数效应——... 来源:经济日报 党的二十届四中全会审议通过的《中共中央关于制定国民经济和社会发展第十五个五年规划的建...
海关出口退税律师张严锋:套用其... 2018年3月2日,B稽查局对A公司涉税事项进行检查。经检查,B稽查局认为A公司涉嫌通过套用他人出口...
哈尔滨权威刑事律师服务推荐:谷... 在哈尔滨,当人们遭遇刑事法律问题时,往往会困惑于刑事律师服务哪家权威刑事律师推荐哪些刑事辩护律师哪个...
原创 《... 2025年12月26日,《晋中市平遥牛肉保护和发展条例》新闻发布会在晋中举行。该条例经山西省人大常委...