Сб апр 28, 2018 17:59:30
/////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////
uint8_t si_data[3];
unsigned char si4432_read(unsigned char si_addr)
{
si_addr &= 0x7F; //Add R\W bit to address
RFM_CS_LO();
HAL_SPI_Transmit(&hspi2,&si_addr,1,100);
HAL_SPI_Receive(&hspi2,si_data,1,100);
RFM_CS_HI();
return si_data[0];
}
/////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////
/* SPI2 init function */
static void MX_SPI2_Init(void)
{
hspi2.Instance = SPI2;
hspi2.Init.Mode = SPI_MODE_MASTER;
hspi2.Init.Direction = SPI_DIRECTION_2LINES;
hspi2.Init.DataSize = SPI_DATASIZE_8BIT;
hspi2.Init.CLKPolarity = SPI_POLARITY_LOW;
hspi2.Init.CLKPhase = SPI_PHASE_1EDGE;
hspi2.Init.NSS = SPI_NSS_SOFT;
hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_4;
hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB;
hspi2.Init.TIMode = SPI_TIMODE_DISABLE;
hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
hspi2.Init.CRCPolynomial = 7;
hspi2.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
hspi2.Init.NSSPMode = SPI_NSS_PULSE_ENABLE;
if (HAL_SPI_Init(&hspi2) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}
}
void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi)
{
GPIO_InitTypeDef GPIO_InitStruct;
if(hspi->Instance==SPI2)
{
/* USER CODE BEGIN SPI2_MspInit 0 */
/* USER CODE END SPI2_MspInit 0 */
/* Peripheral clock enable */
__HAL_RCC_SPI2_CLK_ENABLE();
/**SPI2 GPIO Configuration
PB14 ------> SPI2_MISO
PB15 ------> SPI2_MOSI
PD8 ------> SPI2_SCK
*/
GPIO_InitStruct.Pin = GPIO_PIN_14|GPIO_PIN_15;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_8;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
/* USER CODE BEGIN SPI2_MspInit 1 */
/* USER CODE END SPI2_MspInit 1 */
}
}
Вс апр 29, 2018 08:35:34
RFM_CS_LO();
HAL_SPI_Transmit(&hspi2,&si_addr,1,100);
HAL_SPI_Receive(&hspi2,si_data,1,100);
RFM_CS_HI();
Вс апр 29, 2018 15:57:12
RFM_CS_LO();
HAL_SPI_Transmit(&hspi2,&si_addr,1,100);
HAL_SPI_Receive(&hspi2,si_data,1,100);
RFM_CS_HI();
Чт май 03, 2018 18:55:28
volatile unsigned int si4432_read(unsigned char si_addr)
{
unsigned int si_data = 0;
si_addr &= 0x7F; //Add R\W bit to address
RFM_CS_LO();
HAL_SPI_Transmit(&hspi2,&si_addr,1,10);
HAL_SPI_Transmit(&hspi2,&si_addr,1,10);
si_data = SPI2->DR;
RFM_CS_HI();
return si_data;
}
Чт май 03, 2018 21:42:52
А если сделать так?andreivanov писал(а):Допустим мы читаем число 0x30. Так вот результат первого чтения будет 0x00000030, а результат последующих чтений - 0x00003000.
si_data = *(__IO uint8_t *)&SPI2->DR;
Пт май 04, 2018 18:41:47