使用HAL库
先贴上ADS8688驱动
C文件ADS8688.c
#include "stm32f4xx_hal.h"
#include "stm32f4xx_hal_gpio.h"
#include "ads8688.h"
void ADS8688_IO_Init(void) //ADS8688 IO口初始化
{
GPIO_InitTypeDef GPIO_InitStructure;
__HAL_RCC_GPIOC_CLK_ENABLE(); //使能端口时钟
__HAL_RCC_GPIOE_CLK_ENABLE();
GPIO_InitStructure.Pin = GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6;
GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP; //推挽输出
GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
HAL_GPIO_Init(GPIOE, &GPIO_InitStructure);
GPIO_InitStructure.Pin = GPIO_PIN_13;
GPIO_InitStructure.Mode = GPIO_MODE_INPUT;
HAL_GPIO_Init(GPIOC, &GPIO_InitStructure);
DAISY_L;
CS_H;
RST_H;
CLK_L;
delay_ms(5);
}
void ADS8688_Init(uint8_t ch_en) //ADS8688初始化
{
ADS8688_IO_Init();
SOFT_RESET(); //复位
delay_ms(25);
Set_Auto_Scan_Sequence(ch_en);//使能通道
ADS8688_WriteReg(CH_PD,~ch_en);//通道退出低功耗状态 通道上电
delay_ms(50);
while(ADS8688_ReadReg(AUTO_SEQ_EN)!=ch_en)//是否使能成功
{
Set_Auto_Scan_Sequence(ch_en);//使能通道
ADS8688_WriteReg(CH_PD,~ch_en);//通道退出低功耗状态 通道上电
delay_ms(50);
}
}
uint8_t ADS8688_SPI_Read8Bit(void)
{
uint8_t i=0;
uint8_t read=0;
for(i=0; i<8; i++)
{
read<<=1;
CLK_H;
delay_us(2);
if(READ_SDO) read++;
CLK_L;
delay_us(2);
}
return read;
}
void ADS8688_SPI_Write8Bit(uint8_t data)
{
uint8_t i=0;
CS_L;
for(i=0; i<8; i++)
{
if(data&0x80) SDI_H;
else SDI_L;
data<<=1;
CLK_H;
delay_us(2);
CLK_L;
delay_us(2);
}
}
void ADS8688_WriteCmd(uint16_t cmd)//写ADS8688命令寄存器
{
CS_L;
ADS8688_SPI_Write8Bit(cmd>>8 & 0XFF);
ADS8688_SPI_Write8Bit(cmd & 0XFF);
ADS8688_SPI_Write8Bit(0X00);
ADS8688_SPI_Write8Bit(0X0