历史上的今天
今天是:2025年04月27日(星期日)
2019年04月27日 | STM32F0系列Hal库SPI库BUG
2019-04-27 来源:eefocus
在使用STM32Cube_FW_F0_V1.8.0版本的HAL库时,应用中需要使用SPI总线,两片STM32F03x系列微控制器分别作为主机和从机使用。并且为了提高通讯效率和通讯可靠性,通讯时使用DMA交互数据并使能SPI控制器自带的CRC校验功能。在实际使用时发生以下问题:当从机使用循环DMA模式时,从机接收到的数据会错位。但是关闭CRC校验功能后,从机缓冲区接收到的数据就不会发生错位了。考虑原因是CRC校验位长度处理异常导致的。从机在实际使用过程中调用了如下函数:
HAL_StatusTypeDef HAL_SPI_TransmitReceive_DMA(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData,
uint16_t Size)
此函数是使用DMA交互SPI数据,从机DMA的收发通道采用DMA_CIRCULAR模式,从机仅在初始化时调用一次该函数,以后不需要重复调用,因为DMA控制器会自动循环内存地址。
由于关闭CRC校验功能后数据错位的现象消失,所以考虑从CRC校验的设置方面解决。参考STM32F0xx系列参考指南,在SPI控制器的章节找到如下说明:

可以看出,在使能CRC校验时,DMA通道的长度设置是有变化的。
ST的库中长度设置如下,并没有针对CRC功能设置额外长度。

现在按下图修改:

修改后数据DMA数据和CRC校验功能均正常,数据不再顺序错乱。
关于此BUG,没有找到ST官方的BUG报告email,所以发布博文以供网友参考。
史海拾趣
|
丰田自动织机在“人与车科技展2007”(太平洋横滨会展中心)上,展示了“雷克萨斯LS460/600h”采用的电动助力转向系统中的2款DC/DC转换器。 雷克萨斯LS460采用的是可将12V电源电压升至45V的型号,主要用于电动助力转向系统(EPS)。最大输出功率 ...… 查看全部问答> |
|
新型客车、卡车、公共汽车甚至摩托车都已成为移动的网络,将众多特征和功能连接在一起。如内置控制、移动媒体和无线网络。信息娱乐系统、远程信息处理、安全控制等的应用均需使用几种现有的网络标准。如LIN、CAN、MOST、IDB-1394、FlexRay、Bytefli ...… 查看全部问答> |
|
本期主要讲述一下stm32GPIO的使用,做了一个GPIO的例子(流水灯)。需要的可以在附件中下载。该程序在飞嵌电子的蓝精灵stm32上测试运行通过。… 查看全部问答> |
|
初步是这样想的,用一个AT89S51的芯片,再加上A/D转换以及D/A转换,在加上放大器和扬声器,以及数码显示。但我不知道语音录入者一部分该怎么做,求高人指教… 查看全部问答> |




