STM32通过SPI采集DT50 ADS8320数据
具体目的
使用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数据相关推荐
- K_A19_002 基于STM32等单片机采集水位检测传感数据 串口与OLED0.96双显示
_A19_002 基于STM32等单片机采集水位检测传感数据 串口与OLED0.96双显示 一.资源说明 二.基本参数 参数 引脚说明 三.驱动说明 IIC地址/采集通道选择/时序 对应程序: 四.部 ...
- STM32+MAX6675利用io口模拟SPI获取实时温度数据程序及代码
STM32+MAX6675利用io口模拟SPI获取实时温度数据程序及代码 本文采用的芯片为STM32F103RCT6 温度芯片为MAX6675 因为芯片的spi口只有3个,有部分需要外接W25Q128 ...
- STM32+MAX6675利用SPI获取实时温度数据程序及代码
之前写的STM32+MAX6675利用io口模拟SPI获取实时温度数据程序及代码 本文采用的芯片为STM32F103RCT6 温度芯片为MAX6675 模拟spi之前写过 里面的部分代码摘取的正点原子 ...
- STM32 MCO+SPI获取24位模数转换(24bit ADC)高速芯片ADS1271采样数据
STM32 MCO+SPI获取24位模数转换(24bit ADC)高速芯片ADS1271采样数据 STM32大部分芯片只有12位的ADC采样性能,如果要实现更高精度的模数转换如24位ADC采样,则需要 ...
- STM32的SPI及IIC
目录 STM32的SPI及IIC 1.SPI的配置方式 SPI**简介** SPI**特征** SPI**功能描述** SPI通信配置 2.IIC 的配置方式 IIC简介 I2C 初始化结构体详解 I ...
- 两块STM32之间 SPI DMA通信
@[两块STM32之间 SPI DMA通信] 这里讲的是两块STM32F407板子的互相通讯,折腾了3天,终于比较清楚了,特此记录. 两块板子互相通讯,除了SPI的接线,肯定还有其他信号线,必须注意这 ...
- 【嵌入式】STM32基于SPI通信协议OLED屏显示
STM32基于SPI通信协议OLED屏显示 一.SPI协议和OLED介绍 1.SPI协议介绍 物理层 协议层 2.OLED显示屏介绍 二.显示个人学号姓名实验 1.题目要求 2.代码部分 1.完整代码 ...
- stm32中spi可以随便接吗_STM32的SPI模式读写FLASH芯片全面讲解
例程完整代码: SPI协议简介 SPI协议,即串行外围设备接口,是一种告诉全双工的通信总线,它被广泛地使用在ADC,LCD等设备与MCU间通信的场合. SPI信号线 SPI包含4条总线,分别为SS,S ...
- STM32模拟SPI协议驱动AD7908芯片
最近时间,由于项目需求用到了AD7908的AD采集芯片,通过查阅其相关的技术手册之后,成功的实现了其AD采集的功能,下面分享一下我的一些经验. AD7908是一个8位高速.低功耗.8通道的ADC芯片, ...
最新文章
- Leangoo看板工具做敏捷故事地图看板示例
- 复旦大学教授邱锡鹏:NLP 任务中有哪些巧妙的 idea?
- 基于Grafana的Repeate Panel快速定义面板
- 怎样安全的使用可变参数宏__VA_ARGS__
- Flink安装及使用
- Linux netfilter源码分析(6)
- markdown html图片,Markdown语法对应的HTML标签实现
- python模块大全doc_Python doc8包_程序模块 - PyPI - Python中文网
- Java机考题:基础编程机试题
- 凤凰系统运行linux,凤凰系统率先升级内核到Linux4.9,支持更多新硬件
- 编程小知识之时间显示
- Error: Rule can only have one resource source (provided resource and test + include + exclude) in {.
- 数据传输速率度量单位指标-比特、波特率和码元的关系
- 公钥密码系统主要依赖的三种数学难题:1.大整数因子分解问题 2.离散对数问题 (DLP问题) 3. 椭圆曲线上的离散对数问题(ECDLP)
- 什么是Redis内存碎片率?碎片如何清理?
- Python以太坊智能合约开发指南
- SEM优化教程第1讲—SEM是什么?SEM与SEO的区别?
- MYSQL - DML
- iphone 6s无sim卡
- 取消cfg文件默认打开方式记事本
热门文章
- 利用 matlab 完全消音 进行歌曲人声提取 超简单 四行代码
- Android DeviceOwner
- UDP-RTP协议解析
- 阿里云安装数据库mysql数据库服务器_阿里云CentOs服务器 安装与配置mysql数据库...
- 山东大学软件学院最优化方法考试复习笔记
- 批处理文件删除注册表数据
- 2022年4月线上终端药品增长迅猛,市场政策合规进程加快
- 模板笔记007 - 模板的声明、形参、实参
- 南开大学计算机考研历年分数线,南开大学计算机科学与技术考研历年分数线报录比及导师信息...
- 野火STM32寄存器点亮LED灯详解