2017-01-04 16 views
1

私のプログラムをhalに移動しようとしていて、私のSPIが255しか受信していません。何を設定するのを忘れましたか?読書のためのSPI MISOの値255

機能:

uint8_t addressMsb[1] = { READ_ADDRESS | RTD_MSB_ADDRESS }; 
uint8_t addressLsb[1] = { READ_ADDRESS | RTD_LSB_ADDRESS }; 

uint8_t Temp_Msb[1]; 
uint8_t Temp_Lsb[1]; 
... 
PT_CS1_LOW; 
HAL_SPI_Transmit(&hspi1, (uint8_t*) addressMsb, 1, 10); 
HAL_SPI_Receive(&hspi1, (uint8_t*) Temp_Msb, 1, 10); 
PT_CS1_HIGH; 
for(int i = 0; i<10;i++); 
PT_CS1_LOW; 
HAL_SPI_Transmit(&hspi1, (uint8_t*) addressLsb, 1, 10); 
HAL_SPI_Receive(&hspi1, (uint8_t*) Temp_Lsb, 1, 10); 
PT_CS1_HIGH; 
... 

セッティング:

void MX_SPI1_Init(void) 
{ 

hspi1.Instance = SPI1; 
hspi1.Init.Mode = SPI_MODE_MASTER; 
hspi1.Init.Direction = SPI_DIRECTION_2LINES; 
hspi1.Init.DataSize = SPI_DATASIZE_8BIT; 
hspi1.Init.CLKPolarity = SPI_POLARITY_HIGH; 
hspi1.Init.CLKPhase = SPI_PHASE_2EDGE; 
hspi1.Init.NSS = SPI_NSS_SOFT; 
hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32; 
hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; 
hspi1.Init.TIMode = SPI_TIMODE_DISABLE; 
hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; 
hspi1.Init.CRCPolynomial = 7; 
if (HAL_SPI_Init(&hspi1) != HAL_OK) 
{ 
    Error_Handler(); 
} 

} 
... 
__HAL_RCC_SPI1_CLK_ENABLE(); 

/**SPI1 GPIO Configuration  
PA5  ------> SPI1_SCK 
PA6  ------> SPI1_MISO 
PA7  ------> SPI1_MOSI 
*/ 
GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7; 
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; 
GPIO_InitStruct.Pull = GPIO_NOPULL; 
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; 
GPIO_InitStruct.Alternate = GPIO_AF5_SPI1; 
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); 

は、私はそれがHWが失敗イマイチということを知っているので、このボードの動作上の自作機能。

if (!((SPI1)->CR1 & SPI_CR1_SPE)){ 
while(((SPI1)->SR & (SPI_SR_TXE | SPI_SR_RXNE)) == 0 || (SPI1)->SR & SPI_SR_BSY))SPI_WAIT(SPIx); 

SPI1->DR = data; 

while(((SPI1)->SR & (SPI_SR_TXE | SPI_SR_RXNE)) == 0 || ((SPI1)->SR & SPI_SR_BSY))SPI_WAIT(SPIx); 

return SPI1->DR; 
} 
+1

あなたのセルフメイド機能を公開するには気をつけますか? あなたの関数をHALライブラリにかなり簡単にマップすることができなければなりません。 – staringlizard

+0

上記の機能が追加されました: –

答えて

0

SRYみんな私のミス、誰かがMAX31865のために働く例を必要とする場合は、そこまでのコードを取ることができます :

enter image description here

古い機能(周波数と設定は同じです)。私はコンピュータと私のHWを5分間パワーダウンし、今はHALでも作業中です。それは古いプログラムで動作したことが疑わしく、HALと再起動後の両方が動作しています...しかし、今私はHALコードが原則であることは間違っていないことを知っています。

READ_ADDRESS = 0x00 
RTD_MSB_ADDRESS = 0x01 
RTD_LSB_ADDRESS = 0x02 
+0

共有していただきありがとうございます。 – staringlizard