我是参考网上的例子写的。读不到寄存器,都回来的值要不都为0,要不很奇怪。我把代码贴在下面
ADS1118的驱动
#include "ADS1118.h"
void ADS1118_Init(void)//端口初始化,GPIOCLK
[
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(ADS1118_CLOCK, ENABLE);
GPIO_InitStructure.GPIO_Pin = Pin_ADS1118_CS;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIO_ADS1118_CS, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = Pin_ADS1118_SCLK;
GPIO_Init(GPIO_ADS1118_SCLK, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = Pin_ADS1118_DIN;
GPIO_Init(GPIO_ADS1118_DIN, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Pin = Pin_ADS1118_DOUT;
GPIO_Init(GPIO_ADS1118_DOUT, &GPIO_InitStructure);
ADS1118_CS_1();
ADS1118_SCLK_1();
ADS1118_DIN_1();
]
u8 SPI_SendByte(u8 byte)
[
u8 i = 8;
u8 temp;
ADS1118_SCLK_1();
ADS1118_DIN_1();
while(i--)
[
if(byte&0x80)
ADS1118_DIN_1();
else
ADS1118_DIN_0();
ADS1118_SCLK_0();
byte<<=1;
delay_us(1);
ADS1118_SCLK_1();
delay_us(1);
if(DOUT_Set)
temp |= 1;
temp<<=1;
]
return temp;
]
u32 SPI_RW_Reg(u16 CofigReg)
[
u8 readdata1;
u8 readdata2;
u8 readdata3;
u8 readdata4;
u32 data;
readdata1=SPI_SendByte((uint8_t)(CofigReg>>8));
readdata2=SPI_SendByte((uint8_t)CofigReg);
readdata3=SPI_SendByte((uint8_t)(CofigReg>>8));
readdata4=SPI_SendByte((uint8_t)CofigReg);
data= ((uint32_t)readdata1<<8)|((uint32_t)readdata2);
//ads_cs_1();
return data;
]
主函数
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "ads1118.h"
#include "delay.h"
u32 AdValue=0;
uint16_t count=0xC583;
int main(void)
[
delay_init(); //延时函数初始化
NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
uart_init(9600); //串口初始化为9600
LED_Init();
ADS1118_Init();
while(1)
[
LED1 =!LED1 ;
AdValue=SPI_RW_Reg(count);
printf ("%drn",AdValue);
delay_ms(100);
]
]
我是参考网上的例子写的。读不到寄存器,都回来的值要不都为0,要不很奇怪。我把代码贴在下面
ADS1118的驱动
#include "ADS1118.h"
void ADS1118_Init(void)//端口初始化,GPIOCLK
[
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(ADS1118_CLOCK, ENABLE);
GPIO_InitStructure.GPIO_Pin = Pin_ADS1118_CS;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIO_ADS1118_CS, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = Pin_ADS1118_SCLK;
GPIO_Init(GPIO_ADS1118_SCLK, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = Pin_ADS1118_DIN;
GPIO_Init(GPIO_ADS1118_DIN, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Pin = Pin_ADS1118_DOUT;
GPIO_Init(GPIO_ADS1118_DOUT, &GPIO_InitStructure);
ADS1118_CS_1();
ADS1118_SCLK_1();
ADS1118_DIN_1();
]
u8 SPI_SendByte(u8 byte)
[
u8 i = 8;
u8 temp;
ADS1118_SCLK_1();
ADS1118_DIN_1();
while(i--)
[
if(byte&0x80)
ADS1118_DIN_1();
else
ADS1118_DIN_0();
ADS1118_SCLK_0();
byte<<=1;
delay_us(1);
ADS1118_SCLK_1();
delay_us(1);
if(DOUT_Set)
temp |= 1;
temp<<=1;
]
return temp;
]
u32 SPI_RW_Reg(u16 CofigReg)
[
u8 readdata1;
u8 readdata2;
u8 readdata3;
u8 readdata4;
u32 data;
readdata1=SPI_SendByte((uint8_t)(CofigReg>>8));
readdata2=SPI_SendByte((uint8_t)CofigReg);
readdata3=SPI_SendByte((uint8_t)(CofigReg>>8));
readdata4=SPI_SendByte((uint8_t)CofigReg);
data= ((uint32_t)readdata1<<8)|((uint32_t)readdata2);
//ads_cs_1();
return data;
]
主函数
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "ads1118.h"
#include "delay.h"
u32 AdValue=0;
uint16_t count=0xC583;
int main(void)
[
delay_init(); //延时函数初始化
NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
uart_init(9600); //串口初始化为9600
LED_Init();
ADS1118_Init();
while(1)
[
LED1 =!LED1 ;
AdValue=SPI_RW_Reg(count);
printf ("%drn",AdValue);
delay_ms(100);
]
]
举报