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

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);}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 2024辽宁省数学建模B题【钢铁产品质量优化】思路详解
  • TCP网络传输控制协议
  • 在 WebSocket 连接建立之前进行身份验证时,token 应该如何存储
  • 【ARM】MDK安装ARM_compiler5无法打开安装程序
  • Debezium系列之:验证mysql、mariadb等兼容mysql协议数据库账号权限
  • 用 Kotlin 编写四则运算计算器:从零开始的简单教程
  • 数据结构(2)
  • 单目测距 单目相机测距 图片像素坐标转实际坐标的一种转换方案
  • MySQL中记录(Documents)的基本操作——添加记录和查找记录
  • 树莓派+攀腾PMSA003-PM2.5传感器监测空气质量【含源码+接线图】
  • Navicat 17 新特性 | 原生支持 Linux ARM 平台以及银河麒麟和统信操作系统
  • 应变与几何方程——弹性力学
  • Kithara与OpenCV (一)
  • IDEA中使用Maven打包及碰到的问题
  • android 固定图片大小
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • 07.Android之多媒体问题
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • CSS居中完全指南——构建CSS居中决策树
  • ECMAScript6(0):ES6简明参考手册
  • E-HPC支持多队列管理和自动伸缩
  • java正则表式的使用
  • java中的hashCode
  • java中具有继承关系的类及其对象初始化顺序
  • Lsb图片隐写
  • rc-form之最单纯情况
  • React-redux的原理以及使用
  • 仿天猫超市收藏抛物线动画工具库
  • 记录一下第一次使用npm
  • 每天10道Java面试题,跟我走,offer有!
  • 三分钟教你同步 Visual Studio Code 设置
  • 优秀架构师必须掌握的架构思维
  • Hibernate主键生成策略及选择
  • $GOPATH/go.mod exists but should not goland
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (C语言)字符分类函数
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第1节 (全局数据、栈和堆)
  • (js)循环条件满足时终止循环
  • (pycharm)安装python库函数Matplotlib步骤
  • (创新)基于VMD-CNN-BiLSTM的电力负荷预测—代码+数据
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (南京观海微电子)——I3C协议介绍
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (一)SpringBoot3---尚硅谷总结
  • (一)WLAN定义和基本架构转
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • (转)Windows2003安全设置/维护
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .htaccess配置常用技巧
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .NET Core 控制台程序读 appsettings.json 、注依赖、配日志、设 IOptions
  • .net 微服务 服务保护 自动重试 Polly
  • .NET 中 GetProcess 相关方法的性能