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

相关文章
|
8月前
|
存储 编解码 开发者
基于STM32和OLED的小恐龙游戏项目设计与实现【免费开源】
小恐龙游戏最初是作为浏览器离线小游戏而广为人知,其简单的操作与生动的画面使其深受用户喜爱。本项目将经典的小恐龙跳跃游戏移植到嵌入式平台上,使用STM32微控制器作为核心控制器,OLED屏幕进行显示,搭配按键或触摸实现用户交互。通过本项目,既可以体验游戏开发在嵌入式系统上的实现方式,又能掌握STM32 GPIO、定时器、OLED驱动、按键扫描及简单动画实现技术。
基于STM32和OLED的小恐龙游戏项目设计与实现【免费开源】
|
8月前
|
传感器 数据采集 物联网
基于STM32和FreeRTOS的智能手环项目设计与实现【免费开源】
随着可穿戴设备的普及,智能手环逐渐成为健康管理、运动监测和生活便捷的重要工具。本项目旨在设计一款基于STM32微控制器和FreeRTOS实时操作系统的智能手环,具备心率监测、运动计步、睡眠分析以及蓝牙通信功能。通过FreeRTOS实现多任务调度,提高系统响应效率和资源利用率,同时保证低功耗设计,延长手环续航。
基于STM32和FreeRTOS的智能手环项目设计与实现【免费开源】
|
8月前
|
传感器 机器人 物联网
【免费开源】基于STM32的蓝牙小车/智能小车项目详解(附源码)
通过本项目,你可以系统掌握STM32外设控制、蓝牙通信、电机驱动和传感器数据处理技术,实现一辆可远程控制并具备避障功能的智能小车。该项目具有高度可扩展性,后续可增加循迹、自动寻路、摄像头等高级功能。
1948 43
【免费开源】基于STM32的蓝牙小车/智能小车项目详解(附源码)
|
8月前
|
传感器 数据采集 算法
【免费开源】基于 STM32F4 的四轴飞行器设计与实现——从零开始到成功起飞(项目源码打包分享)
四轴飞行器作为一种低空、低成本的遥感平台,已经在多个领域展现出广泛的应用潜力。相比其他类型的飞行器,它在硬件上结构紧凑、安装方便,但在软件层面却充满挑战——从传感器数据融合到姿态解算,再到快速且稳定的控制算法,每一环节都需要精心设计,也正因此让四轴飞行器更具技术魅力。
807 74
|
芯片 内存技术
STM32 Customer BootLoader 刷新项目 (二) 方案介绍
本项目设计了一款基于STM32的二级BootLoader,旨在为客户自定义启动过程提供软件更新和操作后门。BootLoader架构分为三层:ST自带Boot(SB)、客户定制化Boot(CB)和应用层(APP)。CB通过USART与MCU通信,支持多种指令如版本查询、擦除扇区、写入数据等,实现灵活的软件管理和更新功能。Flash空间分配为Sector 0-1用于CB,Sector 2-11用于APP。整个方案详细介绍了内存布局、跳转逻辑及支持的指令集,确保系统稳定运行并支持未来的扩展需求。
 STM32 Customer BootLoader 刷新项目 (二) 方案介绍
|
存储 安全 数据安全/隐私保护
STM32 Customer BootLoader 刷新项目 (一) STM32CubeMX UART串口通信工程搭建
本文介绍了基于STM32的Customer BootLoader刷新项目的第一部分:使用STM32CubeMX搭建UART串口通信工程。项目采用正点原子探索者v2开发板,通过USB串口与上位机通信,实现固件刷新功能。主要内容包括: 1. 硬件原理图介绍:详细描述了开发板的串口连接方式及电路图。 2. STM32CubeMX工程搭建:从创建新工程、配置系统时钟、USART串口设置到生成代码,一步步详细说明。 3. 代码编写:展示了如何使用HAL库实现串口接收和发送数据,并提供了main.c的完整代码。 4. 工程下载和调试:编译并下载工程到开发板,通过串口调试助手验证通信功能。
STM32 Customer BootLoader 刷新项目 (一) STM32CubeMX UART串口通信工程搭建
|
传感器 编解码 IDE
STM32CubeMX ADC采集光照和电压
STM32CubeMX ADC采集光照和电压
2469 3
|
传感器 编解码 API
【STM32开发入门】温湿度监测系统实战:SPI LCD显示、HAL库应用、GPIO配置、UART中断接收、ADC采集与串口通信全解析
SPI(Serial Peripheral Interface)是一种同步串行通信接口,常用于微控制器与外围设备间的数据传输。SPI LCD是指使用SPI接口与微控制器通信的液晶显示屏。这类LCD通常具有较少的引脚(通常4个:MISO、MOSI、SCK和SS),因此在引脚资源有限的系统中非常有用。通过SPI协议,微控制器可以向LCD发送命令和数据,控制显示内容和模式。
774 2
|
传感器 数据采集 人工智能
【STM32+k210项目】基于AI技术智能语音台灯的设计(完整工程资料源码)
【STM32+k210项目】基于AI技术智能语音台灯的设计(完整工程资料源码)
1557 2
|
存储 算法 测试技术
【STM32项目】基于Stm32c8t6-镭射激光打印机的设计(完整工程资料源码)(二)
【STM32项目】基于Stm32c8t6-镭射激光打印机的设计(完整工程资料源码)(二)
573 0