您的位置:首页 > 科技 > 能源 > 智囊团建网上登录入口_网站建设合同服务事项_网页制作代码_2023b站免费推广入口游戏

智囊团建网上登录入口_网站建设合同服务事项_网页制作代码_2023b站免费推广入口游戏

2024/10/31 13:12:40 来源:https://blog.csdn.net/PoroKing/article/details/143213894  浏览:    关键词:智囊团建网上登录入口_网站建设合同服务事项_网页制作代码_2023b站免费推广入口游戏
智囊团建网上登录入口_网站建设合同服务事项_网页制作代码_2023b站免费推广入口游戏

以串口3为例,初始化部分为STM32CubeMX生成代码

串口初始化

UART_HandleTypeDef huart3;
DMA_HandleTypeDef hdma_usart3_rx;
DMA_HandleTypeDef hdma_usart3_tx;/* USART3 init function */
void MX_USART3_UART_Init(void)
{/* USER CODE BEGIN USART3_Init 0 *//* USER CODE END USART3_Init 0 *//* USER CODE BEGIN USART3_Init 1 *//* USER CODE END USART3_Init 1 */huart3.Instance = USART3;huart3.Init.BaudRate = 115200;huart3.Init.WordLength = UART_WORDLENGTH_8B;huart3.Init.StopBits = UART_STOPBITS_1;huart3.Init.Parity = UART_PARITY_NONE;huart3.Init.Mode = UART_MODE_TX_RX;huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE;huart3.Init.OverSampling = UART_OVERSAMPLING_16;huart3.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;huart3.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;if (HAL_UART_Init(&huart3) != HAL_OK){Error_Handler();}/* USER CODE BEGIN USART3_Init 2 *//* USER CODE END USART3_Init 2 */
}void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
{GPIO_InitTypeDef GPIO_InitStruct = {0};RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};if(uartHandle->Instance == USART3){/* USER CODE BEGIN USART3_MspInit 0 *//* USER CODE END USART3_MspInit 0 *//** Initializes the peripherals clock*/PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART3;PeriphClkInit.Usart3ClockSelection = RCC_USART3CLKSOURCE_PCLK1;if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK){Error_Handler();}/* USART3 clock enable */__HAL_RCC_USART3_CLK_ENABLE();__HAL_RCC_GPIOC_CLK_ENABLE();/**USART3 GPIO ConfigurationPC4     ------> USART3_TXPC5     ------> USART3_RX*/GPIO_InitStruct.Pin = GPIO_PIN_4 | GPIO_PIN_5;GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;GPIO_InitStruct.Alternate = GPIO_AF7_USART3;HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);/* USART3 DMA Init *//* USART3_RX Init */hdma_usart3_rx.Instance = DMA1_Channel3;hdma_usart3_rx.Init.Request = DMA_REQUEST_2;hdma_usart3_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;hdma_usart3_rx.Init.PeriphInc = DMA_PINC_DISABLE;hdma_usart3_rx.Init.MemInc = DMA_MINC_ENABLE;hdma_usart3_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;hdma_usart3_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;hdma_usart3_rx.Init.Mode = DMA_NORMAL;hdma_usart3_rx.Init.Priority = DMA_PRIORITY_LOW;if (HAL_DMA_Init(&hdma_usart3_rx) != HAL_OK){Error_Handler();}__HAL_LINKDMA(uartHandle, hdmarx, hdma_usart3_rx);/* USART3_TX Init */hdma_usart3_tx.Instance = DMA1_Channel2;hdma_usart3_tx.Init.Request = DMA_REQUEST_2;hdma_usart3_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;hdma_usart3_tx.Init.PeriphInc = DMA_PINC_DISABLE;hdma_usart3_tx.Init.MemInc = DMA_MINC_ENABLE;hdma_usart3_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;hdma_usart3_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;hdma_usart3_tx.Init.Mode = DMA_NORMAL;hdma_usart3_tx.Init.Priority = DMA_PRIORITY_LOW;if (HAL_DMA_Init(&hdma_usart3_tx) != HAL_OK){Error_Handler();}__HAL_LINKDMA(uartHandle,hdmatx,hdma_usart3_tx);/* USART3 interrupt Init */HAL_NVIC_SetPriority(USART3_IRQn, 1, 0);HAL_NVIC_EnableIRQ(USART3_IRQn);/* USER CODE BEGIN USART3_MspInit 1 *//* USER CODE END USART3_MspInit 1 */}
}void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle)
{if(uartHandle->Instance == USART3){/* USER CODE BEGIN USART3_MspDeInit 0 *//* USER CODE END USART3_MspDeInit 0 *//* Peripheral clock disable */__HAL_RCC_USART3_CLK_DISABLE();/**USART3 GPIO ConfigurationPC4     ------> USART3_TXPC5     ------> USART3_RX*/HAL_GPIO_DeInit(GPIOC, GPIO_PIN_4 | GPIO_PIN_5);/* USART3 DMA DeInit */HAL_DMA_DeInit(uartHandle->hdmarx);HAL_DMA_DeInit(uartHandle->hdmatx);/* USART3 interrupt Deinit */HAL_NVIC_DisableIRQ(USART3_IRQn);/* USER CODE BEGIN USART3_MspDeInit 1 *//* USER CODE END USART3_MspDeInit 1 */}
}/* USER CODE BEGIN 1 *//* USER CODE END 1 */

DMA初始化

/*** Enable DMA controller clock*/
void MX_DMA_Init(void)
{/* DMA controller clock enable */__HAL_RCC_DMA1_CLK_ENABLE();/* DMA interrupt init *//* DMA1_Channel2_IRQn interrupt configuration */HAL_NVIC_SetPriority(DMA1_Channel2_IRQn, 0, 0);HAL_NVIC_EnableIRQ(DMA1_Channel2_IRQn);/* DMA1_Channel3_IRQn interrupt configuration */HAL_NVIC_SetPriority(DMA1_Channel3_IRQn, 0, 0);HAL_NVIC_EnableIRQ(DMA1_Channel3_IRQn);
}

中断服务函数

/*** @brief This function handles USART3 global interrupt.*/
void USART3_IRQHandler(void)
{/* USER CODE BEGIN USART3_IRQn 0 *//* USER CODE END USART3_IRQn 0 */HAL_UART_IRQHandler(&huart3);/* USER CODE BEGIN USART3_IRQn 1 *//* USER CODE END USART3_IRQn 1 */
}

应用部分,为自己编写代码

开机启用DMA接收

// 串口接收数据控制结构体
typedef struct
{uint8_t       RxBuffer[USART_RX_MAX_LENGTH];uint16_t      Size;uint8_t       FrameFg;
}WS_RxUsartInfoTypeDef;WS_RxUsartInfoTypeDef   uart3Rx;void WS_USART_Rx_Tx_Init(void)
{// 启用DMA接收HAL_UARTEx_ReceiveToIdle_DMA(&huart3, uart3Rx.RxBuffer, sizeof(uart3Rx.RxBuffer) - 1) ;
}

发送函数

// 使用串口发送数据时,调用此函数
HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size);

重写发送完成回调函数

void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
{/* Prevent unused argument(s) compilation warning */UNUSED(huart);/* NOTE: This function should not be modified, when the callback is needed,the HAL_UART_TxCpltCallback could be implemented in the user file*/if(huart->Instance == USART3){//此处代表发送完成,若使用RS485通讯,可在此切换接收模式}
}

重写接收完成回调函数

void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{
//    uint16_t  len ;/* Prevent unused argument(s) compilation warning */UNUSED(huart);if(huart->Instance == USART3){if(huart->RxEventType == HAL_UART_RXEVENT_IDLE){uart3Rx.FrameFg = 1;uart3Rx.Size = Size;// 启用DMA接收HAL_UARTEx_ReceiveToIdle_DMA(&huart3, uart3Rx.RxBuffer, sizeof(uart3Rx.RxBuffer) - 1) ;// 可在此处调用接收数据处理函数}}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com