|
发表于 2020-3-21 22:01:17
|
显示全部楼层
本帖最后由 weiyuliang 于 2020-3-21 22:16 编辑
- /*
- *********************************************************************************************************
- * 函 数 名: InitHardUart
- * 功能说明: 配置串口的硬件参数(波特率,数据位,停止位,起始位,校验位,中断使能)适合于STM32-H7开发板
- * 形 参: 无
- * 返 回 值: 无
- *********************************************************************************************************
- */
- static void InitHardUart(void)
- {
- GPIO_InitTypeDef GPIO_InitStruct;
- #if UART1_FIFO_EN == 1 /* 串口1 */
- /* 使能 GPIO TX/RX 时钟 */
- USART1_TX_GPIO_CLK_ENABLE();
- USART1_RX_GPIO_CLK_ENABLE();
-
- /* 使能 USARTx 时钟 */
- USART1_CLK_ENABLE();
- /* 配置TX引脚 */
- GPIO_InitStruct.Pin = USART1_TX_PIN;
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
- GPIO_InitStruct.Pull = GPIO_PULLUP;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
- GPIO_InitStruct.Alternate = USART1_TX_AF;
- HAL_GPIO_Init(USART1_TX_GPIO_PORT, &GPIO_InitStruct);
-
- /* 配置RX引脚 */
- GPIO_InitStruct.Pin = USART1_RX_PIN;
- GPIO_InitStruct.Alternate = USART1_RX_AF;
- HAL_GPIO_Init(USART1_RX_GPIO_PORT, &GPIO_InitStruct);
- /* 配置NVIC the NVIC for UART */
- HAL_NVIC_SetPriority(USART1_IRQn, 0, 1);
- HAL_NVIC_EnableIRQ(USART1_IRQn);
-
- /* 配置波特率、奇偶校验 */
- bsp_SetUartParam(USART1, UART1_BAUD, UART_PARITY_NONE, UART_MODE_TX_RX);
- CLEAR_BIT(USART1->SR, USART_SR_TC); /* 清除TC发送完成标志 */
- CLEAR_BIT(USART1->SR, USART_SR_RXNE); /* 清除RXNE接收标志 */
- // USART_CR1_PEIE | USART_CR1_RXNEIE
- SET_BIT(USART1->CR1, USART_CR1_RXNEIE); /* 使能PE. RX接受中断 */
- #endif
- #if UART2_FIFO_EN == 1 /* 串口2 */
- /* 使能 GPIO TX/RX 时钟 */
- USART2_TX_GPIO_CLK_ENABLE();
- USART2_RX_GPIO_CLK_ENABLE();
-
- /* 使能 USARTx 时钟 */
- USART2_CLK_ENABLE();
- /* 配置TX引脚 */
- GPIO_InitStruct.Pin = USART2_TX_PIN;
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
- GPIO_InitStruct.Pull = GPIO_PULLUP;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
- GPIO_InitStruct.Alternate = USART2_TX_AF;
- HAL_GPIO_Init(USART2_TX_GPIO_PORT, &GPIO_InitStruct);
-
- /* 配置RX引脚 */
- GPIO_InitStruct.Pin = USART2_RX_PIN;
- GPIO_InitStruct.Alternate = USART2_RX_AF;
- HAL_GPIO_Init(USART2_RX_GPIO_PORT, &GPIO_InitStruct);
- /* 配置NVIC the NVIC for UART */
- HAL_NVIC_SetPriority(USART2_IRQn, 0, 2);
- HAL_NVIC_EnableIRQ(USART2_IRQn);
-
- /* 配置波特率、奇偶校验 */
- bsp_SetUartParam(USART2, UART2_BAUD, UART_PARITY_NONE, UART_MODE_RX); // UART_MODE_TX_RX
- CLEAR_BIT(USART2->SR, USART_SR_TC); /* 清除TC发送完成标志 */
- CLEAR_BIT(USART2->SR, USART_SR_RXNE); /* 清除RXNE接收标志 */
- SET_BIT(USART2->CR1, USART_CR1_RXNEIE); /* 使能PE. RX接受中断 */
- #endif
- #if UART3_FIFO_EN == 1 /* 串口3 */
- /* 使能 GPIO TX/RX 时钟 */
- USART3_TX_GPIO_CLK_ENABLE();
- USART3_RX_GPIO_CLK_ENABLE();
-
- /* 使能 USARTx 时钟 */
- USART3_CLK_ENABLE();
- /* 配置TX引脚 */
- GPIO_InitStruct.Pin = USART3_TX_PIN;
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
- GPIO_InitStruct.Pull = GPIO_PULLUP;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
- GPIO_InitStruct.Alternate = USART3_TX_AF;
- HAL_GPIO_Init(USART3_TX_GPIO_PORT, &GPIO_InitStruct);
-
- /* 配置RX引脚 */
- GPIO_InitStruct.Pin = USART3_RX_PIN;
- GPIO_InitStruct.Alternate = USART3_RX_AF;
- HAL_GPIO_Init(USART3_RX_GPIO_PORT, &GPIO_InitStruct);
- /* 配置NVIC the NVIC for UART */
- HAL_NVIC_SetPriority(USART3_IRQn, 0, 3);
- HAL_NVIC_EnableIRQ(USART3_IRQn);
-
- /* 配置波特率、奇偶校验 */
- bsp_SetUartParam(USART3, UART3_BAUD, UART_PARITY_NONE, UART_MODE_TX_RX);
- CLEAR_BIT(USART3->SR, USART_SR_TC); /* 清除TC发送完成标志 */
- CLEAR_BIT(USART3->SR, USART_SR_RXNE); /* 清除RXNE接收标志 */
- SET_BIT(USART3->CR1, USART_CR1_RXNEIE); /* 使能PE. RX接受中断 */
- #endif
- #if UART4_FIFO_EN == 1 /* 串口4 TX = PC10 RX = PC11 */
- /* 使能 GPIO TX/RX 时钟 */
- UART4_TX_GPIO_CLK_ENABLE();
- UART4_RX_GPIO_CLK_ENABLE();
-
- /* 使能 USARTx 时钟 */
- UART4_CLK_ENABLE();
- /* 配置TX引脚 */
- GPIO_InitStruct.Pin = UART4_TX_PIN;
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
- GPIO_InitStruct.Pull = GPIO_PULLUP;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
- GPIO_InitStruct.Alternate = UART4_TX_AF;
- HAL_GPIO_Init(UART4_TX_GPIO_PORT, &GPIO_InitStruct);
-
- /* 配置RX引脚 */
- GPIO_InitStruct.Pin = UART4_RX_PIN;
- GPIO_InitStruct.Alternate = UART4_RX_AF;
- HAL_GPIO_Init(UART4_RX_GPIO_PORT, &GPIO_InitStruct);
- /* 配置NVIC the NVIC for UART */
- HAL_NVIC_SetPriority(UART4_IRQn, 0, 4);
- HAL_NVIC_EnableIRQ(UART4_IRQn);
-
- /* 配置波特率、奇偶校验 */
- bsp_SetUartParam(UART4, UART4_BAUD, UART_PARITY_NONE, UART_MODE_TX_RX);
- CLEAR_BIT(UART4->SR, USART_SR_TC); /* 清除TC发送完成标志 */
- CLEAR_BIT(UART4->SR, USART_SR_RXNE); /* 清除RXNE接收标志 */
- SET_BIT(UART4->CR1, USART_CR1_RXNEIE); /* 使能RX接受中断 */
- #endif
- #if UART5_FIFO_EN == 1 /* 串口5 TX = PC12 RX = PD2 */
- /* 使能 GPIO TX/RX 时钟 */
- UART5_TX_GPIO_CLK_ENABLE();
- UART5_RX_GPIO_CLK_ENABLE();
-
- /* 使能 USARTx 时钟 */
- UART5_CLK_ENABLE();
- /* 配置TX引脚 */
- GPIO_InitStruct.Pin = UART5_TX_PIN;
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
- GPIO_InitStruct.Pull = GPIO_PULLUP;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
- GPIO_InitStruct.Alternate = UART5_TX_AF;
- HAL_GPIO_Init(UART5_TX_GPIO_PORT, &GPIO_InitStruct);
-
- /* 配置RX引脚 */
- GPIO_InitStruct.Pin = UART5_RX_PIN;
- GPIO_InitStruct.Alternate = UART5_RX_AF;
- HAL_GPIO_Init(UART5_RX_GPIO_PORT, &GPIO_InitStruct);
- /* 配置NVIC the NVIC for UART */
- HAL_NVIC_SetPriority(UART5_IRQn, 0, 5);
- HAL_NVIC_EnableIRQ(UART5_IRQn);
-
- /* 配置波特率、奇偶校验 */
- bsp_SetUartParam(UART5, UART5_BAUD, UART_PARITY_NONE, UART_MODE_TX_RX);
- CLEAR_BIT(UART5->SR, USART_SR_TC); /* 清除TC发送完成标志 */
- CLEAR_BIT(UART5->SR, USART_SR_RXNE); /* 清除RXNE接收标志 */
- SET_BIT(UART5->CR1, USART_CR1_RXNEIE); /* 使能RX接受中断 */
- #endif
-
- #if UART6_FIFO_EN == 1 /* USART6 */
- /* 使能 GPIO TX/RX 时钟 */
- USART6_TX_GPIO_CLK_ENABLE();
- USART6_RX_GPIO_CLK_ENABLE();
-
- /* 使能 USARTx 时钟 */
- USART6_CLK_ENABLE();
- /* 配置TX引脚 */
- GPIO_InitStruct.Pin = USART6_TX_PIN;
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
- GPIO_InitStruct.Pull = GPIO_PULLUP;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
- GPIO_InitStruct.Alternate = USART6_TX_AF;
- HAL_GPIO_Init(USART6_TX_GPIO_PORT, &GPIO_InitStruct);
-
- /* 配置RX引脚 */
- GPIO_InitStruct.Pin = USART6_RX_PIN;
- GPIO_InitStruct.Alternate = USART6_RX_AF;
- HAL_GPIO_Init(USART6_RX_GPIO_PORT, &GPIO_InitStruct);
- /* 配置NVIC the NVIC for UART */
- HAL_NVIC_SetPriority(USART6_IRQn, 0, 6);
- HAL_NVIC_EnableIRQ(USART6_IRQn);
-
- /* 配置波特率、奇偶校验 */
- bsp_SetUartParam(USART6, UART6_BAUD, UART_PARITY_NONE, UART_MODE_TX_RX);
- CLEAR_BIT(USART6->SR, USART_SR_TC); /* 清除TC发送完成标志 */
- CLEAR_BIT(USART6->SR, USART_SR_RXNE); /* 清除RXNE接收标志 */
- SET_BIT(USART6->CR1, USART_CR1_RXNEIE); /* 使能PE. RX接受中断 */
- #endif
- #if UART7_FIFO_EN == 1 /* UART7 */
- /* 使能 GPIO TX/RX 时钟 */
- UART7_TX_GPIO_CLK_ENABLE();
- UART7_RX_GPIO_CLK_ENABLE();
-
- /* 使能 USARTx 时钟 */
- UART7_CLK_ENABLE();
- /* 配置TX引脚 */
- GPIO_InitStruct.Pin = UART7_TX_PIN;
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
- GPIO_InitStruct.Pull = GPIO_PULLUP;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
- GPIO_InitStruct.Alternate = UART7_TX_AF;
- HAL_GPIO_Init(UART7_TX_GPIO_PORT, &GPIO_InitStruct);
-
- /* 配置RX引脚 */
- GPIO_InitStruct.Pin = UART7_RX_PIN;
- GPIO_InitStruct.Alternate = UART7_RX_AF;
- HAL_GPIO_Init(UART7_RX_GPIO_PORT, &GPIO_InitStruct);
- /* 配置NVIC the NVIC for UART */
- HAL_NVIC_SetPriority(UART7_IRQn, 0, 7);
- HAL_NVIC_EnableIRQ(UART7_IRQn);
-
- /* 配置波特率、奇偶校验 */
- bsp_SetUartParam(UART7, UART7_BAUD, UART_PARITY_NONE, UART_MODE_TX_RX);
- CLEAR_BIT(UART7->SR, USART_SR_TC); /* 清除TC发送完成标志 */
- CLEAR_BIT(UART7->SR, USART_SR_RXNE); /* 清除RXNE接收标志 */
- SET_BIT(UART7->CR1, USART_CR1_RXNEIE); /* 使能PE. RX接受中断 */
- #endif
- #if UART8_FIFO_EN == 1 /* UART8 */
- /* 使能 GPIO TX/RX 时钟 */
- UART8_TX_GPIO_CLK_ENABLE();
- UART7_RX_GPIO_CLK_ENABLE();
-
- /* 使能 USARTx 时钟 */
- UART8_CLK_ENABLE();
- /* 配置TX引脚 */
- GPIO_InitStruct.Pin = UART8_TX_PIN;
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
- GPIO_InitStruct.Pull = GPIO_PULLUP;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
- GPIO_InitStruct.Alternate = UART8_TX_AF;
- HAL_GPIO_Init(UART8_TX_GPIO_PORT, &GPIO_InitStruct);
-
- /* 配置RX引脚 */
- GPIO_InitStruct.Pin = UART8_RX_PIN;
- GPIO_InitStruct.Alternate = UART8_RX_AF;
- HAL_GPIO_Init(UART8_RX_GPIO_PORT, &GPIO_InitStruct);
- /* 配置NVIC the NVIC for UART */
- HAL_NVIC_SetPriority(UART8_IRQn, 0, 8);
- HAL_NVIC_EnableIRQ(UART8_IRQn);
-
- /* 配置波特率、奇偶校验 */
- bsp_SetUartParam(UART8, UART8_BAUD, UART_PARITY_NONE, UART_MODE_TX_RX);
-
- CLEAR_BIT(UART8->SR, USART_SR_TC); /* 清除TC发送完成标志 */
- CLEAR_BIT(UART8->SR, USART_SR_RXNE); /* 清除RXNE接收标志 */
- SET_BIT(UART8->CR1, USART_CR1_RXNEIE); /* 使能PE. RX接受中断 */
- #endif
- }
复制代码
|
|