HAL库里关于stm32_hal_spi.h头文件里的几个函数不明白其用途

2019-07-14 15:57发布

以前用标准库,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);
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
17条回答
miludeyun
1楼-- · 2019-07-16 12:49
        TIM_HandleTypeDef   TIM_InitTypeDef;
        TIM_OC_InitTypeDef   PWM_Config;
        PWM_Config.OCMode=TIM_OCMODE_PWM2;
        PWM_Config.OCPolarity=TIM_OCPOLARITY_HIGH;
        PWM_Config.OCFastMode=TIM_OCFAST_ENABLE;
        HAL_TIM_PWM_ConfigChannel(&TIM_InitTypeDef, &PWM_Config, TIM_CHANNEL_ALL);
我是这样用的,编译后提示错误demo4demo4.axf: Error: L6218E: Undefined symbol HAL_TIM_PWM_ConfigChannel (referred from timer.o).
所以hal库里面这个不是函数,而是一个定义类型,需要自己写函数实现吗?
       
谦谦三君子
2楼-- · 2019-07-16 16:11
不是。
是这个函数的参数,你给错了。
miludeyun
3楼-- · 2019-07-16 20:32
 精彩回答 2  元偷偷看……
谦谦三君子
4楼-- · 2019-07-16 23:49
miludeyun 发表于 2018-11-19 14:33
那么参数应该怎么给,请指教。不胜感激

我想太简单了,抱歉,说错了。
这个,不懂...
建企商务服务
5楼-- · 2019-07-17 04:14
官方的例程虽然很多,但基本上都是在主while(1)做一些简单的操作,用户回调函数使用的例子就更少了,这让我们怎么参考呀

一周热门 更多>