学前班
最后登录1970-1-1
在线时间 小时
注册时间2016-11-12
|
1火花
小弟使用stm32F429的HAL库,但是初始化ADS1256的时候,先写入寄存器,再读出寄存器,发现卡死在while(__HAL_SPI_GET_FLAG(&spi1_init,SPI_FLAG_RXNE)==RESET)这条语句,请各位大哥不吝赐教!
#include "all.h"
#include "clock.h"
#include "led.h"
#include "systick_delay.h"
#include "bitband.h"
#define DRDY PCin(10)
SPI_HandleTypeDef spi1_init;
void DRAY_init()
{
__HAL_RCC_GPIOC_CLK_ENABLE();
GPIO_InitTypeDef GPIO_Initstruct;
GPIO_Initstruct.Mode=GPIO_MODE_INPUT;
GPIO_Initstruct.Pin=GPIO_PIN_10;
GPIO_Initstruct.Pull=GPIO_PULLUP;
GPIO_Initstruct.Speed=GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOC,&GPIO_Initstruct);
}
void spi1_WriteREG(uint8_t reg,uint8_t data)
{
while(DRDY);
while(__HAL_SPI_GET_FLAG(&spi1_init,SPI_FLAG_TXE)==RESET)
{
HAL_SPI_Transmit(&spi1_init,®,1, 1000);
}
while(__HAL_SPI_GET_FLAG(&spi1_init,SPI_FLAG_TXE)==RESET)
{
HAL_SPI_Transmit(&spi1_init,0x00,1, 1000);
}
while(__HAL_SPI_GET_FLAG(&spi1_init,SPI_FLAG_TXE)==RESET)
{
HAL_SPI_Transmit(&spi1_init,&data,1,1000);
}
}
uint8_t spi1_ReadREG(uint8_t reg)
{
while(DRDY);
uint8_t temp=0x00;
while(__HAL_SPI_GET_FLAG(&spi1_init,SPI_FLAG_TXE)==RESET)
{
HAL_SPI_Transmit(&spi1_init,®,1, 1000);
}
while(__HAL_SPI_GET_FLAG(&spi1_init,SPI_FLAG_TXE)==RESET)
{
HAL_SPI_Transmit(&spi1_init,0x00,1, 1000);
}
while(__HAL_SPI_GET_FLAG(&spi1_init,SPI_FLAG_RXNE)==RESET)
{
HAL_SPI_Receive(&spi1_init,&temp,1, 1000);
}
printf("%x\n",temp);
return temp;
}
void spi_init()
{
__HAL_RCC_SPI1_CLK_ENABLE();
spi1_init.Instance=SPI1;
spi1_init.Init.Mode=SPI_MODE_MASTER;
spi1_init.Init.Direction=SPI_DIRECTION_2LINES;
spi1_init.Init.DataSize=SPI_DATASIZE_8BIT;
spi1_init.Init.CLKPolarity=SPI_POLARITY_HIGH;
spi1_init.Init.CLKPhase=SPI_PHASE_2EDGE;
spi1_init.Init.NSS=SPI_NSS_SOFT;
spi1_init.Init.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_256;
spi1_init.Init.FirstBit=SPI_FIRSTBIT_MSB;
spi1_init.Init.CRCCalculation=SPI_CRCCALCULATION_DISABLE;
spi1_init.Init.CRCPolynomial=7;
spi1_init.Init.TIMode=SPI_TIMODE_DISABLE;
HAL_SPI_Init(&spi1_init);
__HAL_SPI_ENABLE(&spi1_init);
}
void spi_gpio_init()
{
__HAL_RCC_GPIOA_CLK_ENABLE();
GPIO_InitTypeDef gpio_spi_Init;
gpio_spi_Init.Pin=GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7;
gpio_spi_Init.Mode=GPIO_MODE_AF_PP;
gpio_spi_Init.Pull=GPIO_PULLUP;
gpio_spi_Init.Speed=GPIO_SPEED_FREQ_HIGH;
gpio_spi_Init.Alternate=GPIO_AF5_SPI1;
HAL_GPIO_Init(GPIOA,&gpio_spi_Init);
}
void ADS1256_init()
{
while(DRDY);
spi1_WriteREG(0x50,0x02);
spi1_WriteREG(0x51,0x01);
spi1_WriteREG(0x52,0x00);
spi1_WriteREG(0x53,0x03);
spi1_WriteREG(0x54,0x00);
if(0x02!=spi1_ReadREG(0x10))
{
printf("error\n");
}
if(0x01!=spi1_ReadREG(0x11))
{
printf("error\n");
}
if(0x00!=spi1_ReadREG(0x12))
{
printf("error\n");
}
if(0x03!=spi1_ReadREG(0x13))
{
printf("error\n");
}
if(0x00!=spi1_ReadREG(0x14))
{
printf("error\n");
}
}
int main()
{
HAL_Init();
SystemClock_Config();
DRAY_init();
spi_gpio_init();
spi_init();
ADS1256_init();
while(1)
{
}
}
|
|