当前位置: 首页 > news >正文

7.2 AD单通道

#include stm32f10x.h // Device header#include Delay.h#include OLED.h#include AD.huint16_t ADValue; //定义AD值变量float Voltage; //定义电压变量int main(void){/*模块初始化*/OLED_Init(); //OLED初始化AD_Init(); //AD初始化/*显示静态字符串*/OLED_ShowString(1, 1, ADValue:);OLED_ShowString(2, 1, Voltage:0.00V);while (1){ADValue AD_GetValue(); //获取AD转换的值Voltage (float)ADValue / 4095 * 3.3; //将AD值线性变换到0~3.3的范围表示电压OLED_ShowNum(1, 9, ADValue, 4); //显示AD值OLED_ShowNum(2, 9, Voltage, 1); //显示电压值的整数部分OLED_ShowNum(2, 11, (uint16_t)(Voltage * 100) % 100, 2); //显示电压值的小数部分Delay_ms(100); //延时100ms手动增加一些转换的间隔时间}}#include stm32f10x.h // Device header/*** 函 数AD初始化* 参 数无* 返 回 值无*/void AD_Init(void){/*开启时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); //开启ADC1的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //开启GPIOA的时钟/*设置ADC时钟*/RCC_ADCCLKConfig(RCC_PCLK2_Div6); //选择时钟6分频ADCCLK 72MHz / 6 12MHz/*GPIO初始化*/GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode GPIO_Mode_AIN;GPIO_InitStructure.GPIO_Pin GPIO_Pin_0;GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;GPIO_Init(GPIOA, GPIO_InitStructure); //将PA0引脚初始化为模拟输入/*规则组通道配置*/ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_55Cycles5); //规则组序列1的位置配置为通道0/*ADC初始化*/ADC_InitTypeDef ADC_InitStructure; //定义结构体变量ADC_InitStructure.ADC_Mode ADC_Mode_Independent; //模式选择独立模式即单独使用ADC1ADC_InitStructure.ADC_DataAlign ADC_DataAlign_Right; //数据对齐选择右对齐ADC_InitStructure.ADC_ExternalTrigConv ADC_ExternalTrigConv_None; //外部触发使用软件触发不需要外部触发ADC_InitStructure.ADC_ContinuousConvMode DISABLE; //连续转换失能每转换一次规则组序列后停止ADC_InitStructure.ADC_ScanConvMode DISABLE; //扫描模式失能只转换规则组的序列1这一个位置ADC_InitStructure.ADC_NbrOfChannel 1; //通道数为1仅在扫描模式下才需要指定大于1的数在非扫描模式下只能是1ADC_Init(ADC1, ADC_InitStructure); //将结构体变量交给ADC_Init配置ADC1/*ADC使能*/ADC_Cmd(ADC1, ENABLE); //使能ADC1ADC开始运行/*ADC校准*/ADC_ResetCalibration(ADC1); //固定流程内部有电路会自动执行校准while (ADC_GetResetCalibrationStatus(ADC1) SET);ADC_StartCalibration(ADC1);while (ADC_GetCalibrationStatus(ADC1) SET);}/*** 函 数获取AD转换的值* 参 数无* 返 回 值AD转换的值范围0~4095*/uint16_t AD_GetValue(void){ADC_SoftwareStartConvCmd(ADC1, ENABLE); //软件触发AD转换一次while (ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) RESET); //等待EOC标志位即等待AD转换结束return ADC_GetConversionValue(ADC1); //读数据寄存器得到AD转换的结果}
http://www.zskr.cn/news/1395020.html

相关文章:

  • 【AI工具2026权威榜单】:基于37项硬指标、127家厂商实测数据的年度终极排名(附避坑指南)
  • FPGA多模式SHA-2硬件加速器设计:从架构到29倍GPU能效的工程实践
  • 【2026必藏】6款智能降AIGC平台全揭秘,一键实现AI检测丝滑过审!
  • Ryujinx模拟器:在PC上体验Switch游戏的终极解决方案
  • ChatGPT学术合规红线清单(教育部《人工智能辅助科研伦理指引》2024试行版逐条对标),92%研究者已踩雷
  • PyTorch transforms.ColorJitter 实战:从原理到应用,掌握图像增强的随机艺术
  • CVPR‘26 Highlight 开源|Vista4D:一段视频→任意运镜,任意编辑!
  • League Akari:3个核心功能解决英雄联盟玩家的所有痛点
  • LVGL下拉列表控件实战:从静态选项到动态事件响应的完整开发流程
  • 别再手动输密码了!5分钟搞定CentOS 7服务器间SFTP免密互传(保姆级图文)
  • Unity中C#脚本编译DLL的工程价值与实操指南
  • ARMv8异常处理与SPSR寄存器深度解析
  • SDL2核心函数到底怎么用?从SDL_Init到SDL_Quit,一篇讲透初始化与资源管理的最佳实践
  • STM32定时器编码器模式实战:不用外部中断,四倍频测速原来这么简单
  • 机器学习原子间势微调实战:从基础模型到高精度材料模拟
  • 长期项目使用Taotoken聚合API在稳定性与容灾方面的实际体验
  • 百度网盘直链解析:3分钟实现全速下载的完整指南
  • ACL运行时API深度解析——CANN最底层的算子调用接
  • Eigen库的Array与Matrix到底有啥区别?搞懂这个让你的数值计算代码效率翻倍
  • NDK 日志持久化实战:封装 __android_log_print 实现文件与分级存储
  • [AUTOSAR OS] 2 AUTOSAR操作系统的多核任务调度实战(下)
  • LDDC歌词工具:终极指南!如何一键获取QQ音乐、网易云的精准逐字歌词
  • House of Cat
  • 为Hermes Agent自定义配置Taotoken作为稳定的大模型后端
  • 基于BERT与CNN的土耳其语假新闻检测:从数据构建到模型优化实战
  • Taotoken 的用量看板如何帮助项目管理者清晰掌握模型支出
  • 华大HC32F4A0 USART1的PCLK时钟源到底怎么算?手把手教你配置19200波特率(含库函数源码分析)
  • Node js 服务端应用如何稳定集成 Taotoken 提供的多模型聚合能力
  • Java Stream Collectors.toMap实战:从基础用法到冲突解决
  • 学生党AI搜索避坑手册(2024高校图书馆实测数据版):这3类工具正在悄悄拖垮你的学习效率!