コード例 #1
0
ファイル: spi2.c プロジェクト: hampussandberg/HexConnect
/**
 * @brief
 * @param   None
 * @retval  None
 */
ErrorStatus SPI2_DeInit()
{
  if (HAL_SPI_DeInit(&SPI_Handle) != HAL_OK)
    return ERROR;
  else
    return SUCCESS;
}
コード例 #2
0
/**
  * @brief  SPIx error treatment function.
  * @param  None
  * @retval None
  */
static void SPIx_Error(void)
{
  /* De-initialize the SPI comunication bus */
  HAL_SPI_DeInit(&SpiHandle);
  
  /* Re-Initiaize the SPI comunication bus */
  SPIx_Init();
}
コード例 #3
0
ファイル: stm32l073z_eval.c プロジェクト: S4mw1s3/Nucleo32
/**
  * @brief SPI error treatment function
  * @param None
  * @retval None
  */
static void SPIx_Error (void)
{
  /* De-initialize the SPI communication BUS */
  HAL_SPI_DeInit(&heval_Spi);
  
  /* Re- Initiaize the SPI communication BUS */
  SPIx_Init();
}
コード例 #4
0
/**
  * @brief  SPI error treatment function.
  * @param  None
  * @retval None
  */
 void SPI1_Error (void)
{
  /* De-Initialize the SPI comunication BUS */
  HAL_SPI_DeInit(&SpiHandle);

  /* Re-Initiaize the SPI comunication BUS */
  SPI1_Init();
}
コード例 #5
0
ファイル: spi-board.c プロジェクト: ARMmbed/LoRaMac-node
void SpiDeInit( Spi_t *obj )
{
    HAL_SPI_DeInit( &obj->Spi );

    GpioInit( &obj->Mosi, obj->Mosi.pin, PIN_OUTPUT, PIN_PUSH_PULL, PIN_NO_PULL, 0 );
    GpioInit( &obj->Miso, obj->Miso.pin, PIN_OUTPUT, PIN_PUSH_PULL, PIN_PULL_DOWN, 0 );
    GpioInit( &obj->Sclk, obj->Sclk.pin, PIN_OUTPUT, PIN_PUSH_PULL, PIN_NO_PULL, 0 );
    GpioInit( &obj->Nss, obj->Nss.pin, PIN_OUTPUT, PIN_PUSH_PULL, PIN_PULL_UP, 1 );
}
コード例 #6
0
/**
  * @brief This function is implemented to deinitialize the SPI interface
  *        (IOs + SPI block)
  * @param  obj : pointer to spi_t structure
  * @retval None
  */
void spi_deinit(spi_t *obj)
{
  if(obj == NULL)
    return;

  SPI_HandleTypeDef *handle = &(obj->handle);

  HAL_SPI_DeInit(handle);

#if defined SPI1_BASE
  // Reset SPI and disable clock
  if (handle->Instance == SPI1) {
      __HAL_RCC_SPI1_FORCE_RESET();
      __HAL_RCC_SPI1_RELEASE_RESET();
      __HAL_RCC_SPI1_CLK_DISABLE();
  }
#endif
#if defined SPI2_BASE
  if (handle->Instance == SPI2) {
      __HAL_RCC_SPI2_FORCE_RESET();
      __HAL_RCC_SPI2_RELEASE_RESET();
      __HAL_RCC_SPI2_CLK_DISABLE();
  }
#endif

#if defined SPI3_BASE
  if (handle->Instance == SPI3) {
      __HAL_RCC_SPI3_FORCE_RESET();
      __HAL_RCC_SPI3_RELEASE_RESET();
      __HAL_RCC_SPI3_CLK_DISABLE();
  }
#endif

#if defined SPI4_BASE
  if (handle->Instance == SPI4) {
      __HAL_RCC_SPI4_FORCE_RESET();
      __HAL_RCC_SPI4_RELEASE_RESET();
      __HAL_RCC_SPI4_CLK_DISABLE();
  }
#endif

#if defined SPI5_BASE
  if (handle->Instance == SPI5) {
      __HAL_RCC_SPI5_FORCE_RESET();
      __HAL_RCC_SPI5_RELEASE_RESET();
      __HAL_RCC_SPI5_CLK_DISABLE();
  }
#endif

#if defined SPI6_BASE
  if (handle->Instance == SPI6) {
      __HAL_RCC_SPI6_FORCE_RESET();
      __HAL_RCC_SPI6_RELEASE_RESET();
      __HAL_RCC_SPI6_CLK_DISABLE();
  }
#endif
}
コード例 #7
0
ファイル: Panel.c プロジェクト: Sasha7b9/Osci
//------------------------------------------------------------------------------------------------------------------------------------------------------
void HAL_SPI_RxCpltCallback(SPI_HandleTypeDef* handleSPI)
{
    if (!Panel_ProcessingCommandFromPIC(dataSPIfromPanel))
    {
        HAL_SPI_DeInit(handleSPI);
        HAL_SPI_Init(handleSPI);
    }

    SPI1->DR = Panel_NextData();
}
コード例 #8
0
// ***** GP22 - Hardware Setup
uint8_t gp22_hw_setup()
{
  GPIO_InitTypeDef GPIO_InitStruct;
  HAL_SPI_StateTypeDef spi_status;


  // Init INT-Pin
  GPIO_InitStruct.Pin = GP22_INT_PIN;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
  HAL_GPIO_Init(GP22_INT_PORT, &GPIO_InitStruct);
  GP22_INT_CLK_ENABLE();

  // Init CS-Pin
  GPIO_InitStruct.Pin = GP22_CS_PIN;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull  = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FAST;
  HAL_GPIO_Init(GP22_CS_PORT, &GPIO_InitStruct);
  GP22_CS_CLK_ENABLE();
  GP22_CS_HIGH();

  // Init RESET-Pin
  GPIO_InitStruct.Pin = GP22_RESET_PIN;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull  = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FAST;
  HAL_GPIO_Init(GP22_RESET_PORT, &GPIO_InitStruct);
  GP22_RESET_CLK_ENABLE();
  GP22_RESET_LOW();

  // Init SPI
  hGP22_SPI.Instance = GP22_SPI;
  hGP22_SPI.Init.BaudRatePrescaler = GP22_SPI_PRESCALER;
  hGP22_SPI.Init.Direction = SPI_DIRECTION_2LINES;
  hGP22_SPI.Init.CLKPhase = SPI_PHASE_2EDGE;
  hGP22_SPI.Init.CLKPolarity = SPI_POLARITY_LOW;
  hGP22_SPI.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLED;
  hGP22_SPI.Init.CRCPolynomial = 7;
  hGP22_SPI.Init.DataSize = SPI_DATASIZE_8BIT;
  hGP22_SPI.Init.FirstBit = SPI_FIRSTBIT_MSB;
  hGP22_SPI.Init.NSS = SPI_NSS_SOFT;
  hGP22_SPI.Init.TIMode = SPI_TIMODE_DISABLED;
  hGP22_SPI.Init.Mode = SPI_MODE_MASTER;

  spi_status = HAL_SPI_GetState(&hGP22_SPI);
  if (spi_status != HAL_SPI_STATE_RESET)
  {
    hal_status = HAL_SPI_DeInit(&hGP22_SPI);
  }
  hal_status = HAL_SPI_Init(&hGP22_SPI);

  return hal_status;
}
コード例 #9
0
ファイル: spi_flash.c プロジェクト: meisteg/muc-loader
static void Error_Handler(SPI_HandleTypeDef *hspi)
{
    wTransferState = TRANSFER_ERROR;
    /* reset spi */
    mods_muc_set_spi1_cs(PIN_SET);
    HAL_SPI_DeInit(hspi);
    dbgprint("SPI Flash DeInit\r\n");
    device_spi_flash_init(hspi);
    dbgprint("SPI Flash Re-Init\r\n");
    memset(aTxBuffer_spiFlash, 0, MAX_DMA_BUF_SIZE);
    memset(aRxBuffer_spiFlash, 0, MAX_DMA_BUF_SIZE);
}
コード例 #10
0
ファイル: spi_api.c プロジェクト: ARMmbed/mbed-hal-st-stm32f4
void spi_abort_asynch(spi_t *obj)
{
    // diable interrupt
    vIRQ_DisableIRQ(SpiIRQs[obj->spi.module]);

    // clean-up
    SPI_HandleTypeDef *handle = &SpiHandle[obj->spi.module];
    __HAL_SPI_DISABLE(handle);
    HAL_SPI_DeInit(handle);
    HAL_SPI_Init(handle);
    __HAL_SPI_ENABLE(handle);
}
コード例 #11
0
ファイル: stm_spi_api.c プロジェクト: SolarTeamEindhoven/mbed
void spi_abort_asynch(spi_t *obj)
{
    struct spi_s *spiobj = SPI_S(obj);
    SPI_HandleTypeDef *handle = &(spiobj->handle);

    // disable interrupt
    IRQn_Type irq_n = spiobj->spiIRQ;
    NVIC_ClearPendingIRQ(irq_n);
    NVIC_DisableIRQ(irq_n);

    // clean-up
    __HAL_SPI_DISABLE(handle);
    HAL_SPI_DeInit(handle);
    HAL_SPI_Init(handle);
    __HAL_SPI_ENABLE(handle);
}
コード例 #12
0
void spiSetDivisor(SPI_TypeDef *instance, uint16_t divisor)
{
    SPIDevice device = spiDeviceByInstance(instance);
    if (HAL_SPI_DeInit(&spiHardwareMap[device].hspi) == HAL_OK)
    {
    }

    switch (divisor) {
    case 2:
        spiHardwareMap[device].hspi.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;
        break;

    case 4:
        spiHardwareMap[device].hspi.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_4;
        break;

    case 8:
        spiHardwareMap[device].hspi.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8;
        break;

    case 16:
        spiHardwareMap[device].hspi.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16;
        break;

    case 32:
        spiHardwareMap[device].hspi.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32;
        break;

    case 64:
        spiHardwareMap[device].hspi.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_64;
        break;

    case 128:
        spiHardwareMap[device].hspi.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_128;
        break;

    case 256:
        spiHardwareMap[device].hspi.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256;
        break;
    }

    if (HAL_SPI_Init(&spiHardwareMap[device].hspi) == HAL_OK)
    {
    }
}
コード例 #13
0
ファイル: bus_spi_hal.c プロジェクト: mmiers/betaflight
void spiSetDivisor(SPI_TypeDef *instance, uint16_t divisor)
{
    SPI_HandleTypeDef *Handle = &spiHandle[spiDeviceByInstance(instance)].Handle;
    if (HAL_SPI_DeInit(Handle) == HAL_OK)
    {
    }

    switch (divisor) {
    case 2:
        Handle->Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;
        break;

    case 4:
        Handle->Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_4;
        break;

    case 8:
        Handle->Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8;
        break;

    case 16:
        Handle->Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16;
        break;

    case 32:
        Handle->Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32;
        break;

    case 64:
        Handle->Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_64;
        break;

    case 128:
        Handle->Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_128;
        break;

    case 256:
        Handle->Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256;
        break;
    }

    if (HAL_SPI_Init(Handle) == HAL_OK)
    {
    }
}
コード例 #14
0
uint8_t gp22_spi_reconfig(SPI_HandleTypeDef *hspi)
{
  HAL_SPI_DeInit(hspi);

  hspi->Instance = GP22_SPI;
  hspi->Init.BaudRatePrescaler = GP22_SPI_PRESCALER;
  hspi->Init.Direction = SPI_DIRECTION_2LINES;
  hspi->Init.CLKPhase = SPI_PHASE_2EDGE;
  hspi->Init.CLKPolarity = SPI_POLARITY_LOW;
  hspi->Init.CRCCalculation = SPI_CRCCALCULATION_DISABLED;
  hspi->Init.CRCPolynomial = 7;
  hspi->Init.DataSize = SPI_DATASIZE_8BIT;
  hspi->Init.FirstBit = SPI_FIRSTBIT_MSB;
  hspi->Init.NSS = SPI_NSS_SOFT;
  hspi->Init.TIMode = SPI_TIMODE_DISABLED;
  hspi->Init.Mode = SPI_MODE_MASTER;

  return HAL_SPI_Init(hspi);
}
コード例 #15
0
/**
  * @brief  Set LIS3DSH Initialization.
  * @param  LIS3DSH_Config_Struct: pointer to a LIS3DSH_Config_TypeDef structure
  *         that contains the configuration setting for the LIS3DSH.
  * @retval None
  */
void LIS3DSH_Init(LIS3DSH_InitTypeDef *LIS3DSH_InitStruct)
{
  uint8_t ctrl = 0x00;

  /* Configure the low level interface ---------------------------------------*/
	  /* SPI configuration -------------------------------------------------------*/
	__HAL_RCC_SPI1_CLK_ENABLE();
	
  HAL_SPI_DeInit(&SpiHandle);
  SpiHandle.Instance 							  = SPI1;
  SpiHandle.Init.BaudRatePrescaler 	= SPI_BAUDRATEPRESCALER_4;
  SpiHandle.Init.Direction 					= SPI_DIRECTION_2LINES;
  SpiHandle.Init.CLKPhase 					= SPI_PHASE_1EDGE;
  SpiHandle.Init.CLKPolarity 				= SPI_POLARITY_LOW;
  SpiHandle.Init.CRCCalculation			= SPI_CRCCALCULATION_DISABLED;
  SpiHandle.Init.CRCPolynomial 			= 7;
  SpiHandle.Init.DataSize 					= SPI_DATASIZE_8BIT;
  SpiHandle.Init.FirstBit 					= SPI_FIRSTBIT_MSB;
  SpiHandle.Init.NSS 								= SPI_NSS_SOFT;
  SpiHandle.Init.TIMode 						= SPI_TIMODE_DISABLED;
  SpiHandle.Init.Mode 							= SPI_MODE_MASTER;
	if (HAL_SPI_Init(&SpiHandle) != HAL_OK) {printf ("ERROR: Error in initialising SPI1 \n");};
  
	__HAL_SPI_ENABLE(&SpiHandle);
  
	/* Configure MEMS: data rate, update mode and axes */
  ctrl = (uint8_t) (LIS3DSH_InitStruct->Power_Mode_Output_DataRate | \
										LIS3DSH_InitStruct->Continous_Update           | \
										LIS3DSH_InitStruct->Axes_Enable);


  /* Write value to MEMS CTRL_REG4 regsister */
  LIS3DSH_Write(&ctrl, LIS3DSH_CTRL_REG4, 1);

	/* Configure MEMS: Anti-aliasing filter, full scale, self test  */
	ctrl = (uint8_t) (LIS3DSH_InitStruct->AA_Filter_BW | \
										LIS3DSH_InitStruct->Full_Scale   | \
										LIS3DSH_InitStruct->Self_Test);

	/* Write value to MEMS CTRL_REG5 regsister */
	LIS3DSH_Write(&ctrl, LIS3DSH_CTRL_REG5, 1);
}
コード例 #16
0
ファイル: spi.cpp プロジェクト: jaggies/matchbox
Spi::~Spi() {
    HAL_SPI_DeInit(&_spi);
    HAL_NVIC_DisableIRQ(irqMap[_bus]);
    spiMap[_bus] = NULL; // mark unused
}
コード例 #17
0
void processCommand(){
	uint32_t lengthTxData = 0;
	uint32_t addr = 0;
	uint32_t i;
	uint32_t temp;
	//At minimun resent length of trame and command name (minimun header)
	//Data_buffer_Transmit[0] = 0; //Low byte of length  set in  sendAndWaitIfNotReadyAndValidCommand before send
	//Data_buffer_Transmit[1] = 0; // High byte of length set in  sendAndWaitIfNotReadyAndValidCommand before send
	Data_buffer_Transmit[2] = rx_raw_Frame[2]; //at minimum, answer is Low byte of command
	Data_buffer_Transmit[3] = rx_raw_Frame[3]; //at minimum, answer is Hight byte of command

switch (lowHighByteToInt(rx_raw_Frame[2],rx_raw_Frame[3])  ){
		case FPGA_COMMAND :
			receiveRawDataFromFPGABySPI[2] = LOBYTE(FPGA_DATA);
			receiveRawDataFromFPGABySPI[3] = HIBYTE(FPGA_DATA);
			HAL_SPI_Receive_DMA(&hspi1, *(&receiveRawDataFromFPGABySPI) + 4, 8186 ); //Offset + 4   lenght & command type
			lengthTxData = 	lowHighByteToInt(rx_raw_Frame[0],rx_raw_Frame[1]); //resend same length to receive the answer of SPI COMMAND

			//Cs low to start spi
			HAL_GPIO_WritePin(GPIOC,GPIO_PIN_9,0);
  		    HAL_SPI_Transmit_DMA(&hspi3,*(&rx_raw_Frame)+4, lengthTxData-4);

		  break;

		  case LOOPBACK :

 			//Copy frame in tx buffer to send the same thing just a loopback for testing purpose
 			memcpy (Data_buffer_Transmit,rx_raw_Frame,rx_raw_FrameLen);

 			mustValidCommandAfterSend = 1;
 			sendUSB(Data_buffer_Transmit,rx_raw_FrameLen);
 			//endProcessCommandAllowReceiveAgain();
 			//sendAndWaitIfNotReady(rx_raw_FrameLen);

	 	 break;
		 case LED1 :
				Data_buffer_Transmit[4] = rx_raw_Frame[4];  //resend value of led
		 		lengthTxData = 4+1;  //increment length because send a value of led


		 		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_9,rx_raw_Frame[4] & 1 ); //Change value of led

		 		//sendAndWaitIfNotReadyAndValidCommand(lengthTxData);
		 		//If you don't want answer just
		 		endProcessCommandAllowReceiveAgain();
		 break;
		 case LED2 :
				Data_buffer_Transmit[4] = rx_raw_Frame[4] ; //resend value of led
				lengthTxData = 4 + 1;  //increment length because send a value of led



				HAL_GPIO_WritePin(GPIOA,GPIO_PIN_10,rx_raw_Frame[4] & 1 );//Change value of led
				//sendAndWaitIfNotReadyAndValidCommand(lengthTxData);
				//If you don't want answer just
				endProcessCommandAllowReceiveAgain();
		 break;
		 	case START_FPGA :

		 		HAL_SPI_DeInit(&hspi2);

				//Nce FPGA   enable
				HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,0);

				//short pulse nconfig on release reconfigure fpga
				//HAL_GPIO_WritePin(GPIOC,GPIO_PIN_0,0);
				Delay(1000);
				HAL_GPIO_WritePin(GPIOC,GPIO_PIN_0,1);

				Delay(5000);

				//Restart SPI1 to receive data from FPGA
				__SPI1_RELEASE_RESET();
				MX_SPI1_Init();

				endProcessCommandAllowReceiveAgain();

		 	break;
		 	case STOP_FPGA :
		 		//Stop SPI1  ( receive data from FPGA)
		 		//To avoid some problem, when reset fpga (upload) 100ns pulse generate fake edge and shift (1bit) the reveived data
		 		__SPI1_FORCE_RESET();

		 		//HAL_SPI_MspDeInit(&hspi1);
		 		//Nce FPGA   disable
				HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,1);
				//nconfig on release reconfigure fpga
				HAL_GPIO_WritePin(GPIOC,GPIO_PIN_0,0);

				Delay(5000); //wait to be sure that the fpga was stopped

				MX_SPI2_Init();
				sFLASH_READID(); //Must read ID to wake up the memory
				Delay(5000);
				//HAL_SPI_MspInit(&hspi1);
				endProcessCommandAllowReceiveAgain();

		 	break;

		 	case ERASE_FIRMWARE :
		 		Data_buffer_Transmit[4] = 1;
		 		lengthTxData =   4 + 1;  //increment length because send a value (1=ok)
		 		//sFLASH_ERASE_BULK(); //slow replaced by just erasing 2 sectors
		 		sFLASH_ERASE();
		 		mustValidCommandAfterSend = 1;
		 		sendUSB(Data_buffer_Transmit,lengthTxData);

		 	break;
		 	case READ_PAGE_FIRMWARE :

		 		if (rx_raw_Frame[6] <= 31) {//Just check number of page if not less than 31 do nothing
		 			lengthTxData =   (uint32_t)rx_raw_Frame[6] * 256;

		 			Data_buffer_Transmit[4] = rx_raw_Frame[4]; //low byte Number of the first page
		 			Data_buffer_Transmit[5] = rx_raw_Frame[5]; //high byte Number of the first page
		 			Data_buffer_Transmit[6] = rx_raw_Frame[6]; //Nb of page

		 			addr=lowHighByteToInt(rx_raw_Frame[4],rx_raw_Frame[5])*256;
					sFLASH_Read(*(&Data_buffer_Transmit)+7,addr,lengthTxData);

					mustValidCommandAfterSend = 1;
					sendUSB(Data_buffer_Transmit,lengthTxData+7);

		 		}else{
		 			Data_buffer_Transmit[2] = LOBYTE(COMMAND_NOT_FOUND);
		 			Data_buffer_Transmit[3] = HIBYTE(COMMAND_NOT_FOUND);
		 			mustValidCommandAfterSend = 1;
		 			sendUSB(Data_buffer_Transmit,4);
		 		}

		 	break;
		 	case WRITE_PAGE_FIRMWARE :
		 		//Data_buffer_Transmit[4] = rx_raw_Frame[4]; //low byte Number of the first page
		 		//Data_buffer_Transmit[5] = rx_raw_Frame[5]; //high byte Number of the first page
		 		//Data_buffer_Transmit[6] = rx_raw_Frame[6]; //Nb of page  (31 max)

	 			addr=lowHighByteToInt(rx_raw_Frame[4],rx_raw_Frame[5])*256;
		 		for (int i=0;i< rx_raw_Frame[6];i++){
		 			sFLASH_WritePage(*(&rx_raw_Frame)+7+i*256,addr+i*256,256);
		 		}

		 		endProcessCommandAllowReceiveAgain();

		 	break;

		 	case GET_VERSION_NUMBER :
					lengthTxData = 18;
					memcpy(&Data_buffer_Transmit[4],&versionNumber,lengthTxData);
					mustValidCommandAfterSend = 1;
					sendUSB(Data_buffer_Transmit,lengthTxData+4);
			break;


		 	default:
				//mustValidCommandAfterSend = 1;
				//sendAndWaitIfNotReady(lengthTxData);
				//If you don't want answer just
				endProcessCommandAllowReceiveAgain();


	}
}
コード例 #18
0
ファイル: stm_spi_api.c プロジェクト: SolarTeamEindhoven/mbed
void spi_free(spi_t *obj)
{
    struct spi_s *spiobj = SPI_S(obj);
    SPI_HandleTypeDef *handle = &(spiobj->handle);

    DEBUG_PRINTF("spi_free\r\n");

    __HAL_SPI_DISABLE(handle);
    HAL_SPI_DeInit(handle);

#if defined SPI1_BASE
    // Reset SPI and disable clock
    if (spiobj->spi == SPI_1) {
        __HAL_RCC_SPI1_FORCE_RESET();
        __HAL_RCC_SPI1_RELEASE_RESET();
        __HAL_RCC_SPI1_CLK_DISABLE();
    }
#endif
#if defined SPI2_BASE
    if (spiobj->spi == SPI_2) {
        __HAL_RCC_SPI2_FORCE_RESET();
        __HAL_RCC_SPI2_RELEASE_RESET();
        __HAL_RCC_SPI2_CLK_DISABLE();
    }
#endif

#if defined SPI3_BASE
    if (spiobj->spi == SPI_3) {
        __HAL_RCC_SPI3_FORCE_RESET();
        __HAL_RCC_SPI3_RELEASE_RESET();
        __HAL_RCC_SPI3_CLK_DISABLE();
    }
#endif

#if defined SPI4_BASE
    if (spiobj->spi == SPI_4) {
        __HAL_RCC_SPI4_FORCE_RESET();
        __HAL_RCC_SPI4_RELEASE_RESET();
        __HAL_RCC_SPI4_CLK_DISABLE();
    }
#endif

#if defined SPI5_BASE
    if (spiobj->spi == SPI_5) {
        __HAL_RCC_SPI5_FORCE_RESET();
        __HAL_RCC_SPI5_RELEASE_RESET();
        __HAL_RCC_SPI5_CLK_DISABLE();
    }
#endif

#if defined SPI6_BASE
    if (spiobj->spi == SPI_6) {
        __HAL_RCC_SPI6_FORCE_RESET();
        __HAL_RCC_SPI6_RELEASE_RESET();
        __HAL_RCC_SPI6_CLK_DISABLE();
    }
#endif

    // Configure GPIOs
    pin_function(spiobj->pin_miso, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0));
    pin_function(spiobj->pin_mosi, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0));
    pin_function(spiobj->pin_sclk, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0));
    if (handle->Init.NSS != SPI_NSS_SOFT) {
        pin_function(spiobj->pin_ssel, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0));
    }
}
コード例 #19
0
ファイル: spi_api.c プロジェクト: GvoOjeda/mbed
void spi_free(spi_t *obj) {
    SpiHandle.Instance = (SPI_TypeDef *)(obj->spi);
    HAL_SPI_DeInit(&SpiHandle);
}
コード例 #20
0
ファイル: bus_spi_hal.c プロジェクト: mmiers/betaflight
void spiInitDevice(SPIDevice device)
{
    static SPI_InitTypeDef spiInit;
    spiDevice_t *spi = &(spiHardwareMap[device]);


#ifdef SDCARD_SPI_INSTANCE
    if (spi->dev == SDCARD_SPI_INSTANCE) {
        spi->leadingEdge = true;
    }
#endif
#ifdef RX_SPI_INSTANCE
    if (spi->dev == RX_SPI_INSTANCE) {
        spi->leadingEdge = true;
    }
#endif

    // Enable SPI clock
    RCC_ClockCmd(spi->rcc, ENABLE);
    RCC_ResetCmd(spi->rcc, ENABLE);

    IOInit(IOGetByTag(spi->sck),  OWNER_SPI, RESOURCE_SPI_SCK,  device + 1);
    IOInit(IOGetByTag(spi->miso), OWNER_SPI, RESOURCE_SPI_MISO, device + 1);
    IOInit(IOGetByTag(spi->mosi), OWNER_SPI, RESOURCE_SPI_MOSI, device + 1);

#if defined(STM32F3) || defined(STM32F4) || defined(STM32F7)
    IOConfigGPIOAF(IOGetByTag(spi->sck),  SPI_IO_AF_CFG, spi->af);
    IOConfigGPIOAF(IOGetByTag(spi->miso), SPI_IO_AF_CFG, spi->af);
    IOConfigGPIOAF(IOGetByTag(spi->mosi), SPI_IO_AF_CFG, spi->af);

    if (spi->nss) {
        IOConfigGPIOAF(IOGetByTag(spi->nss), SPI_IO_CS_CFG, spi->af);
    }
#endif
#if defined(STM32F10X)
    IOConfigGPIO(IOGetByTag(spi->sck), SPI_IO_AF_SCK_CFG);
    IOConfigGPIO(IOGetByTag(spi->miso), SPI_IO_AF_MISO_CFG);
    IOConfigGPIO(IOGetByTag(spi->mosi), SPI_IO_AF_MOSI_CFG);

    if (spi->nss) {
        IOConfigGPIO(IOGetByTag(spi->nss), SPI_IO_CS_CFG);
    }
#endif
    SPI_HandleTypeDef Handle;
    Handle.Instance = spi->dev;
    // Init SPI hardware
    HAL_SPI_DeInit(&Handle);

    spiInit.Mode = SPI_MODE_MASTER;
    spiInit.Direction = SPI_DIRECTION_2LINES;
    spiInit.DataSize = SPI_DATASIZE_8BIT;
    spiInit.NSS = SPI_NSS_SOFT;
    spiInit.FirstBit = SPI_FIRSTBIT_MSB;
    spiInit.CRCPolynomial = 7;
    spiInit.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256;
    spiInit.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
    spiInit.TIMode = SPI_TIMODE_DISABLED;

    if (spi->leadingEdge) {
        spiInit.CLKPolarity = SPI_POLARITY_LOW;
        spiInit.CLKPhase = SPI_PHASE_1EDGE;
    }
    else {
        spiInit.CLKPolarity = SPI_POLARITY_HIGH;
        spiInit.CLKPhase = SPI_PHASE_2EDGE;
    }

    Handle.Init = spiInit;
#ifdef STM32F303xC
    // Configure for 8-bit reads.
    SPI_RxFIFOThresholdConfig(spi->dev, SPI_RxFIFOThreshold_QF);
#endif

    if (HAL_SPI_Init(&Handle) == HAL_OK)
    {
        spiHandle[device].Handle = Handle;
        if (spi->nss) {
            IOHi(IOGetByTag(spi->nss));
        }
    }
}
コード例 #21
0
/*********************************************************************
 * @fn		 SPI1_DeInit
 *
 * @brief
 *
 * @param 	None
 *
 * @return	void
 */
 void SPI1_DeInit( void )
{
	HAL_SPI_DeInit(&SpiHandle);
	SPI1_DeMspInit(&SpiHandle);
}
コード例 #22
0
ファイル: oxc_spi.cpp プロジェクト: atu-guda/stm32oxc
void DevSPI::deInit()
{
  __HAL_SPI_DISABLE( spi );
  HAL_SPI_DeInit( spi );
  last_rc = HAL_OK; last_err = 0;
}