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

STM32自学☞AD单通道

d9d1a5d6dc824881a5d8a99849a2beae.jpg

 

程序的最终运行成果:

当转动电位器时,数值和电压值发生变化

ad.c文件

#include "stm32f10x.h"

#include "stm32f10x_adc.h"

#include "ad.h"

#include "stdint.h"

void ad_Init(void)

{

 /*

 初始化步骤:

 1.开启GPIO时钟和ADC时钟,配置ADCCLK

 2.配置GPIO,模拟输入模式

 3.配置多路开关

 4.配置ADC转换器

 5.开启ADC

 6.校准ADC

 */

  //开启时钟

 RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);

 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

 //配置ADCCLK

 RCC_ADCCLKConfig(RCC_PCLK2_Div6);

 //配置GPIO

 GPIO_InitTypeDef GPIO_InitStructure;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;

 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;

  GPIO_Init(GPIOA, &GPIO_InitStructure);

 //选择规则组进入的通道

 ADC_RegularChannelConfig(ADC1,ADC_Channel_0,1,ADC_SampleTime_55Cycles5);

 //结构体初始化ADC

 ADC_InitTypeDef ADC_InitStruct;

 ADC_InitStruct.ADC_Mode=ADC_Mode_Independent; //工作模式为独立模式

 ADC_InitStruct.ADC_DataAlign=ADC_DataAlign_Right; //ADC数据为右对齐

 ADC_InitStruct.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None; //软件触发

 ADC_InitStruct.ADC_ContinuousConvMode=DISABLE; //单次转换  

 ADC_InitStruct.ADC_ScanConvMode=DISABLE; //扫描模式

 ADC_InitStruct.ADC_NbrOfChannel=1; //扫描模式下要用到的通道数为1

 ADC_Init(ADC1,&ADC_InitStruct);

 //开启ADC电源

 ADC_Cmd(ADC1,ENABLE);

 //复位校准

 ADC_ResetCalibration(ADC1);

 //等待复位校准

 while(ADC_GetResetCalibrationStatus(ADC1)==SET);

 //开始校准

 ADC_StartCalibration(ADC1);

 //等待开始校准

 while(ADC_GetCalibrationStatus(ADC1)); 

}

//获取转换值函数

uint16_t ad_Getvalue(void)

{

 ADC_SoftwareStartConvCmd(ADC1,ENABLE);

 while(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)==RESET);

 return ADC_GetConversionValue(ADC1);

}

ad.h文件

#ifndef _AD_H

#define _AD_H

#include "stdint.h"

void ad_Init(void);

uint16_t ad_Getvalue(void);

#endif

main.c文件

#include "stm32f10x.h"

#include "delay.h"

#include "OLED.h"

#include "ad.h"

uint16_t advalue; //数值

float voltage; //电压值

int main (void)

 //初始化函数

 OLED_Init();

 ad_Init();

 OLED_ShowString(1,1,"advalue:");

 OLED_ShowString(2,1,"voltage:");

 while(1)

 {

  advalue=ad_Getvalue();

  voltage=(float)advalue/4095*3.3;

  OLED_ShowNum(1,9,advalue,4);

  OLED_ShowNum(2,9,voltage,1);

  OLED_ShowString(2,10,".");

  OLED_ShowNum(2,11,(uint16_t)(voltage*100)%100,2);

  OLED_ShowString(2,13,"V");

  delay_ms(1000);

 }

}

 

 

相关文章:

  • 基于C++的http通信记录,使用httplib,Windows环境,vscode,mingw
  • Quartz 任务调度框架源码阅读解析
  • 【K8s】初识PV和PVC
  • 【BUG 记录】MyBatis-Plus 处理枚举字段和 JSON 字段
  • 基于YOLOv8深度学习的复杂场景下船舶目标检测系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标检测
  • 云端技术驾驭DAY15——ClusterIP服务、Ingress服务、Dashboard插件、k8s角色的认证与授权
  • hive中常见参数优化总结
  • 【LeetCode-简单】27.移除元素 - 数组与双指针法
  • 五种查看Spring容器中bean的方法
  • 面向对象编程入门:掌握C++类的基础(2/3):深入理解C++中的类成员函数
  • 防御保护课程笔记
  • 【小白学机器学习5】偏差bias, 方差,var 误差error, MSE, RMSE,MAE, MAPE, WMAPE
  • 【Python笔记-设计模式】状态模式
  • 在极狐GitLab 配置 SSL/https
  • oracle DG 原理
  • 【5+】跨webview多页面 触发事件(二)
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • 10个确保微服务与容器安全的最佳实践
  • golang中接口赋值与方法集
  • HTML中设置input等文本框为不可操作
  • Java的Interrupt与线程中断
  • Js基础——数据类型之Null和Undefined
  • laravel 用artisan创建自己的模板
  • MD5加密原理解析及OC版原理实现
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • spring cloud gateway 源码解析(4)跨域问题处理
  • spring-boot List转Page
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • 阿里研究院入选中国企业智库系统影响力榜
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 算法-插入排序
  • 项目管理碎碎念系列之一:干系人管理
  • No resource identifier found for attribute,RxJava之zip操作符
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • ​ssh免密码登录设置及问题总结
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • ​一些不规范的GTID使用场景
  • # 数论-逆元
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • $GOPATH/go.mod exists but should not goland
  • (2.2w字)前端单元测试之Jest详解篇
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (三)elasticsearch 源码之启动流程分析
  • (学习日记)2024.01.09
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • .net MVC中使用angularJs刷新页面数据列表
  • .NET 的程序集加载上下文
  • .Net6支持的操作系统版本(.net8已来,你还在用.netframework4.5吗)
  • .NET中两种OCR方式对比
  • [ C++ ] STL_stack(栈)queue(队列)使用及其重要接口模拟实现