第33讲:实战——ADC采集、电压采样快速代码生成

发布时间:2026/9/28 23:35:08

第33讲:实战——ADC采集、电压采样快速代码生成
CSDN专栏嵌入式程序开发实战嵌入式双范式AI编程嵌入式开发必掌握嵌入式求职面试技术资料第33讲实战——ADC采集、电压采样快速代码生成一、ADC基础ADC模数转换器是模拟量采集的核心用于读取传感器模拟信号、电压采样等。1.1 ADC配置要点基本参数分辨率12位STM32F103采样时间影响精度触发方式软件触发、定时器触发转换模式单次、连续、扫描通道配置ADC1通道通道0PA0通道1PA1通道2PA2通道3PA3通道4PA4通道5PA5通道6PA6通道7PA7二、单通道ADC采集2.1 基础采集Prompt生成STM32F103 ADC采集代码 - ADC1通道0PA0 - 功能采集电压值 - 使用HAL库AI生成#includestm32f1xx_hal.hADC_HandleTypeDef hadc1;voidADC1_Init(void){hadc1.InstanceADC1;hadc1.Init.ScanConvModeADC_SCAN_DISABLE;hadc1.Init.ContinuousConvModeDISABLE;hadc1.Init.ExternalTrigConvADC_SOFTWARE_START;hadc1.Init.DataAlignADC_DATAALIGN_RIGHT;hadc1.Init.NbrOfConversion1;HAL_ADC_Init(hadc1);// 配置通道ADC_ChannelConfTypeDef sConfig{0};sConfig.ChannelADC_CHANNEL_0;sConfig.RankADC_REGULAR_RANK_1;sConfig.SamplingTimeADC_SAMPLETIME_55CYCLES_5;HAL_ADC_ConfigChannel(hadc1,sConfig);}uint16_tADC_Read(void){HAL_ADC_Start(hadc1);HAL_ADC_PollForConversion(hadc1,100);uint16_tvalueHAL_ADC_GetValue(hadc1);HAL_ADC_Stop(hadc1);returnvalue;}floatADC_ReadVoltage(void){uint16_trawADC_Read();floatvoltage(float)raw*3.3f/4095.0f;returnvoltage;}intmain(void){HAL_Init();SystemClock_Config();ADC1_Init();UART_Init();while(1){floatvoltageADC_ReadVoltage();printf(Voltage: %.2fV\r\n,voltage);HAL_Delay(100);}}2.2 多次采样滤波平均值滤波#defineSAMPLE_COUNT10uint16_tADC_ReadFiltered(void){uint32_tsum0;for(uint8_ti0;iSAMPLE_COUNT;i){sumADC_Read();}returnsum/SAMPLE_COUNT;}中值滤波#defineMEDIAN_COUNT5uint16_tADC_ReadMedian(void){uint16_tvalues[MEDIAN_COUNT];for(uint8_ti0;iMEDIAN_COUNT;i){values[i]ADC_Read();}// 排序for(uint8_ti0;iMEDIAN_COUNT-1;i){for(uint8_tji1;jMEDIAN_COUNT;j){if(values[i]values[j]){uint16_ttempvalues[i];values[i]values[j];values[j]temp;}}}returnvalues[MEDIAN_COUNT/2];}三、多通道ADC采集3.1 扫描模式Prompt生成STM32F103 多通道ADC采集代码 - ADC1通道0-3PA0-PA3 - 功能采集4路电压 - 使用DMA传输 - 使用HAL库AI生成#defineADC_CHANNELS4uint16_tadcBuffer[ADC_CHANNELS];voidADC1_Multi_Init(void){hadc1.InstanceADC1;hadc1.Init.ScanConvModeADC_SCAN_ENABLE;// 扫描模式hadc1.Init.ContinuousConvModeENABLE;// 连续转换hadc1.Init.ExternalTrigConvADC_SOFTWARE_START;hadc1.Init.DataAlignADC_DATAALIGN_RIGHT;hadc1.Init.NbrOfConversionADC_CHANNELS;HAL_ADC_Init(hadc1);// 配置各通道ADC_ChannelConfTypeDef sConfig{0};sConfig.ChannelADC_CHANNEL_0;sConfig.RankADC_REGULAR_RANK_1;sConfig.SamplingTimeADC_SAMPLETIME_55CYCLES_5;HAL_ADC_ConfigChannel(hadc1,sConfig);sConfig.ChannelADC_CHANNEL_1;sConfig.RankADC_REGULAR_RANK_2;HAL_ADC_ConfigChannel(hadc1,sConfig);sConfig.ChannelADC_CHANNEL_2;sConfig.RankADC_REGULAR_RANK_3;HAL_ADC_ConfigChannel(hadc1,sConfig);sConfig.ChannelADC_CHANNEL_3;sConfig.RankADC_REGULAR_RANK_4;HAL_ADC_ConfigChannel(hadc1,sConfig);// 启动DMAHAL_ADC_Start_DMA(hadc1,(uint32_t*)adcBuffer,ADC_CHANNELS);}floatADC_GetVoltage(uint8_tchannel){if(channelADC_CHANNELS)return0.0f;return(float)adcBuffer[channel]*3.3f/4095.0f;}四、典型应用场景4.1 电压监测需求监测电池电压低于阈值报警代码#defineBATTERY_LOW_THRESHOLD3.3fvoidBattery_Monitor(void){floatvoltageADC_ReadVoltage();printf(Battery: %.2fV\r\n,voltage);if(voltageBATTERY_LOW_THRESHOLD){printf(Warning: Battery low!\r\n);// 报警}}4.2 温度采集NTC热敏电阻需求使用NTC热敏电阻测量温度代码// NTC参数#defineNTC_R2510000.0f// 25°C时的电阻10kΩ#defineNTC_BETA3950.0f// B值#defineNTC_R_REF10000.0f// 参考电阻10kΩfloatNTC_ReadTemperature(void){uint16_trawADC_Read();// 计算NTC电阻floatr_ntc(float)raw*NTC_R_REF/(4095.0f-raw);// 计算温度B值方程floattempK1.0f/(1.0f/298.15flog(r_ntc/NTC_R25)/NTC_BETA);floattempCtempK-273.15f;returntempC;}4.3 光照采集需求使用光敏电阻测量光照强度代码floatLight_ReadIntensity(void){uint16_trawADC_Read();// 转换为光照强度简化// 实际需要根据光敏电阻特性曲线计算floatintensity(float)raw/4095.0f*100.0f;// 0-100%returnintensity;}五、本讲核心要点6.1 记住这三句话ADC配置分辨率、采样时间、触发方式、转换模式数据滤波平均值滤波、中值滤波提高精度典型应用电压监测、温度采集、光照采集6.2 下讲预告第34讲将深入讲解实战PWM输出调速、控灯原型开发PWM是电机控制、LED调光的基础如何快速生成PWM代码下一讲将详细讲解。

相关新闻

做项目管理一定要用专业软件吗?

做项目管理一定要用专业软件吗?

2026/9/28 23:34:18

大家好,我是陈哥。 做项目管理是不是必须要用软件? 每次听到这个问题,我都会说:项目管理的核心是人和流程。不用任何管理软件,肯定是能做项目管理的。但是,适配的项目管理软件会让你更轻松。一、纯人工管理…

第32讲:实战——I2C传感器极简驱动快速验证

第32讲:实战——I2C传感器极简驱动快速验证

2026/8/23 4:16:12

CSDN专栏: 嵌入式程序开发实战嵌入式双范式AI编程嵌入式开发必掌握嵌入式求职面试技术资料 第32讲:实战——I2C传感器极简驱动快速验证 一、I2C传感器驱动基础 I2C是最常用的传感器接口,快速验证I2C传感器驱动是嵌入式开发的基本功。 1.…

第31讲:实战——SPI屏驱动快速试错、点亮屏幕

第31讲:实战——SPI屏驱动快速试错、点亮屏幕

2026/8/23 4:16:13

CSDN专栏: 嵌入式程序开发实战嵌入式双范式AI编程嵌入式开发必掌握嵌入式求职面试技术资料 第31讲:实战——SPI屏驱动快速试错、点亮屏幕 一、SPI屏幕驱动基础 SPI屏幕是嵌入式常见的显示设备,驱动屏幕需要正确配置SPI、理解屏幕控制命令…

CANN/GE ACL数据集缓冲区添加函数

CANN/GE ACL数据集缓冲区添加函数

2026/9/28 4:08:17

aclmdlAddDatasetBuffer 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、Te…

用ffmpeg高效批量调整图片尺寸的实战指南

用ffmpeg高效批量调整图片尺寸的实战指南

2026/9/28 16:01:49

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

2026/9/28 2:15:29

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱 【免费下载链接】transformers 🤗 Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and mu…

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

2026/9/28 3:14:54

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system sup…

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

2026/9/28 3:58:00

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

2026/9/28 3:47:14

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system supporting mi…

远程协作的工作台整理

远程协作的工作台整理

2026/9/28 16:01:48

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

2026/9/28 5:05:21

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

2026/9/28 16:01:48

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…