From e9b743dbb8647ad6b87f97685d0f2d0bf5325464 Mon Sep 17 00:00:00 2001
From: a1012112796 <1012112796@qq.com>
Date: Fri, 16 Dec 2022 16:59:20 +0800
Subject: [PATCH] =?UTF-8?q?can=20&=20uart=20=E4=B8=B2=E5=8F=A3=E9=A9=B1?=
=?UTF-8?q?=E5=8A=A8=E5=88=9D=E6=AD=A5=E5=AE=8C=E5=96=84?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: a1012112796 <1012112796@qq.com>
---
.config | 29 +-
board/Kconfig | 106 +++++-
libraries/HAL_Drivers/config/f4/dma_config.h | 72 ++--
libraries/HAL_Drivers/config/f4/uart_config.h | 70 ++++
libraries/HAL_Drivers/drv_can.c | 188 ++++++++++
libraries/HAL_Drivers/drv_usart.c | 120 +++++-
project.uvoptx | 348 +++++++++---------
project.uvprojx | 192 +++++-----
.../drivers/include/drivers/serial.h | 11 +
rt-thread/components/drivers/serial/serial.c | 28 +-
rtconfig.h | 22 ++
11 files changed, 888 insertions(+), 298 deletions(-)
diff --git a/.config b/.config
index ab6f8f6..f3b2d4d 100644
--- a/.config
+++ b/.config
@@ -715,14 +715,39 @@ CONFIG_SOC_STM32F413VG=y
CONFIG_BSP_USING_GPIO=y
CONFIG_BSP_USING_UART=y
CONFIG_BSP_USING_UART1=y
-# CONFIG_BSP_UART1_RX_USING_DMA is not set
+CONFIG_BSP_UART1_RX_USING_DMA=y
+CONFIG_BSP_UART1_TX_USING_DMA=y
CONFIG_BSP_USING_UART2=y
CONFIG_BSP_UART2_RX_USING_DMA=y
CONFIG_BSP_UART2_TX_USING_DMA=y
-# CONFIG_BSP_USING_UART3 is not set
+CONFIG_BSP_USING_UART3=y
+CONFIG_BSP_UART3_RX_USING_DMA=y
+CONFIG_BSP_UART3_TX_USING_DMA=y
+CONFIG_BSP_USING_UART4=y
+CONFIG_BSP_UART4_RX_USING_DMA=y
+CONFIG_BSP_UART4_TX_USING_DMA=y
+CONFIG_BSP_USING_UART5=y
+CONFIG_BSP_UART5_RX_USING_DMA=y
+CONFIG_BSP_UART5_TX_USING_DMA=y
+CONFIG_BSP_USING_UART6=y
+CONFIG_BSP_UART6_RX_USING_DMA=y
+CONFIG_BSP_UART6_TX_USING_DMA=y
+CONFIG_BSP_USING_UART7=y
+# CONFIG_BSP_UART7_RX_USING_DMA is not set
+# CONFIG_BSP_UART7_TX_USING_DMA is not set
+CONFIG_BSP_USING_UART8=y
+# CONFIG_BSP_UART8_RX_USING_DMA is not set
+# CONFIG_BSP_UART8_TX_USING_DMA is not set
+CONFIG_BSP_USING_UART9=y
+# CONFIG_BSP_UART9_RX_USING_DMA is not set
+CONFIG_BSP_UART9_TX_USING_DMA=y
+CONFIG_BSP_USING_UART10=y
+CONFIG_BSP_UART10_RX_USING_DMA=y
+CONFIG_BSP_UART10_TX_USING_DMA=y
CONFIG_BSP_USING_CAN=y
CONFIG_BSP_USING_CAN1=y
CONFIG_BSP_USING_CAN2=y
+CONFIG_BSP_USING_CAN3=y
# CONFIG_BSP_USING_SPI is not set
# CONFIG_BSP_USING_I2C1 is not set
# CONFIG_BSP_USING_TIM is not set
diff --git a/board/Kconfig b/board/Kconfig
index 2eb42b8..ec05dde 100644
--- a/board/Kconfig
+++ b/board/Kconfig
@@ -36,6 +36,11 @@ menu "On-chip Peripheral Drivers"
depends on BSP_USING_UART1 && RT_SERIAL_USING_DMA
default n
+ config BSP_UART1_TX_USING_DMA
+ bool "Enable UART1 TX DMA"
+ depends on BSP_USING_UART1 && RT_SERIAL_USING_DMA
+ default n
+
config BSP_USING_UART2
bool "Enable UART2"
default y
@@ -56,6 +61,102 @@ menu "On-chip Peripheral Drivers"
bool "Enable UART3 RX DMA"
depends on BSP_USING_UART3 && RT_SERIAL_USING_DMA
default n
+
+ config BSP_UART3_TX_USING_DMA
+ bool "Enable UART3 TX DMA"
+ depends on BSP_USING_UART3 && RT_SERIAL_USING_DMA
+ default n
+
+ config BSP_USING_UART4
+ bool "Enable UART4"
+ default y
+
+ config BSP_UART4_RX_USING_DMA
+ bool "Enable UART4 RX DMA"
+ depends on BSP_USING_UART4 && RT_SERIAL_USING_DMA
+ default n
+
+ config BSP_UART4_TX_USING_DMA
+ bool "Enable UART4 TX DMA"
+ depends on BSP_USING_UART4 && RT_SERIAL_USING_DMA
+ default n
+
+ config BSP_USING_UART5
+ bool "Enable UART5"
+ default y
+
+ config BSP_UART5_RX_USING_DMA
+ bool "Enable UART5 RX DMA"
+ depends on BSP_USING_UART5 && RT_SERIAL_USING_DMA
+ default n
+
+ config BSP_UART5_TX_USING_DMA
+ bool "Enable UART5 TX DMA"
+ depends on BSP_USING_UART5 && RT_SERIAL_USING_DMA
+ default n
+
+ config BSP_USING_UART6
+ bool "Enable UART6"
+ default y
+
+ config BSP_UART6_RX_USING_DMA
+ bool "Enable UART6 RX DMA"
+ depends on BSP_USING_UART6 && RT_SERIAL_USING_DMA
+ default n
+
+ config BSP_UART6_TX_USING_DMA
+ bool "Enable UART6 TX DMA"
+ depends on BSP_USING_UART6 && RT_SERIAL_USING_DMA
+ default n
+
+ config BSP_USING_UART7
+ bool "Enable UART7"
+ default y
+ config BSP_UART7_RX_USING_DMA
+ bool "Enable UART7 RX DMA"
+ depends on BSP_USING_UART7 && RT_SERIAL_USING_DMA
+ default n
+ config BSP_UART7_TX_USING_DMA
+ bool "Enable UART7 TX DMA"
+ depends on BSP_USING_UART7 && RT_SERIAL_USING_DMA
+ default n
+
+ config BSP_USING_UART8
+ bool "Enable UART8"
+ default y
+ config BSP_UART8_RX_USING_DMA
+ bool "Enable UART8 RX DMA"
+ depends on BSP_USING_UART8 && RT_SERIAL_USING_DMA
+ default n
+ config BSP_UART8_TX_USING_DMA
+ bool "Enable UART8 TX DMA"
+ depends on BSP_USING_UART8 && RT_SERIAL_USING_DMA
+ default n
+
+ config BSP_USING_UART9
+ bool "Enable UART9"
+ default y
+ config BSP_UART9_RX_USING_DMA
+ bool "Enable UART9 RX DMA"
+ depends on BSP_USING_UART9 && RT_SERIAL_USING_DMA
+ default n
+ config BSP_UART9_TX_USING_DMA
+ bool "Enable UART9 TX DMA"
+ depends on BSP_USING_UART9 && RT_SERIAL_USING_DMA
+ default n
+
+ config BSP_USING_UART10
+ bool "Enable UART10"
+ default y
+ config BSP_UART10_RX_USING_DMA
+ bool "Enable UART10 RX DMA"
+ depends on BSP_USING_UART10 && RT_SERIAL_USING_DMA
+ default n
+ config BSP_UART10_TX_USING_DMA
+ bool "Enable UART10 TX DMA"
+ depends on BSP_USING_UART10 && RT_SERIAL_USING_DMA
+ default n
+
endif
menuconfig BSP_USING_CAN
@@ -69,8 +170,11 @@ menu "On-chip Peripheral Drivers"
config BSP_USING_CAN2
bool "using CAN2"
default n
+ config BSP_USING_CAN3
+ bool "using CAN3"
+ default n
endif
-
+
menuconfig BSP_USING_SPI
bool "Enable SPI BUS"
default n
diff --git a/libraries/HAL_Drivers/config/f4/dma_config.h b/libraries/HAL_Drivers/config/f4/dma_config.h
index 016ec32..a86158f 100644
--- a/libraries/HAL_Drivers/config/f4/dma_config.h
+++ b/libraries/HAL_Drivers/config/f4/dma_config.h
@@ -151,18 +151,30 @@ extern "C" {
#endif
/* DMA2 stream0 */
-#if defined(BSP_SPI1_RX_USING_DMA) && !defined(SPI1_RX_DMA_INSTANCE)
+#if defined(BSP_UART9_TX_USING_DMA) && !defined(UART9_TX_DMA_INSTANCE)
+#define UART9_DMA_TX_IRQHandler DMA2_Stream0_IRQHandler
+#define UART9_TX_DMA_RCC RCC_AHB1ENR_DMA2EN
+#define UART9_TX_DMA_INSTANCE DMA2_Stream0
+#define UART9_TX_DMA_CHANNEL DMA_CHANNEL_1
+#define UART9_TX_DMA_IRQ DMA2_Stream0_IRQn
+#elif defined(BSP_SPI1_RX_USING_DMA) && !defined(SPI1_RX_DMA_INSTANCE)
#define SPI1_DMA_RX_IRQHandler DMA2_Stream0_IRQHandler
#define SPI1_RX_DMA_RCC RCC_AHB1ENR_DMA2EN
#define SPI1_RX_DMA_INSTANCE DMA2_Stream0
#define SPI1_RX_DMA_CHANNEL DMA_CHANNEL_3
#define SPI1_RX_DMA_IRQ DMA2_Stream0_IRQn
-#elif defined(BSP_SPI4_RX_USING_DMA) && !defined(SPI4_RX_DMA_INSTANCE)
-#define SPI4_DMA_RX_IRQHandler DMA2_Stream0_IRQHandler
-#define SPI4_RX_DMA_RCC RCC_AHB1ENR_DMA2EN
-#define SPI4_RX_DMA_INSTANCE DMA2_Stream0
-#define SPI4_RX_DMA_CHANNEL DMA_CHANNEL_4
-#define SPI4_RX_DMA_IRQ DMA2_Stream0_IRQn
+#elif defined(BSP_SPI4_TX_USING_DMA) && !defined(SPI4_TX_DMA_INSTANCE)
+#define SPI4_DMA_TX_IRQHandler DMA2_Stream0_IRQHandler
+#define SPI4_TX_DMA_RCC RCC_AHB1ENR_DMA2EN
+#define SPI4_TX_DMA_INSTANCE DMA2_Stream0
+#define SPI4_TX_DMA_CHANNEL DMA_CHANNEL_4
+#define SPI4_TX_DMA_IRQ DMA2_Stream0_IRQn
+#elif defined(BSP_UART10_RX_USING_DMA) && !defined(UART10_RX_DMA_INSTANCE)
+#define UART10_DMA_RX_IRQHandler DMA2_Stream0_IRQHandler
+#define UART10_RX_DMA_RCC RCC_AHB1ENR_DMA2EN
+#define UART10_RX_DMA_INSTANCE DMA2_Stream0
+#define UART10_RX_DMA_CHANNEL DMA_CHANNEL_5
+#define UART10_RX_DMA_IRQ DMA2_Stream0_IRQn
#endif
/* DMA2 stream1 */
@@ -208,12 +220,18 @@ extern "C" {
#define SPI1_TX_DMA_INSTANCE DMA2_Stream3
#define SPI1_TX_DMA_CHANNEL DMA_CHANNEL_3
#define SPI1_TX_DMA_IRQ DMA2_Stream3_IRQn
-#elif defined(BSP_SPI4_RX_USING_DMA) && !defined(SPI4_RX_DMA_INSTANCE)
-#define SPI4_DMA_RX_IRQHandler DMA2_Stream3_IRQHandler
-#define SPI4_RX_DMA_RCC RCC_AHB1ENR_DMA2EN
-#define SPI4_RX_DMA_INSTANCE DMA2_Stream3
-#define SPI4_RX_DMA_CHANNEL DMA_CHANNEL_5
-#define SPI4_RX_DMA_IRQ DMA2_Stream3_IRQn
+#elif defined(BSP_SPI4_TX_USING_DMA) && !defined(SPI4_TX_DMA_INSTANCE)
+#define SPI4_DMA_TX_IRQHandler DMA2_Stream3_IRQHandler
+#define SPI4_TX_DMA_RCC RCC_AHB1ENR_DMA2EN
+#define SPI4_TX_DMA_INSTANCE DMA2_Stream3
+#define SPI4_TX_DMA_CHANNEL DMA_CHANNEL_5
+#define SPI4_TX_DMA_IRQ DMA2_Stream3_IRQn
+#elif defined(BSP_UART10_RX_USING_DMA) && !defined(UART10_RX_DMA_INSTANCE)
+#define UART10_DMA_RX_IRQHandler DMA2_Stream3_IRQHandler
+#define UART10_RX_DMA_RCC RCC_AHB1ENR_DMA2EN
+#define UART10_RX_DMA_INSTANCE DMA2_Stream3
+#define UART10_RX_DMA_CHANNEL DMA_CHANNEL_9
+#define UART10_RX_DMA_IRQ DMA2_Stream3_IRQn
#endif
/* DMA2 stream4 */
@@ -250,6 +268,12 @@ extern "C" {
#define SPI5_RX_DMA_INSTANCE DMA2_Stream5
#define SPI5_RX_DMA_CHANNEL DMA_CHANNEL_7
#define SPI5_RX_DMA_IRQ DMA2_Stream5_IRQn
+#elif defined(BSP_UART10_TX_USING_DMA) && !defined(UART10_TX_DMA_INSTANCE)
+#define UART10_DMA_TX_IRQHandler DMA2_Stream5_IRQHandler
+#define UART10_TX_DMA_RCC RCC_AHB1ENR_DMA2EN
+#define UART10_TX_DMA_INSTANCE DMA2_Stream5
+#define UART10_TX_DMA_CHANNEL DMA_CHANNEL_9
+#define UART10_TX_DMA_IRQ DMA2_Stream5_IRQn
#endif
/* DMA2 stream6 */
@@ -259,7 +283,7 @@ extern "C" {
#define SPI5_TX_DMA_INSTANCE DMA2_Stream6
#define SPI5_TX_DMA_CHANNEL DMA_CHANNEL_7
#define SPI5_TX_DMA_IRQ DMA2_Stream6_IRQn
-#elif defined(BSP_UART6_TX_USING_DMA) && !defined(BSP_USING_SDIO) && !defined(UART6_TX_DMA_INSTANCE)
+#elif defined(BSP_UART6_TX_USING_DMA) && !defined(UART6_TX_DMA_INSTANCE)
#define UART6_DMA_TX_IRQHandler DMA2_Stream6_IRQHandler
#define UART6_TX_DMA_RCC RCC_AHB1ENR_DMA2EN
#define UART6_TX_DMA_INSTANCE DMA2_Stream6
@@ -268,18 +292,24 @@ extern "C" {
#endif
/* DMA2 stream7 */
-#if defined(BSP_UART1_TX_USING_DMA) && !defined(UART1_TX_DMA_INSTANCE)
+#if defined(BSP_UART9_RX_USING_DMA) && !defined(UART9_RX_DMA_INSTANCE)
+#define UART9_DMA_RX_IRQHandler DMA2_Stream7_IRQHandler
+#define UART9_RX_DMA_RCC RCC_AHB1ENR_DMA2EN
+#define UART9_RX_DMA_INSTANCE DMA2_Stream7
+#define UART9_RX_DMA_CHANNEL DMA_CHANNEL_0
+#define UART9_RX_DMA_IRQ DMA2_Stream7_IRQn
+#elif defined(BSP_UART1_TX_USING_DMA) && !defined(UART1_TX_DMA_INSTANCE)
#define UART1_DMA_TX_IRQHandler DMA2_Stream7_IRQHandler
#define UART1_TX_DMA_RCC RCC_AHB1ENR_DMA2EN
#define UART1_TX_DMA_INSTANCE DMA2_Stream7
#define UART1_TX_DMA_CHANNEL DMA_CHANNEL_4
#define UART1_TX_DMA_IRQ DMA2_Stream7_IRQn
-#elif defined(BSP_UART6_TX_USING_DMA) && !defined(UART6_TX_DMA_INSTANCE)
-#define UART6_DMA_TX_IRQHandler DMA2_Stream7_IRQHandler
-#define UART6_TX_DMA_RCC RCC_AHB1ENR_DMA2EN
-#define UART6_TX_DMA_INSTANCE DMA2_Stream7
-#define UART6_TX_DMA_CHANNEL DMA_CHANNEL_5
-#define UART6_TX_DMA_IRQ DMA2_Stream7_IRQn
+#elif defined(BSP_UART10_TX_USING_DMA) && !defined(UART10_TX_DMA_INSTANCE)
+#define UART10_DMA_TX_IRQHandler DMA2_Stream7_IRQHandler
+#define UART10_TX_DMA_RCC RCC_AHB1ENR_DMA2EN
+#define UART10_TX_DMA_INSTANCE DMA2_Stream7
+#define UART10_TX_DMA_CHANNEL DMA_CHANNEL_6
+#define UART10_TX_DMA_IRQ DMA2_Stream7_IRQn
#endif
#ifdef __cplusplus
diff --git a/libraries/HAL_Drivers/config/f4/uart_config.h b/libraries/HAL_Drivers/config/f4/uart_config.h
index acde141..c7b6487 100644
--- a/libraries/HAL_Drivers/config/f4/uart_config.h
+++ b/libraries/HAL_Drivers/config/f4/uart_config.h
@@ -298,6 +298,76 @@ extern "C" {
#endif /* BSP_UART8_TX_USING_DMA */
#endif /* BSP_USING_UART8 */
+#if defined(BSP_USING_UART9)
+#ifndef UART9_CONFIG
+#define UART9_CONFIG \
+ { \
+ .name = "uart9", \
+ .Instance = UART9, \
+ .irq_type = UART9_IRQn, \
+ }
+#endif /* UART8_CONFIG */
+
+#if defined(BSP_UART9_RX_USING_DMA)
+#ifndef UART9_DMA_RX_CONFIG
+#define UART9_DMA_RX_CONFIG \
+ { \
+ .Instance = UART8_RX_DMA_INSTANCE, \
+ .channel = UART8_RX_DMA_CHANNEL, \
+ .dma_rcc = UART8_RX_DMA_RCC, \
+ .dma_irq = UART8_RX_DMA_IRQ, \
+ }
+#endif /* UART9_DMA_RX_CONFIG */
+#endif /* BSP_UART9_RX_USING_DMA */
+
+#if defined(BSP_UART9_TX_USING_DMA)
+#ifndef UART9_DMA_TX_CONFIG
+#define UART9_DMA_TX_CONFIG \
+ { \
+ .Instance = UART9_TX_DMA_INSTANCE, \
+ .channel = UART9_TX_DMA_CHANNEL, \
+ .dma_rcc = UART9_TX_DMA_RCC, \
+ .dma_irq = UART9_TX_DMA_IRQ, \
+ }
+#endif /* UART9_DMA_TX_CONFIG */
+#endif /* BSP_UART9_TX_USING_DMA */
+#endif /* BSP_USING_UART9 */
+
+#if defined(BSP_USING_UART10)
+#ifndef UART10_CONFIG
+#define UART10_CONFIG \
+ { \
+ .name = "uart10", \
+ .Instance = UART10, \
+ .irq_type = UART10_IRQn, \
+ }
+#endif /* UART8_CONFIG */
+
+#if defined(BSP_UART10_RX_USING_DMA)
+#ifndef UART10_DMA_RX_CONFIG
+#define UART10_DMA_RX_CONFIG \
+ { \
+ .Instance = UART10_RX_DMA_INSTANCE, \
+ .channel = UART10_RX_DMA_CHANNEL, \
+ .dma_rcc = UART10_RX_DMA_RCC, \
+ .dma_irq = UART10_RX_DMA_IRQ, \
+ }
+#endif /* UART10_DMA_RX_CONFIG */
+#endif /* BSP_UART10_RX_USING_DMA */
+
+#if defined(BSP_UART10_TX_USING_DMA)
+#ifndef UART10_DMA_TX_CONFIG
+#define UART10_DMA_TX_CONFIG \
+ { \
+ .Instance = UART10_TX_DMA_INSTANCE, \
+ .channel = UART10_TX_DMA_CHANNEL, \
+ .dma_rcc = UART10_TX_DMA_RCC, \
+ .dma_irq = UART10_TX_DMA_IRQ, \
+ }
+#endif /* UART10_DMA_TX_CONFIG */
+#endif /* BSP_UART10_TX_USING_DMA */
+#endif /* BSP_USING_UART10 */
+
#ifdef __cplusplus
}
#endif
diff --git a/libraries/HAL_Drivers/drv_can.c b/libraries/HAL_Drivers/drv_can.c
index d119f91..3e7f274 100644
--- a/libraries/HAL_Drivers/drv_can.c
+++ b/libraries/HAL_Drivers/drv_can.c
@@ -113,6 +113,14 @@ static struct stm32_can drv_can2 =
};
#endif
+#ifdef BSP_USING_CAN3
+static struct stm32_can drv_can3 =
+{
+ "can3",
+ .CanHandle.Instance = CAN3,
+};
+#endif
+
static rt_uint32_t get_can_baud_index(rt_uint32_t baud)
{
rt_uint32_t len, index;
@@ -206,6 +214,13 @@ static rt_err_t _can_control(struct rt_can_device *can, int cmd, void *arg)
HAL_NVIC_DisableIRQ(CAN2_RX0_IRQn);
HAL_NVIC_DisableIRQ(CAN2_RX1_IRQn);
}
+#endif
+#ifdef CAN3
+ if (CAN3 == drv_can->CanHandle.Instance)
+ {
+ HAL_NVIC_DisableIRQ(CAN3_RX0_IRQn);
+ HAL_NVIC_DisableIRQ(CAN3_RX1_IRQn);
+ }
#endif
__HAL_CAN_DISABLE_IT(&drv_can->CanHandle, CAN_IT_RX_FIFO0_MSG_PENDING);
__HAL_CAN_DISABLE_IT(&drv_can->CanHandle, CAN_IT_RX_FIFO0_FULL);
@@ -225,6 +240,12 @@ static rt_err_t _can_control(struct rt_can_device *can, int cmd, void *arg)
{
HAL_NVIC_DisableIRQ(CAN2_TX_IRQn);
}
+#endif
+#ifdef CAN3
+ if (CAN3 == drv_can->CanHandle.Instance)
+ {
+ HAL_NVIC_DisableIRQ(CAN3_TX_IRQn);
+ }
#endif
__HAL_CAN_DISABLE_IT(&drv_can->CanHandle, CAN_IT_TX_MAILBOX_EMPTY);
}
@@ -239,6 +260,12 @@ static rt_err_t _can_control(struct rt_can_device *can, int cmd, void *arg)
{
NVIC_DisableIRQ(CAN2_SCE_IRQn);
}
+#endif
+#ifdef CAN3
+ if (CAN3 == drv_can->CanHandle.Instance)
+ {
+ NVIC_DisableIRQ(CAN3_SCE_IRQn);
+ }
#endif
__HAL_CAN_DISABLE_IT(&drv_can->CanHandle, CAN_IT_ERROR_WARNING);
__HAL_CAN_DISABLE_IT(&drv_can->CanHandle, CAN_IT_ERROR_PASSIVE);
@@ -273,6 +300,15 @@ static rt_err_t _can_control(struct rt_can_device *can, int cmd, void *arg)
HAL_NVIC_SetPriority(CAN2_RX1_IRQn, 1, 0);
HAL_NVIC_EnableIRQ(CAN2_RX1_IRQn);
}
+#endif
+#ifdef CAN3
+ if (CAN3 == drv_can->CanHandle.Instance)
+ {
+ HAL_NVIC_SetPriority(CAN3_RX0_IRQn, 1, 0);
+ HAL_NVIC_EnableIRQ(CAN3_RX0_IRQn);
+ HAL_NVIC_SetPriority(CAN3_RX1_IRQn, 1, 0);
+ HAL_NVIC_EnableIRQ(CAN3_RX1_IRQn);
+ }
#endif
}
else if (argval == RT_DEVICE_FLAG_INT_TX)
@@ -290,6 +326,13 @@ static rt_err_t _can_control(struct rt_can_device *can, int cmd, void *arg)
HAL_NVIC_SetPriority(CAN2_TX_IRQn, 1, 0);
HAL_NVIC_EnableIRQ(CAN2_TX_IRQn);
}
+#endif
+#ifdef CAN3
+ if (CAN3 == drv_can->CanHandle.Instance)
+ {
+ HAL_NVIC_SetPriority(CAN3_TX_IRQn, 1, 0);
+ HAL_NVIC_EnableIRQ(CAN3_TX_IRQn);
+ }
#endif
}
else if (argval == RT_DEVICE_CAN_INT_ERR)
@@ -311,6 +354,13 @@ static rt_err_t _can_control(struct rt_can_device *can, int cmd, void *arg)
HAL_NVIC_SetPriority(CAN2_SCE_IRQn, 1, 0);
HAL_NVIC_EnableIRQ(CAN2_SCE_IRQn);
}
+#endif
+#ifdef CAN3
+ if (CAN3 == drv_can->CanHandle.Instance)
+ {
+ HAL_NVIC_SetPriority(CAN3_SCE_IRQn, 1, 0);
+ HAL_NVIC_EnableIRQ(CAN3_SCE_IRQn);
+ }
#endif
}
break;
@@ -623,6 +673,12 @@ static int _can_recvmsg(struct rt_can_device *can, void *buf, rt_uint32_t fifo)
pmsg->hdr = (rxheader.FilterMatchIndex >> 1) + 14;
}
#endif
+#ifdef CAN3
+ else if (hcan->Instance == CAN3)
+ {
+ pmsg->hdr = (rxheader.FilterMatchIndex + 1) >> 1;
+ }
+#endif
return RT_EOK;
}
@@ -937,6 +993,126 @@ void CAN2_SCE_IRQHandler(void)
}
#endif /* BSP_USING_CAN2 */
+#ifdef BSP_USING_CAN3
+/**
+ * @brief This function handles CAN3 TX interrupts. transmit fifo0/1/2 is empty can trigger this interrupt
+ */
+void CAN3_TX_IRQHandler(void)
+{
+ rt_interrupt_enter();
+ CAN_HandleTypeDef *hcan;
+ hcan = &drv_can3.CanHandle;
+ if (__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_RQCP0))
+ {
+ if (__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_TXOK0))
+ {
+ rt_hw_can_isr(&drv_can3.device, RT_CAN_EVENT_TX_DONE | 0 << 8);
+ }
+ else
+ {
+ rt_hw_can_isr(&drv_can3.device, RT_CAN_EVENT_TX_FAIL | 0 << 8);
+ }
+ /* Write 0 to Clear transmission status flag RQCPx */
+ SET_BIT(hcan->Instance->TSR, CAN_TSR_RQCP0);
+ }
+ else if (__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_RQCP1))
+ {
+ if (__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_TXOK1))
+ {
+ rt_hw_can_isr(&drv_can3.device, RT_CAN_EVENT_TX_DONE | 1 << 8);
+ }
+ else
+ {
+ rt_hw_can_isr(&drv_can3.device, RT_CAN_EVENT_TX_FAIL | 1 << 8);
+ }
+ /* Write 0 to Clear transmission status flag RQCPx */
+ SET_BIT(hcan->Instance->TSR, CAN_TSR_RQCP1);
+ }
+ else if (__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_RQCP2))
+ {
+ if (__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_TXOK2))
+ {
+ rt_hw_can_isr(&drv_can3.device, RT_CAN_EVENT_TX_DONE | 2 << 8);
+ }
+ else
+ {
+ rt_hw_can_isr(&drv_can3.device, RT_CAN_EVENT_TX_FAIL | 2 << 8);
+ }
+ /* Write 0 to Clear transmission status flag RQCPx */
+ SET_BIT(hcan->Instance->TSR, CAN_TSR_RQCP2);
+ }
+ rt_interrupt_leave();
+}
+
+/**
+ * @brief This function handles CAN3 RX0 interrupts.
+ */
+void CAN3_RX0_IRQHandler(void)
+{
+ rt_interrupt_enter();
+ _can_rx_isr(&drv_can3.device, CAN_RX_FIFO0);
+ rt_interrupt_leave();
+}
+
+/**
+ * @brief This function handles CAN3 RX1 interrupts.
+ */
+void CAN3_RX1_IRQHandler(void)
+{
+ rt_interrupt_enter();
+ _can_rx_isr(&drv_can3.device, CAN_RX_FIFO1);
+ rt_interrupt_leave();
+}
+
+/**
+ * @brief This function handles CAN3 SCE interrupts.
+ */
+void CAN3_SCE_IRQHandler(void)
+{
+ rt_uint32_t errtype;
+ CAN_HandleTypeDef *hcan;
+
+ hcan = &drv_can3.CanHandle;
+ errtype = hcan->Instance->ESR;
+
+ rt_interrupt_enter();
+ HAL_CAN_IRQHandler(hcan);
+
+ switch ((errtype & 0x70) >> 4)
+ {
+ case RT_CAN_BUS_BIT_PAD_ERR:
+ drv_can3.device.status.bitpaderrcnt++;
+ break;
+ case RT_CAN_BUS_FORMAT_ERR:
+ drv_can3.device.status.formaterrcnt++;
+ break;
+ case RT_CAN_BUS_ACK_ERR:/* attention !!! test ack err's unit is transmit unit */
+ drv_can3.device.status.ackerrcnt++;
+ if (!READ_BIT(drv_can3.CanHandle.Instance->TSR, CAN_FLAG_TXOK0))
+ rt_hw_can_isr(&drv_can3.device, RT_CAN_EVENT_TX_FAIL | 0 << 8);
+ else if (!READ_BIT(drv_can3.CanHandle.Instance->TSR, CAN_FLAG_TXOK0))
+ rt_hw_can_isr(&drv_can3.device, RT_CAN_EVENT_TX_FAIL | 1 << 8);
+ else if (!READ_BIT(drv_can3.CanHandle.Instance->TSR, CAN_FLAG_TXOK0))
+ rt_hw_can_isr(&drv_can3.device, RT_CAN_EVENT_TX_FAIL | 2 << 8);
+ break;
+ case RT_CAN_BUS_IMPLICIT_BIT_ERR:
+ case RT_CAN_BUS_EXPLICIT_BIT_ERR:
+ drv_can3.device.status.biterrcnt++;
+ break;
+ case RT_CAN_BUS_CRC_ERR:
+ drv_can3.device.status.crcerrcnt++;
+ break;
+ }
+
+ drv_can3.device.status.lasterrtype = errtype & 0x70;
+ drv_can3.device.status.rcverrcnt = errtype >> 24;
+ drv_can3.device.status.snderrcnt = (errtype >> 16 & 0xFF);
+ drv_can3.device.status.errcode = errtype & 0x07;
+ hcan->Instance->MSR |= CAN_MSR_ERRI;
+ rt_interrupt_leave();
+}
+#endif /* BSP_USING_CAN3 */
+
/**
* @brief Error CAN callback.
* @param hcan pointer to a CAN_HandleTypeDef structure that contains
@@ -1007,6 +1183,18 @@ int rt_hw_can_init(void)
&drv_can2);
#endif /* BSP_USING_CAN2 */
+#ifdef BSP_USING_CAN3
+ filterConf.FilterBank = 0;
+
+ drv_can3.FilterConfig = filterConf;
+ drv_can3.device.config = config;
+ /* register CAN3 device */
+ rt_hw_can_register(&drv_can3.device,
+ drv_can3.name,
+ &_can_ops,
+ &drv_can3);
+#endif /* BSP_USING_CAN3 */
+
return 0;
}
diff --git a/libraries/HAL_Drivers/drv_usart.c b/libraries/HAL_Drivers/drv_usart.c
index d3f7561..7829751 100644
--- a/libraries/HAL_Drivers/drv_usart.c
+++ b/libraries/HAL_Drivers/drv_usart.c
@@ -25,7 +25,8 @@
#if !defined(BSP_USING_UART1) && !defined(BSP_USING_UART2) && !defined(BSP_USING_UART3) && \
!defined(BSP_USING_UART4) && !defined(BSP_USING_UART5) && !defined(BSP_USING_UART6) && \
- !defined(BSP_USING_UART7) && !defined(BSP_USING_UART8) && !defined(BSP_USING_LPUART1)
+ !defined(BSP_USING_UART7) && !defined(BSP_USING_UART8) && !defined(BSP_USING_UART9) && \
+ !defined(BSP_USING_UART10) && !defined(BSP_USING_LPUART1)
#error "Please define at least one BSP_USING_UARTx"
/* this driver can be disabled at menuconfig -> RT-Thread Components -> Device Drivers */
#endif
@@ -60,6 +61,12 @@ enum
#ifdef BSP_USING_UART8
UART8_INDEX,
#endif
+#ifdef BSP_USING_UART9
+ UART9_INDEX,
+#endif
+#ifdef BSP_USING_UART10
+ UART10_INDEX,
+#endif
#ifdef BSP_USING_LPUART1
LPUART1_INDEX,
#endif
@@ -91,6 +98,12 @@ static struct stm32_uart_config uart_config[] =
#ifdef BSP_USING_UART8
UART8_CONFIG,
#endif
+#ifdef BSP_USING_UART9
+ UART9_CONFIG,
+#endif
+#ifdef BSP_USING_UART10
+ UART10_CONFIG,
+#endif
#ifdef BSP_USING_LPUART1
LPUART1_CONFIG,
#endif
@@ -795,6 +808,80 @@ void UART8_DMA_TX_IRQHandler(void)
#endif /* defined(RT_SERIAL_USING_DMA) && defined(BSP_UART8_TX_USING_DMA) */
#endif /* BSP_USING_UART8*/
+#if defined(BSP_USING_UART9)
+void UART9_IRQHandler(void)
+{
+ /* enter interrupt */
+ rt_interrupt_enter();
+
+ uart_isr(&(uart_obj[UART9_INDEX].serial));
+
+ /* leave interrupt */
+ rt_interrupt_leave();
+}
+#if defined(RT_SERIAL_USING_DMA) && defined(BSP_UART9_RX_USING_DMA)
+void UART9_DMA_RX_IRQHandler(void)
+{
+ /* enter interrupt */
+ rt_interrupt_enter();
+
+ HAL_DMA_IRQHandler(&uart_obj[UART9_INDEX].dma_rx.handle);
+
+ /* leave interrupt */
+ rt_interrupt_leave();
+}
+#endif /* defined(RT_SERIAL_USING_DMA) && defined(BSP_UART9_RX_USING_DMA) */
+#if defined(RT_SERIAL_USING_DMA) && defined(BSP_UART9_TX_USING_DMA)
+void UART9_DMA_TX_IRQHandler(void)
+{
+ /* enter interrupt */
+ rt_interrupt_enter();
+
+ HAL_DMA_IRQHandler(&uart_obj[UART9_INDEX].dma_tx.handle);
+
+ /* leave interrupt */
+ rt_interrupt_leave();
+}
+#endif /* defined(RT_SERIAL_USING_DMA) && defined(BSP_UART9_TX_USING_DMA) */
+#endif /* BSP_USING_UART9*/
+
+#if defined(BSP_USING_UART10)
+void UART10_IRQHandler(void)
+{
+ /* enter interrupt */
+ rt_interrupt_enter();
+
+ uart_isr(&(uart_obj[UART10_INDEX].serial));
+
+ /* leave interrupt */
+ rt_interrupt_leave();
+}
+#if defined(RT_SERIAL_USING_DMA) && defined(BSP_UART10_RX_USING_DMA)
+void UART10_DMA_RX_IRQHandler(void)
+{
+ /* enter interrupt */
+ rt_interrupt_enter();
+
+ HAL_DMA_IRQHandler(&uart_obj[UART10_INDEX].dma_rx.handle);
+
+ /* leave interrupt */
+ rt_interrupt_leave();
+}
+#endif /* defined(RT_SERIAL_USING_DMA) && defined(BSP_UART10_RX_USING_DMA) */
+#if defined(RT_SERIAL_USING_DMA) && defined(BSP_UART10_TX_USING_DMA)
+void UART10_DMA_TX_IRQHandler(void)
+{
+ /* enter interrupt */
+ rt_interrupt_enter();
+
+ HAL_DMA_IRQHandler(&uart_obj[UART10_INDEX].dma_tx.handle);
+
+ /* leave interrupt */
+ rt_interrupt_leave();
+}
+#endif /* defined(RT_SERIAL_USING_DMA) && defined(BSP_UART10_TX_USING_DMA) */
+#endif /* BSP_USING_UART10*/
+
#if defined(BSP_USING_LPUART1)
void LPUART1_IRQHandler(void)
{
@@ -820,6 +907,8 @@ void LPUART1_DMA_RX_IRQHandler(void)
#endif /* defined(RT_SERIAL_USING_DMA) && defined(BSP_LPUART1_RX_USING_DMA) */
#endif /* BSP_USING_LPUART1*/
+#ifdef RT_SERIAL_USING_DMA
+
static void stm32_uart_get_dma_config(void)
{
#ifdef BSP_USING_UART1
@@ -933,9 +1022,36 @@ static void stm32_uart_get_dma_config(void)
uart_config[UART8_INDEX].dma_tx = &uart8_dma_tx;
#endif
#endif
+
+#ifdef BSP_USING_UART9
+ uart_obj[UART8_INDEX].uart_dma_flag = 0;
+#ifdef BSP_UART9_RX_USING_DMA
+ uart_obj[UART9_INDEX].uart_dma_flag |= RT_DEVICE_FLAG_DMA_RX;
+ static struct dma_config uart9_dma_rx = UART9_DMA_RX_CONFIG;
+ uart_config[UART9_INDEX].dma_rx = &uart8_dma_rx;
+#endif
+#ifdef BSP_UART9_TX_USING_DMA
+ uart_obj[UART9_INDEX].uart_dma_flag |= RT_DEVICE_FLAG_DMA_TX;
+ static struct dma_config uart9_dma_tx = UART9_DMA_TX_CONFIG;
+ uart_config[UART9_INDEX].dma_tx = &uart9_dma_tx;
+#endif
+#endif
+
+#ifdef BSP_USING_UART10
+ uart_obj[UART10_INDEX].uart_dma_flag = 0;
+#ifdef BSP_UART10_RX_USING_DMA
+ uart_obj[UART10_INDEX].uart_dma_flag |= RT_DEVICE_FLAG_DMA_RX;
+ static struct dma_config uart10_dma_rx = UART10_DMA_RX_CONFIG;
+ uart_config[UART10_INDEX].dma_rx = &uart10_dma_rx;
+#endif
+#ifdef BSP_UART10_TX_USING_DMA
+ uart_obj[UART10_INDEX].uart_dma_flag |= RT_DEVICE_FLAG_DMA_TX;
+ static struct dma_config uart10_dma_tx = UART10_DMA_TX_CONFIG;
+ uart_config[UART10_INDEX].dma_tx = &uart10_dma_tx;
+#endif
+#endif
}
-#ifdef RT_SERIAL_USING_DMA
static void stm32_dma_config(struct rt_serial_device *serial, rt_ubase_t flag)
{
struct rt_serial_rx_fifo *rx_fifo;
diff --git a/project.uvoptx b/project.uvoptx
index ff0a08f..f21da4f 100644
--- a/project.uvoptx
+++ b/project.uvoptx
@@ -303,8 +303,8 @@
0
0
0
- rt-thread\components\libc\cplusplus\cxx_Semaphore.cpp
- cxx_Semaphore.cpp
+ rt-thread\components\libc\cplusplus\cxx_Mutex.cpp
+ cxx_Mutex.cpp
0
0
@@ -327,8 +327,8 @@
0
0
0
- rt-thread\components\libc\cplusplus\cxx_Mutex.cpp
- cxx_Mutex.cpp
+ rt-thread\components\libc\cplusplus\cxx_Semaphore.cpp
+ cxx_Semaphore.cpp
0
0
@@ -568,7 +568,7 @@
Drivers
- 1
+ 0
0
0
0
@@ -683,18 +683,6 @@
0
0
0
- rt-thread\components\fal\src\fal_partition.c
- fal_partition.c
- 0
- 0
-
-
- 6
- 39
- 1
- 0
- 0
- 0
rt-thread\components\fal\src\fal_flash.c
fal_flash.c
0
@@ -702,7 +690,7 @@
6
- 40
+ 39
1
0
0
@@ -714,7 +702,7 @@
6
- 41
+ 40
1
0
0
@@ -724,6 +712,18 @@
0
0
+
+ 6
+ 41
+ 1
+ 0
+ 0
+ 0
+ rt-thread\components\fal\src\fal_partition.c
+ fal_partition.c
+ 0
+ 0
+
@@ -763,8 +763,8 @@
0
0
0
- rt-thread\components\finsh\msh_parse.c
- msh_parse.c
+ rt-thread\components\finsh\cmd.c
+ cmd.c
0
0
@@ -775,8 +775,8 @@
0
0
0
- rt-thread\components\finsh\cmd.c
- cmd.c
+ rt-thread\components\finsh\msh_parse.c
+ msh_parse.c
0
0
@@ -979,8 +979,8 @@
0
0
0
- libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash_ex.c
- stm32f4xx_hal_flash_ex.c
+ libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cec.c
+ stm32f4xx_hal_cec.c
0
0
@@ -991,90 +991,6 @@
0
0
0
- libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_uart.c
- stm32f4xx_hal_uart.c
- 0
- 0
-
-
- 10
- 62
- 1
- 0
- 0
- 0
- libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc_ex.c
- stm32f4xx_hal_rcc_ex.c
- 0
- 0
-
-
- 10
- 63
- 1
- 0
- 0
- 0
- libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_crc.c
- stm32f4xx_hal_crc.c
- 0
- 0
-
-
- 10
- 64
- 1
- 0
- 0
- 0
- libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cryp_ex.c
- stm32f4xx_hal_cryp_ex.c
- 0
- 0
-
-
- 10
- 65
- 1
- 0
- 0
- 0
- libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr_ex.c
- stm32f4xx_hal_pwr_ex.c
- 0
- 0
-
-
- 10
- 66
- 1
- 0
- 0
- 0
- libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma.c
- stm32f4xx_hal_dma.c
- 0
- 0
-
-
- 10
- 67
- 1
- 0
- 0
- 0
- libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_usart.c
- stm32f4xx_hal_usart.c
- 0
- 0
-
-
- 10
- 68
- 1
- 0
- 0
- 0
libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr.c
stm32f4xx_hal_pwr.c
0
@@ -1082,43 +998,79 @@
10
- 69
+ 62
1
0
0
0
- libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_iwdg.c
- stm32f4xx_hal_iwdg.c
+ libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_crc.c
+ stm32f4xx_hal_crc.c
0
0
10
- 70
+ 63
1
0
0
0
- libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc.c
- stm32f4xx_hal_rcc.c
+ libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash_ramfunc.c
+ stm32f4xx_hal_flash_ramfunc.c
0
0
10
- 71
+ 64
1
0
0
0
- libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma_ex.c
- stm32f4xx_hal_dma_ex.c
+ libraries\STM32F4xx_HAL\CMSIS\Device\ST\STM32F4xx\Source\Templates\system_stm32f4xx.c
+ system_stm32f4xx.c
0
0
10
- 72
+ 65
+ 1
+ 0
+ 0
+ 0
+ libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cryp.c
+ stm32f4xx_hal_cryp.c
+ 0
+ 0
+
+
+ 10
+ 66
+ 1
+ 0
+ 0
+ 0
+ libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cortex.c
+ stm32f4xx_hal_cortex.c
+ 0
+ 0
+
+
+ 10
+ 67
+ 1
+ 0
+ 0
+ 0
+ libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal.c
+ stm32f4xx_hal.c
+ 0
+ 0
+
+
+ 10
+ 68
1
0
0
@@ -1130,7 +1082,43 @@
10
- 73
+ 69
+ 1
+ 0
+ 0
+ 0
+ libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cryp_ex.c
+ stm32f4xx_hal_cryp_ex.c
+ 0
+ 0
+
+
+ 10
+ 70
+ 1
+ 0
+ 0
+ 0
+ libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma.c
+ stm32f4xx_hal_dma.c
+ 0
+ 0
+
+
+ 10
+ 71
+ 1
+ 0
+ 0
+ 0
+ libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc.c
+ stm32f4xx_hal_rcc.c
+ 0
+ 0
+
+
+ 10
+ 72
1
0
0
@@ -1140,6 +1128,18 @@
0
0
+
+ 10
+ 73
+ 1
+ 0
+ 0
+ 0
+ libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash_ex.c
+ stm32f4xx_hal_flash_ex.c
+ 0
+ 0
+
10
74
@@ -1147,8 +1147,8 @@
0
0
0
- libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cortex.c
- stm32f4xx_hal_cortex.c
+ libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc_ex.c
+ stm32f4xx_hal_rcc_ex.c
0
0
@@ -1171,8 +1171,8 @@
0
0
0
- libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cryp.c
- stm32f4xx_hal_cryp.c
+ libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_uart.c
+ stm32f4xx_hal_uart.c
0
0
@@ -1183,59 +1183,59 @@
0
0
0
- libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash_ramfunc.c
- stm32f4xx_hal_flash_ramfunc.c
- 0
- 0
-
-
- 10
- 78
- 1
- 0
- 0
- 0
- libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal.c
- stm32f4xx_hal.c
- 0
- 0
-
-
- 10
- 79
- 1
- 0
- 0
- 0
- libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_wwdg.c
- stm32f4xx_hal_wwdg.c
- 0
- 0
-
-
- 10
- 80
- 1
- 0
- 0
- 0
- libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cec.c
- stm32f4xx_hal_cec.c
- 0
- 0
-
-
- 10
- 81
- 1
- 0
- 0
- 0
libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash.c
stm32f4xx_hal_flash.c
0
0
+
+ 10
+ 78
+ 1
+ 0
+ 0
+ 0
+ libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_wwdg.c
+ stm32f4xx_hal_wwdg.c
+ 0
+ 0
+
+
+ 10
+ 79
+ 1
+ 0
+ 0
+ 0
+ libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_iwdg.c
+ stm32f4xx_hal_iwdg.c
+ 0
+ 0
+
+
+ 10
+ 80
+ 1
+ 0
+ 0
+ 0
+ libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma_ex.c
+ stm32f4xx_hal_dma_ex.c
+ 0
+ 0
+
+
+ 10
+ 81
+ 1
+ 0
+ 0
+ 0
+ libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr_ex.c
+ stm32f4xx_hal_pwr_ex.c
+ 0
+ 0
+
10
82
@@ -1243,8 +1243,8 @@
0
0
0
- libraries\STM32F4xx_HAL\CMSIS\Device\ST\STM32F4xx\Source\Templates\system_stm32f4xx.c
- system_stm32f4xx.c
+ libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_usart.c
+ stm32f4xx_hal_usart.c
0
0
diff --git a/project.uvprojx b/project.uvprojx
index d34e034..c7acaf4 100644
--- a/project.uvprojx
+++ b/project.uvprojx
@@ -337,9 +337,9 @@
0
- __STDC_LIMIT_MACROS, STM32F413xx, USE_HAL_DRIVER, RT_USING_LIBC, __CLK_TCK=RT_TICK_PER_SECOND, __RTTHREAD__, RT_USING_ARM_LIBC
+ __CLK_TCK=RT_TICK_PER_SECOND, STM32F413xx, USE_HAL_DRIVER, RT_USING_ARM_LIBC, RT_USING_LIBC, __RTTHREAD__, __STDC_LIMIT_MACROS
- rt-thread\components\drivers\include;rt-thread\components\libc\posix\io\poll;rt-thread\components\drivers\include;libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Inc;.;board\CubeMX_Config\Inc;rt-thread\components\libc\posix\ipc;libraries\HAL_Drivers\drv_flash;libraries\STM32F4xx_HAL\CMSIS\Device\ST\STM32F4xx\Include;rt-thread\components\libc\compilers\common\include;libraries\HAL_Drivers;rt-thread\components\drivers\include;rt-thread\components\libc\compilers\common\extension\fcntl\octal;board;rt-thread\components\libc\posix\io\stdio;rt-thread\libcpu\arm\common;rt-thread\components\drivers\include;rt-thread\include;iap;rt-thread\components\fal\inc;rt-thread\components\utilities\ymodem;rt-thread\components\libc\compilers\common\extension;libraries\HAL_Drivers\config;rt-thread\components\finsh;rt-thread\libcpu\arm\cortex-m4;rt-thread\components\drivers\include;libraries\HAL_Drivers\CMSIS\Include;rt-thread\components\libc\cplusplus
+ libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Inc;rt-thread\components\libc\compilers\common\include;rt-thread\components\libc\posix\ipc;libraries\STM32F4xx_HAL\CMSIS\Device\ST\STM32F4xx\Include;board\CubeMX_Config\Inc;rt-thread\components\libc\posix\io\stdio;board;rt-thread\components\drivers\include;rt-thread\components\drivers\include;libraries\HAL_Drivers;rt-thread\components\fal\inc;rt-thread\components\drivers\include;rt-thread\libcpu\arm\common;rt-thread\components\drivers\include;libraries\HAL_Drivers\CMSIS\Include;rt-thread\include;.;rt-thread\components\finsh;libraries\HAL_Drivers\config;rt-thread\components\libc\compilers\common\extension;rt-thread\components\drivers\include;rt-thread\components\utilities\ymodem;libraries\HAL_Drivers\drv_flash;rt-thread\components\libc\cplusplus;rt-thread\components\libc\posix\io\poll;rt-thread\components\libc\compilers\common\extension\fcntl\octal;rt-thread\libcpu\arm\cortex-m4;iap
@@ -429,9 +429,9 @@
CPlusPlus
- cxx_Semaphore.cpp
+ cxx_Mutex.cpp
8
- rt-thread\components\libc\cplusplus\cxx_Semaphore.cpp
+ rt-thread\components\libc\cplusplus\cxx_Mutex.cpp
cxx_crt.cpp
@@ -439,9 +439,9 @@
rt-thread\components\libc\cplusplus\cxx_crt.cpp
- cxx_Mutex.cpp
+ cxx_Semaphore.cpp
8
- rt-thread\components\libc\cplusplus\cxx_Mutex.cpp
+ rt-thread\components\libc\cplusplus\cxx_Semaphore.cpp
cxx_crt_init.c
@@ -593,11 +593,6 @@
Fal
-
- fal_partition.c
- 1
- rt-thread\components\fal\src\fal_partition.c
-
fal_flash.c
1
@@ -613,6 +608,11 @@
1
rt-thread\components\fal\src\fal.c
+
+ fal_partition.c
+ 1
+ rt-thread\components\fal\src\fal_partition.c
+
@@ -628,16 +628,16 @@
1
rt-thread\components\finsh\msh.c
-
- msh_parse.c
- 1
- rt-thread\components\finsh\msh_parse.c
-
cmd.c
1
rt-thread\components\finsh\cmd.c
+
+ msh_parse.c
+ 1
+ rt-thread\components\finsh\msh_parse.c
+
@@ -724,44 +724,9 @@
Libraries
- stm32f4xx_hal_flash_ex.c
+ stm32f4xx_hal_cec.c
1
- libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash_ex.c
-
-
- stm32f4xx_hal_uart.c
- 1
- libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_uart.c
-
-
- stm32f4xx_hal_rcc_ex.c
- 1
- libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc_ex.c
-
-
- stm32f4xx_hal_crc.c
- 1
- libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_crc.c
-
-
- stm32f4xx_hal_cryp_ex.c
- 1
- libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cryp_ex.c
-
-
- stm32f4xx_hal_pwr_ex.c
- 1
- libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr_ex.c
-
-
- stm32f4xx_hal_dma.c
- 1
- libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma.c
-
-
- stm32f4xx_hal_usart.c
- 1
- libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_usart.c
+ libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cec.c
stm32f4xx_hal_pwr.c
@@ -769,64 +734,79 @@
libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr.c
- stm32f4xx_hal_iwdg.c
+ stm32f4xx_hal_crc.c
1
- libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_iwdg.c
-
-
- stm32f4xx_hal_rcc.c
- 1
- libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc.c
-
-
- stm32f4xx_hal_dma_ex.c
- 1
- libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma_ex.c
-
-
- stm32f4xx_hal_gpio.c
- 1
- libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_gpio.c
-
-
- stm32f4xx_hal_rng.c
- 1
- libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rng.c
-
-
- stm32f4xx_hal_cortex.c
- 1
- libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cortex.c
-
-
- stm32f4xx_hal_can.c
- 1
- libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_can.c
-
-
- stm32f4xx_hal_cryp.c
- 1
- libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cryp.c
+ libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_crc.c
stm32f4xx_hal_flash_ramfunc.c
1
libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash_ramfunc.c
+
+ system_stm32f4xx.c
+ 1
+ libraries\STM32F4xx_HAL\CMSIS\Device\ST\STM32F4xx\Source\Templates\system_stm32f4xx.c
+
+
+ stm32f4xx_hal_cryp.c
+ 1
+ libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cryp.c
+
+
+ stm32f4xx_hal_cortex.c
+ 1
+ libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cortex.c
+
stm32f4xx_hal.c
1
libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal.c
- stm32f4xx_hal_wwdg.c
+ stm32f4xx_hal_gpio.c
1
- libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_wwdg.c
+ libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_gpio.c
- stm32f4xx_hal_cec.c
+ stm32f4xx_hal_cryp_ex.c
1
- libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cec.c
+ libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_cryp_ex.c
+
+
+ stm32f4xx_hal_dma.c
+ 1
+ libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma.c
+
+
+ stm32f4xx_hal_rcc.c
+ 1
+ libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc.c
+
+
+ stm32f4xx_hal_rng.c
+ 1
+ libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rng.c
+
+
+ stm32f4xx_hal_flash_ex.c
+ 1
+ libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash_ex.c
+
+
+ stm32f4xx_hal_rcc_ex.c
+ 1
+ libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc_ex.c
+
+
+ stm32f4xx_hal_can.c
+ 1
+ libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_can.c
+
+
+ stm32f4xx_hal_uart.c
+ 1
+ libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_uart.c
stm32f4xx_hal_flash.c
@@ -834,9 +814,29 @@
libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_flash.c
- system_stm32f4xx.c
+ stm32f4xx_hal_wwdg.c
1
- libraries\STM32F4xx_HAL\CMSIS\Device\ST\STM32F4xx\Source\Templates\system_stm32f4xx.c
+ libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_wwdg.c
+
+
+ stm32f4xx_hal_iwdg.c
+ 1
+ libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_iwdg.c
+
+
+ stm32f4xx_hal_dma_ex.c
+ 1
+ libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_dma_ex.c
+
+
+ stm32f4xx_hal_pwr_ex.c
+ 1
+ libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_pwr_ex.c
+
+
+ stm32f4xx_hal_usart.c
+ 1
+ libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_usart.c
diff --git a/rt-thread/components/drivers/include/drivers/serial.h b/rt-thread/components/drivers/include/drivers/serial.h
index 3b0d4c8..57d9920 100644
--- a/rt-thread/components/drivers/include/drivers/serial.h
+++ b/rt-thread/components/drivers/include/drivers/serial.h
@@ -109,6 +109,14 @@ struct serial_configure
rt_uint32_t reserved :5;
};
+struct serial_sem_cfg
+{
+ rt_sem_t sem_rx;
+ rt_sem_t sem_tx;
+};
+
+#define RT_SERIAL_CTRL_CONFIG_SEM 0x30
+
/*
* Serial FIFO mode
*/
@@ -150,6 +158,9 @@ struct rt_serial_device
void *serial_rx;
void *serial_tx;
+
+ rt_sem_t sem_rx;
+ rt_sem_t sem_tx;
};
typedef struct rt_serial_device rt_serial_t;
diff --git a/rt-thread/components/drivers/serial/serial.c b/rt-thread/components/drivers/serial/serial.c
index 25f06fa..a2ba5b4 100644
--- a/rt-thread/components/drivers/serial/serial.c
+++ b/rt-thread/components/drivers/serial/serial.c
@@ -1225,6 +1225,20 @@ static rt_err_t rt_serial_control(struct rt_device *dev,
}
break;
#endif /* RT_USING_POSIX_STDIO */
+ case RT_SERIAL_CTRL_CONFIG_SEM:
+ if (args && serial->parent.ref_count)
+ {
+ ret = RT_EBUSY;
+ break;
+ }
+
+ if (args)
+ {
+ struct serial_sem_cfg *cfg = args;
+ serial->sem_rx = cfg->sem_rx;
+ serial->sem_tx = cfg->sem_tx;
+ }
+ break;
default :
/* control device */
ret = serial->ops->control(serial, cmd, args);
@@ -1330,7 +1344,7 @@ void rt_hw_serial_isr(struct rt_serial_device *serial, int event)
}
/* invoke callback */
- if (serial->parent.rx_indicate != RT_NULL)
+ if (serial->parent.rx_indicate != RT_NULL || serial->sem_rx != RT_NULL)
{
rt_size_t rx_length;
@@ -1342,7 +1356,11 @@ void rt_hw_serial_isr(struct rt_serial_device *serial, int event)
if (rx_length)
{
- serial->parent.rx_indicate(&serial->parent, rx_length);
+ if (serial->sem_rx != RT_NULL)
+ rt_sem_release(serial->sem_rx);
+
+ if (serial->parent.rx_indicate != RT_NULL)
+ serial->parent.rx_indicate(&serial->parent, rx_length);
}
}
break;
@@ -1378,6 +1396,9 @@ void rt_hw_serial_isr(struct rt_serial_device *serial, int event)
}
/* invoke callback */
+ if (serial->sem_tx != RT_NULL)
+ rt_sem_release(serial->sem_tx);
+
if (serial->parent.tx_complete != RT_NULL)
{
serial->parent.tx_complete(&serial->parent, (void*)last_data_ptr);
@@ -1414,6 +1435,9 @@ void rt_hw_serial_isr(struct rt_serial_device *serial, int event)
/* enable interrupt */
rt_hw_interrupt_enable(level);
/* invoke callback */
+ if (serial->sem_rx != RT_NULL)
+ rt_sem_release(serial->sem_rx);
+
if (serial->parent.rx_indicate != RT_NULL)
{
serial->parent.rx_indicate(&(serial->parent), length);
diff --git a/rtconfig.h b/rtconfig.h
index 56b3a2a..317a812 100644
--- a/rtconfig.h
+++ b/rtconfig.h
@@ -214,12 +214,34 @@
#define BSP_USING_GPIO
#define BSP_USING_UART
#define BSP_USING_UART1
+#define BSP_UART1_RX_USING_DMA
+#define BSP_UART1_TX_USING_DMA
#define BSP_USING_UART2
#define BSP_UART2_RX_USING_DMA
#define BSP_UART2_TX_USING_DMA
+#define BSP_USING_UART3
+#define BSP_UART3_RX_USING_DMA
+#define BSP_UART3_TX_USING_DMA
+#define BSP_USING_UART4
+#define BSP_UART4_RX_USING_DMA
+#define BSP_UART4_TX_USING_DMA
+#define BSP_USING_UART5
+#define BSP_UART5_RX_USING_DMA
+#define BSP_UART5_TX_USING_DMA
+#define BSP_USING_UART6
+#define BSP_UART6_RX_USING_DMA
+#define BSP_UART6_TX_USING_DMA
+#define BSP_USING_UART7
+#define BSP_USING_UART8
+#define BSP_USING_UART9
+#define BSP_UART9_TX_USING_DMA
+#define BSP_USING_UART10
+#define BSP_UART10_RX_USING_DMA
+#define BSP_UART10_TX_USING_DMA
#define BSP_USING_CAN
#define BSP_USING_CAN1
#define BSP_USING_CAN2
+#define BSP_USING_CAN3
#define BSP_USING_ON_CHIP_FLASH
/* Board extended module Drivers */