我需要用STM32的SPI控制ADS8341进行数据采集,但是一直采集不到数据,希望大家帮帮我!谢谢 !
#include <stm32f10x_lib.h>
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "spi.h"
#include "IO.h"
//ADS8341实验
int main(void)
{
Stm32_Clock_Init(9); //系统时钟设置
delay_init(72); //延时初始化
uart_init1(72,9600);
while(1)
{
spi_ads8341();
}
}
#include <stm32f10x_lib.h>
#include"spi.h"
//SPI口初始化
void SPI2_Init(void)
{
RCC->APB2ENR|=1<<3; //PORTB时钟使能
RCC->APB2ENR|=1<<14; //SPI2时钟使能
GPIOB->CRH&=0X000FFFFF;
GPIOB->CRH|=0XBBB00000;
GPIOB->ODR|=0X7<<5;
SPI2->CR1|=0<<10; //全双工模式
SPI2->CR1|=1<<9; //软件nss管理
SPI2->CR1|=1<<8;
SPI2->CR1|=1<<2; //SPI主机
SPI2->CR1|=0<<11; //8位数据
SPI2->CR1|=0<<1; //CPOL=0
SPI2->CR1|=0<<0; //CPHA=0
SPI2->CR1|=3<<3; //Fsck=Fcpu/256
SPI2->CR1|=0<<7; //MSBfirst
SPI2->CR1|=1<<6; //SPI设备使能
SPI2_ReadWriteByte(0xff); //启动传输
}
//SPI速度设置函数
void SPI2_SetSpeed(u8 SpeedSet)
{
SpeedSet&=0x07;
SPI2->CR1&=0xFFC7;
SPI2->CR1|=SpeedSet<<3;
SPI2->CR1|=1<<6;
}
//SPI2读写一个字节
//TxData:要写入的字节
//返回值:要读到的字节
u8 SPI2_ReadWriteByte(u8 TxData)
{
u16 retry;
while((SPI2->SR&1<<1)==0) //等待发送区空
{
retry++;
if(retry>=0xfffe)
return 0;
}
SPI2->DR=TxData; //发送一个字节
retry=0;
while((SPI2->SR&1<<0)==0) //等待接收完一个字节
{
retry++;
if(retry>=0xfffe)
return 0;
}
return SPI2->DR; //返回收到的数据
}
void delay1(u16 ms)
{
u8 i;
while(ms--)
{
for(i = 0; i<250; i++);
}
}
void sendch(u8 t)
{
USART1->DR=t;
while((USART1->SR&0X40)==0);
USART1->SR&=0XFF7F;
}
void spi_ads8341(void)
{
u8 a1,a2,a3,a4,a5;
a1=0x00;
a2=0x00;
a3=0x00;
a4=0x00;
a5=0x00;
SPI_ADS_CS=0;
SPI2_Init(); //初始化SPI
SPI2_SetSpeed(SPI_SPEED_4);//设置为18M时钟,高速模式
SPI2_ReadWriteByte(0x94);
a1=SPI2_ReadWriteByte(0x00);
a2=SPI2_ReadWriteByte(0x00);
a3=SPI2_ReadWriteByte(0x00);
a4=SPI2_ReadWriteByte(0xff);
a5=SPI2_ReadWriteByte(0xff);
SPI_ADS_CS=1;
sendch(a1);
sendch(a2);
sendch(a3);
sendch(a4);
sendch(a5);
delay1(5000);
}
#ifndef __SPI_H
#define __SPI_H
#include "sys.h"
//IO的定义
#define SPI_ADS_CS PAout(1) //选中ADS8341
//SPI总线速度设置
#define SPI_SPEED_2 0
#define SPI_SPEED_4 1
#define SPI_SPEED_8 2
#define SPI_SPEED_16 3
#define SPI_SPEED_32 4
#define SPI_SPEED_64 5
#define SPI_SPEED_128 6
#define SPI_SPEED_256 7
void SPI2_Init(void);
void SPI2_SetSpeed(u8 SpeedSet);
u8 SPI2_ReadWriteByte(u8 TxData);
void delay1(u16 ms);
void sendch(u8 t);
void spi_ads8341(void);
void SPI_ADS_Init(void);
#endif
|