你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

关于spi和使用dma发送长数据无法发送完全的问题

[复制链接]
提问时间:2024-5-22 20:28 / 已解决
前面的没用dma,后面的用了

不用dma可以画出完整的图像,使用dma的小图像可以完整画出,但大图像只能画一部分

code.png
code2.png
收藏 评论7 发布时间:2024-5-22 20:28

举报

7个回答
xmshao 最优答案 回答时间:2024-5-23 10:06:14
从你描述来看,你的SPI基本配置、DMA应用方面都没有太大问题。问题应该出在软件配置或内存应用方面。


提醒你两点供参考:


1、有无可能内存使用冲突方面的问题;或者堆栈溢出覆盖等方面问题;


2、DMA配置方面,尤其那个传输长度设置是否有问题。不知你现在的SPI传输选择的数据宽度
是多少位的,如果是16位或32位,对于STM32U5或STM32H5系列,使用GPDMA时,最终的传输
长度是你设置的总数据个数 再 乘以 数据宽度所对应的字节数。 打个比方:


假设你现在使用的SPI数据宽度为16位,即对应2个字节。另外假设你希望一轮DMA传输的数据个数为8096,
则最终对应到U5或H5系列的DMA传输的长度就是 8096*2。 注意这个值最终不能超过65535。
STMWoodData 回答时间:2024-5-23 09:55:54

看看是不是发送数据有长度限制?好像一次最多是65536字节

回答时间:2024-5-22 20:30:00

code.png

code2.png

code.png
code2.png
回答时间:2024-5-22 20:30:29

这是代码,考虑过延时,但是无论延时多久都是图片的一部分

回答时间:2024-5-22 20:42:20

初步的解决方案是这样的,利用回调函数一半一半发,但是总觉得不妥

code3.png

butterflyspring 回答时间:2024-5-23 10:04:05


可以检查一下参数,尤其是长度是否正确


/**
  * @brief  Transmit an amount of data in non-blocking mode with DMA.
  * @param  hspi : pointer to a SPI_HandleTypeDef structure that contains
  *                the configuration information for SPI module.
  * @param  pData: pointer to data buffer
  * @param  Size : amount of data to be sent
  * @retval HAL status
  */

HAL_StatusTypeDef HAL_SPI_Transmit_DMA(SPI_HandleTypeDef *hspi, const uint8_t *pData, uint16_t Size)
回答时间:2024-5-23 13:44:25
感谢回答,最终的解决方案是这样的,加入判断,如果数据长度超过31199(测试到可以传输的最大值),则发送31199长度数据,剩下的在回到函数中继续发送,并沿用之前的判断

code4.png

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版