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

使用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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版