CubeMX를 사용하여 주변 장치를 초기화하는 간단한 프로젝트가 있습니다.STM32F0 SPI가 인터럽트를받지 않음
SPI는 슬레이브 모드이며 올바르게 초기화 된 것처럼 보이지만 8 비트 데이터를 클럭 할 때 인터럽트는 호출되지 않습니다.
여기 spi_interrupt()
인터럽트 행동에 대한 내 특정 코드, 그리고에서 브레이크 포인트가 터지지 않 코드를
/* SPI1 init function */
static void MX_SPI1_Init(void)
{
hspi1.Instance = SPI1;
hspi1.Init.Mode = SPI_MODE_SLAVE;
hspi1.Init.Direction = SPI_DIRECTION_2LINES;
hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
hspi1.Init.NSS = SPI_NSS_SOFT;
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;
if (HAL_SPI_Init(&hspi1) != HAL_OK)
{
Error_Handler();
}
}
void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi)
{
GPIO_InitTypeDef GPIO_InitStruct;
if(hspi->Instance==SPI1)
{
/* USER CODE BEGIN SPI1_MspInit 0 */
/* USER CODE END SPI1_MspInit 0 */
/* Peripheral clock enable */
__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_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF0_SPI1;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/* Peripheral interrupt init */
HAL_NVIC_SetPriority(SPI1_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(SPI1_IRQn);
/* USER CODE BEGIN SPI1_MspInit 1 */
/* USER CODE END SPI1_MspInit 1 */
}
}
void SPI1_IRQHandler(void)
{
/* USER CODE BEGIN SPI1_IRQn 0 */
/* USER CODE END SPI1_IRQn 0 */
HAL_SPI_IRQHandler(&hspi1);
/* USER CODE BEGIN SPI1_IRQn 1 */
spi_interrupt();
/* USER CODE END SPI1_IRQn 1 */
}
을합니다.
나는 CLKIN 핀에 스코프를 가지고 있으며, 확실히 8 클럭을 가지고있다.
코드의 어디에서나 HAL_SPI_Receive_IT를 호출 했습니까? 실제로 인터럽트를 활성화하기 위해서 당신은이 매크로를 호출해야하기 때문에'HAL_SPI_ENABLE_IT (hspi, (SPI_IT_RXNE | SPI_IT_ERR));'HAL_SPI_Receive_IT' 함수가 그것을 호출하고 IRQ 핸들러는 주어진 바이트 수가 수신 된 후에 IRQ 핸들러를 비활성화시킵니다. –
Bence의 정확한 해결책은 고맙습니다. – OXO
여기에 다행이 오니, 다음 질문에 답해 드리겠습니다. –