STM32小项目总结5:ADC模数转换

简介: STM32小项目总结5:ADC模数转换

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);//清除中断挂起位

四:笔记


2a0032e013fd494f841c158f6d9c6d37.jpg

相关文章
|
6月前
|
传感器
STM32标准库ADC和DMA知识点总结-1
STM32标准库ADC和DMA知识点总结
|
4月前
|
传感器 编解码 IDE
STM32CubeMX ADC采集光照和电压
STM32CubeMX ADC采集光照和电压
121 3
|
6月前
|
传感器
基于STM32与FreeRTOS的四轴机械臂项目-3
基于STM32与FreeRTOS的四轴机械臂项目
基于STM32与FreeRTOS的四轴机械臂项目-3
|
6月前
|
传感器
基于STM32与FreeRTOS的四轴机械臂项目-2
基于STM32与FreeRTOS的四轴机械臂项目
基于STM32与FreeRTOS的四轴机械臂项目-2
|
4月前
|
传感器 编解码 API
【STM32开发入门】温湿度监测系统实战:SPI LCD显示、HAL库应用、GPIO配置、UART中断接收、ADC采集与串口通信全解析
SPI(Serial Peripheral Interface)是一种同步串行通信接口,常用于微控制器与外围设备间的数据传输。SPI LCD是指使用SPI接口与微控制器通信的液晶显示屏。这类LCD通常具有较少的引脚(通常4个:MISO、MOSI、SCK和SS),因此在引脚资源有限的系统中非常有用。通过SPI协议,微控制器可以向LCD发送命令和数据,控制显示内容和模式。
143 0
|
5月前
|
传感器 数据采集 人工智能
【STM32+k210项目】基于AI技术智能语音台灯的设计(完整工程资料源码)
【STM32+k210项目】基于AI技术智能语音台灯的设计(完整工程资料源码)
221 1
|
6月前
|
传感器 存储
基于STM32与FreeRTOS的四轴机械臂项目-1
基于STM32与FreeRTOS的四轴机械臂项目
基于STM32与FreeRTOS的四轴机械臂项目-1
|
5月前
|
存储 算法 测试技术
【STM32项目】基于Stm32c8t6-镭射激光打印机的设计(完整工程资料源码)(二)
【STM32项目】基于Stm32c8t6-镭射激光打印机的设计(完整工程资料源码)(二)
156 0
|
5月前
|
存储 搜索推荐 安全
【STM32项目】基于Stm32c8t6-镭射激光打印机的设计(完整工程资料源码)(一)
【STM32项目】基于Stm32c8t6-镭射激光打印机的设计(完整工程资料源码)(一)
113 0