这是我在微 C 编译器中为 stm32f407VG 编写的代码,用于与 ADS1259进行 SPI 通信。 我已经检查了 SCK、MOSI、片选所有的时钟工作正常、除了 MISO。 我没有在 MISO 引脚上获取任何 AND 数据。 请给我一些帮助。
void ADS1259_init (void);
void ADS1259_reset (void);
long read_adc_value (void);
void ADS1259_reset (void);
长 ADC_VOLTAGE;
长 ADC_Value[3];
长蜡染国际;
长 adcval;
长值;
char __buffer[20];
//void SOFT_UART_String (char * string_ptr);
//long ADC_Value[2];
void UART2_Write_Int (long num);
int i =0;
void main()
{
SPI3_Init_Advanced (_SPI_FPCLK_DIV8、_SPI_MASTER |_SPI_8_BIT |_SPI_CLK_IDLE_LOW |_SPI_FIRST_CLK_EDGE_TRANSITION |_SPI_MSB_FIRST |_SPI_SS_DISABLE |_SPI_SSM_ENABLE |_SPI_SSI_CLK_MODE|_SPI_1_SPI_CLK_MODULE_TOP_11、SPI_PCI3_1_11和 SPI3_MODULE_11)
delay_ms (300);
UART2_Init_Advanced (9600、_UART_8_bit_data、_UART_NOPARITY、_UART_ONE_STOPBIT、&& GPIO_MODULE_USART2_PD56);
GPIO_Digital_Input (&GPIOA_base、_GPIO_PINMASK_2);
GPIO_Digital_Output (&GPIOE_base、_GPIO_PINMASK_15);//LED1用于 drdy
GPIO_Digital_Output (&GPIOE_base、_GPIO_PINMASK_8);//芯片选择
GPIO_Digital_Output (&GPIOE_base、_GPIO_PINMASK_12);//LED1用于芯片选择
delay_ms (300);
UART2_Write_Text ("正在初始化 SPI3 ");
delay_ms (500);
ADS1259_init();
ADS1259_reset ();
ADS1259_init();
UART2_Write_Text ("初始化完成");
delay_ms (500);
while (1)
{
GPIOE_ODR/B15=1;
ADC_VOLTAGE = READ_ADC_VALUE ();
UART2_Write_Text (" ADC_VOLTAGE =");
UART2_Write_Int (ADC_VOLTAGE);
UART2_Write_Text ("\r\n");
GPIOE_ODR/B15=0;
}
}
void ADS1259_init (void)
{
GPIOE_ODR/B8=0;//芯片选择低电平
SPI3_Write (0X11);
SPI3_Write (0x40);
SPI3_Write (0x08);
SPI3_Write (0b10000101);
SPI3_Write (0b00010000);
SPI3_Write (0b00010000);
SPI3_Write (0b00000000);
SPI3_Write (0b00000000);
SPI3_Write (0b01000000);
GPIOE_ODR/B8=1;//芯片选择高电平
}
void ADS1259_reset (void)
{
GPIOE_ODR/B8=0;
SPI3_Write (0x06);
GPIOE_ODR/B8=1;
}
long read_adc_value (void)
{
GPIOE_ODR/B8=0;//芯片选择低电平
SPI3_Write (0x08);//start
delay_us (100);
SPI3_Write (0x12);//RDATA
ADC_Value[0]= SPI3_READ (0x00);
ADC_Value[1]=SPI3_READ (0x00);
ADC_Value[2]= SPI3_READ (0x00);
delay_ms (100);
GPIOE_ODR/B8=1;//芯片选择高电平
ADC_Value[0]= ADC_Value[0]* 65536;
ADC_Value[1]= ADC_Value[1]*256;
adcval =(adc_value[0]| adc_value[1]| adc_value[2]);
IF (adcval & 0x800000)
{
adcval =~adcval;
nativeInt = adcval + 1;
nativeInt = nativeInt;
值=-((nativeInt*2.9802326E-7)+5);
}
其他
{
nativeInt = adcval;
数值= nativeInt*2.9802326E-7;
}
返回值;
}
空 UART2_Write_Int (long num)//以 ASCII 格式发送整数值
{
LongToStr (num、__buffer);
UART2_Write_Text (__buffer);
}
