Нужно было переписать проект для STM32F105RC на STM32F407VG. Соответственно пришлось переписывать некоторые функции в проекте связанные с периферией. Камнем преткновения стали функции чтения и записи SPI. В исходном проекте для F105RC она имеют следующий вид:
CODE
int readfromspi(uint16 headerLength, const uint8 *headerBuffer, uint32 readlength, uint8 *readBuffer)
{
int i=0;
GPIO_ResetBits(SPIx_CS_GPIO, SPIx_CS);
for(i=0; i<headerLength; i++)
{
SPIx->DR = headerBuffer[i];
while((SPIx->SR & SPI_I2S_FLAG_RXNE) == (uint16_t)RESET);
readBuffer[0] = SPIx->DR ;
}
for(i=0; i<readlength; i++)
{
SPIx->DR = 0;
while((SPIx->SR & SPI_I2S_FLAG_RXNE) == (uint16_t)RESET);
readBuffer[i] = SPIx->DR ;
}
GPIO_SetBits(SPIx_CS_GPIO, SPIx_CS);
return 0;
}
{
int i=0;
GPIO_ResetBits(SPIx_CS_GPIO, SPIx_CS);
for(i=0; i<headerLength; i++)
{
SPIx->DR = headerBuffer[i];
while((SPIx->SR & SPI_I2S_FLAG_RXNE) == (uint16_t)RESET);
readBuffer[0] = SPIx->DR ;
}
for(i=0; i<readlength; i++)
{
SPIx->DR = 0;
while((SPIx->SR & SPI_I2S_FLAG_RXNE) == (uint16_t)RESET);
readBuffer[i] = SPIx->DR ;
}
GPIO_SetBits(SPIx_CS_GPIO, SPIx_CS);
return 0;
}
и соответственно
CODE
int writetospi(uint16 headerLength, const uint8 *headerBuffer, uint32 bodylength, const uint8 *bodyBuffer)
{
int i=0;
GPIO_ResetBits(SPIx_CS_GPIO, SPIx_CS);
for(i=0; i<headerLength; i++)
{
SPIx->DR = headerBuffer[i];
while ((SPIx->SR & SPI_I2S_FLAG_RXNE) == (uint16_t)RESET);
SPIx->DR;
}
for(i=0; i<bodylength; i++)
{
SPIx->DR = bodyBuffer[i];
while((SPIx->SR & SPI_I2S_FLAG_RXNE) == (uint16_t)RESET);
SPIx->DR ;
}
GPIO_SetBits(SPIx_CS_GPIO, SPIx_CS);
return 0;
}
{
int i=0;
GPIO_ResetBits(SPIx_CS_GPIO, SPIx_CS);
for(i=0; i<headerLength; i++)
{
SPIx->DR = headerBuffer[i];
while ((SPIx->SR & SPI_I2S_FLAG_RXNE) == (uint16_t)RESET);
SPIx->DR;
}
for(i=0; i<bodylength; i++)
{
SPIx->DR = bodyBuffer[i];
while((SPIx->SR & SPI_I2S_FLAG_RXNE) == (uint16_t)RESET);
SPIx->DR ;
}
GPIO_SetBits(SPIx_CS_GPIO, SPIx_CS);
return 0;
}
Все необходимые definы я сделал программа компилируется, но вылетает после операции чтения или записи.
Помогите пожалуйста понять, почему данные функции не отрабатывают на STM32F407VG.
И что нужно изменить в этих функциях, чтобы они заработали на моем микроконтроллере,
Заранее спасибо.