高级会员

- 积分
- 588
- 金钱
- 588
- 注册时间
- 2014-10-15
- 在线时间
- 137 小时
|
1金钱
芯片为STM32F407VET6初始化代码:
void MX_WEIGHT_SPI_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); //ê1ÄüGPIOAμÄê±Öó
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE); //ê1ÄüGPIOBμÄê±Öó
/**SPI1 GPIO Configuration
PA5 ------> SPI1_SCK
PB4 ------> SPI1_MISO
PB5 ------> SPI1_MOSI
*/
//////////////////////////////////////////////////////////////
GPIO_InitStruct.GPIO_Pin=WEIGHT_SCK_Pin;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF;
GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_NOPULL;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_100MHz;
GPIO_Init(GPIOA,&GPIO_InitStruct);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_SPI1);
////////////////////////////////////////////////////////////////
GPIO_InitStruct.GPIO_Pin=WEIGHT_MISO_Pin;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IN;
GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_UP;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_100MHz;
GPIO_Init(GPIOB,&GPIO_InitStruct);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource4, GPIO_AF_SPI1);
GPIO_InitStruct.GPIO_Pin=WEIGHT_MOSI_Pin;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF;
GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_NOPULL;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_100MHz;
GPIO_Init(GPIOB,&GPIO_InitStruct);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource5, GPIO_AF_SPI1);
/////////////////////////////////////////////////////////////////////
GPIO_InitStruct.GPIO_Pin=WEIGHT_CS_Pin;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_OUT;
GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_NOPULL;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_100MHz;
GPIO_Init(GPIOA,&GPIO_InitStruct);
SPI_Cmd(WEIGHT_SPIx, DISABLE);
hspi_weight.SPI_Mode = SPI_Mode_Master;
hspi_weight.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
hspi_weight.SPI_DataSize = SPI_DataSize_8b;
hspi_weight.SPI_CPOL = SPI_CPOL_High;
hspi_weight.SPI_CPHA = SPI_CPHA_2Edge;
hspi_weight.SPI_NSS = SPI_NSS_Soft;
hspi_weight.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;
hspi_weight.SPI_FirstBit = SPI_FirstBit_MSB;
hspi_weight.SPI_CRCPolynomial = 7;
SPI_Init(WEIGHT_SPIx,&hspi_weight);
SPI_Cmd(WEIGHT_SPIx, ENABLE);
WEIGHT_CS_ENABLE();
}
不知道哪儿的问题。
全速运行,卡在这儿,不走了。
/***************************************************************************//**
* @brief Reads the value of a register.
*
* @param registerAddress - Address of the register.
* @param bytesNumber - Number of bytes that will be read.
*
* @return buffer - Value of the register.
*******************************************************************************/
unsigned int AD7190_GetRegisterValue(unsigned char registerAddress,
unsigned char bytesNumber)
{
unsigned char registerWord[4] = {0, 0, 0, 0};
unsigned char address = 0;
unsigned int buffer = 0x0;
unsigned char i = 0;
address = AD7190_COMM_READ | AD7190_COMM_ADDR(registerAddress);
// HAL_SPI_Transmit(&hspi_weight,&address, 1,0xFFFFFF);
// HAL_SPI_Receive(&hspi_weight,registerWord,bytesNumber,0xFFFFFF);
SPI1_TransmitByte(address);
for(i = 0; i < bytesNumber; i++)
{
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET); //这一句
registerWord=SPI_I2S_ReceiveData(SPI1); //???????
buffer = (buffer << 8) + registerWord;
}
return buffer;
}
请问大神,如何解决?谢谢!
|
|