完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
以前用标准库,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); |
|
相关推荐
18个回答
|
|
使用中断你要做的就是重写
void HAL_SPI_TxCpltCallback(SPI_HandleTypeDef *hspi); void HAL_SPI_RxCpltCallback(SPI_HandleTypeDef *hspi); void HAL_SPI_TxRxCpltCallback(SPI_HandleTypeDef *hspi); void HAL_SPI_TxHalfCpltCallback(SPI_HandleTypeDef *hspi); void HAL_SPI_RxHalfCpltCallback(SPI_HandleTypeDef *hspi); void HAL_SPI_TxRxHalfCpltCallback(SPI_HandleTypeDef *hspi); void HAL_SPI_ErrorCallback(SPI_HandleTypeDef *hspi); 以Callback结尾的函数。 它们的实现都是__weak,需要自己来实现。 |
|
|
|
|
|
|
|
你我然后 发表于 2018-11-19 11:48 好奇的是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的安装目录,貌似也没找到例程。 |
|
|
|
|
|
|
|
我也是偶然发现,要看一下的系统,我的是win10,默认路径安装,路径如下(XXXX代表你的用户名): C:UsersXXXXSTM32CubeRepository 方案二:重新下载Cube库,下载压缩包,解压压缩包就能看到.... |
|
|
|
再仔细找找!!!
|
|
|
|
HAL_StatusTypeDef HAL_TIM_PWM_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OC_InitTypeDef* sConfig, uint32_t Channel);hal库里的这个怎么调用?还是它不是函数,我按照函数的调用方法调用如下HAL_TIM_PWM_ConfigChannel(&TIM_InitTypeDef,&PWM_Config, TIM_CHANNEL_ALL);编译后提示错误undefined symbol HAL_TIM_PWM_ConfigChannel,我想问怎样才能把它变为函数调用?
|
|
|
|
多看看例程
|
|
|
|
miludeyun 发表于 2018-11-19 13:53 第一个参数,是用到的定时器,比如是TIM1,一般在tim.c里有定义了,可能是htim1,你这里引用为参数的话,需要它的地址,就是&htim1。 |
|
|
|
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库里面这个不是函数,而是一个定义类型,需要自己写函数实现吗? |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
官方的例程虽然很多,但基本上都是在主while(1)做一些简单的操作,用户回调函数使用的例子就更少了,这让我们怎么参考呀
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
2105 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1941 浏览 3 评论
4537 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
2084 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
2599 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 02:13 , Processed in 1.074641 second(s), Total 76, Slave 69 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号