|
当我定义了一个长度为32的数组,然后告诉DMA数组长度,如果为32,将彻底卡死,状态灯不再闪烁,HAL_I2S_RxCpltCallback也不会进入,当我设置为24,状态灯闪烁,但是HAL_I2S_RxCpltCallback依然不会进入,当我设置为19或者更低,一切就正常了(读取start_tick也有问题,比如数值从16,35,45然后突然65530,25这个样子,貌似是使用I2S之后出现的问题)
以下代码在H743&F429都有测试过,H7没问题,F4有一点问题,但是没有总结
|
程序卡死在USB_EPStartXfer这里
SDIO 初始化 死在 __HAL_RCC_SDIO_CLK_ENABLE语句上
STM32cubeide编译错误
STM32MP157DAA1进行异核通信时配置初始化 函数无法进入
我现在使用STM32F446ZET6芯片,外挂了16m的片外SDRAM。想把程序在SDRAM中运行,一直尝试没有成功,希望得到帮助,是否有相关的例子或参考的文档
MotorControl Workbench 6.4.1 生成 FOC 项目代码后运行死机。
USBX在F407上创建CDC不能正常使用
st32软件软件下载后,无法打开,
有没有大佬更新了CubeIDE2.0.0,在软件内更新后体积大了一倍
STEVAL-STWINKT1B应该能跑AI吧
微信公众号
手机版
[md]感谢您的耐心解答,我反应过来了
你注意下,调用
HAL_I2S_Receive_DMA(I2S_HandleTypeDef hi2s, uint16_t pData, uint16_t Size);
这里Size对应数据个数,比方传输10个数据,不管数据配置的是16位,或者24位 甚至32位,
这里都是直接写10。
[md]这个我明白,我也并没有超出自己定义的数组大小,很奇怪的是,相同的程序,H743是没有问题的。我的I2S问题点很多,最显著的就是如果完全将DMA给定我的数组长度,LED状态灯也不闪烁了,回调函数也不进入了,如果我尝试减小,状态灯开始闪烁(主函数运行),再减小,我的回调函数也能进入了,但是if(hi2s == &hi2s2)还是不成立的,当我继续减小才能正常
[md]没有很明白 你说的 “完全将DMA给定我的数组长度” 。
注意DMA传输长度不能超过65535,具体这里的I2S传输,若数据宽度是24或32位的话,那个size就不要超过32768了。
另外,你注意下堆栈方面的问题,可以尝试调整下。
[md]那我简短说明,我定义了一个为uint16_t的数组,长度为32,给到HAL_I2S_Receive_DMA(&hi2s2,(uint16_t *)i2s_dma_buf,32);就会卡死(H743不存在这种问题),不存在你说的超出65535问题
[md]那我简短说明,我定义了一个为uint16_t的数组,长度为32,给到HAL_I2S_Receive_DMA(&hi2s2,(uint16_t *)i2s_dma_buf,32);就会卡死(H743不存在这种问题),不存在你说的超出65535问题
[md]谢谢补充信息。
你现在定义了一个用于I2S的接收缓冲数组,数组的数据类型为16bit,长度为32.
你现在的I2S配置为24bit帧格式,那么你的调用`HAL_I2S_Receive_DMA(I2S_HandleTypeDef *hi2s, uint16_t *pData, uint16_t Size)`函数时,此时的Size 不能大于16,否则可能会出问题,包括程序卡死都是可能的。
使用I2S DMA功能时程序出现卡死?