当前位置: 首页 > 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);

 }

}

 

 

相关文章:

STM32自学☞AD单通道

程序的最终运行成果: 当转动电位器时,数值和电压值发生变化 ad.c文件 #include "stm32f10x.h" #include "stm32f10x_adc.h" #include "ad.h" #include "stdint.h" void ad_Init(void) { /* 初始化步骤:…...

打家劫舍(java版)

📑前言 本文主要是【动态规划】——打家劫舍(java版)的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是听风与他🥇 ☁️博客首页:CSDN主页听风与他 🌄每日一…...

Python函数位置参数(*args)与关键词参数(**kwargs)的用法

两种向python函数传递参数的方式: 位置参数(positional argument) 关键词参数(keyword argument) *args与**kwargs的区别 两者都是python中的可变参数; args:表示任何多个无名参数,它…...

Java自学day5

流程控制语句 流程控制语句:通过一些语句,控制程序的执行流程 顺序结构 顺序结构语句是Java程序默认的执行流程,按照代码的先后顺序,从上到下依次执行! package orderdemo;public class OrderDemo {public static void main(String[] args) {System.out.println("…...

IO-DAY1

1.用fprintf将链表数据保存到文件中 2用fscanf将文件中数据写入链表 #include<stdio.h> #include<string.h> #include<stdlib.h> #include<unistd.h> typedef int datatype; typedef struct link_list { union { int len; d…...

英福康INFICON真空计MPG400MPG401使用说明PPT讲解课件

英福康INFICON真空计MPG400MPG401使用说明PPT讲解课件...

【lua】lua内存优化记录

这边有一个Unity项目用的tolua&#xff0c; 游戏运行后手机上lua内存占用 基本要到 189M&#xff0c; 之前峰值有200多。 优化点1 加快gc频度&#xff1a; 用uwa抓取的lua内存&#xff0c; 和unity的mono很像&#xff0c;内存会先涨 然后突然gc一下&#xff0c;降下来。 这样…...

紫光展锐T618_4G安卓核心板方案定制

紫光展锐T618核心板是一款采用纯国产化方案的高性能产品&#xff0c;搭载了开放的智能Android操作系统&#xff0c;并集成了4G网络&#xff0c;支持2.5G5G双频WIFI、蓝牙近距离无线传输技术以及GNSS无线定位技术。 展锐T618核心板应用旗舰级 DynamlQ架构 12nm 制程工艺&#x…...

Redis 群集部署

1.关系型数据库 关系型数据库是一个结构化的数据库&#xff0c;创建在关系模型基础上&#xff0c;-般面向记录。它借助于集合代数等数学概念和方法来处理数据库中的数据。关系模型指二维表格模型,因而一个关系型数据库就是由二维表及其之间的联系组成的一个数据组织。现实世界中…...

WPF中如何设置自定义控件(二)

前一篇文章中简要讲解了圆角按钮、圆形按钮的使用,以及在windows.resource和app.resource中设置圆角或圆形按钮的样式。 这篇主要讲解Polygon(多边形)、Ellipse(椭圆)、Path(路径)这三个内容。 Polygon 我们先看一下的源码: namespace System.Windows.Shapes { pu…...

【C++】每周一题——2024.3.3

题目 Cpp 【问题描述】 字符环&#xff08;来源&#xff1a;NOI题库&#xff09;。有两个由字符构成的环&#xff0c;请写一个程序&#xff0c;计算这两个字符环上最长公共字符串的长度。例如&#xff0c;字符串“ABCEFAGADEGKABUVKLM”的首尾连在一起&#xff0c;构成一个环&a…...

5G网络架构与组网部署01--5G网络架构的演进趋势

目录 1. 5G网络架构的演进趋势 1.1 5G移动通信系统整体架构 1.2 4G移动通信系统整体架构 1.3 4G与5G移动通信系统整体架构对比 1.4 核心网架构演进 1.5 无线接入网演进 1. 整体架构组成&#xff1a;接入网&#xff0c;核心网 2. 5G网络接入网和核心网对应的网元&#xff…...

2023全球软件开发大会-上海站:探索技术前沿,共筑未来软件生态(附大会核心PPT下载)

随着信息技术的迅猛发展&#xff0c;全球软件开发大会&#xff08;QCon&#xff09;已成为软件行业最具影响力的年度盛会之一。2023年&#xff0c;QCon再次来到上海&#xff0c;汇聚了众多业界精英、技术领袖和开发者&#xff0c;共同探讨软件开发的最新趋势和实践。 一、大会…...

C#插入排序算法

插入排序实现原理 插入排序算法是一种简单、直观的排序算法&#xff0c;其原理是将一个待排序的元素逐个地插入到已经排好序的部分中。 具体实现步骤如下 首先咱们假设数组长度为n&#xff0c;从第二个元素开始&#xff0c;将当前元素存储在临时变量temp中。 从当前元素的前一…...

快速搭建Vue前端框架

快速搭建Vue前端框架 安装Vue Vue官方安装过程:https://cli.vuejs.org/zh/guide/installation.html 二.创建Vue工程 2.2 安装淘宝镜像 安装淘宝镜像&#xff08;会让你安装Vue的速度加快&#xff09;&#xff1a; npm config set registry https://registry.npm.taobao.or…...

TS中private和protected的区别

在 TypeScript 中&#xff0c;private 和 protected 是两种访问修饰符&#xff0c;用于限制类成员&#xff08;如属性、方法等&#xff09;的可见性和可访问性。它们的主要区别在于访问权限的宽松程度。 1. private 当一个类的成员被标记为 private 时&#xff0c;它只能在该…...

虚拟机Hyper-V操作记录

问题1&#xff1a;安装Hyper-V&#xff0c;虚拟机监控程序无法打钩&#xff0c;提示该固件的虚拟化支持被禁用 主板型号&#xff1a;华硕ASUS ROG STRIX Z390-E GAMING 解决方法&#xff1a;进入BIOS&#xff0c;Advanced/CPU Configuration/Intel(VMX) Virtualization Technol…...

90. 子集 II(力扣LeetCode)

文章目录 90. 子集 II题目描述回溯算法 90. 子集 II 题目描述 给你一个整数数组 nums &#xff0c;其中可能包含重复元素&#xff0c;请你返回该数组所有可能的子集&#xff08;幂集&#xff09;。 解集 不能 包含重复的子集。返回的解集中&#xff0c;子集可以按 任意顺序 …...

202435读书笔记|《半小时漫画中国史》——读点经济学与历史,生活更美好,趣味烧脑土地制度、商鞅变法、华丽丽的丝绸之路这里都有

202435读书笔记|《半小时漫画中国史》——读点经济学与历史&#xff0c;生活更美好&#xff0c;趣味烧脑土地制度、商鞅变法、华丽丽的丝绸之路这里都有 1. 土地政策、度量衡及税收2. 商鞅变法3. 西汉经济4. 西汉盐铁大辩论5. 西汉丝绸之路 《半小时漫画中国史&#xff1a;经济…...

2023下半年主品牌锋芒依旧,江南布衣打破既定天花板?

在过去的2023年里&#xff0c;服装板块令人意外的领涨消费大盘&#xff0c;国家统计局数据显示&#xff0c;上半年服装零售额同比增长12.8%&#xff0c;远超商品零售大盘的增速6.8%。 整体表现强劲的同时&#xff0c;“局部”表现是否也尽如人意。近日&#xff0c;作为时尚服装…...

OpenMMLab 环境配置实战:从 YOLO 项目报错到模块化开发的避坑指南

1. 从YOLO项目报错说起&#xff1a;OpenMMLab环境配置的典型痛点 最近在复现一个基于YOLOv5改进的OpenMMLab项目时&#xff0c;遇到了让人头疼的ModuleNotFoundError: No module named mmdet报错。这个场景太典型了——明明项目目录里清清楚楚躺着mmdet文件夹&#xff0c;Pytho…...

银河麒麟kylin.desktop-generic编译程序执行权限问题深度解析与实战解决方案

1. 银河麒麟权限问题的现象与本质 最近在银河麒麟kylin.desktop-generic环境下开发时&#xff0c;遇到了一个让人头疼的问题&#xff1a;明明用gcc编译生成的可执行文件已经显示有x权限&#xff0c;运行时却提示"权限不够"。这种看似矛盾的报错&#xff0c;其实是银河…...

告别subfloat!LaTeX中minipage+subfigure排版多图的最佳实践

LaTeX多图排版进阶指南&#xff1a;minipage与subfigure的黄金组合 在学术论文和技术文档写作中&#xff0c;图片排版往往是让人头疼的问题。特别是当需要处理多张图片并为其添加子标题时&#xff0c;传统的subfloat方法常常会遇到标题溢出、无法自动换行等令人沮丧的情况。本文…...

一键生成专业工资条:工资条生成器功能详解

在当今数字化办公的时代&#xff0c;一款好的工具能够让工作效率得到质的提升。 工资条生成器就是这样一款专门为财务人员打造的专业工具&#xff0c;它集成了多项实用功能。 下面&#xff0c;就让我们来详细了解一下这款软件的各项功能特性。 首先要介绍的是软件的核心功能…...

如何使用 ECharts 绘制 K 线图

在金融数据可视化领域&#xff0c;K 线图&#xff08;又称蜡烛图&#xff09;是展示股票、期货等价格走势的核心工具。它通过矩形实体和上下影线直观呈现开盘价、收盘价、最高价和最低价&#xff0c;帮助投资者快速捕捉市场趋势。本文将结合 ECharts 的官方文档和实战案例&…...

Comate vs. Cursor:国产AI IDE如何以多智能体协同重塑开发体验?

1. Comate与Cursor&#xff1a;AI IDE赛道的双雄对决 当代码补全插件已经无法满足开发者的需求时&#xff0c;AI原生IDE正在掀起一场开发工具的革命。在这场变革中&#xff0c;百度的Comate和Cursor成为了最受关注的两个选手。作为一个长期使用各类开发工具的老码农&#xff0c…...

惠普暗影精灵终极控制方案:OmenSuperHub开源工具完全指南

惠普暗影精灵终极控制方案&#xff1a;OmenSuperHub开源工具完全指南 【免费下载链接】OmenSuperHub 使用 WMI BIOS控制性能和风扇速度&#xff0c;自动解除DB功耗限制。 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 厌倦了官方Omen Gaming Hub的臃肿和广…...

38、【Agent】【OpenCode】本地代理分析(二)

【声明】本博客所有内容均为个人业余时间创作&#xff0c;所述技术案例均来自公开开源项目&#xff08;如Github&#xff0c;Apache基金会&#xff09;&#xff0c;不涉及任何企业机密或未公开技术&#xff0c;如有侵权请联系删除 背景 上篇 blog 【Agent】【OpenCode】本地代…...

实测梦幻动漫魔法工坊:用LoRA调整画风,轻松打造不同风格的动漫作品

实测梦幻动漫魔法工坊&#xff1a;用LoRA调整画风&#xff0c;轻松打造不同风格的动漫作品 1. 工具概览 梦幻动漫魔法工坊是一款基于Diffusion模型和LoRA微调技术的动漫图像生成工具。它最大的特点是通过简单的界面操作&#xff0c;就能生成各种风格的二次元图像&#xff0c;…...

一篇文章带你了解 HTTP协议 !!!

引言在 Web 开发体系中&#xff0c;HTTP 协议作为前后端数据交互的核心规范&#xff0c;定义了请求与响应的标准格式&#xff0c;是实现浏览器与服务器通信的基础&#xff1b;而 TCP 协议则为 HTTP 提供了可靠的传输保障&#xff0c;确保数据完整有序传输。本文带你了解一下HTT…...