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

使用DMA通道4开启串口1,开启中断之后,程序错乱

[复制链接]
九千七 提问时间:2023-12-11 16:35 / 未解决

void DMA1_Ch4_7_DMAMUX1_OVR_IRQHandler(void) { / USER CODE BEGIN DMA1_Ch4_7_DMAMUX1_OVR_IRQn 0 /

/ USER CODE END DMA1_Ch4_7_DMAMUX1_OVR_IRQn 0 / //HAL_DMA_IRQHandler(&hdma_dac1_ch1); HAL_DMA_IRQHandler(&hdma_usart1_tx); HAL_DMA_IRQHandler(&hdma_adc1); //HAL_DMA_IRQHandler(&hdma_usart1_tx);

/ USER CODE BEGIN DMA1_Ch4_7_DMAMUX1_OVR_IRQn 1 /

/ USER CODE END DMA1_Ch4_7_DMAMUX1_OVR_IRQn 1 / }

else if(uartHandle->Instance==USART1) //USART1-初始化20231211 { HAL_RCC_USART1_CLK_ENABLE(); HAL_RCC_GPIOA_CLK_ENABLE();

GPIO_InitStruct.Pin = Oxy_Tx_Pin; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; GPIO_InitStruct.Alternate = GPIO_AF4_USART1; HAL_GPIO_Init(Oxy_Tx_GPIO_Port, &GPIO_InitStruct);

GPIO_InitStruct.Pin = Oxy_Rx_Pin; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; GPIO_InitStruct.Alternate = GPIO_AF4_USART1; HAL_GPIO_Init(Oxy_Rx_GPIO_Port, &GPIO_InitStruct);

hdma_usart1_tx.Instance = DMA1_Channel4; //dma没有初始化-4-6空闲 hdma_usart1_tx.Init.Request = DMA_REQUEST_USART1_TX; hdma_usart1_tx.Init.Direction = DMA_MEMORY_TO_PERIPH; hdma_usart1_tx.Init.PeriphInc = DMA_PINC_DISABLE; hdma_usart1_tx.Init.MemInc = DMA_MINC_ENABLE; hdma_usart1_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; hdma_usart1_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; hdma_usart1_tx.Init.Mode = DMA_CIRCULAR; hdma_usart1_tx.Init.Priority = DMA_PRIORITY_LOW; if (HAL_DMA_Init(&hdma_usart1_tx) != HAL_OK) { Error_Handler(); }

__HAL_LINKDMA(uartHandle,hdmatx,hdma_usart1_tx);

HAL_NVIC_SetPriority(USART1_IRQn, 3, 0); HAL_NVIC_EnableIRQ(USART1_IRQn); }

void MX_USART1_UART_Init(void) //氧浓度20231208 {

huart1.Instance = USART1; huart1.Init.BaudRate = 115200; huart1.Init.WordLength = UART_WORDLENGTH_8B; huart1.Init.StopBits = UART_STOPBITS_1; huart1.Init.Parity = UART_PARITY_NONE; huart1.Init.Mode = UART_MODE_TX_RX; huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; huart1.Init.OverSampling = UART_OVERSAMPLING_16; huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE; huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1; huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;//20230605 //huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_RXOVERRUNDISABLE_INIT;//20230601 //huart1.AdvancedInit.OverrunDisable = UART_ADVFEATURE_OVERRUN_DISABLE;//20230601 if (HAL_UART_Init(&huart1) != HAL_OK) { Error_Handler(); } if (HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK) { Error_Handler(); } if (HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK) { Error_Handler(); } if (HAL_UARTEx_DisableFifoMode(&huart1) != HAL_OK) { Error_Handler(); }

}

收藏 评论3 发布时间:2023-12-11 16:35

举报

3个回答
废鱼 回答时间:2023-12-11 19:45:42

能具体描述一下问题吗?错乱是怎么个错乱?

butterflyspring 回答时间:2023-12-12 10:26:11
看起来中断处理的结构有点乱,建议还是按照例程来吧。

官方有个例程,直接用参考着用。

STM32Cube_FW_G0_V1.5.0\Projects\STM32G081B-EVAL\Examples\UART\UART_TwoBoards_ComDMA\
watershade 回答时间:2023-12-12 11:59:57

兄台,请将代码粘贴到代码部分。我看了一下你的代码,怎么没有if就直接来个else if?

是不是粘贴错了?

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