第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/10/20 4:18:10 阅读更多 →
第32讲:实战——I2C传感器极简驱动快速验证

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

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

2026/10/18 10:30:41 阅读更多 →
第31讲:实战——SPI屏驱动快速试错、点亮屏幕

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

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

2026/10/20 12:19:01 阅读更多 →

最新新闻

NLTK情感分析实战:朴素贝叶斯文本分类与特征工程

NLTK情感分析实战:朴素贝叶斯文本分类与特征工程

开头我先交代一个背景。去年我接了一个某售后团队的文本处理需求,他们每个月有近万条用户反馈,需要把表达不满的留言单独捞出来,让客服优先跟进。一开始大家都以为这种“情绪识别”要上什么重磅模型,结果我用了NLTK这套老牌工具&a…

2026/10/20 15:11:55 阅读更多 →
H3C防火墙双机热备:RBM+VRRP原理与Web配置实战

H3C防火墙双机热备:RBM+VRRP原理与Web配置实战

做网络运维这些年,防火墙双机热备是我见过最务实、也最容易被忽视的一项配置。很多朋友一提到RBMVRRP,脑子里就浮现一堆命令行,要么对着文档一行行抄,要么在设备上死记硬背,最后改一个接口就全乱了。其实H3C防火墙这套…

2026/10/20 15:11:55 阅读更多 →
OWASP Benchmark实战:用黄金标准量化评估SAST/DAST工具能力

OWASP Benchmark实战:用黄金标准量化评估SAST/DAST工具能力

如果你负责过应用安全工具选型,大概率经历过这种尴尬:会议室里各家厂商把 SAST、DAST 工具演示得天花乱坠,漏洞检出率动辄宣称百分之九十几,可一旦回到真实业务,漏报和误报依旧扎心。这种局面本质上不是某个工具不行&a…

2026/10/20 15:11:55 阅读更多 →
VS2017编译64位libssh2:OpenSSL与Zlib三库协同实战指南

VS2017编译64位libssh2:OpenSSL与Zlib三库协同实战指南

简介:本资源是面向Windows平台C/C开发者的一站式libssh2 64位编译成果包,专为解决VS2017环境下64位应用程序集成SSH2协议能力的刚需。资源提供已成功编译的完整libssh2 Win64库及配套头文件、依赖DLL(含libcrypto-1_1-x64.dll与libssl-1_1-x6…

2026/10/20 15:11:55 阅读更多 →
路由器工作原理深度拆解:路由表、数据包转发与NAT

路由器工作原理深度拆解:路由表、数据包转发与NAT

上次帮邻居调网络,发现他家的光猫、路由器、交换机全都挤在弱电箱里,线乱成一团。他说自己只会“插上电源,连上Wi-Fi”,至于路由器里面到底干了什么,完全是个黑盒子。这其实是很普遍的现象——路由器天天在用&#xff…

2026/10/20 15:11:55 阅读更多 →
Apple Silicon 虚拟机 EFI_RNG_PROTOCOL 缺失排查

Apple Silicon 虚拟机 EFI_RNG_PROTOCOL 缺失排查

前两天我在一台 M2 的 Mac mini 上用 VMware Fusion 装 Ubuntu 22.04 ARM 版,系统安装完重启,屏幕刷过一长串启动日志,其中一行EFI_RNG_PROTOCOL unavailable特别扎眼。第一反应就是“启动失败了”。结果等了几秒,系统照常进到了登…

2026/10/20 15:10:51 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

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

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

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

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

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

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/20 9:50:45 阅读更多 →