配置为主机只接收模式,并开启CRC功能,发现波形会多读一笔数据,调试看代码确实多读了一笔,这里是不是一个bug?
|
STM32G0B1CC单片机多个从板使用CAN链接,CAN接收帧和发送帧丢失的问题。
STM32G0B1adc+dma采样数据错位
cube stm32g030f6p6 adc analog watchdog1 无法配置
stm32g030j6m6如何使用串口烧录程序?NRST引脚能否作为普通输入IO口用?
STM32的H5/U5系列处理器内置运放支持负压运算吗?比如输入-1V,放大倍数为2时输出-2V
stm32G030C8T6 官方例程库
STM32G070 调用HAL_I2C_Mem_Read_IT测试疑问
STM32G030F6P6中的3种睡眠模式的功耗分别是多少
STM32G030F6 ADC+DMA多通道非连续采样无法正常工作?
STM32G0B1VE的CAN过滤器个数问题
你可以关闭CRC功能再进行接收,然后比较下。
主机先收了一笔CRC帧,然后存在了hspi->pRxBuffPtr里,接着多收了一笔从机随机的数据,但这个数据是丢弃的,代码注释这里是接收CRC帧,我觉得这个写法有bug,应用的时候要注意定义buffer数组的大小,不然会越界。
函数说明在这个地方稍有点不够清晰。如果开启了CRC校验,又没有为其预留接收存储空间,可能会有些问题。
问题应该是表现在CRC码没接收进来无法完成校验,或者说在DMA循环接收时发生数据滚动难以辨别数据
和校验码。
至于你说的越界,按理是不该发生的。因为即使没为CRC码准备接收空间,当我们基于查询或 中断方式进行
接收时,我们是根据预定的SIZE大小来进行接收和存储的,之后的数据就丢弃了,不会发生越界。
如果是DMA方式,Normal模式的话,传输指定SIZE个数的数据后就停下来,之后的数据也丢弃了,也不会发生越界。
如果是DMA 循环模式,每传输指定SIZE个数的数据后,它就调头重新开始存储了,怎么也不会发生越界。