目录

  • 1、原理图设计参考
  • 2、引脚说明
  • 3、参考代码
  • 4、头文件
  • 5、应用
  • 6、中文参考资料下载

1、原理图设计参考

2、引脚说明

引脚 说明
AVCC 模拟电源电压 4.75 V至5.25 V
AGND 模拟地
OS0/OS1/OS2 过采样模式选择
PAR/SER/BYTE 并行/串行/并行字节接口选择
STBY 待机模式
RANGE 模拟输入范围选择(±10V 或 ±5V)
CONVST-A / CONVST-B 开始转换引脚,一般并联在具有PWM功能的引脚上
RESET 复位引脚
RD/SCLK 并行接口模式为读取控制引脚(RD) / 串行接口模式下为时钟输入(SCLK)
CS 片选,低电平有效
BUSY 输出繁忙,低电平时可读取数据
FRSTDATA 数字输出,表示何时回读数据
REF 基准电压选择
DB0~DB15 16位读取数据输出

3、参考代码

#include <stdio.h>
#include <string.h>
#include "stm32f10x.h"
#include "ad7606.h"//AD7606引脚配置
void AD7606_GPIOConfig(void)
{GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | RCC_APB2Periph_AFIO, ENABLE);GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);// 允许修改RTC和后备寄存器PWR_BackupAccessCmd(ENABLE);//关闭外部低速时钟,PC14+PC15可以用作普通IORCC_LSEConfig(RCC_LSE_OFF); //关闭入侵检测功能,PC13作为普通IOBKP_TamperPinCmd(DISABLE);//----------------------------- AD7606 DATA GPIO ------------------------------GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOC, &GPIO_InitStructure);// 禁止修改RTC和后备寄存器PWR_BackupAccessCmd(DISABLE);//------------------------------------ End ------------------------------------//ADCS->PB3, OS0->PB7, OS1->PB6, OS2->PB5GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);//ADREAD->PD2GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOD, &GPIO_InitStructure);// COVA->PA8, COVB->PA11, ADRESET->PA13GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);//ADFIRST->PA14GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA, &GPIO_InitStructure);
}//过采样率设置
void AD7606_SetOS(AD7606_OS_E ucOS)
{switch (ucOS){case AD_OS_NO: OS2_0(); OS1_0(); OS0_0(); break;case AD_OS_X2: OS2_0(); OS1_0(); OS0_1(); break;case AD_OS_X4: OS2_0(); OS1_1(); OS0_0(); break;case AD_OS_X8: OS2_0(); OS1_1(); OS0_1(); break;case AD_OS_X16: OS2_1(); OS1_0(); OS0_0(); break;case AD_OS_X32: OS2_1(); OS1_0(); OS0_1(); break;case AD_OS_X64: OS2_1(); OS1_1(); OS0_0(); break;default: OS2_0(); OS1_0(); OS0_0(); break;}
}//AD7606初始化
void AD7606Initialization(void)
{delay_ms(1);AD7606_RESET_0AD7606_SetOS(AD_OS_NO);AD7606_CS_0AD7606_RD_1delay_ms(1);AD7606Reset();
}//AD7606重置
void AD7606Reset(void)
{AD7606_RESET_1;delay_us(1);AD7606_RESET_0;delay_us(1);
}//读取数据
void AD7606ReadSample(void)
{uint8_t i;char ad_buffer[20] = {0};short ad_value[4] = {0};for(i = 0; i < 4; i++){AD7606_RD_0__NOP();ad_buffer[i] = READ_AD_DATA;AD7606_RD_1;__NOP();}sprintf(ad_buffer, "%d %d %d %d ", ad_buffer[0], ad_buffer[1], ad_buffer[2], ad_buffer[3]);USART2_SendStr(ad_buffer);
}//频率设置
void PWM_ModeConfig(uint32_t frequency)
{uint32_t arr_value, psc_value;//初始化结构体GPIO_InitTypeDef GPIO_InitStructure;TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;TIM_OCInitTypeDef  TIM_OCInitStructure;//开启端口时钟以及复位时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);//开启定时器时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);//引脚配置GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_11;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);/** PWM(Hz) = 72MHz / ((ARR + 1) * (PSC + 1))* ARR(arr_value) -> TIM_Period* PSC(psc_value) -> TIM_Prescaler*/psc_value = 72 - 1;arr_value = SystemCoreClock / (psc_value + 1) / frequency - 1;//计数值,TIM_Period + 1TIM_TimeBaseStructure.TIM_Period = arr_value;//预分频值,TIM_Perscaler + 1TIM_TimeBaseStructure.TIM_Prescaler = psc_value;//时钟分频因子TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;//计数器计数模式,向上计数TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//初始化定时器TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);//PWM模式TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;//输出使能TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//输出通道电平极性配置TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;//输出比较通道1TIM_OCInitStructure.TIM_Pulse = 4;TIM_OC1Init(TIM1, &TIM_OCInitStructure);TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);//输出比较通道4TIM_OCInitStructure.TIM_Pulse = 4;TIM_OC4Init(TIM1, &TIM_OCInitStructure);TIM_OC4PreloadConfig(TIM1, TIM_OCPreload_Enable);//允许或禁止在定时器工作时向ARR的缓冲器中写入新值TIM_ARRPreloadConfig(TIM1, ENABLE);//使能定时器TIM_Cmd(TIM1, ENABLE);//主输出使能,只有在使用高级定时器时有效TIM_CtrlPWMOutputs(TIM1, ENABLE);
}//busy中断配置
void AD7606_Busy_IRQ(void)
{EXTI_InitTypeDef   EXTI_InitStructure;GPIO_InitTypeDef   GPIO_InitStructure;NVIC_InitTypeDef   NVIC_InitStructure;/* Enable GPIOA clock */RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//禁用调试接口GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource15);EXTI_InitStructure.EXTI_Line = EXTI_Line15;EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStructure);NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);
}

4、头文件

#ifndef _AD7606_H_
#define _AD7606_H_#include "stm32f01x.h"#define READ_AD_DATA   GPIO_ReadInputData(GPIOC)#define OS0_1()           GPIO_SetBits(GPIOB, GPIO_Pin_6);
#define OS0_0()         GPIO_ResetBits(GPIOB, GPIO_Pin_6);
#define OS1_1()         GPIO_SetBits(GPIOB, GPIO_Pin_5);
#define OS1_0()         GPIO_ResetBits(GPIOB, GPIO_Pin_5);
#define OS2_1()         GPIO_SetBits(GPIOB, GPIO_Pin_4);
#define OS2_0()         GPIO_ResetBits(GPIOB, GPIO_Pin_4);#define AD7606_CS_1               GPIO_SetBits(GPIOB, GPIO_Pin_3);
#define AD7606_CS_0             GPIO_ResetBits(GPIOB, GPIO_Pin_3);
#define AD7606_RD_1             GPIO_SetBits(GPIOD, GPIO_Pin_2);
#define AD7606_RD_0             GPIO_ResetBits(GPIOD, GPIO_Pin_2);#define AD7606_RESET_1            GPIO_SetBits(GPIOA, GPIO_Pin_13);
#define AD7606_RESET_0          GPIO_ResetBits(GPIOA, GPIO_Pin_13);
#define AD7606_CONVST_1         GPIO_SetBits(GPIOA, GPIO_Pin_8 | GPIO_Pin_11);
#define AD7606_CONVST_0         GPIO_ResetBits(GPIOA, GPIO_Pin_8 | GPIO_Pin_11);#define AD7606_BUSY_STATE           GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_15)
#define AD7606_FRSTDATA_STATE       GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_14)typedef enum
{AD_OS_NO = 0,AD_OS_X2 = 1,AD_OS_X4 = 2,AD_OS_X8 = 3,AD_OS_X16 = 4,AD_OS_X32 = 5,AD_OS_X64 = 6}AD7606_OS_E;void AD7606Initialization(void);
void AD7606Reset(void);
void AD7606ReadSample(void);
void AD7606_GPIOConfig(void);
void AD7606_PWM_ModeConfig(uint32_t frequency);
void AD7606_SetOS(uint8_t _ucOS);
void AD7606_Busy_IRQ(void);
void AD7606_IRQ_Disable(void);
void AD7606_IRQ_Enable(void);#endif /*_AD7606_H*/

串口发送可查看此篇文章

5、应用

#include "stm32f10x.h"
#include "ad7606.h"int main(void)
{   AD7606Initialization();//频率设置20kAD7606_PWM_ModeConfig(20000);//设置并进入中断AD7606_Busy_IRQ();while(1){}
}//中断服务函数
void EXTI15_10_IRQHandler(void)
{if(EXTI_GetITStatus(EXTI_Line15) != RESET){AD7606ReadSample();EXTI_ClearITPendingBit(EXTI_Line15);}
}

6、中文参考资料下载

链接:https://pan.baidu.com/s/1l4AseVGhHjZcd0mLW5btLQ
提取码:a0ko

STM32开发 | AD7606并行多路采集数据相关推荐

  1. python作品_专业解读 | 制作游戏、开发APP、 爬虫采集数据等背后,Python全栈专业背后还有更大的世界...

    01 什么是Python全栈专业 全栈是指利用多种技能独立完成产品开发,以实践方式将前端.后端.移动端.服务器端等领域结合到一起. 例如我们可以用全栈的技术来开发跳一跳或者是豆瓣这样的产品. 什么是p ...

  2. 多路采集存储c语言程序,stm32多路巡回数据采集系统设计 含源程序

    此次设计是利用stm32开发板设计的.数据采集系统是模拟域与数字域之间必不可少的纽带,它的存在具有着非常重要的作用.本文介绍的重点是数据采集系统,而该系统硬件部分的重心在于单片机芯片.数据采集与通信控 ...

  3. STM32实例——基于STM32开发板实现传感数据采集-DHT11温湿度采集

    STM32开发板实现传感数据采集-DHT11温湿度采集 一.前言 本项目是基于STM32开发板的温湿度采集,传感器采用DHT11温湿度传感器,软件采用keil5等.本项目采用ARM结构中最为代表的Co ...

  4. 基于STM32单片机采集数据数据上云

    前言 以往采集数据均是采用Arduino开发板.esp32wifi模块等,本次实验采用的是STM32单片机,STM32系列基于专为要求高性能.低成本.低功耗的嵌入式应用专门设计的ARM Cortex- ...

  5. 多路视频数据实时采集系统设计与实现

    多路视频数据实时采集系统设计与实现 常永亮   王霖萱  常馨蓉 摘要 面对越来越多的实时视频采集.播放的应用,如何能更加方便的操控视频采集,保证流畅的播放效果,成为近几年实时媒体流的一个重要研究方向 ...

  6. Android 音频开发(二) 采集一帧音频数据

    这一节主要介绍如何采集一帧音频数据,如果你对音频的基础概念比较陌生,建议看我的上一篇Android 音频开发(一) 基础入门篇.因为音频开发过程中,经常要涉及到这些基础知识,掌握了这些重要的基础知识后 ...

  7. STM32连YL69土壤湿度传感器以及内部温度传感器采集数据并在LCD上显示

    终于把32好好学习了一遍,做了一次以前的项目练手,把土壤湿度与温度采集起来,数据在显示屏上显示.效果如图 首先硬件连接,就不说了,以前51的项目说过.直接附代码.需要说明的是我用的是STM32F407 ...

  8. Basler 工业相机 Python开发采集数据、保存照片

    Python 安装pypylon 建议先下载pypylon轮子文件(下载地址),下载后Pip install 轮子文件, 安装即可. 注意不要用Python 3.8, pypylon 只能支持到Pyt ...

  9. 开源:基于百万商业圈.NET开发框架开发的并行带分词的采集器

    开源:基于百万商业圈.NET开发框架开发的并行带分词的采集器 并行采集并做分词处理,在2MB带宽下测试平均:100 URL 用时3 秒种 特点:各种编码自动识别.各种编码自动转换.对有压缩的页能 自动 ...

最新文章

  1. Easy Summation 预处理 快速幂
  2. python鸢尾花数据集_Python实现鸢尾花数据集分类问题——使用LogisticRegression分类器...
  3. 如何在 Cypress 测试代码中屏蔽(Suppress)来自应用代码报出的错误消息
  4. L2-020. 功夫传人
  5. LeetCode 1214. 查找两棵二叉搜索树之和(二叉树迭代器+双指针)
  6. win7装postgresql10.4
  7. Android中BitmapFactory.Options详解
  8. 跟屌丝大哥学DB2-第四课 数据类型 ,表 ,视图,索引,模式,约束(一)
  9. I00032 约瑟夫环(Joseph problem)
  10. Contiki源码+原理+功能+编程+移植+驱动+网络(转)
  11. apt-get安装软件:依赖冲突问题及解决
  12. 金山反间谍清理专家能清除的部分恶意软件清单(截至2007年2月28日更新)
  13. 参考文献标准格式总结
  14. python中eval和ast.literal_eval的区别
  15. 【一款好用的安卓投屏软件Androidscreen】
  16. 雷达威力图绘制matlab,科学网—matlab绘雷达图 - 张凌的博文
  17. 有点先生和差不多女士
  18. php 会员 开源,会员组_POSCMS_PHP开源_迅睿CMS系统
  19. 光量子计算机的功能,光量子计算机有什么用
  20. 使用Excel制作一个动态计划表

热门文章

  1. Python基础入门:(一)从变量到异常处理 --阿里云天池
  2. 数理基础(概率论)------离散型和连续型分布期望方差公式
  3. 图文讲解uni-app支持PC宽屏
  4. Opencv图像处理之平滑(Smoothing)模糊(Blurring)操作
  5. 四阶幻方c语言编程,13年 第四届 蓝桥杯C语言C组 第4题 幻方填空
  6. Java 时间处理 ZoneId
  7. 什么是SSD TRIM (by quqi99)
  8. 人工智能导论——概念篇
  9. 操作系统中cpu如何工作
  10. ECCV2020-DETR笔记