[역] SPI 통신 중 선택 신호에 대한 선택 SPINSS_SOFT 및 SPINSS_HARD_OUTPUT 및 SPINSS_HARD_INPUT

1706 단어 Embedded
아래의 문장은 외부 인터넷에서 번역하여 삭제하였다.
ST 공식 코드에서 SPI는 일반적으로 다음과 같은 Init structure로 구성됩니다.
hspi1.Instance = SPI1; hspi1.Init.Mode = SPI_MODE_MASTER; hspi1.Init.Direction = SPI_DIRECTION_2LINES;//SPI 듀플렉스 설정, 사실 ST가 어떻게 생각하는지 몰라요.Init.DataSize = SPI_DATASIZE_8BIT; hspi1.Init.CLKPolarity = SPI_POLARITY_HIGH; hspi1.Init.CLKPhase = SPI_PHASE_2EDGE;/----------------------------------------------------------/hspi1.Init.NSS = SPI_NSS_SOFT;//spi를 마스터에 설정하면 NSS는 일반 IO로 사용자가 직접 코드 제어 필름을 작성하여 선택할 수 있으며 주로 hspi1에서 선택할 수 있습니다.Init.NSS = SPI_NSS_HARD_OUTPUT;//spi를 마스터에 설정하면 NSS는 SPI 전용 IO로 MCU가 자동으로 필름 선택을 제어하고 주 1은 hspi1에서 1까지만 가능합니다.Init.NSS = SPI_NSS_HARD_INPUT;//spi 설정이 slave에서 선택한 항목으로만/------------------------------------------------------------------/hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8; hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; hspi1.Init.TIMode = SPI_TIMODE_DISABLE; hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; hspi1.Init.CRCPolynomial = 7; hspi1.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE; hspi1.Init.NSSPMode = SPI_NSS_PULSE_DISABLE;
Transmit sequence: SPI_NSS_HARD_OUTPUT 모드:
HAL_SPI_TransmitReceive( &hspi1, btx, brx, l, 5 ); // timeout 5msec;
while( hspi1.State == HAL_SPI_STATE_BUSY );  // wait for xmission complete

So I decided setting the pin manually using GPIO (using SPI_NSS_SOFT in init): SPI_NSS_SOFT 모드:
HAL_GPIO_WritePin( NSS1_GPIO_Port, NSS1_Pin, GPIO_PIN_RESET ); // NSS1 low
HAL_SPI_TransmitReceive( &hspi1, btx, brx, l, 5 ); // timeout 5msec;
while( hspi1.State == HAL_SPI_STATE_BUSY );  // wait xmission complete
HAL_GPIO_WritePin( NSS1_GPIO_Port, NSS1_Pin, GPIO_PIN_SET ); // NSS1 high

좋은 웹페이지 즐겨찾기