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

STM32自学☞AD多通道

涉及到的硬件有:光敏传感器,热敏传感器,红外对射传感器,电位器

通过adc将他们采集的模拟信号转换为数值

ad.c文件

#include "stm32f10x.h"

#include "stm32f10x_adc.h"

#include "ad.h"

#include "stdint.h"

void ad_Init(void)

{

  //开启时钟

 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_Pin_1|GPIO_Pin_2|GPIO_Pin_3;

  GPIO_Init(GPIOA, &GPIO_InitStructure);

 //结构体初始化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(uint8_t ADC_Channel)

{

 ADC_RegularChannelConfig(ADC1,ADC_Channel,1,ADC_SampleTime_55Cycles5);

 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(uint8_t ADC_Channel);

#endif

main.c文件

#include "stm32f10x.h"

#include "stm32f10x_adc.h"

#include "delay.h"

#include "OLED.h"

#include "ad.h"

uint16_t AD0,AD1,AD2,AD3;

int main (void)

 //初始化函数

 OLED_Init();

 ad_Init();

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

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

 OLED_ShowString(3,1,"AD2_Value:");

 OLED_ShowString(4,1,"AD3_Value:");

 while(1)

 {

  AD0=ad_Getvalue(ADC_Channel_0);

  AD1=ad_Getvalue(ADC_Channel_1);

  AD2=ad_Getvalue(ADC_Channel_2);

  AD3=ad_Getvalue(ADC_Channel_3);

  

  OLED_ShowNum(1,11,AD0,4);

  OLED_ShowNum(2,11,AD1,4);

  OLED_ShowNum(3,11,AD2,4);

  OLED_ShowNum(4,11,AD3,4);

  delay_ms(1000);

 }

}

 

http://www.lryc.cn/news/312824.html

相关文章:

  • 微服务之商城系统
  • 安卓玩机工具推荐----高通芯片9008端口读写分区 备份分区 恢复分区 制作线刷包 工具操作解析
  • 全量知识系统问题及SmartChat给出的答复 之16 币圈生态链和行为模式
  • 【MOMO_Tips】批量将word转换为PDF格式
  • 【JSON2WEB】08 Amis的事件和校验
  • 抖店类目报白什么意思?什么类目需要报白?这次给你讲明白!
  • <C++>【继承篇】
  • size_t 和double相乘怎么转换size_t
  • C# 的一些好用的语法糖介绍
  • 驱动开发面试复习
  • 监测数据计算与换算:确保工程安全的关键步骤
  • Vue项目实战--空间论坛(1)
  • linux内核驱动——字符设备实现两个终端单向收发
  • 读取CSV数据并写入MySQL
  • centos7.4下升级最新的ssh
  • Java实现的双向链表示例
  • 生物电信号测量技术
  • 【开源】JAVA+Vue.js实现创意工坊双创管理系统
  • Python基于opencv的人脸识别上课签到考勤系统,附源码
  • 【HTML】HTML基础7.2(有序列表)
  • ucode usage使用方法
  • HCIA-HarmonyOS设备开发认证V2.0-习题
  • 【深度学习笔记】优化算法——随机梯度下降
  • oss-fuzz-gen:一款基于LLM的模糊测试对象生成与评估框架
  • 深度神经网络 基本知识 记录
  • 基于Springboot免费搭载轻量级阿里云OSS数据存储库(将本地文本、照片、视频、音频等上传云服务保存)
  • RK3568 Android12 适配抖音 各大APP
  • [渗透教程]-022-内网穿透的高性能的反向代理应用
  • 【计算机网络】深度学习HTTPS协议
  • C盘新建的文件夹内需要管理员权限才能新建和删除解决问题记录