stm32使用双通道ADC读取

Driver_ADC.c

使用了DMA转换

#include "Driver_ADC.h"void Driver_ADC1_Init(void)
{/* 1. 时钟配置 *//* 1.1 adc时钟 */RCC->APB2ENR |= RCC_APB2ENR_ADC1EN;RCC->CFGR |= RCC_CFGR_ADCPRE_1;RCC->CFGR &= ~RCC_CFGR_ADCPRE_0;/* 1.2 gpio的时钟 */RCC->APB2ENR |= RCC_APB2ENR_IOPCEN;/* 2. gpio工作模式: PC0 PC2 模拟输入  CNF=00 MODE=00 */GPIOC->CRL &= ~(GPIO_CRL_CNF0 | GPIO_CRL_MODE0);GPIOC->CRL &= ~(GPIO_CRL_CNF2 | GPIO_CRL_MODE2);/* 2. ADC相关配置 *//* 2.1 启用扫描模式. 有多个通道 */ADC1->CR1 |= ADC_CR1_SCAN;/* 2.2 启用连续转换模式 CR2=CONT 1*/ADC1->CR2 |= ADC_CR2_CONT;/* 2.3 数据对齐方式: 右对齐 左对齐 */ADC1->CR2 &= ~ADC_CR2_ALIGN;/* 2.4 设置采样时间 ADC_SMPR1  010=13.5周期*/ADC1->SMPR1 &= ~(ADC_SMPR1_SMP10_2 | ADC_SMPR1_SMP10_0);ADC1->SMPR1 |= ADC_SMPR1_SMP10_1;ADC1->SMPR1 &= ~(ADC_SMPR1_SMP12_2 | ADC_SMPR1_SMP12_0);ADC1->SMPR1 |= ADC_SMPR1_SMP12_1;/* 2.6 通道组的配置 *//* 2.6.1 配置几个通道需要转换  2个通道*/ADC1->SQR1 &= ~ADC_SQR1_L;ADC1->SQR1 |= ADC_SQR1_L_0;/* 2.6.1 把通道号配置到组里面.  */ADC1->SQR3 &= ~ADC_SQR3_SQ1; /* 先把5位清零 */ADC1->SQR3 |= 10 << 0;       /* 设置最后5位 */ADC1->SQR3 &= ~ADC_SQR3_SQ2; /* 先把5位清零 */ADC1->SQR3 |= 12 << 5;       /* 设置最后5位 *//* 2.7 选择软件触发 */ADC1->CR2 &= ~ADC_CR2_EXTTRIG; /* 禁用规则组的外部转换 */ADC1->CR2 |= ADC_CR2_EXTSEL;   /* 选择使用软件触发ADC */
}void Driver_ADC1_DMA_Init(void)
{/* 1. 开启DMA时钟 */RCC->AHBENR |= RCC_AHBENR_DMA1EN;/* 2. 设置传输方向 从外设读0 从内存读1*/DMA1_Channel1->CCR &= ~DMA_CCR1_DIR;/* 3. 数据宽度 16位=01 */DMA1_Channel1->CCR &= ~DMA_CCR1_PSIZE_1;DMA1_Channel1->CCR |= DMA_CCR1_PSIZE_0;DMA1_Channel1->CCR &= ~DMA_CCR1_MSIZE_1;DMA1_Channel1->CCR |= DMA_CCR1_MSIZE_0;/* 4. 外设和内存的地址是否增 外设不增  内存要增*/DMA1_Channel1->CCR &= ~DMA_CCR1_PINC;DMA1_Channel1->CCR |= DMA_CCR1_MINC;/* 5. 开启循环模式 */DMA1_Channel1->CCR |= DMA_CCR1_CIRC;/* 6. 给ADC1开启DMA模式 */;ADC1->CR2 |= ADC_CR2_DMA;
}void Driver_ADC1_DMA_Start(uint32_t desAddr, uint8_t len)
{/* 0. DMA 配置 */DMA1_Channel1->CPAR = (uint32_t)(&(ADC1->DR));DMA1_Channel1->CMAR = desAddr;DMA1_Channel1->CNDTR = len;DMA1_Channel1->CCR |= DMA_CCR1_EN;/* 使能通道 *//* 1. 上电: 把ADC从休眠模式唤醒 */ADC1->CR2 |= ADC_CR2_ADON;/* 2. 执行校准 */ADC1->CR2 |= ADC_CR2_CAL;while (ADC1->CR2 & ADC_CR2_CAL);/* 3. ADON = 1, 开始转换 0>1 从休眠模式唤醒 1->1 开始 */ADC1->CR2 |= ADC_CR2_ADON;/* 4. 使用软件开始转换规则通道 */;ADC1->CR2 |= ADC_CR2_SWSTART;/* 5. 等待首次转换完成 */while ((ADC1->SR & ADC_SR_EOC) == 0);}

Driver_ADC.h

#ifndef __DRIVER_ADC_H
#define __DRIVER_ADC_H#include "stm32f10x.h"void Driver_ADC1_Init(void);void Driver_ADC1_DMA_Init(void);void Driver_ADC1_DMA_Start(uint32_t desAddr, uint8_t len);#endif

main.c

#include "Driver_USART.h"#include "Delay.h"
#include "Driver_ADC.h"uint16_t data[2] = {0};int main()
{Driver_USART1_Init();printf("ADC转换 单通道\r\n");Driver_ADC1_Init();Driver_ADC1_DMA_Init();Driver_ADC1_DMA_Start((uint32_t)data, 2);while (1){printf("滑动变阻器=%.2f, 电源电压=%.2f\r\n",data[0] * 3.3 / 4095,data[1] * 3.3 / 4095);Delay_s(1);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/871242.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux网络】数据链路层【上】{初识数据链路层/以太网/路由表/MAC地址表/ARP表/NAT表}

文章目录 1.初识数据链路层2.认识以太网2.0前导知识以太网帧和MAC帧CMSA/CD以太网的最小帧长限制是64字节IP层和MAC层 2.1以太网帧格式 3.预备知识计算机网络通信以太网和wifi路由表/MAC地址表/ARP表/NAT表/ACL表 用于同一种数据链路节点的两个设备之间进行信息传递。 1.初识数…

Apache AGE 聚合函数

简介 一般来说&#xff0c;聚合函数 aggr(expr) 会处理每个聚合键在传入记录中找到的所有匹配行&#xff08;键使用等价性进行比较&#xff09;。 在常规聚合&#xff08;即形式为 aggr(expr) 的情况下&#xff09;&#xff0c;聚合值列表是候选值列表&#xff0c;其中所有空…

系统服务综合案例

系统服务综合案例 具体任务&#xff1a; 现有主机 node01和node02&#xff0c;完成如下需求: 1、在 node01 主机上提供 DNS 和 WEB 服务 2、dns 服务提供本实验所有主机名解析 3、web服务提供www.rhce.com 虚拟主机 4、该虚拟主机的documentroot目录在/nfs/rhce目录 5、该目录…

Clion 使用gdbserver调试FreeSWITCH源码

1.准备环境 window安装clion安装好gdb、ssh、已经编译好的freeswitch可执行文件的docker镜像2.配置clion Settings -> Tools ->SSH Configurations Settings-Build, Execution, Deployment-Toolchains(其实设不设置都行,用默认也行的) Settings-Build, Execution, Depl…

DockerCompose拉取DockerHub镜像,并部署OpenMetaData

参考博主&#xff1a;http://t.csdnimg.cn/i49ET 一、DockerCompose拉取DockerHub镜像 方法一&#xff08;不太行&#xff09;&#xff1a; 在daemon.json文件中添加一些国内还在服务的镜像站&#xff08;可能某些镜像会没有&#xff09; ([ -f /etc/docker/daemon.json ] ||…

人工智能大模型如何助力电商产品经理打造高效的商品工业属性画像

摘要 商品工业属性画像是电商产品经理在进行商品管理、推荐、搜索、广告等业务时的重要依据。通过对商品的工业属性&#xff08;如品类、品牌、规格、功能、风格等&#xff09;的准确识别和标注&#xff0c;可以提高商品的展示效果、匹配度、转化率和用户满意度。然而&#xf…

从概念到完成:Midjourney——设计思维与AI技术的完美结合

文章目录 本文来自 Python学研大本营 作者 学研君 去年 AI 爆火的时候&#xff0c;学研君也赶时髦用上了 Midjourney。平时用它生成图片&#xff0c;感觉生成的图片好看&#xff0c;比上网四处找图更省时省事&#xff0c;更合心意&#xff0c;还不用担心版权问题。 给大家看一下…

102.qt qml-最全Table交互之多列固定、行列拖拽、自定义委托、标题交互使用教程

自定义实现的Table控件&#xff0c;支持跨qt版本&#xff0c;兼容qt5,qt6&#xff01; 截图如下所示: 黑色风格如下所示&#xff1a; 视频演示入口&#xff1a;Qt QML QianWindowV2.5(新增曲线综合示例、QML最全Table交互示例、支持qt5/qt6)_哔哩哔哩_bilibili 1.示例页面入口…

整理:MySQL常见错误解决方法

一、无法连接到 localhost 上的 MySQL 服务器 (10061) 翻译&#xff1a; 无法连接到 localhost 上的 MySQL 服务器。 分析&#xff1a; 这表明 localhost 计算机是存在的&#xff0c;但在这台机器上没有运行 MySQL 服务。或者&#xff0c;机器负载过高未能响应请求也可能导致…

element form表单中密码框被自动赋值,并默认背景色为白色,手动输值后背景色才是自己配置的背景色,与表单的自动填充有关

事件背景&#xff1a; 一个表单&#xff0c;有两组需要输入密码的地方&#xff0c;两组都被填充用户名密码&#xff0c;其中一组是其他信息&#xff0c;不是用户名密码&#xff0c;也被填充了&#xff0c;且input背景色是白色&#xff0c;表单中的input已经手动配置为无背景色&…

snort入侵检测系统及CISCO ACL配置

Snort入侵检测系统 Snort是一个开源的网络入侵检测系统&#xff08;IDS&#xff09;和入侵防御系统&#xff08;IPS&#xff09;&#xff0c;由Martin Roesch在1998年开发。Snort能够实时分析和捕获网络数据包&#xff0c;检测网络攻击和入侵行为&#xff0c;并生成警报。以下…

缓冲区共享和同步dma_buf 之二

缓冲区共享和同步dma_buf 之二 数据结构dma_buf_syncdma_buf_export_sync_filedma_buf_import_sync_file APIs缓冲区与描述符dma_buf_exportdma_buf_fddma_buf_get链接缓冲区与设备驱动器缓冲区加锁与解锁分散列表与映射 数据结构 dma_buf_sync 与 CPU 访问同步。 struct dm…

【单片机毕业设计选题24061】-基于蓝牙的单片机通信系统

系统功能: 1、本系统硬件由两块STM32单片机&#xff0c;DHT11&#xff0c;光敏传感器&#xff0c;12864oled和HC-05蓝牙模块组成。 2、单片机1HC-05蓝牙模块做为主机&#xff0c;单片机2HC-05蓝牙模块做为从机。 3、单片机从机将采集到温湿度&#xff0c;光照强度等信息通过…

log4j2.xml 使用 application.yml 配置的属性

参考&#xff1a;https://www.jianshu.com/p/1f2427c87139 log4j2.xml 是不归 spring 管理的&#xff0c;所以也就没法读取到 application.yml 里面的配置了。 解决方式&#xff1a; 通过 spring 的 监听器(Listener)功能&#xff0c;将我们读取到的 application.yml 的日志路径…

使用mybatis的statementHander拦截器监控表和字段并发送钉钉消息

新建mybatis的statementHander拦截器拦截器 类 面试题&#xff1a; 2.实现 解析Sql时引入JSqlParser JSqlParser 是一个 SQL 语句解析器。 它将 SQL转换为可遍历的 Java 类层次结构。 <dependency><groupId>com.github.jsqlparser</groupId><artifac…

[IDEA插件] JarEditor 编辑jar包(直接新增、修改、删除jar包内的class文件)

文章目录 1. 安装插件 JarEditor2. 在IDEA中添加外部JAR包3. JarEditor 使用介绍 之前我们需要修改jar内文件的时候需要解压jar包&#xff0c;反编译class&#xff0c;新建java源文件&#xff0c;修改代码&#xff0c;再编译成class&#xff0c;替换jar包内的class文件。 现在…

数据库作业5---视图

创建表 创建部门表&#xff08;dept&#xff09;和员工表&#xff08;emp&#xff09; create table dept(dept_id int primary key auto_increment comment 部门编号,dept_name char(20) comment 部门名称);insert into dept(dept_name) values(销售部),(财务部),(生产部),(…

Day03-索引模板,DSL语句,集群迁移API,ES集群状态统计API,KQL语句及分片重路由API实战

Day03-索引模板&#xff0c;DSL语句&#xff0c;集群迁移API&#xff0c;ES集群状态统计API&#xff0c;KQL语句及分片重路由API实战 1、索引模板1.1 什么是索引模板1.2 查看索引模板1.3 创建/修改索引模板1.4 删除索引模板 2、ES的DSL语句查询2.1 什么是DSL2.2 全文检索-match…

WPF透明置顶窗口wine适配穿透问题解决

一、透明窗口全屏时&#xff0c;鼠标不穿透 问题描述 我有一个透明窗口&#xff0c;它是一个全屏置顶窗口&#xff0c;窗口里面有一个工具条&#xff0c;可以通过鼠标拖动工具条的位置&#xff0c;程序启动后&#xff0c;在不点击工具条的时候&#xff0c;鼠标是可以穿透的&a…

tusimple车道线检测 标注自己的数据集

一、打开labelme工具进行数据标注 二、数据格式转换 2.1 标签转换 运行Anaconda Prompt&#xff0c;进入json标签文件所在目录&#xff0c;逐个转换&#xff0c;分布运行 labelme_json_to_dataset 0000.json labelme_json_to_dataset 0001.json labelme_json_to_dataset 000…