ST意法半导体
直播中

王斌

7年用户 1311经验值
私信 关注
[问答]

在STM32L4S9AII6 MCU上通过DMA设置SPI通信失败是何原因

我正在尝试在 STM32L4S9AII6 MCU 上通过 DMA 设置 SPI 通信。正如您在图像“SPI Bug”中看到的那样,它似乎只工作了一半。在这个测试中,我发送了一个 6 字节的字符串。如您所见,只有前半部分从 MCU 中存活下来,但 MCU 显然正在尝试发送完整的 6 个字节。这是通过 SPI3 外设。另请注意所附“SPI Bug”图像底部的 PB12 信号。这是一个 GPO 引脚,当调用“HAL_SPI_TxHalfCpltCallback”回调函数时,我将其断言为高电平。同样,当调用“HAL_SPI_TxCpltCallback”回调函数时,我将同一引脚置为低电平。不确定为什么在传输开始时调用半传输完成回调函数。也许这是关于这里出了什么问题的暗示。
我也成功地使用了 UART1 + DMA,我始终能够发送具有多个字节的消息。
是的,我有“MX_DMA_Init();” 在使用 DMA 的所有其他外设之前。顺便说一下,ST 计划什么时候修复这个错误,它已经存在至少几年了。
/* 初始化所有配置的外设 */
MX_DMA_Init();
MX_GPIO_Init();
MX_I2C1_Init();
MX_OCTOSPI1_Init();
MX_OCTOSPI2_Init();
MX_SPI1_Init();
MX_SPI2_Init();
MX_SPI3_Init();
MX_ADC1_Init();
MX_I2C2_Init();
MX_IWDG_Init();
MX_USART1_UART_Init();
MX_DAC1_Init();
这是我配置 SPI3 的方式。请注意,我已经调整了很多设置都无济于事。
静态无效 MX_SPI3_Init(无效)
{
/* 用户代码开始 SPI3_Init 0 */
/* 用户代码结束 SPI3_Init 0 */
/* 用户代码开始 SPI3_Init 1 */
/* 用户代码结束 SPI3_Init 1 */
/* SPI3参数配置*/
hspi3.Instance = SPI3;
hspi3.Init.Mode = SPI_MODE_MASTER;
hspi3.Init.Direction = SPI_DIRECTION_2LINES;
hspi3.Init.DataSize = SPI_DATASIZE_8BIT;
hspi3.Init.CLKPolarity = SPI_POLARITY_LOW;
hspi3.Init.CLKPhase = SPI_PHASE_1EDGE;
hspi3.Init.NSS = SPI_NSS_HARD_OUTPUT;
hspi3.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256;
hspi3.Init.FirstBit = SPI_FIRSTBIT_MSB;
hspi3.Init.TIMode = SPI_TIMODE_DISABLE;
hspi3.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
hspi3.Init.CRCPolynomial = 7;
hspi3.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
hspi3.Init.NSSPMode = SPI_NSS_PULSE_ENABLE;
如果 (HAL_SPI_Init(&hspi3) != HAL_OK)
{
  错误处理程序();
}
/* 用户代码开始 SPI3_Init 2 */
/* 用户代码结束 SPI3_Init 2 */
}
这是其他人以前见过的错误吗?
谢谢!









回帖(1)

李伟嘉

2022-12-13 14:18:01
我的怀疑是正确的,这是一个硬件问题。我需要从 STM32L4R9I-EVAL 开发板上移除 U6。SPI 通信现在就像一个魅力。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分