金牌会员
 
- 积分
- 1040
- 金钱
- 1040
- 注册时间
- 2022-4-20
- 在线时间
- 373 小时
|
30金钱
串口1目前是正常的,只要发送了过后,就能正常进入DMA传输完成的中断,但是串口2发送完全没反应,进入调试里看,发现连中断状态寄存器都毫无变化。
芯片:STM32H7
串口1:PA9、PA10
串口2:PD5、PD6
求大神相助,谢谢!!!
- GPIO_InitTypeDef GPIO_InitStruct;
- __HAL_RCC_GPIOA_CLK_ENABLE(); //使能GPIOA时钟
- __HAL_RCC_USART1_CLK_ENABLE(); //使能USART1时钟
- GPIO_InitStruct.Pin = GPIO_PIN_9;
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
- GPIO_InitStruct.Pull = GPIO_PULLUP;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
- GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
- HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
- GPIO_InitStruct.Pin = GPIO_PIN_10;
- GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
- HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
- //USART1 初始化设置
- huart1.Instance = USART1; //串口1
- huart1.Init.BaudRate = 256000; //波特率设置
- huart1.Init.WordLength = UART_WORDLENGTH_8B; //8位
- huart1.Init.StopBits = UART_STOPBITS_1; //1个停止位
- huart1.Init.Parity = UART_PARITY_NONE; //无校验
- huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; //无硬件流
- huart1.Init.Mode = UART_MODE_TX_RX; //串口发送,接收使能
- huart1.Init.OverSampling = UART_OVERSAMPLING_16; //16倍过采样
- huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
- HAL_UART_Init(&huart1); //初始化串口
- DMA_CLK_ENABLE();
- husart1dma_tx.Instance = DMA1_Stream7; //选择流
- husart1dma_tx.Init.Request = DMA_REQUEST_USART1_TX; //发送通道选择
- husart1dma_tx.Init.Direction = DMA_MEMORY_TO_PERIPH; //内存到外设
- husart1dma_tx.Init.PeriphInc = DMA_PINC_DISABLE;
- husart1dma_tx.Init.MemInc = DMA_MINC_ENABLE;
- husart1dma_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
- husart1dma_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
- husart1dma_tx.Init.Mode = DMA_NORMAL;
- husart1dma_tx.Init.Priority = DMA_PRIORITY_LOW; //DMA_PRIORITY_MEDIUM;
- husart1dma_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
- husart1dma_tx.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL;
- husart1dma_tx.Init.MemBurst = DMA_MBURST_INC4;
- husart1dma_tx.Init.PeriphBurst = DMA_MBURST_INC4;
- HAL_DMA_Init(&husart1dma_tx);
-
- __HAL_LINKDMA(huart1, hdmatx, husart1dma_tx);
-
- HAL_NVIC_SetPriority(DMA1_Stream7_IRQn, 1, 1);
- HAL_NVIC_EnableIRQ(DMA1_Stream7_IRQn);
复制代码 串口2的配置是一样的:
- __HAL_RCC_GPIOD_CLK_ENABLE();
- __HAL_RCC_USART2_CLK_ENABLE();
- //GPIO端口设置
- GPIO_InitTypeDef GPIO_InitStruct;
-
- GPIO_InitStruct.Pin = GPIO_PIN_5;
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
- GPIO_InitStruct.Pull = GPIO_PULLUP;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
- GPIO_InitStruct.Alternate = GPIO_AF7_USART2;
- HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
- GPIO_InitStruct.Pin = GPIO_PIN_6;
- GPIO_InitStruct.Alternate = GPIO_AF7_USART2;
- HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
-
- huart2.Instance = USART2;
- huart2.Init.BaudRate = 256000; //波特率设置
- huart2.Init.WordLength = UART_WORDLENGTH_8B; //8位
- huart2.Init.StopBits = UART_STOPBITS_1; //1个停止位
- huart2.Init.Parity = UART_PARITY_NONE; //无校验
- huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE; //无硬件流
- huart2.Init.Mode = UART_MODE_TX_RX; //串口发送,接收使能
- huart2.Init.OverSampling = UART_OVERSAMPLING_16; //16倍过采样
- huart2.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
- HAL_UART_Init(&huart2); //初始化串口
- __HAL_RCC_DMA2_CLK_ENABLE();
- husart2dma_tx.Instance = DMA2_Stream7; //选择流
- husart2dma_tx.Init.Request = DMA_REQUEST_USART1_TX; //发送通道选择
- husart2dma_tx.Init.Direction = DMA_MEMORY_TO_PERIPH; //内存到外设
- husart2dma_tx.Init.PeriphInc = DMA_PINC_DISABLE;
- husart2dma_tx.Init.MemInc = DMA_MINC_ENABLE;
- husart2dma_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
- husart2dma_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
- husart2dma_tx.Init.Mode = DMA_NORMAL;
- husart2dma_tx.Init.Priority = DMA_PRIORITY_LOW; //DMA_PRIORITY_MEDIUM;
- husart2dma_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
- husart2dma_tx.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL;
- husart2dma_tx.Init.MemBurst = DMA_MBURST_INC4;
- husart2dma_tx.Init.PeriphBurst = DMA_MBURST_INC4;
- HAL_DMA_Init(&husart2dma_tx);
-
- __HAL_LINKDMA(huart2, hdmatx, husart2dma_tx);
- HAL_NVIC_SetPriority(DMA2_Stream7_IRQn, 1, 1);
- HAL_NVIC_EnableIRQ(DMA2_Stream7_IRQn);
复制代码
|
最佳答案
查看完整内容[请看2#楼]
谢谢帮忙了,不过问题不在这,我刚刚又检查了一边,发现是串口2那段代码的31行DMA_REQUEST_USART1_TX的USART1没改成USART2,太粗心了
|