各位好,切换HAL库以后以前熟悉的很多操作方法不会用了,HAL库下面不知道如何使用SPI从机的中断接收,请各位赐教。
最好有实现成功的例子提供参考一下,
void AD_SPI2_Init(void)
{
GPIO_InitTypeDef GPIO_Initure;
__HAL_RCC_GPIOC_CLK_ENABLE(); //使能GPIOC时钟
__HAL_RCC_GPIOD_CLK_ENABLE(); //使能GPIOD时钟
GPIO_Initure.Pin=GPIO_PIN_2|GPIO_PIN_3; //MISO
GPIO_Initure.Mode=GPIO_MODE_AF_PP; //复用
GPIO_Initure.Pull=GPIO_PULLUP;
GPIO_Initure.Speed=GPIO_SPEED_HIGH; //高速
HAL_GPIO_Init(GPIOC,&GPIO_Initure);
GPIO_Initure.Pin=GPIO_PIN_3; //CLK输入
GPIO_Initure.Mode=GPIO_MODE_AF_PP; //复用
GPIO_Initure.Pull=GPIO_PULLUP;
GPIO_Initure.Speed=GPIO_SPEED_HIGH; //高速
HAL_GPIO_Init(GPIOD,&GPIO_Initure);
SPI2_Handler.Instance = SPI2;
SPI2_Handler.Init.Mode = SPI_MODE_SLAVE;
SPI2_Handler.Init.Direction = SPI_DIRECTION_2LINES_RXONLY;
SPI2_Handler.Init.DataSize = SPI_DATASIZE_16BIT;
SPI2_Handler.Init.CLKPolarity = SPI_POLARITY_HIGH;
SPI2_Handler.Init.CLKPhase = SPI_PHASE_2EDGE;
SPI2_Handler.Init.NSS = SPI_NSS_SOFT;
SPI2_Handler.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;
SPI2_Handler.Init.FirstBit = SPI_FIRSTBIT_MSB;
SPI2_Handler.Init.TIMode = SPI_TIMODE_DISABLE;
SPI2_Handler.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
SPI2_Handler.Init.CRCPolynomial = 7;
SPI2_Handler.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
SPI2_Handler.Init.NSSPMode = SPI_NSS_PULSE_DISABLE;
if (HAL_SPI_Init(&SPI2_Handler) != HAL_OK)
{
//Error_Handler();
}
HAL_SPI_Receive_IT(&SPI2_Handler, SPI2_RxBuf, 100); 此处不知如何设置了,我只是单纯从模式接收,它这个库里面仍然有发送操作
HAL_NVIC_SetPriority(SPI2_IRQn,2,5);
HAL_NVIC_EnableIRQ(SPI2_IRQn);
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>