以前用标准库,SPI无非用到的库函数就是,初始化,使能SPI,使能SPI中断,SPI发送接收函数。
现在试着用HAL库,结果找不到SPI使能函数,有发送、接收、发送并接收三个函数...
在这三个函数里,发现了SPI使能的宏定义,好像完成发送或接收SPI数据后,并没有调用管段SPI功能的宏。
我是用到了SPI的从模式,想在外部某个引脚得到信号后,开启SPI接收中断,外部引脚丢失信号后,关断SPI接收中断。
现在不知道该怎么写了。
HAL_SPI_Transmit_IT()、HAL_SPI_Receive_IT()、HAL_SPI_TransmitReceive_IT()这三个函数,都是在函数体里自动开启了SPI中断。实在是看不懂这三个函数应该在什么情况下用。
void HAL_SPI_IRQHandler(SPI_HandleTypeDef *hspi)函数,没有像串口或定时器或外部中断函数那样,里面没有回掉函数。难道是直接在这个中断函数里写自己的程序部分?
附
STM32_hal_spi.h
HAL_StatusTypeDef HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t
timeout);
HAL_StatusTypeDef HAL_SPI_Receive(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout);
HAL_StatusTypeDef HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size, uint32_t Timeout);
HAL_StatusTypeDef HAL_SPI_Transmit_IT(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size);
HAL_StatusTypeDef HAL_SPI_Receive_IT(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size);
HAL_StatusTypeDef HAL_SPI_TransmitReceive_IT(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size);
HAL_StatusTypeDef HAL_SPI_Transmit_DMA(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size);
HAL_StatusTypeDef HAL_SPI_Receive_DMA(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size);
HAL_StatusTypeDef HAL_SPI_TransmitReceive_DMA(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size);
HAL_StatusTypeDef HAL_SPI_DMAPause(SPI_HandleTypeDef *hspi);
HAL_StatusTypeDef HAL_SPI_DMAResume(SPI_HandleTypeDef *hspi);
HAL_StatusTypeDef HAL_SPI_DMAStop(SPI_HandleTypeDef *hspi);
void HAL_SPI_IRQHandler(SPI_HandleTypeDef *hspi);
void HAL_SPI_TxCpltCallback(SPI_HandleTypeDef *hspi);
void HAL_SPI_RxCpltCallback(SPI_HandleTypeDef *hspi);
void HAL_SPI_TxRxCpltCallback(SPI_HandleTypeDef *hspi);
void HAL_SPI_ErrorCallback(SPI_HandleTypeDef *hspi);
void HAL_SPI_TxHalfCpltCallback(SPI_HandleTypeDef *hspi);
void HAL_SPI_RxHalfCpltCallback(SPI_HandleTypeDef *hspi);
void HAL_SPI_TxRxHalfCpltCallback(SPI_HandleTypeDef *hspi);
建议看一下Cube里自带的例程
目录里“...ExamplesSPI”下有例程
好奇的是void HAL_SPI_IRQHandler(SPI_HandleTypeDef *hspi);这个函数没有调用回调函数。
本帖最后由 党国特派员 于 2016-11-16 16:39 编辑
那肯定是你没有认真阅读代码,打PP了。
本帖最后由 any012 于 2016-11-16 16:46 编辑
额,确实该打...
看到箭头,就以为这就是个寄存器赋值呢。
这用法有点高级哎,结构体变量里定义的是个函数指针,然后HAL_SPI_Transmit_IT()这里函数里,确定指针指向哪个函数...
能否说下详细的目录?
用cube_mx建的工程,应该是没有例程的。
查找了下cube_mx的安装目录,貌似也没找到例程。
一周热门 更多>