完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
主控:STM32H750XBH6- ART-Pi
开发环境:CubeMX+MDK V5.27问题背景: DAC芯片需要使用32bit SPI 目前使用轮询方式工作正常 需要硬件SPI+DMA加快速率1.在仅仅更改:以下三项为8bit byte时,单字节的DMA发送是能够多次发送的,功能正常 hspi2.Init.DataSize = SPI_DATASIZE_32BIT;---------------->8BIThdma_spi2_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;------->BYTEhdma_spi2_tx.Init.MemDataAlignment = DMA_MDATAALIGN_WORD;------>BYTE2.当前代码使用HAL_SPI_Transmit_DMA()函数初次发送时,能够在逻辑分析仪上看到波形出现(能进入DMA中断),但是不进入SPI中断,导致SPI_Busy3.当前代码由于处于Bus状态导致之后所有DMA发送直接返回 SPI配置项: void MX_SPI2_Init(void){/* USER CODE BEGIN SPI2_Init 0 *//* USER CODE END SPI2_Init 0 *//* USER CODE BEGIN SPI2_Init 1 *//* USER CODE END SPI2_Init 1 */hspi2.Instance = SPI2;hspi2.Init.Mode = SPI_MODE_MASTER;hspi2.Init.Direction = SPI_DIRECTION_2LINES;hspi2.Init.DataSize = SPI_DATASIZE_32BIT;hspi2.Init.CLKPolarity = SPI_POLARITY_LOW;hspi2.Init.CLKPhase = SPI_PHASE_1EDGE;hspi2.Init.NSS = SPI_NSS_SOFT;hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16;hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB;hspi2.Init.TIMode = SPI_TIMODE_DISABLE;hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;hspi2.Init.CRCPolynomial = 0x0;hspi2.Init.NSSPMode = SPI_NSS_PULSE_ENABLE;hspi2.Init.NSSPolarity = SPI_NSS_POLARITY_LOW;hspi2.Init.FifoThreshold = SPI_FIFO_THRESHOLD_01DATA;hspi2.Init.TxCRCInitializationPattern = SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN;hspi2.Init.RxCRCInitializationPattern = SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN;hspi2.Init.MasterSSIdleness = SPI_MASTER_SS_IDLENESS_00CYCLE;hspi2.Init.MasterInterDataIdleness = SPI_MASTER_INTERDATA_IDLENESS_00CYCLE;hspi2.Init.MasterReceiverAutoSusp = SPI_MASTER_RX_AUTOSUSP_DISABLE;hspi2.Init.MasterKeepIOState = SPI_MASTER_KEEP_IO_STATE_DISABLE;hspi2.Init.IOSwap = SPI_IO_SWAP_DISABLE;if (HAL_SPI_Init(&hspi2) != HAL_OK){Error_Handler();}/* USER CODE BEGIN SPI2_Init 2 *//* USER CODE END SPI2_Init 2 */}DMA配置项: void HAL_SPI_MspInit(SPI_HandleTypeDef* spiHandle){ GPIO_InitTypeDef GPIO_InitStruct = {0}; RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; if(spiHandle->Instance==SPI2) { /* USER CODE BEGIN SPI2_MspInit 0 */ /* USER CODE END SPI2_MspInit 0 */ /** Initializes the peripherals clock */ PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_SPI2; PeriphClkInitStruct.Spi123ClockSelection = RCC_SPI123CLKSOURCE_PLL; if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) { Error_Handler(); } /* SPI2 clock enable */ __HAL_RCC_SPI2_CLK_ENABLE(); __HAL_RCC_GPIOI_CLK_ENABLE(); /**SPI2 GPIO Configuration PI1 ------> SPI2_SCK PI2 ------> SPI2_MISO PI3 ------> SPI2_MOSI */ GPIO_InitStruct.Pin = GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; GPIO_InitStruct.Alternate = GPIO_AF5_SPI2; HAL_GPIO_Init(GPIOI, &GPIO_InitStruct); /* SPI2 DMA Init */ /* SPI2_TX Init */ hdma_spi2_tx.Instance = DMA1_Stream0; hdma_spi2_tx.Init.Request = DMA_REQUEST_SPI2_TX; hdma_spi2_tx.Init.Direction = DMA_MEMORY_TO_PERIPH; hdma_spi2_tx.Init.PeriphInc = DMA_PINC_DISABLE; hdma_spi2_tx.Init.MemInc = DMA_MINC_ENABLE; hdma_spi2_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; hdma_spi2_tx.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; hdma_spi2_tx.Init.Mode = DMA_NORMAL; hdma_spi2_tx.Init.Priority = DMA_PRIORITY_LOW; hdma_spi2_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; hdma_spi2_tx.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; hdma_spi2_tx.Init.MemBurst = DMA_MBURST_SINGLE; hdma_spi2_tx.Init.PeriphBurst = DMA_PBURST_SINGLE; if (HAL_DMA_Init(&hdma_spi2_tx) != HAL_OK) { Error_Handler(); } __HAL_LINKDMA(spiHandle,hdmatx,hdma_spi2_tx); /* SPI2 interrupt Init */ HAL_NVIC_SetPriority(SPI2_IRQn, 0, 0); HAL_NVIC_EnableIRQ(SPI2_IRQn); /* USER CODE BEGIN SPI2_MspInit 1 */ /* USER CODE END SPI2_MspInit 1 */ }} |
|
相关推荐
1个回答
|
|
|
在使用STM32H750XBH6的ART-Pi开发板时,如果你遇到 1. 检查SPI和DMA配置
2. 检查SPI中断优先级
3. 检查DMA中断
4. 检查SPI和DMA的初始化顺序
5. 检查SPI时钟
6. 检查SPI状态寄存器
7. 检查DMA传输完成回调函数
8. 检查SPI和DMA的硬件连接
9. 使用调试工具
10. 检查CubeMX配置
示例代码以下是一个简单的示例代码,展示了如何使用 总结通过以上步骤,你应该能够找到并解决 |
|
|
|
|
只有小组成员才能发言,加入小组>>
stm32mp157的异核通信的rpmsg_sdb的m4固件和a7驱动该如何编写?
1447 浏览 0 评论
stm32f103用freertos对一个采样率为1kHz的传感器,进行采样,数据出差
1494 浏览 0 评论
请教:在使用UDE STK时,单片机使用SPC560D30L1,在配置文件怎么设置或选择?里面只有SPC560D40的选项
3641 浏览 1 评论
3834 浏览 1 评论
请问是否有通过UART连接的两个微处理器之间实现双向值交换的方法?
2454 浏览 1 评论
STM32H7打开DCache后,出现了串口接收信息为空的现象,是哪里出了问题?
725浏览 5评论
用NANO STM32F103RBT6的开发板烧录不了是哪里出了问题?
656浏览 5评论
709浏览 5评论
外部中断触发类型为双边沿触发,进入中断回调后有什么办法判断该边沿是上升沿还是下降沿?
938浏览 5评论
STM32L071CBT6低温环境下无法正常工作是什么原因引起的?
742浏览 5评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-1 16:23 , Processed in 1.724985 second(s), Total 76, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
938