From c7cf944e61c041d8547ca3970a2d0fbc2a58c05e Mon Sep 17 00:00:00 2001 From: sc <2401809606@qq.com> Date: Sat, 22 Nov 2025 00:30:41 +0800 Subject: [PATCH] =?UTF-8?q?=E6=97=B6=E9=92=9F=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .cproject | 2 +- .project | 2 +- applications/DATA_uart.c | 147 +++++++++++++++++++-------------- applications/DB_SQLite.c | 2 +- cubemx/Inc/stm32h7xx_it.h | 1 + cubemx/Src/main.c | 22 ++++- cubemx/Src/stm32h7xx_hal_msp.c | 41 +++++++-- cubemx/Src/stm32h7xx_it.c | 15 ++++ cubemx/cubemx.ioc | 140 ++++++++++++++++++------------- drivers/board.h | 2 + drivers/include/drv_dma.h | 5 +- packages/packages.dbsqlite | Bin 8192 -> 143360 bytes 12 files changed, 240 insertions(+), 139 deletions(-) diff --git a/.cproject b/.cproject index e234b49..63df00c 100644 --- a/.cproject +++ b/.cproject @@ -236,7 +236,7 @@ - + diff --git a/.project b/.project index 350c330..f059ea4 100644 --- a/.project +++ b/.project @@ -1,6 +1,6 @@ - project + 828F diff --git a/applications/DATA_uart.c b/applications/DATA_uart.c index d1cda58..9d7be8f 100644 --- a/applications/DATA_uart.c +++ b/applications/DATA_uart.c @@ -7,30 +7,40 @@ * Date Author Notes * 2025-10-20 Administrator the first version * 2025-11-12 Modified Switch to IDLE interrupt mode (no DMA, no ringbuffer) + * 2025-11-21 Fixed Enable RX_IDLE mode correctly for RT-Thread 5.1 */ #include #include +#include // ← 显式包含,确保 RT_SERIAL_EVENT_RX_IDLE 可见 #include "data_comm.h" +#define DBG_TAG "SCCM_link" +#define DBG_LVL DBG_LOG +#include + #define SAMPLE_UART_NAME "uart1" -#define RX_LINE_BUF_SIZE 1024 // 假设 MAX_INPUT_LEN 已定义,如 256 +#define RX_LINE_BUF_SIZE 1024 static rt_device_t serial; static struct rt_semaphore rx_sem; -// 接收回调:注意 size 实际是事件指针(RT-Thread 特性) +// 接收回调 static rt_err_t uart_rx_ind(rt_device_t dev, rt_size_t size) { - rt_uint32_t event = *(rt_uint32_t *)&size; // 强制解释为事件 - - // if (event & RT_SERIAL_EVENT_RX_IDLE) + // 注意:在 RT-Thread 5.x,当使用 INT_RX 时,size 是接收到的字节数 + // 但若启用了 RX_IDLE 模式,底层驱动会在 IDLE 时回调,并传入事件 + // 安全做法:检查是否为事件(高位标志) + // if (size & RT_SERIAL_EVENT_RX_IDLE) { + LOG_D("RX IDLE event received"); rt_sem_release(&rx_sem); + return RT_EOK; } + + // 如果是普通数据(size > 0),也可处理,但本例依赖 IDLE 触发 return RT_EOK; } -// 从串口设备读取一行(以 \n 结尾) static int read_line_from_uart(char *buf, int maxlen) { char ch; @@ -38,14 +48,14 @@ static int read_line_from_uart(char *buf, int maxlen) while (len < maxlen - 1) { - // 从串口缓冲区读一个字节(非阻塞,因为由 IDLE 触发说明有数据) - if (rt_device_read(serial, 0, &ch, 1) <= 0) + // 注意:在 INT_RX 模式下,rt_device_read 会从驱动内部 buffer 读取 + rt_size_t result = rt_device_read(serial, 0, &ch, 1); + if (result <= 0) { - break; // 无数据(理论上不应发生) + break; // 无更多数据 } buf[len++] = ch; - if (ch == '\n') { buf[len] = '\0'; @@ -53,7 +63,6 @@ static int read_line_from_uart(char *buf, int maxlen) } } - // 缓冲区满仍未遇到 \n,强制结束(可选策略) buf[len] = '\0'; return len; } @@ -63,89 +72,99 @@ void uart_thread_entry(void *parameter) char input[RX_LINE_BUF_SIZE]; int len; - // 初始化信号量 rt_sem_init(&rx_sem, "rx_sem", 0, RT_IPC_FLAG_FIFO); - // 查找串口设备 serial = rt_device_find(SAMPLE_UART_NAME); if (!serial) { - rt_kprintf("Cannot find %s\n", SAMPLE_UART_NAME); + LOG_E("Cannot find %s", SAMPLE_UART_NAME); return; } - // 配置串口:设置内部接收缓冲区大小(必须 >= 最大可能的一行) + // Step 1: 设置串口基本参数(波特率等) struct serial_configure config = RT_SERIAL_CONFIG_DEFAULT; - config.bufsz = RX_LINE_BUF_SIZE; // 关键:驱动内部 buffer 要够大 + config.baud_rate = BAUD_RATE_115200; // 根据需要调整 + config.data_bits = DATA_BITS_8; + config.stop_bits = STOP_BITS_1; + config.parity = PARITY_NONE; + config.bufsz = RX_LINE_BUF_SIZE; // 驱动内部接收 buffer 大小 rt_device_control(serial, RT_DEVICE_CTRL_CONFIG, &config); - // 打开串口:使用中断接收(INT_RX),不使用 DMA + // Step 2: 【关键】启用 RX IDLE 模式 + // rt_device_control(serial, RT_DEVICE_CTRL_CONFIG, (void*)RT_SERIAL_RX_IDLE); + + // Step 3: 打开串口(使用中断接收) rt_err_t result = rt_device_open(serial, RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_INT_TX); if (result != RT_EOK) { - rt_kprintf("Failed to open %s with INT, error=%d\n", SAMPLE_UART_NAME, result); + LOG_E("Failed to open %s, error=%d", SAMPLE_UART_NAME, result); return; } - // 设置接收回调(用于接收 IDLE 事件) + // Step 4: 设置回调 rt_device_set_rx_indicate(serial, uart_rx_ind); - rt_kprintf("UART thread (IDLE mode) running on %s...\n", SAMPLE_UART_NAME); + LOG_I("SCCM thread (IDLE mode) running on %s", SAMPLE_UART_NAME); while (1) - { - // 等待空闲中断通知 - if (rt_sem_take(&rx_sem, RT_WAITING_FOREVER) == RT_EOK) - { - // 读取完整行 - len = read_line_from_uart(input, sizeof(input)); - if (len <= 0) continue; - - // 构造请求 - struct proc_request *req = rt_malloc(sizeof(struct proc_request)); - if (!req) continue; - - rt_strncpy(req->input, input, sizeof(req->input) - 1); - req->input_len = len; - - req->sem = rt_malloc(sizeof(struct rt_semaphore)); - if (!req->sem) - { - rt_free(req); - continue; - } - rt_sem_init(req->sem, "uart_resp", 0, RT_IPC_FLAG_FIFO); - - // 发送至处理队列 - if (rt_mq_send(proc_mq, &req, sizeof(req)) == RT_EOK) - { - // 等待响应 - if (rt_sem_take(req->sem, RT_WAITING_FOREVER) == RT_EOK) - { - rt_device_write(serial, 0, req->output, req->output_len); - } - } - - // 清理资源 - rt_sem_detach(req->sem); - rt_free(req->sem); - rt_free(req); - } - } + { + // 等待数据就绪 + if (rt_sem_take(&rx_sem, RT_WAITING_FOREVER) == RT_EOK) + { + // 处理接收到的数据(提取完整行) + while ((len = get_line(input, sizeof(input))) > 0) + { + // 动态分配请求结构体(见之前完整代码) + struct proc_request *req = rt_malloc(sizeof(struct proc_request)); + if (!req) continue; + + rt_strncpy(req->input, input, sizeof(req->input)); + req->input_len = len; + //req->input[len]='\0'; + + req->sem = rt_malloc(sizeof(struct rt_semaphore)); + if (!req->sem) { + rt_free(req); + continue; + } + rt_sem_init(req->sem, "uart_resp", 0, RT_IPC_FLAG_FIFO); + + // 发送到处理线程 + if (rt_mq_send(proc_mq, &req, sizeof(req)) == RT_EOK) + { + // 等待处理完成 + if (rt_sem_take(req->sem, RT_WAITING_FOREVER) == RT_EOK) + { + rt_device_write(serial, 0, req->output, req->output_len); + } + } + + // 清理 + rt_sem_detach(req->sem); // 或 rt_sem_delete + rt_free(req->sem); + rt_free(req); + } + } + } } -// 启动 UART 线程 int start_uart_thread(void) { rt_thread_t tid = rt_thread_create("data_uart", uart_thread_entry, RT_NULL, - 2048, // 栈大小(2KB 足够) - 25, // 优先级 - 10); // 时间片 + 2048, + 25, + 10); if (tid != RT_NULL) { rt_thread_startup(tid); + LOG_I("Create SCCM_uart thread"); + return 0; + } + else + { + LOG_E("Failed to create SCCM_uart thread!"); + return -1; } - return 0; } diff --git a/applications/DB_SQLite.c b/applications/DB_SQLite.c index 32d8c01..df777c6 100644 --- a/applications/DB_SQLite.c +++ b/applications/DB_SQLite.c @@ -438,7 +438,7 @@ rt_err_t db_send_command(enum db_cmd_type type, const char* sql, rt_int32_t time void thread_DB_SQLite(void) { rt_thread_t tid; - tid = rt_thread_create("db_sql", db_sqlite, RT_NULL, 1024 *32, 3, 10); + tid = rt_thread_create("db_sql", db_sqlite, RT_NULL, 1024 *32, 20, 10); if (tid != RT_NULL) { diff --git a/cubemx/Inc/stm32h7xx_it.h b/cubemx/Inc/stm32h7xx_it.h index 2f26a97..e7e0773 100644 --- a/cubemx/Inc/stm32h7xx_it.h +++ b/cubemx/Inc/stm32h7xx_it.h @@ -55,6 +55,7 @@ void SVC_Handler(void); void DebugMon_Handler(void); void PendSV_Handler(void); void SysTick_Handler(void); +void DMA1_Stream0_IRQHandler(void); void USART1_IRQHandler(void); void USART2_IRQHandler(void); void SDMMC1_IRQHandler(void); diff --git a/cubemx/Src/main.c b/cubemx/Src/main.c index 58f8aa2..22137fc 100644 --- a/cubemx/Src/main.c +++ b/cubemx/Src/main.c @@ -45,6 +45,7 @@ SD_HandleTypeDef hsd1; UART_HandleTypeDef huart1; UART_HandleTypeDef huart2; +DMA_HandleTypeDef hdma_usart1_rx; SDRAM_HandleTypeDef hsdram1; @@ -56,6 +57,7 @@ SDRAM_HandleTypeDef hsdram1; void SystemClock_Config(void); static void MPU_Config(void); static void MX_GPIO_Init(void); +static void MX_DMA_Init(void); static void MX_FMC_Init(void); static void MX_SDMMC1_SD_Init(void); static void MX_USART1_UART_Init(void); @@ -101,6 +103,7 @@ __WEAK int main(void) /* Initialize all configured peripherals */ MX_GPIO_Init(); + MX_DMA_Init(); MX_FMC_Init(); MX_SDMMC1_SD_Init(); MX_USART1_UART_Init(); @@ -306,6 +309,22 @@ static void MX_USART2_UART_Init(void) } +/** + * Enable DMA controller clock + */ +static void MX_DMA_Init(void) +{ + + /* DMA controller clock enable */ + __HAL_RCC_DMA1_CLK_ENABLE(); + + /* DMA interrupt init */ + /* DMA1_Stream0_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(DMA1_Stream0_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(DMA1_Stream0_IRQn); + +} + /* FMC initialization function */ static void MX_FMC_Init(void) { @@ -329,7 +348,7 @@ static void MX_FMC_Init(void) hsdram1.Init.RowBitsNumber = FMC_SDRAM_ROW_BITS_NUM_13; hsdram1.Init.MemoryDataWidth = FMC_SDRAM_MEM_BUS_WIDTH_16; hsdram1.Init.InternalBankNumber = FMC_SDRAM_INTERN_BANKS_NUM_4; - hsdram1.Init.CASLatency = FMC_SDRAM_CAS_LATENCY_1; + hsdram1.Init.CASLatency = FMC_SDRAM_CAS_LATENCY_2; hsdram1.Init.WriteProtection = FMC_SDRAM_WRITE_PROTECTION_DISABLE; hsdram1.Init.SDClockPeriod = FMC_SDRAM_CLOCK_DISABLE; hsdram1.Init.ReadBurst = FMC_SDRAM_RBURST_DISABLE; @@ -368,7 +387,6 @@ static void MX_GPIO_Init(void) /* GPIO Ports Clock Enable */ __HAL_RCC_GPIOF_CLK_ENABLE(); __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOH_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); __HAL_RCC_GPIOG_CLK_ENABLE(); diff --git a/cubemx/Src/stm32h7xx_hal_msp.c b/cubemx/Src/stm32h7xx_hal_msp.c index bcafb2b..f9ff2e5 100644 --- a/cubemx/Src/stm32h7xx_hal_msp.c +++ b/cubemx/Src/stm32h7xx_hal_msp.c @@ -23,6 +23,7 @@ /* USER CODE BEGIN Includes */ /* USER CODE END Includes */ +extern DMA_HandleTypeDef hdma_usart1_rx; /* Private typedef -----------------------------------------------------------*/ /* USER CODE BEGIN TD */ @@ -226,6 +227,25 @@ void HAL_UART_MspInit(UART_HandleTypeDef* huart) GPIO_InitStruct.Alternate = GPIO_AF4_USART1; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + /* USART1 DMA Init */ + /* USART1_RX Init */ + hdma_usart1_rx.Instance = DMA1_Stream0; + hdma_usart1_rx.Init.Request = DMA_REQUEST_USART1_RX; + hdma_usart1_rx.Init.Direction = DMA_PERIPH_TO_MEMORY; + hdma_usart1_rx.Init.PeriphInc = DMA_PINC_DISABLE; + hdma_usart1_rx.Init.MemInc = DMA_MINC_ENABLE; + hdma_usart1_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; + hdma_usart1_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; + hdma_usart1_rx.Init.Mode = DMA_CIRCULAR; + hdma_usart1_rx.Init.Priority = DMA_PRIORITY_LOW; + hdma_usart1_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; + if (HAL_DMA_Init(&hdma_usart1_rx) != HAL_OK) + { + Error_Handler(); + } + + __HAL_LINKDMA(huart,hdmarx,hdma_usart1_rx); + /* USART1 interrupt Init */ HAL_NVIC_SetPriority(USART1_IRQn, 0, 0); HAL_NVIC_EnableIRQ(USART1_IRQn); @@ -251,17 +271,17 @@ void HAL_UART_MspInit(UART_HandleTypeDef* huart) /* Peripheral clock enable */ __HAL_RCC_USART2_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); + __HAL_RCC_GPIOD_CLK_ENABLE(); /**USART2 GPIO Configuration - PA2 ------> USART2_TX - PA3 ------> USART2_RX + PD5 ------> USART2_TX + PD6 ------> USART2_RX */ - GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3; + GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_6; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; GPIO_InitStruct.Alternate = GPIO_AF7_USART2; - HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); /* USART2 interrupt Init */ HAL_NVIC_SetPriority(USART2_IRQn, 0, 0); @@ -295,6 +315,9 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* huart) */ HAL_GPIO_DeInit(GPIOB, GPIO_PIN_14|GPIO_PIN_15); + /* USART1 DMA DeInit */ + HAL_DMA_DeInit(huart->hdmarx); + /* USART1 interrupt DeInit */ HAL_NVIC_DisableIRQ(USART1_IRQn); /* USER CODE BEGIN USART1_MspDeInit 1 */ @@ -310,10 +333,10 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* huart) __HAL_RCC_USART2_CLK_DISABLE(); /**USART2 GPIO Configuration - PA2 ------> USART2_TX - PA3 ------> USART2_RX + PD5 ------> USART2_TX + PD6 ------> USART2_RX */ - HAL_GPIO_DeInit(GPIOA, GPIO_PIN_2|GPIO_PIN_3); + HAL_GPIO_DeInit(GPIOD, GPIO_PIN_5|GPIO_PIN_6); /* USART2 interrupt DeInit */ HAL_NVIC_DisableIRQ(USART2_IRQn); @@ -340,7 +363,7 @@ static void HAL_FMC_MspInit(void){ /** Initializes the peripherals clock */ PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_FMC; - PeriphClkInitStruct.FmcClockSelection = RCC_FMCCLKSOURCE_PLL; + PeriphClkInitStruct.FmcClockSelection = RCC_FMCCLKSOURCE_D1HCLK; if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) { Error_Handler(); diff --git a/cubemx/Src/stm32h7xx_it.c b/cubemx/Src/stm32h7xx_it.c index 6ca4d9d..79dc3d0 100644 --- a/cubemx/Src/stm32h7xx_it.c +++ b/cubemx/Src/stm32h7xx_it.c @@ -56,6 +56,7 @@ /* External variables --------------------------------------------------------*/ extern SD_HandleTypeDef hsd1; +extern DMA_HandleTypeDef hdma_usart1_rx; extern UART_HandleTypeDef huart1; extern UART_HandleTypeDef huart2; /* USER CODE BEGIN EV */ @@ -200,6 +201,20 @@ void SysTick_Handler(void) /* please refer to the startup file (startup_stm32h7xx.s). */ /******************************************************************************/ +/** + * @brief This function handles DMA1 stream0 global interrupt. + */ +void DMA1_Stream0_IRQHandler(void) +{ + /* USER CODE BEGIN DMA1_Stream0_IRQn 0 */ + + /* USER CODE END DMA1_Stream0_IRQn 0 */ + HAL_DMA_IRQHandler(&hdma_usart1_rx); + /* USER CODE BEGIN DMA1_Stream0_IRQn 1 */ + + /* USER CODE END DMA1_Stream0_IRQn 1 */ +} + /** * @brief This function handles USART1 global interrupt. */ diff --git a/cubemx/cubemx.ioc b/cubemx/cubemx.ioc index e1e5d83..cd95974 100644 --- a/cubemx/cubemx.ioc +++ b/cubemx/cubemx.ioc @@ -4,8 +4,29 @@ CAD.pinconfig= CAD.provider= CORTEX_M7.IPParameters=default_mode_Activation CORTEX_M7.default_mode_Activation=1 +Dma.Request0=USART1_RX +Dma.RequestsNb=1 +Dma.USART1_RX.0.Direction=DMA_PERIPH_TO_MEMORY +Dma.USART1_RX.0.EventEnable=DISABLE +Dma.USART1_RX.0.FIFOMode=DMA_FIFOMODE_DISABLE +Dma.USART1_RX.0.Instance=DMA1_Stream0 +Dma.USART1_RX.0.MemDataAlignment=DMA_MDATAALIGN_BYTE +Dma.USART1_RX.0.MemInc=DMA_MINC_ENABLE +Dma.USART1_RX.0.Mode=DMA_CIRCULAR +Dma.USART1_RX.0.PeriphDataAlignment=DMA_PDATAALIGN_BYTE +Dma.USART1_RX.0.PeriphInc=DMA_PINC_DISABLE +Dma.USART1_RX.0.Polarity=HAL_DMAMUX_REQ_GEN_RISING +Dma.USART1_RX.0.Priority=DMA_PRIORITY_LOW +Dma.USART1_RX.0.RequestNumber=1 +Dma.USART1_RX.0.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode,SignalID,Polarity,RequestNumber,SyncSignalID,SyncPolarity,SyncEnable,EventEnable,SyncRequestNumber +Dma.USART1_RX.0.SignalID=NONE +Dma.USART1_RX.0.SyncEnable=DISABLE +Dma.USART1_RX.0.SyncPolarity=HAL_DMAMUX_SYNC_NO_EVENT +Dma.USART1_RX.0.SyncRequestNumber=1 +Dma.USART1_RX.0.SyncSignalID=NONE +FMC.CASLatency1=FMC_SDRAM_CAS_LATENCY_2 FMC.ColumnBitsNumber1=FMC_SDRAM_COLUMN_BITS_NUM_9 -FMC.IPParameters=ColumnBitsNumber1 +FMC.IPParameters=ColumnBitsNumber1,CASLatency1 File.Version=6 GPIO.groupedBy= KeepUserPlacement=false @@ -14,60 +35,61 @@ MMTConfigApplied=false Mcu.CPN=STM32H743IIT6 Mcu.Family=STM32H7 Mcu.IP0=CORTEX_M7 -Mcu.IP1=FMC -Mcu.IP2=MEMORYMAP -Mcu.IP3=NVIC -Mcu.IP4=RCC -Mcu.IP5=SDMMC1 -Mcu.IP6=SYS -Mcu.IP7=USART1 -Mcu.IP8=USART2 -Mcu.IPNb=9 +Mcu.IP1=DMA +Mcu.IP2=FMC +Mcu.IP3=MEMORYMAP +Mcu.IP4=NVIC +Mcu.IP5=RCC +Mcu.IP6=SDMMC1 +Mcu.IP7=SYS +Mcu.IP8=USART1 +Mcu.IP9=USART2 +Mcu.IPNb=10 Mcu.Name=STM32H743IITx Mcu.Package=LQFP176 Mcu.Pin0=PF0 Mcu.Pin1=PF1 -Mcu.Pin10=PA3 -Mcu.Pin11=PB0 -Mcu.Pin12=PB1 -Mcu.Pin13=PF11 -Mcu.Pin14=PF12 -Mcu.Pin15=PF13 -Mcu.Pin16=PF14 -Mcu.Pin17=PF15 -Mcu.Pin18=PG0 -Mcu.Pin19=PG1 +Mcu.Pin10=PB1 +Mcu.Pin11=PF11 +Mcu.Pin12=PF12 +Mcu.Pin13=PF13 +Mcu.Pin14=PF14 +Mcu.Pin15=PF15 +Mcu.Pin16=PG0 +Mcu.Pin17=PG1 +Mcu.Pin18=PE7 +Mcu.Pin19=PE8 Mcu.Pin2=PF2 -Mcu.Pin20=PE7 -Mcu.Pin21=PE8 -Mcu.Pin22=PE9 -Mcu.Pin23=PE10 -Mcu.Pin24=PE11 -Mcu.Pin25=PE12 -Mcu.Pin26=PE13 -Mcu.Pin27=PE14 -Mcu.Pin28=PE15 -Mcu.Pin29=PB14 +Mcu.Pin20=PE9 +Mcu.Pin21=PE10 +Mcu.Pin22=PE11 +Mcu.Pin23=PE12 +Mcu.Pin24=PE13 +Mcu.Pin25=PE14 +Mcu.Pin26=PE15 +Mcu.Pin27=PB14 +Mcu.Pin28=PB15 +Mcu.Pin29=PD8 Mcu.Pin3=PF3 -Mcu.Pin30=PB15 -Mcu.Pin31=PD8 -Mcu.Pin32=PD9 -Mcu.Pin33=PD10 -Mcu.Pin34=PD14 -Mcu.Pin35=PD15 -Mcu.Pin36=PG2 -Mcu.Pin37=PG4 -Mcu.Pin38=PG5 -Mcu.Pin39=PG8 +Mcu.Pin30=PD9 +Mcu.Pin31=PD10 +Mcu.Pin32=PD14 +Mcu.Pin33=PD15 +Mcu.Pin34=PG2 +Mcu.Pin35=PG4 +Mcu.Pin36=PG5 +Mcu.Pin37=PG8 +Mcu.Pin38=PC8 +Mcu.Pin39=PC9 Mcu.Pin4=PF4 -Mcu.Pin40=PC8 -Mcu.Pin41=PC9 -Mcu.Pin42=PC10 -Mcu.Pin43=PC11 -Mcu.Pin44=PC12 -Mcu.Pin45=PD0 -Mcu.Pin46=PD1 -Mcu.Pin47=PD2 +Mcu.Pin40=PC10 +Mcu.Pin41=PC11 +Mcu.Pin42=PC12 +Mcu.Pin43=PD0 +Mcu.Pin44=PD1 +Mcu.Pin45=PD2 +Mcu.Pin46=PD5 +Mcu.Pin47=PD6 Mcu.Pin48=PG15 Mcu.Pin49=PE0 Mcu.Pin5=PF5 @@ -75,9 +97,9 @@ Mcu.Pin50=PE1 Mcu.Pin51=VP_SYS_VS_Systick Mcu.Pin52=VP_MEMORYMAP_VS_MEMORYMAP Mcu.Pin6=PC0 -Mcu.Pin7=PA2 -Mcu.Pin8=PH2 -Mcu.Pin9=PH3 +Mcu.Pin7=PH2 +Mcu.Pin8=PH3 +Mcu.Pin9=PB0 Mcu.PinsNb=53 Mcu.ThirdPartyNb=0 Mcu.UserConstants= @@ -85,6 +107,7 @@ Mcu.UserName=STM32H743IITx MxCube.Version=6.15.0 MxDb.Version=DB.6.0.150 NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false +NVIC.DMA1_Stream0_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false NVIC.ForceEnableDMAVector=true NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false @@ -98,10 +121,6 @@ NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:true\:false\:true\:false NVIC.USART1_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true NVIC.USART2_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false -PA2.Mode=Asynchronous -PA2.Signal=USART2_TX -PA3.Mode=Asynchronous -PA3.Signal=USART2_RX PB0.Locked=true PB0.Signal=GPIO_Output PB1.Locked=true @@ -128,6 +147,10 @@ PD14.Signal=FMC_D0_DA0 PD15.Signal=FMC_D1_DA1 PD2.Mode=SD_4_bits_Wide_bus PD2.Signal=SDMMC1_CMD +PD5.Mode=Asynchronous +PD5.Signal=USART2_TX +PD6.Mode=Asynchronous +PD6.Signal=USART2_RX PD8.Signal=FMC_D13_DA13 PD9.Signal=FMC_D14_DA14 PE0.Signal=FMC_NBL0 @@ -197,7 +220,7 @@ ProjectManager.ToolChainLocation= ProjectManager.UAScriptAfterPath= ProjectManager.UAScriptBeforePath= ProjectManager.UnderRoot=false -ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_FMC_Init-FMC-false-HAL-true,4-MX_SDMMC1_SD_Init-SDMMC1-false-HAL-true,0-MX_CORTEX_M7_Init-CORTEX_M7-false-HAL-true +ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_DMA_Init-DMA-false-HAL-true,4-MX_FMC_Init-FMC-false-HAL-true,5-MX_SDMMC1_SD_Init-SDMMC1-false-HAL-true,6-MX_USART1_UART_Init-USART1-false-HAL-true,7-MX_USART2_UART_Init-USART2-false-HAL-true,8-MX_LTDC_Init-LTDC-false-HAL-true,0-MX_CORTEX_M7_Init-CORTEX_M7-false-HAL-true RCC.ADCFreq_Value=150000000 RCC.AHB12Freq_Value=240000000 RCC.AHB4Freq_Value=240000000 @@ -231,8 +254,7 @@ RCC.DIVR1Freq_Value=480000000 RCC.DIVR2Freq_Value=150000000 RCC.DIVR3Freq_Value=129000000 RCC.FDCANFreq_Value=160000000 -RCC.FMCCLockSelection=RCC_FMCCLKSOURCE_PLL -RCC.FMCFreq_Value=160000000 +RCC.FMCFreq_Value=240000000 RCC.FamilyName=M RCC.HCLK3ClockFreq_Value=240000000 RCC.HCLKFreq_Value=240000000 @@ -240,7 +262,7 @@ RCC.HPRE=RCC_HCLK_DIV2 RCC.HRTIMFreq_Value=240000000 RCC.I2C123Freq_Value=120000000 RCC.I2C4Freq_Value=120000000 -RCC.IPParameters=ADCFreq_Value,AHB12Freq_Value,AHB4Freq_Value,APB1Freq_Value,APB2Freq_Value,APB3Freq_Value,APB4Freq_Value,AXIClockFreq_Value,CECFreq_Value,CKPERFreq_Value,CortexFreq_Value,CpuClockFreq_Value,D1CPREFreq_Value,D1PPRE,D2PPRE1,D2PPRE2,D3PPRE,DFSDMACLkFreq_Value,DFSDMFreq_Value,DIVM1,DIVN1,DIVN2,DIVP1Freq_Value,DIVP2Freq_Value,DIVP3Freq_Value,DIVQ1,DIVQ1Freq_Value,DIVQ2Freq_Value,DIVQ3Freq_Value,DIVR1Freq_Value,DIVR2Freq_Value,DIVR3Freq_Value,FDCANFreq_Value,FMCCLockSelection,FMCFreq_Value,FamilyName,HCLK3ClockFreq_Value,HCLKFreq_Value,HPRE,HRTIMFreq_Value,I2C123Freq_Value,I2C4Freq_Value,LPTIM1Freq_Value,LPTIM2Freq_Value,LPTIM345Freq_Value,LPUART1Freq_Value,LTDCFreq_Value,MCO1PinFreq_Value,MCO2PinFreq_Value,PLL2FRACN,PLL3FRACN,PLLFRACN,QSPIFreq_Value,RNGFreq_Value,RTCFreq_Value,SAI1Freq_Value,SAI23Freq_Value,SAI4AFreq_Value,SAI4BFreq_Value,SDMMC1CLockSelection,SDMMCFreq_Value,SPDIFRXFreq_Value,SPI123Freq_Value,SPI45Freq_Value,SPI6Freq_Value,SWPMI1Freq_Value,SYSCLKFreq_VALUE,SYSCLKSource,Tim1OutputFreq_Value,Tim2OutputFreq_Value,TraceFreq_Value,USART16Freq_Value,USART234578Freq_Value,USBFreq_Value,VCO1OutputFreq_Value,VCO2OutputFreq_Value,VCO3OutputFreq_Value,VCOInput1Freq_Value,VCOInput2Freq_Value,VCOInput3Freq_Value +RCC.IPParameters=ADCFreq_Value,AHB12Freq_Value,AHB4Freq_Value,APB1Freq_Value,APB2Freq_Value,APB3Freq_Value,APB4Freq_Value,AXIClockFreq_Value,CECFreq_Value,CKPERFreq_Value,CortexFreq_Value,CpuClockFreq_Value,D1CPREFreq_Value,D1PPRE,D2PPRE1,D2PPRE2,D3PPRE,DFSDMACLkFreq_Value,DFSDMFreq_Value,DIVM1,DIVN1,DIVN2,DIVP1Freq_Value,DIVP2Freq_Value,DIVP3Freq_Value,DIVQ1,DIVQ1Freq_Value,DIVQ2Freq_Value,DIVQ3Freq_Value,DIVR1Freq_Value,DIVR2Freq_Value,DIVR3Freq_Value,FDCANFreq_Value,FMCFreq_Value,FamilyName,HCLK3ClockFreq_Value,HCLKFreq_Value,HPRE,HRTIMFreq_Value,I2C123Freq_Value,I2C4Freq_Value,LPTIM1Freq_Value,LPTIM2Freq_Value,LPTIM345Freq_Value,LPUART1Freq_Value,LTDCFreq_Value,MCO1PinFreq_Value,MCO2PinFreq_Value,PLL2FRACN,PLL3FRACN,PLLFRACN,QSPIFreq_Value,RNGFreq_Value,RTCFreq_Value,SAI1Freq_Value,SAI23Freq_Value,SAI4AFreq_Value,SAI4BFreq_Value,SDMMC1CLockSelection,SDMMCFreq_Value,SPDIFRXFreq_Value,SPI123Freq_Value,SPI45Freq_Value,SPI6Freq_Value,SWPMI1Freq_Value,SYSCLKFreq_VALUE,SYSCLKSource,Tim1OutputFreq_Value,Tim2OutputFreq_Value,TraceFreq_Value,USART16Freq_Value,USART234578Freq_Value,USBFreq_Value,VCO1OutputFreq_Value,VCO2OutputFreq_Value,VCO3OutputFreq_Value,VCOInput1Freq_Value,VCOInput2Freq_Value,VCOInput3Freq_Value RCC.LPTIM1Freq_Value=120000000 RCC.LPTIM2Freq_Value=120000000 RCC.LPTIM345Freq_Value=120000000 diff --git a/drivers/board.h b/drivers/board.h index 1b30932..59a647a 100644 --- a/drivers/board.h +++ b/drivers/board.h @@ -91,10 +91,12 @@ extern "C" * */ #define BSP_USING_UART1 +//#define BSP_UART1_RX_USING_DMA #define BSP_UART1_TX_PIN "PB14" #define BSP_UART1_RX_PIN "PB15" #define BSP_USING_UART2 +//#define BSP_UART2_RX_USING_DMA #define BSP_UART2_TX_PIN "PA2" #define BSP_UART2_RX_PIN "PA3" diff --git a/drivers/include/drv_dma.h b/drivers/include/drv_dma.h index 247da3e..d5321fb 100644 --- a/drivers/include/drv_dma.h +++ b/drivers/include/drv_dma.h @@ -31,11 +31,12 @@ struct dma_config { rt_uint32_t dma_rcc; IRQn_Type dma_irq; -#if defined(SOC_SERIES_STM32F2) || defined(SOC_SERIES_STM32F4) || defined(SOC_SERIES_STM32F7) +#if defined(SOC_SERIES_STM32F2) || defined(SOC_SERIES_STM32F4) || defined(SOC_SERIES_STM32F7)|| defined(SOC_SERIES_STM32F3) rt_uint32_t channel; #endif -#if defined(SOC_SERIES_STM32L4) || defined(SOC_SERIES_STM32G0) || defined(SOC_SERIES_STM32G4) +#if defined(SOC_SERIES_STM32L4) || defined(SOC_SERIES_STM32WL) || defined(SOC_SERIES_STM32G0) || defined(SOC_SERIES_STM32G4)\ + || defined(SOC_SERIES_STM32H7) || defined(SOC_SERIES_STM32MP1) || defined(SOC_SERIES_STM32WB) || defined(SOC_SERIES_STM32L5) rt_uint32_t request; #endif }; diff --git a/packages/packages.dbsqlite b/packages/packages.dbsqlite index 5d3ff58109959f3aef2e4a9d758cedc914c967ac..8be942c8b9a2a45fa7fe897bf07262344fa84ee5 100644 GIT binary patch literal 143360 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

m1~b3q?_by6j$+l@|0-r!e_pXq6*yQX%o^z^HN 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 Uc|P$h