具体目的

使用STM32的SPI通道,采集ADS8320对DT50(激光测距传感器)进行了AD转换之的数据。不要求进行滤波,但采集到的数据要与距离呈正相关。

**

具体代码

**

main.h

#ifndef _MAIN_H
#define _MAIN_H
#include "SPI_DMA_Config.h"
#include "stm32f10x.h"
#include "delay_ms.h"int SPI_Word(u16 word);
#endif

main.c

#include"main.h"
uint16_t Data[10];
uint16_t data=0;
int main()
{SystemInit();SPI_DMA_Config();while(1){}}

SPI_Config.h

#ifndef __SPI_CONFIG
#define __SPI_CONFIG
#include "stm32f10x.h"void SPI_Config();
int Read_ADC_Value(void);
#endif

SPI_Config.c

#include "SPI_Config.h"
extern uint16_t Data[10];
extern uint16_t data;
void SPI_Config()
{GPIO_InitTypeDef GPIO_InitStructure;SPI_InitTypeDef SPI_InitStructure;TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOA , ENABLE );RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2  | RCC_APB1Periph_TIM2, ENABLE );//ADS8320引脚配置/*----SPI_SCLK----PB13----*/         //时钟信号/*----SPI_SDO----PB14----*/          //串行输出/*----CS/SHDN----PB12----*/          //使能信号GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOB, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(GPIOB, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;   GPIO_Init(GPIOA, &GPIO_InitStructure);//SPI配置SPI_Cmd(SPI2, DISABLE);SPI_InitStructure.SPI_Direction =SPI_Direction_2Lines_FullDuplex;SPI_InitStructure.SPI_Mode = SPI_Mode_Master;SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b;SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;SPI_InitStructure.SPI_BaudRatePrescaler =SPI_BaudRatePrescaler_32;SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;SPI_InitStructure.SPI_CRCPolynomial = 7;SPI_Init(SPI2, &SPI_InitStructure);SPI_Cmd(SPI2, ENABLE);NVIC_InitStructure.NVIC_IRQChannel =TIM2_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure);TIM_TimeBaseStructure.TIM_Period = 1250-1;TIM_TimeBaseStructure.TIM_Prescaler = 144-1;TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);TIM_Cmd(TIM2, ENABLE);    TIM_ITConfig(TIM2, TIM_IT_Update,ENABLE);            //打开TIM2中断TIM_ClearFlag(TIM2, TIM_FLAG_Update);
}//SPI接收采集数据,全双工模式下,发送一次,采集一次
int SPI_Word(u16 word)
{while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_TXE)==RESET);SPI_I2S_SendData(SPI2,word);while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_RXNE)==RESET);return SPI_I2S_ReceiveData(SPI2);
}int Read_ADC_Value(void)
{int ADC_value=0;GPIO_ResetBits(GPIOB,GPIO_Pin_12);//片选信号,低电平触发,ADS8320进行一次数据采集ADC_value=SPI_Word(0x0000);GPIO_SetBits(GPIOB,GPIO_Pin_12);//关闭片选,屏蔽从低到高位数据,只采集,从高位到地位数据return ADC_value;   //返回采样值
}//利用定时器中断进行数据采集,确定每次采集的间隔时间
void TIM2_IRQHandler(void)
{if (TIM_GetITStatus(TIM2,TIM_IT_Update)!= RESET)         {TIM_ClearFlag(TIM2, TIM_FLAG_Update);   Data[data]=Read_ADC_Value();data++;if(data>9)data=0;}
}

STM32通过SPI采集DT50 ADS8320数据相关推荐

  1. K_A19_002 基于STM32等单片机采集水位检测传感数据 串口与OLED0.96双显示

    _A19_002 基于STM32等单片机采集水位检测传感数据 串口与OLED0.96双显示 一.资源说明 二.基本参数 参数 引脚说明 三.驱动说明 IIC地址/采集通道选择/时序 对应程序: 四.部 ...

  2. STM32+MAX6675利用io口模拟SPI获取实时温度数据程序及代码

    STM32+MAX6675利用io口模拟SPI获取实时温度数据程序及代码 本文采用的芯片为STM32F103RCT6 温度芯片为MAX6675 因为芯片的spi口只有3个,有部分需要外接W25Q128 ...

  3. STM32+MAX6675利用SPI获取实时温度数据程序及代码

    之前写的STM32+MAX6675利用io口模拟SPI获取实时温度数据程序及代码 本文采用的芯片为STM32F103RCT6 温度芯片为MAX6675 模拟spi之前写过 里面的部分代码摘取的正点原子 ...

  4. STM32 MCO+SPI获取24位模数转换(24bit ADC)高速芯片ADS1271采样数据

    STM32 MCO+SPI获取24位模数转换(24bit ADC)高速芯片ADS1271采样数据 STM32大部分芯片只有12位的ADC采样性能,如果要实现更高精度的模数转换如24位ADC采样,则需要 ...

  5. STM32的SPI及IIC

    目录 STM32的SPI及IIC 1.SPI的配置方式 SPI**简介** SPI**特征** SPI**功能描述** SPI通信配置 2.IIC 的配置方式 IIC简介 I2C 初始化结构体详解 I ...

  6. 两块STM32之间 SPI DMA通信

    @[两块STM32之间 SPI DMA通信] 这里讲的是两块STM32F407板子的互相通讯,折腾了3天,终于比较清楚了,特此记录. 两块板子互相通讯,除了SPI的接线,肯定还有其他信号线,必须注意这 ...

  7. 【嵌入式】STM32基于SPI通信协议OLED屏显示

    STM32基于SPI通信协议OLED屏显示 一.SPI协议和OLED介绍 1.SPI协议介绍 物理层 协议层 2.OLED显示屏介绍 二.显示个人学号姓名实验 1.题目要求 2.代码部分 1.完整代码 ...

  8. stm32中spi可以随便接吗_STM32的SPI模式读写FLASH芯片全面讲解

    例程完整代码: SPI协议简介 SPI协议,即串行外围设备接口,是一种告诉全双工的通信总线,它被广泛地使用在ADC,LCD等设备与MCU间通信的场合. SPI信号线 SPI包含4条总线,分别为SS,S ...

  9. STM32模拟SPI协议驱动AD7908芯片

    最近时间,由于项目需求用到了AD7908的AD采集芯片,通过查阅其相关的技术手册之后,成功的实现了其AD采集的功能,下面分享一下我的一些经验. AD7908是一个8位高速.低功耗.8通道的ADC芯片, ...

最新文章

  1. Leangoo看板工具做敏捷故事地图看板示例
  2. 复旦大学教授邱锡鹏:NLP 任务中有哪些巧妙的 idea?
  3. 基于Grafana的Repeate Panel快速定义面板
  4. 怎样安全的使用可变参数宏__VA_ARGS__
  5. Flink安装及使用
  6. Linux netfilter源码分析(6)
  7. markdown html图片,Markdown语法对应的HTML标签实现
  8. python模块大全doc_Python doc8包_程序模块 - PyPI - Python中文网
  9. Java机考题:基础编程机试题
  10. 凤凰系统运行linux,凤凰系统率先升级内核到Linux4.9,支持更多新硬件
  11. 编程小知识之时间显示
  12. Error: Rule can only have one resource source (provided resource and test + include + exclude) in {.
  13. 数据传输速率度量单位指标-比特、波特率和码元的关系
  14. 公钥密码系统主要依赖的三种数学难题:1.大整数因子分解问题 2.离散对数问题 (DLP问题) 3. 椭圆曲线上的离散对数问题(ECDLP)
  15. 什么是Redis内存碎片率?碎片如何清理?
  16. Python以太坊智能合约开发指南
  17. SEM优化教程第1讲—SEM是什么?SEM与SEO的区别?
  18. MYSQL - DML
  19. iphone 6s无sim卡
  20. 取消cfg文件默认打开方式记事本

热门文章

  1. 利用 matlab 完全消音 进行歌曲人声提取 超简单 四行代码
  2. Android DeviceOwner
  3. UDP-RTP协议解析
  4. 阿里云安装数据库mysql数据库服务器_阿里云CentOs服务器 安装与配置mysql数据库...
  5. 山东大学软件学院最优化方法考试复习笔记
  6. 批处理文件删除注册表数据
  7. 2022年4月线上终端药品增长迅猛,市场政策合规进程加快
  8. 模板笔记007 - 模板的声明、形参、实参
  9. 南开大学计算机考研历年分数线,南开大学计算机科学与技术考研历年分数线报录比及导师信息...
  10. 野火STM32寄存器点亮LED灯详解