From 32b253d3c3f6fc4e631a97245fedf37dd759e628 Mon Sep 17 00:00:00 2001 From: zhangjin1996 <1561494530@qq.com> Date: Tue, 15 Apr 2025 14:25:34 +0800 Subject: [PATCH] stm32h750 started successfully --- .../arch/arm/cortex-m7/stm32h750/interrupt.c | 6 +- Ubiquitous/XiZi_IIoT/board/stm32h750/board.c | 3 +- Ubiquitous/XiZi_IIoT/board/stm32h750/board.h | 6 +- Ubiquitous/XiZi_IIoT/board/stm32h750/config | 287 ------------------ Ubiquitous/XiZi_IIoT/board/stm32h750/link.lds | 11 +- .../stm32h750/third_party_driver/Makefile | 2 +- .../third_party_driver/delay/delay.c | 168 +++------- .../third_party_driver/include/delay.h | 6 +- .../third_party_driver/include/sys.h | 35 +-- .../third_party_driver/include/usart.h | 63 ++-- .../stm32h750/third_party_driver/sys/sys.c | 124 ++------ .../third_party_driver/usart/connect_uart.c | 65 +--- .../third_party_driver/usart/hardware_usart.c | 126 +++----- 13 files changed, 155 insertions(+), 747 deletions(-) delete mode 100644 Ubiquitous/XiZi_IIoT/board/stm32h750/config diff --git a/Ubiquitous/XiZi_IIoT/arch/arm/cortex-m7/stm32h750/interrupt.c b/Ubiquitous/XiZi_IIoT/arch/arm/cortex-m7/stm32h750/interrupt.c index 37c8212bd..c52db0fdc 100644 --- a/Ubiquitous/XiZi_IIoT/arch/arm/cortex-m7/stm32h750/interrupt.c +++ b/Ubiquitous/XiZi_IIoT/arch/arm/cortex-m7/stm32h750/interrupt.c @@ -22,6 +22,7 @@ #include #include #include +#include "stm32h7xx_hal.h" x_base __attribute__((naked)) DisableLocalInterrupt() { @@ -87,7 +88,6 @@ void NMI_Handler(int irqn, void *arg) void SysTick_Handler(int irqn, void *arg) { - while (1) - { - } + TickAndTaskTimesliceUpdate(); + } diff --git a/Ubiquitous/XiZi_IIoT/board/stm32h750/board.c b/Ubiquitous/XiZi_IIoT/board/stm32h750/board.c index 152f5cb4e..ac3777808 100644 --- a/Ubiquitous/XiZi_IIoT/board/stm32h750/board.c +++ b/Ubiquitous/XiZi_IIoT/board/stm32h750/board.c @@ -38,9 +38,10 @@ void InitBoardHardware() sys_stm32_clock_init(192, 5, 2, 4); //delay_init(480); + InitBoardMemory((void*)HEAP_START, (void*)HEAP_END); InitHwUart(); - InitBoardMemory((void*)HEAP_START, (void*)HEAP_END); + InstallConsole(KERNEL_CONSOLE_BUS_NAME, KERNEL_CONSOLE_DRV_NAME, KERNEL_CONSOLE_DEVICE_NAME); diff --git a/Ubiquitous/XiZi_IIoT/board/stm32h750/board.h b/Ubiquitous/XiZi_IIoT/board/stm32h750/board.h index a5fd919c7..a7c3c5527 100644 --- a/Ubiquitous/XiZi_IIoT/board/stm32h750/board.h +++ b/Ubiquitous/XiZi_IIoT/board/stm32h750/board.h @@ -21,13 +21,13 @@ #ifndef __BOARD_H__ #define __BOARD_H__ - +extern int __StackTop; void InitBoardHardware(); -#define HEAP_START 0x24030000 -#define HEAP_END 0x24060000 +#define HEAP_START (void *)(&__StackTop) +#define HEAP_END 0x24080000 diff --git a/Ubiquitous/XiZi_IIoT/board/stm32h750/config b/Ubiquitous/XiZi_IIoT/board/stm32h750/config deleted file mode 100644 index 909adee64..000000000 --- a/Ubiquitous/XiZi_IIoT/board/stm32h750/config +++ /dev/null @@ -1,287 +0,0 @@ -# -# Automatically generated file; DO NOT EDIT. -# XiZi_IIoT Project Configuration -# -CONFIG_BOARD_STM32H750=y -CONFIG_ARCH_ARM=y - -# -# stm32f103-nano feature -# -CONFIG_BSP_USING_UART=y -# CONFIG_BSP_USING_UART1 is not set -CONFIG_BSP_USING_UART1=y -CONFIG_SERIAL_BUS_NAME_1="uart1" -CONFIG_SERIAL_DRV_NAME_1="uart1_drv" -CONFIG_SERIAL_1_DEVICE_NAME_0="uart1_dev1" - - -# -# config default board resources -# - -# -# config board app name -# -CONFIG_BOARD_APP_NAME="/XiUOS_stm32h750_app.bin" - -# -# config board service table -# -CONFIG_SERVICE_TABLE_ADDRESS=0x24000000 - -# -# Hardware feature -# -CONFIG_RESOURCES_SERIAL=y -# CONFIG_SERIAL_USING_DMA is not set -CONFIG_SERIAL_RB_BUFSZ=128 -CONFIG_RESOURCES_CAN=y - -# -# Kernel feature -# - -# -# separate compile(choose none for compile once) -# -# CONFIG_SEPARATE_COMPILE is not set -# CONFIG_COMPILER_APP is not set -# CONFIG_APP_STARTUP_FROM_SDCARD is not set -CONFIG_APP_STARTUP_FROM_FLASH=y -# CONFIG_COMPILER_KERNEL is not set - -# -# Memory Management -# -# CONFIG_KERNEL_MEMBLOCK is not set -CONFIG_MEM_ALIGN_SIZE=8 -# CONFIG_MEM_EXTERN_SRAM is not set -CONFIG_MM_PAGE_SIZE=4096 - -# -# Using small memory allocator -# -CONFIG_KERNEL_SMALL_MEM_ALLOC=y -CONFIG_SMALL_NUMBER_32B=64 -CONFIG_SMALL_NUMBER_64B=32 - -# -# Task feature -# -CONFIG_USER_APPLICATION=y -# CONFIG_TASK_ISOLATION is not set - -# -# Inter-Task communication -# -CONFIG_KERNEL_SEMAPHORE=y -CONFIG_KERNEL_MUTEX=y -CONFIG_KERNEL_EVENT=y -CONFIG_KERNEL_MESSAGEQUEUE=y -CONFIG_KERNEL_SOFTTIMER=y -CONFIG_SCHED_POLICY_RR_REMAINSLICE=y -# CONFIG_SCHED_POLICY_RR is not set -# CONFIG_SCHED_POLICY_FIFO is not set -# CONFIG_KTASK_PRIORITY_8 is not set -CONFIG_KTASK_PRIORITY_32=y -# CONFIG_KTASK_PRIORITY_256 is not set -CONFIG_KTASK_PRIORITY_MAX=32 -CONFIG_TICK_PER_SECOND=1000 -CONFIG_KERNEL_STACK_OVERFLOW_CHECK=y -CONFIG_IDLE_KTASK_STACKSIZE=256 -CONFIG_ZOMBIE_KTASK_STACKSIZE=512 - -# -# Kernel Console -# -CONFIG_KERNEL_CONSOLE=y -CONFIG_KERNEL_BANNER=y -CONFIG_KERNEL_CONSOLEBUF_SIZE=128 - -# -# Kernel Hook -# -# CONFIG_KERNEL_HOOK is not set - -# -# Command shell -# -CONFIG_TOOL_SHELL=y -CONFIG_SHELL_ENTER_CR=y -CONFIG_SHELL_ENTER_LF=y -CONFIG_SHELL_ENTER_CR_AND_LF=y -# CONFIG_SHELL_ENTER_CRLF is not set - -# -# Set shell user control -# -CONFIG_SHELL_DEFAULT_USER="letter" -CONFIG_SHELL_DEFAULT_USER_PASSWORD="" -CONFIG_SHELL_LOCK_TIMEOUT=10000 - -# -# Set shell config param -# -CONFIG_SHELL_TASK_STACK_SIZE=512 -CONFIG_SHELL_TASK_PRIORITY=20 -CONFIG_SHELL_MAX_NUMBER=5 -CONFIG_SHELL_PARAMETER_MAX_NUMBER=8 -CONFIG_SHELL_HISTORY_MAX_NUMBER=5 -CONFIG_SHELL_PRINT_BUFFER=128 -CONFIG_SHELL_HELP_SHOW_PERMISSION=y -# CONFIG_SHELL_HELP_LIST_USER is not set -# CONFIG_SHELL_HELP_LIST_VAR is not set -# CONFIG_SHELL_HELP_LIST_KEY is not set - -# -# Kernel data structure Manage -# -CONFIG_KERNEL_QUEUEMANAGE=y -CONFIG_KERNEL_WORKQUEUE=y -CONFIG_WORKQUEUE_KTASK_STACKSIZE=2048 -CONFIG_WORKQUEUE_KTASK_PRIORITY=23 -CONFIG_QUEUE_MAX=16 -CONFIG_KERNEL_WAITQUEUE=y -CONFIG_KERNEL_DATAQUEUE=y -# CONFIG_KERNEL_CIRCULAR_AREA is not set -# CONFIG_KERNEL_AVL_TREE is not set - -# -# Kernel components init -# -CONFIG_KERNEL_COMPONENTS_INIT=y -CONFIG_ENV_INIT_KTASK_STACK_SIZE=512 -CONFIG_KERNEL_USER_MAIN=y -CONFIG_NAME_NUM_MAX=32 -# CONFIG_KERNEL_DEBUG is not set -# CONFIG_ARCH_SMP is not set - -# -# hash table config -# -CONFIG_ID_HTABLE_SIZE=16 -CONFIG_ID_NUM_MAX=128 -# CONFIG_KERNEL_TEST is not set - -# -# Kernel Lib -# -CONFIG_LIB=y -CONFIG_LIB_POSIX=y -CONFIG_LIB_NEWLIB=y -# CONFIG_LIB_MUSLLIB is not set -# CONFIG_LIB_OTHER is not set - -# -# C++ features -# -# CONFIG_LIB_CPLUSPLUS is not set - -# -# File system -# -# CONFIG_FS_VFS is not set - -# -# Tool feature -# - -# -# OTA function -# -# CONFIG_TOOL_USING_OTA is not set - -# -# APP_Framework -# - -# -# Framework -# -CONFIG_TRANSFORM_LAYER_ATTRIUBUTE=y -CONFIG_ADD_XIZI_FEATURES=y -# CONFIG_ADD_NUTTX_FEATURES is not set -# CONFIG_ADD_RTTHREAD_FEATURES is not set -# CONFIG_SUPPORT_SENSOR_FRAMEWORK is not set -# CONFIG_SUPPORT_CONNECTION_FRAMEWORK is not set -# CONFIG_SUPPORT_KNOWING_FRAMEWORK is not set -# CONFIG_SUPPORT_CONTROL_FRAMEWORK is not set - -# -# Security -# -# CONFIG_CRYPTO is not set -# CONFIG_MBEDTLS is not set - -# -# Applications -# - -# -# config stack size and priority of main task -# -CONFIG_MAIN_KTASK_STACK_SIZE=256 -CONFIG_MAIN_KTASK_PRIORITY=16 - -# -# ota app -# -# CONFIG_APPLICATION_OTA is not set - -# -# test app -# -# CONFIG_USER_TEST is not set - -# -# connection app -# -# CONFIG_APPLICATION_CONNECTION is not set - -# -# control app -# - -# -# knowing app -# -# CONFIG_APPLICATION_KNOWING is not set - -# -# sensor app -# -# CONFIG_APPLICATION_SENSOR is not set -# CONFIG_USING_EMBEDDED_DATABASE_APP is not set -# CONFIG_APP_USING_WEBNET is not set - -# -# app lib -# -CONFIG_APP_SELECT_NEWLIB=y -# CONFIG_APP_SELECT_OTHER_LIB is not set - -# -# lib using cJSON -# -# CONFIG_LIB_USING_CJSON is not set - -# -# lib using queue -# -# CONFIG_LIB_USING_QUEUE is not set - -# -# lib using LVGL -# -# CONFIG_LIB_LV is not set - -# -# lib using embedded_database -# -# CONFIG_USING_EMBEDDED_DATABASE is not set - -# -# lib using LoRaWan -# -# CONFIG_LIB_USING_LORAWAN is not set diff --git a/Ubiquitous/XiZi_IIoT/board/stm32h750/link.lds b/Ubiquitous/XiZi_IIoT/board/stm32h750/link.lds index 3737b7330..4fdf2d7ef 100644 --- a/Ubiquitous/XiZi_IIoT/board/stm32h750/link.lds +++ b/Ubiquitous/XiZi_IIoT/board/stm32h750/link.lds @@ -11,7 +11,7 @@ MEMORY OUTPUT_ARCH(arm) ENTRY(Reset_Handler) -_system_stack_size = 0x10000; +_system_stack_size = 0x1000; SECTIONS { @@ -49,19 +49,18 @@ SECTIONS } > flash = 0 /* .ARM.exidx is sorted, so has to go in its own output section. */ - __exidx_start = .; + __exidx_start = .; .ARM.exidx : { + PROVIDE(__exidx_start = ABSOLUTE(.)); *(.ARM.exidx* .gnu.linkonce.armexidx.*) - - /* This is used by the startup in order to initialize the .data secion */ _sidata = .; + PROVIDE(__exidx_end = ABSOLUTE(.)); } > flash - __exidx_end = .; /* .data section which is used for initialized data */ - .data : AT (_sidata) + .data : AT (__exidx_end ) { . = ALIGN(4); /* This is used by the startup in order to initialize the .data secion */ diff --git a/Ubiquitous/XiZi_IIoT/board/stm32h750/third_party_driver/Makefile b/Ubiquitous/XiZi_IIoT/board/stm32h750/third_party_driver/Makefile index 12af8c0e9..05e6089ee 100644 --- a/Ubiquitous/XiZi_IIoT/board/stm32h750/third_party_driver/Makefile +++ b/Ubiquitous/XiZi_IIoT/board/stm32h750/third_party_driver/Makefile @@ -1,7 +1,7 @@ SRC_DIR := libraries ifeq ($(CONFIG_BSP_USING_UART),y) - SRC_DIR += usart sys + SRC_DIR += usart sys delay endif include $(KERNEL_ROOT)/compiler.mk diff --git a/Ubiquitous/XiZi_IIoT/board/stm32h750/third_party_driver/delay/delay.c b/Ubiquitous/XiZi_IIoT/board/stm32h750/third_party_driver/delay/delay.c index 2b5833dd6..d1b34f4c5 100755 --- a/Ubiquitous/XiZi_IIoT/board/stm32h750/third_party_driver/delay/delay.c +++ b/Ubiquitous/XiZi_IIoT/board/stm32h750/third_party_driver/delay/delay.c @@ -1,157 +1,82 @@ -/** - **************************************************************************************************** - * @file delay.c - * @author ����ԭ���Ŷ�(ALIENTEK) - * @version V1.1 - * @date 2023-02-27 - * @brief ʹ��SysTick����ͨ����ģʽ���ӳٽ��й���(֧��OS) - * �ṩdelay_init��ʼ�������� delay_us��delay_ms����ʱ���� - * @license Copyright (c) 2022-2032, �������������ӿƼ����޹�˾ - **************************************************************************************************** - * @attention - * - * ʵ��ƽ̨:����ԭ�� STM32������ - * ������Ƶ:www.yuanzige.com - * ������̳:www.openedv.com - * ��˾��ַ:www.alientek.com - * �����ַ:openedv.taobao.com - * - * �޸�˵�� - * V1.0 20221222 - * ��һ�η��� - * V1.1 20230227 - * �޸�SYS_SUPPORT_OS���ִ���, Ĭ�Ͻ�֧��UCOSII 2.93.01�汾, ����OS��ο�ʵ�� - * �޸�delay_init����ʹ��8��Ƶ,ȫ��ͳһʹ��MCUʱ�� - * �޸�delay_usʹ��ʱ��ժȡ����ʱ, ����OS - * �޸�delay_msֱ��ʹ��delay_us��ʱʵ��. - * - **************************************************************************************************** - */ #include "sys.h" #include "delay.h" -static uint32_t g_fac_us = 0; /* us��ʱ������ */ +static uint32_t g_fac_us = 0; -/* ���SYS_SUPPORT_OS������,˵��Ҫ֧��OS��(������UCOS) */ #if SYS_SUPPORT_OS -/* ���ӹ���ͷ�ļ� ( ucos��Ҫ�õ�) */ #include "os.h" -/* ����g_fac_ms����, ��ʾms��ʱ�ı�����, ����ÿ�����ĵ�ms��, (����ʹ��os��ʱ��,��Ҫ�õ�) */ static uint16_t g_fac_ms = 0; -/* - * ��delay_us/delay_ms��Ҫ֧��OS��ʱ����Ҫ������OS��صĺ궨��ͺ�����֧�� - * ������3���궨��: - * delay_osrunning :���ڱ�ʾOS��ǰ�Ƿ���������,�Ծ����Ƿ����ʹ����غ��� - * delay_ostickspersec:���ڱ�ʾOS�趨��ʱ�ӽ���,delay_init�����������������ʼ��systick - * delay_osintnesting :���ڱ�ʾOS�ж�Ƕ�׼���,��Ϊ�ж����治���Ե���,delay_msʹ�øò���������������� - * Ȼ����3������: - * delay_osschedlock :��������OS�������,��ֹ���� - * delay_osschedunlock:���ڽ���OS�������,���¿������� - * delay_ostimedly :����OS��ʱ,���������������. - * - * �����̽���UCOSII��֧��,����OS,�����вο�����ֲ - */ -/* ֧��UCOSII */ -#define delay_osrunning OSRunning /* OS�Ƿ����б��,0,������;1,������ */ -#define delay_ostickspersec OS_TICKS_PER_SEC /* OSʱ�ӽ���,��ÿ����ȴ��� */ -#define delay_osintnesting OSIntNesting /* �ж�Ƕ�׼���,���ж�Ƕ�״��� */ +#define delay_osrunning OSRunning +#define delay_ostickspersec OS_TICKS_PER_SEC +#define delay_osintnesting OSIntNesting + -/** - * @brief us����ʱʱ,�ر��������(��ֹ���us���ӳ�) - * @param �� - * @retval �� - */ void delay_osschedlock(void) { - OSSchedLock(); /* UCOSII�ķ�ʽ,��ֹ���ȣ���ֹ���us��ʱ */ -} + OSSchedLock(); + -/** - * @brief us����ʱʱ,�ָ�������� - * @param �� - * @retval �� - */ void delay_osschedunlock(void) { - OSSchedUnlock(); /* UCOSII�ķ�ʽ,�ָ����� */ + OSSchedUnlock(); } -/** - * @brief us����ʱʱ,�ָ�������� - * @param ticks: ��ʱ�Ľ����� - * @retval �� - */ + void delay_ostimedly(uint32_t ticks) { - OSTimeDly(ticks); /* UCOSII��ʱ */ + OSTimeDly(ticks); } -/** - * @brief systick�жϷ�����,ʹ��OSʱ�õ� - * @param ticks : ��ʱ�Ľ����� - * @retval �� - */ + void SysTick_Handler(void) { - /* OS ��ʼ����,��ִ�������ĵ��ȴ��� */ + if (delay_osrunning == OS_TRUE) { - /* ���� uC/OS-II �� SysTick �жϷ����� */ + OS_CPU_SysTickHandler(); } HAL_IncTick(); } #endif - -/** - * @brief ��ʼ���ӳٺ��� - * @param sysclk: ϵͳʱ��Ƶ��, ��CPUƵ��(rcc_c_ck), 480MHz - * @retval �� - */ + void delay_init(uint16_t sysclk) { -#if SYS_SUPPORT_OS /* �����Ҫ֧��OS */ +#if SYS_SUPPORT_OS uint32_t reload; #endif - g_fac_us = sysclk; /* ������HAL_Init���Ѷ�systick�������ã��������������������� */ -#if SYS_SUPPORT_OS /* �����Ҫ֧��OS. */ - reload = sysclk; /* ÿ���ӵļ������� ��λΪM */ - reload *= 1000000 / delay_ostickspersec; /* ����delay_ostickspersec�趨���ʱ��,reloadΪ24λ - * �Ĵ���,���ֵ:16777216,��480M��,Լ��0.03495s���� - */ - g_fac_ms = 1000 / delay_ostickspersec; /* ����OS������ʱ�����ٵ�λ */ - SysTick->CTRL |= 1 << 1; /* ����SYSTICK�ж� */ - SysTick->LOAD = reload; /* ÿ1/delay_ostickspersec���ж�һ�� */ - SysTick->CTRL |= 1 << 0; /* ����SYSTICK */ + g_fac_us = sysclk; +#if SYS_SUPPORT_OS + reload = sysclk; + reload *= 1000000 / delay_ostickspersec; + + g_fac_ms = 1000 / delay_ostickspersec; + SysTick->CTRL |= 1 << 1; + SysTick->LOAD = reload; + SysTick->CTRL |= 1 << 0; #endif } -/** - * @brief ��ʱnus - * @note �����Ƿ�ʹ��OS, ������ʱ��ժȡ������us��ʱ - * @param nus: Ҫ��ʱ��us�� - * @note nusȡֵ��Χ: 0 ~ (2^32 / fac_us) (fac_usһ�����ϵͳ��Ƶ, �����������) - * @retval �� - */ + void delay_us(uint32_t nus) { uint32_t ticks; uint32_t told, tnow, tcnt = 0; - uint32_t reload = SysTick->LOAD; /* LOAD��ֵ */ - ticks = nus * g_fac_us; /* ��Ҫ�Ľ����� */ + uint32_t reload = SysTick->LOAD; + ticks = nus * g_fac_us; -#if SYS_SUPPORT_OS /* �����Ҫ֧��OS */ - delay_osschedlock(); /* ���� OS ����������� */ +#if SYS_SUPPORT_OS + delay_osschedlock(); #endif - told = SysTick->VAL; /* �ս���ʱ�ļ�����ֵ */ + told = SysTick->VAL; while (1) { tnow = SysTick->VAL; @@ -159,7 +84,7 @@ void delay_us(uint32_t nus) { if (tnow < told) { - tcnt += told - tnow; /* ����ע��һ��SYSTICK��һ���ݼ��ļ������Ϳ����� */ + tcnt += told - tnow; } else { @@ -168,46 +93,37 @@ void delay_us(uint32_t nus) told = tnow; if (tcnt >= ticks) { - break; /* ʱ�䳬��/����Ҫ�ӳٵ�ʱ��,���˳� */ + break; } } } -#if SYS_SUPPORT_OS /* �����Ҫ֧��OS */ - delay_osschedunlock(); /* �ָ� OS ����������� */ +#if SYS_SUPPORT_OS + delay_osschedunlock(); #endif } -/** - * @brief ��ʱnms - * @param nms: Ҫ��ʱ��ms�� (0< nms <= (2^32 / fac_us / 1000))(fac_usһ�����ϵͳ��Ƶ, �����������) - * @retval �� - */ + void delay_ms(uint16_t nms) { -#if SYS_SUPPORT_OS /* �����Ҫ֧��OS, ������������os��ʱ���ͷ�CPU */ - if (delay_osrunning && delay_osintnesting == 0) /* ���OS�Ѿ�������,���Ҳ������ж�����(�ж����治���������) */ +#if SYS_SUPPORT_OS + if (delay_osrunning && delay_osintnesting == 0) { - if (nms >= g_fac_ms) /* ��ʱ��ʱ�����OS������ʱ������ */ + if (nms >= g_fac_ms) { - delay_ostimedly(nms / g_fac_ms); /* OS��ʱ */ + delay_ostimedly(nms / g_fac_ms); } - nms %= g_fac_ms; /* OS�Ѿ��޷��ṩ��ôС����ʱ��,������ͨ��ʽ��ʱ */ + nms %= g_fac_ms; } #endif - delay_us((uint32_t)(nms * 1000)); /* ��ͨ��ʽ��ʱ */ + delay_us((uint32_t)(nms * 1000)); } -/** - * @brief HAL���ڲ������õ�����ʱ - * @note HAL�����ʱĬ����Systick���������û�п�Systick���жϻᵼ�µ��������ʱ���޷��˳� - * @param Delay : Ҫ��ʱ�ĺ����� - * @retval None - */ + void HAL_Delay(uint32_t Delay) { delay_ms(Delay); diff --git a/Ubiquitous/XiZi_IIoT/board/stm32h750/third_party_driver/include/delay.h b/Ubiquitous/XiZi_IIoT/board/stm32h750/third_party_driver/include/delay.h index 5a9da0feb..f280c0b56 100755 --- a/Ubiquitous/XiZi_IIoT/board/stm32h750/third_party_driver/include/delay.h +++ b/Ubiquitous/XiZi_IIoT/board/stm32h750/third_party_driver/include/delay.h @@ -34,9 +34,9 @@ #include "sys.h" -void delay_init(uint16_t sysclk); /* ��ʼ���ӳٺ��� */ -void delay_ms(uint16_t nms); /* ��ʱnms */ -void delay_us(uint32_t nus); /* ��ʱnus */ +void delay_init(uint16_t sysclk); +void delay_ms(uint16_t nms); +void delay_us(uint32_t nus); #endif diff --git a/Ubiquitous/XiZi_IIoT/board/stm32h750/third_party_driver/include/sys.h b/Ubiquitous/XiZi_IIoT/board/stm32h750/third_party_driver/include/sys.h index f81dca3ac..e94c8c61b 100755 --- a/Ubiquitous/XiZi_IIoT/board/stm32h750/third_party_driver/include/sys.h +++ b/Ubiquitous/XiZi_IIoT/board/stm32h750/third_party_driver/include/sys.h @@ -1,22 +1,3 @@ -/** - **************************************************************************************************** - * @file sys.h - * @author ����ԭ���Ŷ�(ALIENTEK) - * @version V1.0 - * @date 2023-06-12 - * @brief ϵͳ��ʼ������ - * @license Copyright (c) 2020-2032, �������������ӿƼ����޹�˾ - **************************************************************************************************** - * @attention - * - * ʵ��ƽ̨:����ԭ�� ������ H750������ - * ������Ƶ:www.yuanzige.com - * ������̳:www.openedv.com - * ��˾��ַ:www.alientek.com - * �����ַ:openedv.taobao.com - * - **************************************************************************************************** - */ #ifndef __SYS_H #define __SYS_H @@ -24,19 +5,15 @@ #include "stm32h7xx_hal.h" #include "stm32h7xx_hal_rcc_ex.h" -/** - * SYS_SUPPORT_OS���ڶ���ϵͳ�ļ����Ƿ�֧��OS - * 0,��֧��OS - * 1,֧��OS - */ + #define SYS_SUPPORT_OS 0 -/* �������ø�����ʱ�� */ + extern RCC_PeriphCLKInitTypeDef rcc_periph_clk_init_struct; -/* �������� */ -void sys_cache_enable(void); /* ʹ��STM32H7��L1-Cache */ -uint8_t sys_stm32_clock_init(uint32_t plln, uint32_t pllm, uint32_t pllp, uint32_t pllq); /* ����ʱ�� */ -void sys_qspi_enable_memmapmode(void); /* ʹ��QSPI�ڴ�ӳ��ģʽ */ + +void sys_cache_enable(void); +uint8_t sys_stm32_clock_init(uint32_t plln, uint32_t pllm, uint32_t pllp, uint32_t pllq); +void sys_qspi_enable_memmapmode(void); #endif diff --git a/Ubiquitous/XiZi_IIoT/board/stm32h750/third_party_driver/include/usart.h b/Ubiquitous/XiZi_IIoT/board/stm32h750/third_party_driver/include/usart.h index fce40f511..809e24d4b 100755 --- a/Ubiquitous/XiZi_IIoT/board/stm32h750/third_party_driver/include/usart.h +++ b/Ubiquitous/XiZi_IIoT/board/stm32h750/third_party_driver/include/usart.h @@ -1,28 +1,4 @@ -/** - **************************************************************************************************** - * @file usart.h - * @author ����ԭ���Ŷ�(ALIENTEK) - * @version V1.1 - * @date 2023-06-05 - * @brief ���ڳ�ʼ������(һ���Ǵ���1)��֧��printf - * @license Copyright (c) 2020-2032, �������������ӿƼ����޹�˾ - **************************************************************************************************** - * @attention - * - * ʵ��ƽ̨:����ԭ�� STM32H750������ - * ������Ƶ:www.yuanzige.com - * ������̳:www.openedv.com - * ��˾��ַ:www.alientek.com - * �����ַ:openedv.taobao.com - * - * �޸�˵�� - * V1.0 20200312 - * ��һ�η��� - * V1.1 20230605 - * ɾ��USART_UX_IRQHandler()�����ij�ʱ�������޸�HAL_UART_RxCpltCallback() - * - **************************************************************************************************** - */ + #ifndef _USART_H #define _USART_H @@ -31,41 +7,36 @@ #include "sys.h" #include "stm32h7xx_hal_rcc.h" -/*******************************************************************************************************/ -/* ���� �� ���� ���� - * Ĭ�������USART1��. - * ע��: ͨ���޸���12���궨��,����֧��USART1~UART7����һ������. - */ #define USART_TX_GPIO_PORT GPIOA #define USART_TX_GPIO_PIN GPIO_PIN_9 #define USART_TX_GPIO_AF GPIO_AF7_USART1 -#define USART_TX_GPIO_CLK_ENABLE() do{ __HAL_RCC_GPIOA_CLK_ENABLE(); }while(0) /* ��������ʱ��ʹ�� */ +#define USART_TX_GPIO_CLK_ENABLE() do{ __HAL_RCC_GPIOA_CLK_ENABLE(); }while(0) #define USART_RX_GPIO_PORT GPIOA #define USART_RX_GPIO_PIN GPIO_PIN_10 #define USART_RX_GPIO_AF GPIO_AF7_USART1 -#define USART_RX_GPIO_CLK_ENABLE() do{ __HAL_RCC_GPIOA_CLK_ENABLE(); }while(0) /* ��������ʱ��ʹ�� */ +#define USART_RX_GPIO_CLK_ENABLE() do{ __HAL_RCC_GPIOA_CLK_ENABLE(); }while(0) #define USART_UX USART1 #define USART_UX_IRQn USART1_IRQn #define USART_UX_IRQHandler USART1_IRQHandler -#define USART_UX_CLK_ENABLE() do{ __HAL_RCC_USART1_CLK_ENABLE(); }while(0) /* USART1 ʱ��ʹ�� */ - -/*******************************************************************************************************/ - -#define USART_REC_LEN 200 /* �����������ֽ��� 200 */ -#define USART_EN_RX 1 /* ʹ�ܣ�1��/��ֹ��0������1���� */ -#define RXBUFFERSIZE 1 /* �����С */ - -extern UART_HandleTypeDef g_uart1_handle; /* UART��� */ - -extern uint8_t g_usart_rx_buf[USART_REC_LEN]; /* ���ջ���,���USART_REC_LEN���ֽ�.ĩ�ֽ�Ϊ���з� */ -extern uint16_t g_usart_rx_sta; /* ����״̬��� */ -extern uint8_t g_rx_buffer[RXBUFFERSIZE]; /* HAL��USART����Buffer */ +#define USART_UX_CLK_ENABLE() do{ __HAL_RCC_USART1_CLK_ENABLE(); }while(0) -void usart_init(uint32_t baudrate); /* ���ڳ�ʼ������ */ + +#define USART_REC_LEN 200 +#define USART_EN_RX 1 +#define RXBUFFERSIZE 1 + +extern UART_HandleTypeDef g_uart1_handle; + +extern uint8_t g_usart_rx_buf[USART_REC_LEN]; +extern uint16_t g_usart_rx_sta; +extern uint8_t g_rx_buffer[RXBUFFERSIZE]; + + +void usart_init(uint32_t baudrate); #endif diff --git a/Ubiquitous/XiZi_IIoT/board/stm32h750/third_party_driver/sys/sys.c b/Ubiquitous/XiZi_IIoT/board/stm32h750/third_party_driver/sys/sys.c index 079fce83a..a9f528821 100755 --- a/Ubiquitous/XiZi_IIoT/board/stm32h750/third_party_driver/sys/sys.c +++ b/Ubiquitous/XiZi_IIoT/board/stm32h750/third_party_driver/sys/sys.c @@ -1,22 +1,3 @@ -/** - **************************************************************************************************** - * @file sys.c - * @author ����ԭ���Ŷ�(ALIENTEK) - * @version V1.0 - * @date 2023-06-12 - * @brief ϵͳ��ʼ������ - * @license Copyright (c) 2020-2032, �������������ӿƼ����޹�˾ - **************************************************************************************************** - * @attention - * - * ʵ��ƽ̨:����ԭ�� ������ H750������ - * ������Ƶ:www.yuanzige.com - * ������̳:www.openedv.com - * ��˾��ַ:www.alientek.com - * ������?:openedv.taobao.com - * - **************************************************************************************************** - */ #include "sys.h" #include "stm32h7xx_hal_rcc.h" @@ -26,51 +7,36 @@ #include "stm32h7xx_hal_pwr.h" #include "stm32h7xx_hal_flash_ex.h" #include "stm32h7xx_hal_gpio.h" -/* �������ø�����ʱ�� */ + RCC_PeriphCLKInitTypeDef rcc_periph_clk_init_struct = {0}; void sys_cache_enable(void) { - SCB_EnableICache(); /* ʹÄÜI-Cache */ - SCB_EnableDCache(); /* ʹÄÜD-Cache */ - SCB->CACR |= SCB_CACR_FORCEWT_Msk; /* ʹÄÜD-CacheÇ¿ÖÆÍ¸Ð´ */ + SCB_EnableICache(); + SCB_EnableDCache(); + SCB->CACR |= SCB_CACR_FORCEWT_Msk; } -/** - * @brief ?????��?? - * @param plln: PLL1??��????��?????����??��??4~512?? - * @param pllm: PLL1???�衤????��?????����??��??1~63?? - * @param pllp: PLL1??P?????����????��?????����??��??2~128?��???????? - * @param pllq: PLL1??Q?????����????��?????����??��??1~128?? - * @note ?��?????��????????25MHz?��??????????plln=192 pllm=5 pllp=2 pllq=4 - * @retval ?????��?? - * @arg 0: ???? - * @arg 1: ?���? - */ + uint8_t sys_stm32_clock_init(uint32_t plln, uint32_t pllm, uint32_t pllp, uint32_t pllq) { RCC_OscInitTypeDef rcc_osc_init_struct = {0}; RCC_ClkInitTypeDef rcc_clk_init_struct = {0}; - /* ����ΪLDO Supply��ʽΪ�ں��򹩵� */ + HAL_PWREx_ConfigSupply(PWR_LDO_SUPPLY); - /* ����ΪVOS0��1.26V~1.40V�� */ + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); while(!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)); __HAL_RCC_SYSCFG_CLK_ENABLE(); __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE0); while(!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)); - /* ����PLL1��ʹ��HSI48 - * PLL1ʱ��Դ��HSE��hse_ck�� - * PLL1 P�����pll1_p_ck = hse_ck / pllm * plln / pllp - * PLL1 Q�����pll1_q_ck = hse_ck / pllm * plln / pllq - * PLL1 R�����pll1_r_ck = hse_ck / pllm * plln / 2 - */ + rcc_osc_init_struct.OscillatorType = RCC_OSCILLATORTYPE_HSE | RCC_OSCILLATORTYPE_HSI48; rcc_osc_init_struct.HSEState = RCC_HSE_ON; rcc_osc_init_struct.HSI48State = RCC_HSI48_ON; @@ -88,16 +54,7 @@ uint8_t sys_stm32_clock_init(uint32_t plln, uint32_t pllm, uint32_t pllp, uint32 { return 1; } - - /* ����CPU��AHB���ߺ�APB����ʱ�� - * ʱ��Դ��PLL1P�����pll1_p_ck�� - * ϵͳʱ�ӣ�sys_ck = pll1_p_ck - * AHB����ʱ�ӣ�rcc_ahb_ck��rcc_hclk[4:1]�� = sys_ck / 2 - * APB1����ʱ�ӣ�rcc_pclk1 = rcc_ahb_ck / 2 - * APB2����ʱ�ӣ�rcc_pclk2 = rcc_ahb_ck / 2 - * APB3����ʱ�ӣ�rcc_pclk3 = rcc_ahb_ck / 2 - * APB4����ʱ�ӣ�rcc_pclk4 = rcc_ahb_ck / 2 - */ + rcc_clk_init_struct.ClockType = RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_D1PCLK1 | @@ -113,12 +70,7 @@ uint8_t sys_stm32_clock_init(uint32_t plln, uint32_t pllm, uint32_t pllp, uint32 rcc_clk_init_struct.APB4CLKDivider = RCC_APB4_DIV2; HAL_RCC_ClockConfig(&rcc_clk_init_struct, FLASH_LATENCY_4); - /* ����PLL2 - * ʱ��Դ��HSE��hse_ck�� - * P�����pll2_p_ck = hse_ck / 5 * 192 / 12 - * Q�����pll2_q_ck = hse_ck / 5 * 192 / 2 - * R�����pll2_r_ck = hse_ck / 5 * 192 / 2 - */ + rcc_periph_clk_init_struct.PeriphClockSelection = RCC_PERIPHCLK_PLL2_DIVP | RCC_PERIPHCLK_PLL2_DIVQ | RCC_PERIPHCLK_PLL2_DIVR; @@ -132,21 +84,16 @@ uint8_t sys_stm32_clock_init(uint32_t plln, uint32_t pllm, uint32_t pllp, uint32 rcc_periph_clk_init_struct.PLL2.PLL2FRACN = 0; HAL_RCCEx_PeriphCLKConfig(&rcc_periph_clk_init_struct); - /* ʹ��QSPI�ڴ�ӳ��ģʽ */ sys_qspi_enable_memmapmode(); - /* ʹ��I/O������Ԫ */ + HAL_SYSCFG_CompensationCodeSelect(SYSCFG_CELL_CODE); HAL_EnableCompensationCell(); return 0; } -/** - * @brief ʹ��QSPI�ڴ�ӳ��ģʽ - * @param �� - * @retval �� - */ + void sys_qspi_enable_memmapmode(void) { QSPI_HandleTypeDef qspi_handle = {0}; @@ -155,7 +102,7 @@ void sys_qspi_enable_memmapmode(void) QSPI_MemoryMappedTypeDef qspi_memory_mapped_struct = {0}; MPU_Region_InitTypeDef mpu_region_init_struct = {0}; - /* ��ʼ��QSPI */ + qspi_handle.Instance = QUADSPI; qspi_handle.Init.ClockPrescaler = 2 - 1; qspi_handle.Init.FifoThreshold = 32; @@ -167,8 +114,7 @@ void sys_qspi_enable_memmapmode(void) qspi_handle.Init.DualFlash = QSPI_DUALFLASH_DISABLE; HAL_QSPI_DeInit(&qspi_handle); HAL_QSPI_Init(&qspi_handle); - - /* дʹ��Flash��06h�� */ + qspi_command_struct.InstructionMode = QSPI_INSTRUCTION_1_LINE; qspi_command_struct.Instruction = 0x06; qspi_command_struct.AddressMode = QSPI_ADDRESS_NONE; @@ -180,7 +126,6 @@ void sys_qspi_enable_memmapmode(void) qspi_command_struct.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; HAL_QSPI_Command(&qspi_handle, &qspi_command_struct, HAL_QSPI_TIMEOUT_DEFAULT_VALUE); - /* ��ѯ�ȴ�Flashдʹ�ܣ�05h�� */ qspi_command_struct.InstructionMode = QSPI_INSTRUCTION_1_LINE; qspi_command_struct.Instruction = 0x05; qspi_command_struct.AddressMode = QSPI_ADDRESS_NONE; @@ -198,7 +143,7 @@ void sys_qspi_enable_memmapmode(void) qspi_autopolling_struct.AutomaticStop = QSPI_AUTOMATIC_STOP_ENABLE; HAL_QSPI_AutoPolling(&qspi_handle, &qspi_command_struct, &qspi_autopolling_struct, HAL_QSPI_TIMEOUT_DEFAULT_VALUE); - /* ����MPU����QSPI�ڴ�ӳ������ */ + mpu_region_init_struct.Enable = MPU_REGION_ENABLE; mpu_region_init_struct.Number = MPU_REGION_NUMBER0; mpu_region_init_struct.BaseAddress = QSPI_BASE; @@ -214,7 +159,7 @@ void sys_qspi_enable_memmapmode(void) HAL_MPU_ConfigRegion(&mpu_region_init_struct); HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT); - /* Flash�����ݿڿ��ٶ���EBh���ڴ�ӳ��ģʽ */ + qspi_command_struct.InstructionMode = QSPI_INSTRUCTION_1_LINE; qspi_command_struct.Instruction = 0xEB; qspi_command_struct.AddressMode = QSPI_ADDRESS_4_LINES; @@ -229,36 +174,24 @@ void sys_qspi_enable_memmapmode(void) HAL_QSPI_MemoryMapped(&qspi_handle, &qspi_command_struct, &qspi_memory_mapped_struct); } -/** - * @brief HAL��QSPI��ʼ��MSP���� - * @param �� - * @retval �� - */ + void HAL_QSPI_MspInit(QSPI_HandleTypeDef *hqspi) { GPIO_InitTypeDef gpio_init_struct; if (hqspi->Instance == QUADSPI) { - /* ����ʱ�� */ + rcc_periph_clk_init_struct.PeriphClockSelection |= RCC_PERIPHCLK_QSPI; rcc_periph_clk_init_struct.QspiClockSelection = RCC_QSPICLKSOURCE_D1HCLK; HAL_RCCEx_PeriphCLKConfig(&rcc_periph_clk_init_struct); - /* ʹ��ʱ�� */ + __HAL_RCC_QSPI_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); __HAL_RCC_GPIOF_CLK_ENABLE(); - /* ��ʼ��GPIO - * QSPI Signal MCU Pin - * QUADSPI_BK1_IO0 <--> PF8 - * QUADSPI_BK1_IO1 <--> PF9 - * QUADSPI_BK1_IO2 <--> PF7 - * QUADSPI_BK1_IO3 <--> PF6 - * QUADSPI_BK1_NCS <--> PB6 - * QUADSPI_CLK <--> PB2 - */ + gpio_init_struct.Pin = GPIO_PIN_6; gpio_init_struct.Mode = GPIO_MODE_AF_PP; gpio_init_struct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; @@ -280,27 +213,14 @@ void HAL_QSPI_MspInit(QSPI_HandleTypeDef *hqspi) } } -/** - * @brief HAL��QSPI����ʼ��MSP���� - * @param �� - * @retval �� - */ + void HAL_QSPI_MspDeInit(QSPI_HandleTypeDef* hqspi) { if (hqspi->Instance == QUADSPI) { - /* ʹ��ʱ�� */ __HAL_RCC_QSPI_CLK_DISABLE(); - /* ����ʼ��GPIO - * QSPI Signal MCU Pin - * QUADSPI_BK1_IO0 <--> PF8 - * QUADSPI_BK1_IO1 <--> PF9 - * QUADSPI_BK1_IO2 <--> PF7 - * QUADSPI_BK1_IO3 <--> PF6 - * QUADSPI_BK1_NCS <--> PB6 - * QUADSPI_CLK <--> PB2 - */ + HAL_GPIO_DeInit(GPIOB, GPIO_PIN_2 | GPIO_PIN_6); HAL_GPIO_DeInit(GPIOB, GPIO_PIN_6 | GPIO_PIN_7 | GPIO_PIN_8 | GPIO_PIN_9); } diff --git a/Ubiquitous/XiZi_IIoT/board/stm32h750/third_party_driver/usart/connect_uart.c b/Ubiquitous/XiZi_IIoT/board/stm32h750/third_party_driver/usart/connect_uart.c index 996f6c20c..68ee36707 100644 --- a/Ubiquitous/XiZi_IIoT/board/stm32h750/third_party_driver/usart/connect_uart.c +++ b/Ubiquitous/XiZi_IIoT/board/stm32h750/third_party_driver/usart/connect_uart.c @@ -94,7 +94,6 @@ void UartIsr1(int vector, void *param) DECLARE_HW_IRQ(USART1_IRQn, UartIsr1, NONE); - static uint32 SerialInit(struct SerialDriver *serial_drv, struct BusConfigureInfo *configure_info) { NULL_PARAM_CHECK(serial_drv); @@ -117,58 +116,15 @@ static uint32 SerialInit(struct SerialDriver *serial_drv, struct BusConfigureInf // config serial receive sem timeout dev_param->serial_timeout = serial_cfg->data_cfg.serial_timeout; - serial_hw_cfg->uart_handle.Instance = serial_hw_cfg->uart_device; - serial_hw_cfg->uart_handle.Init.BaudRate = serial_cfg->data_cfg.serial_baud_rate; + serial_hw_cfg->uart_handle.Instance = USART_UX; + serial_hw_cfg->uart_handle.Init.BaudRate = 115200; serial_hw_cfg->uart_handle.Init.HwFlowCtl = UART_HWCONTROL_NONE; serial_hw_cfg->uart_handle.Init.Mode = UART_MODE_TX_RX; serial_hw_cfg->uart_handle.Init.OverSampling = UART_OVERSAMPLING_16; - - switch (serial_cfg->data_cfg.serial_data_bits) - { - case DATA_BITS_8: - if (serial_cfg->data_cfg.serial_parity_mode == PARITY_ODD || serial_cfg->data_cfg.serial_parity_mode == PARITY_EVEN) - serial_hw_cfg->uart_handle.Init.WordLength = UART_WORDLENGTH_9B; - else - serial_hw_cfg->uart_handle.Init.WordLength = UART_WORDLENGTH_8B; - break; - case DATA_BITS_9: - serial_hw_cfg->uart_handle.Init.WordLength = UART_WORDLENGTH_9B; - break; - default: - serial_hw_cfg->uart_handle.Init.WordLength = UART_WORDLENGTH_8B; - break; - } - - switch (serial_cfg->data_cfg.serial_stop_bits) - { - case STOP_BITS_1: - serial_hw_cfg->uart_handle.Init.StopBits = UART_STOPBITS_1; - break; - case STOP_BITS_2: - serial_hw_cfg->uart_handle.Init.StopBits = UART_STOPBITS_2; - break; - default: - serial_hw_cfg->uart_handle.Init.StopBits = UART_STOPBITS_1; - break; - } - - switch (serial_cfg->data_cfg.serial_parity_mode) - { - case PARITY_NONE: - serial_hw_cfg->uart_handle.Init.Parity = UART_PARITY_NONE; - break; - case PARITY_ODD: - serial_hw_cfg->uart_handle.Init.Parity = UART_PARITY_ODD; - break; - case PARITY_EVEN: - serial_hw_cfg->uart_handle.Init.Parity = UART_PARITY_EVEN; - break; - default: - serial_hw_cfg->uart_handle.Init.Parity = UART_PARITY_NONE; - break; - } - usart_init(115200); - + serial_hw_cfg->uart_handle.Init.WordLength = UART_WORDLENGTH_8B; + serial_hw_cfg->uart_handle.Init.Parity = UART_PARITY_NONE; + serial_hw_cfg->uart_handle.Init.StopBits = UART_STOPBITS_1; + usart_init(115200); return EOK; } @@ -229,12 +185,11 @@ static int SerialPutChar(struct SerialHardwareDevice *serial_dev, char c) { struct SerialCfgParam *serial_cfg = (struct SerialCfgParam *)serial_dev->private_data; struct Stm32UartHwCfg *serial_hw_cfg = (struct Stm32UartHwCfg *)serial_cfg->hw_cfg.private_data; - /* Polling mode. */ - HAL_UART_Transmit(&(serial_hw_cfg->uart_handle), (uint8_t *)&c, 1, 100); - // UART_INSTANCE_CLEAR_FUNCTION(&(serial_hw_cfg->uart_handle), UART_FLAG_TC); + - // serial_hw_cfg->uart_handle.Instance->TDR = c; - // while (__HAL_UART_GET_FLAG(&(serial_hw_cfg->uart_handle), UART_FLAG_TC) == RESET); + while ((serial_hw_cfg->uart_handle.Instance->ISR & 0X40) == 0); + + serial_hw_cfg->uart_handle.Instance->TDR = (uint8_t)c; return EOK; } diff --git a/Ubiquitous/XiZi_IIoT/board/stm32h750/third_party_driver/usart/hardware_usart.c b/Ubiquitous/XiZi_IIoT/board/stm32h750/third_party_driver/usart/hardware_usart.c index d5129cb83..5883d0f4c 100755 --- a/Ubiquitous/XiZi_IIoT/board/stm32h750/third_party_driver/usart/hardware_usart.c +++ b/Ubiquitous/XiZi_IIoT/board/stm32h750/third_party_driver/usart/hardware_usart.c @@ -1,133 +1,89 @@ -/** - **************************************************************************************************** - * @file usart.c - * @author ����ԭ���Ŷ�(ALIENTEK) - * @version V1.1 - * @date 2023-06-05 - * @brief ���ڳ�ʼ������(һ���Ǵ���1)��֧��printf - * @license Copyright (c) 2020-2032, �������������ӿƼ����޹�˾ - **************************************************************************************************** - * @attention - * - * ʵ��ƽ̨:����ԭ�� STM32H750������ - * ������Ƶ:www.yuanzige.com - * ������̳:www.openedv.com - * ��˾��ַ:www.alientek.com - * �����ַ:openedv.taobao.com - * - * �޸�˵�� - * V1.0 20200312 - * ��һ�η��� - * V1.1 20230605 - * ɾ��USART_UX_IRQHandler()�����ij�ʱ�������޸�HAL_UART_RxCpltCallback() - * - **************************************************************************************************** - */ + #include "sys.h" #include "usart.h" #include "stm32h7xx_hal_gpio.h" #include "stm32h7xx_hal_cortex.h" -/* ���ջ���, ���USART_REC_LEN���ֽ�. */ + uint8_t g_usart_rx_buf[USART_REC_LEN]; -/* ����״̬ - * bit15�� ������ɱ�־ - * bit14�� ���յ�0x0d - * bit13~0�� ���յ�����Ч�ֽ���Ŀ -*/ + uint16_t g_usart_rx_sta = 0; -uint8_t g_rx_buffer[RXBUFFERSIZE]; /* HAL��ʹ�õĴ��ڽ��ջ��� */ +uint8_t g_rx_buffer[RXBUFFERSIZE]; + +UART_HandleTypeDef g_uart1_handle; -UART_HandleTypeDef g_uart1_handle; /* UART��� */ -/** - * @brief ����X��ʼ������ - * @param baudrate: ������, �����Լ���Ҫ���ò�����ֵ - * @note ע��: ����������ȷ��ʱ��Դ, ���򴮿ڲ����ʾͻ������쳣. - * �����USART��ʱ��Դ��sys_stm32_clock_init()�������Ѿ����ù���. - * @retval �� - */ void usart_init(uint32_t baudrate) { - g_uart1_handle.Instance = USART_UX; /* USART1 */ - g_uart1_handle.Init.BaudRate = baudrate; /* ������ */ - g_uart1_handle.Init.WordLength = UART_WORDLENGTH_8B; /* �ֳ�Ϊ8λ���ݸ�ʽ */ - g_uart1_handle.Init.StopBits = UART_STOPBITS_1; /* һ��ֹͣλ */ - g_uart1_handle.Init.Parity = UART_PARITY_NONE; /* ����żУ��λ */ - g_uart1_handle.Init.HwFlowCtl = UART_HWCONTROL_NONE; /* ��Ӳ������ */ - g_uart1_handle.Init.Mode = UART_MODE_TX_RX; /* �շ�ģʽ */ - HAL_UART_Init(&g_uart1_handle); /* HAL_UART_Init()��ʹ��UART1 */ + g_uart1_handle.Instance = USART_UX; + g_uart1_handle.Init.BaudRate = baudrate; + g_uart1_handle.Init.WordLength = UART_WORDLENGTH_8B; + g_uart1_handle.Init.StopBits = UART_STOPBITS_1; + g_uart1_handle.Init.Parity = UART_PARITY_NONE; + g_uart1_handle.Init.HwFlowCtl = UART_HWCONTROL_NONE; + g_uart1_handle.Init.Mode = UART_MODE_TX_RX; + HAL_UART_Init(&g_uart1_handle); - /* �ú����Ὺ�������жϣ���־λUART_IT_RXNE���������ý��ջ����Լ����ջ��������������� */ + HAL_UART_Receive_IT(&g_uart1_handle, (uint8_t *)g_rx_buffer, RXBUFFERSIZE); + } -/** - * @brief UART�ײ��ʼ������ - * @param huart: UART�������ָ�� - * @note �˺����ᱻHAL_UART_Init()���� - * ���ʱ��ʹ�ܣ��������ã��ж����� - * @retval �� - */ + void HAL_UART_MspInit(UART_HandleTypeDef *huart) { GPIO_InitTypeDef gpio_init_struct; - if(huart->Instance == USART1) /* ����Ǵ���1�����д���1 MSP��ʼ�� */ + if(huart->Instance == USART1) { rcc_periph_clk_init_struct.PeriphClockSelection |= RCC_PERIPHCLK_USART1; rcc_periph_clk_init_struct.Usart16ClockSelection = RCC_USART16CLKSOURCE_PCLK2; HAL_RCCEx_PeriphCLKConfig(&rcc_periph_clk_init_struct); - USART_UX_CLK_ENABLE(); /* USART1 ʱ��ʹ�� */ - USART_TX_GPIO_CLK_ENABLE(); /* ��������ʱ��ʹ�� */ - USART_RX_GPIO_CLK_ENABLE(); /* ��������ʱ��ʹ�� */ + USART_UX_CLK_ENABLE(); + USART_TX_GPIO_CLK_ENABLE(); + USART_RX_GPIO_CLK_ENABLE(); - gpio_init_struct.Pin = USART_TX_GPIO_PIN; /* TX���� */ - gpio_init_struct.Mode = GPIO_MODE_AF_PP; /* ����������� */ - gpio_init_struct.Pull = GPIO_PULLUP; /* ���� */ - gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH; /* ���� */ - gpio_init_struct.Alternate = USART_TX_GPIO_AF; /* ����ΪUSART1 */ - HAL_GPIO_Init(USART_TX_GPIO_PORT, &gpio_init_struct); /* ��ʼ���������� */ - - gpio_init_struct.Pin = USART_RX_GPIO_PIN; /* RX���� */ - gpio_init_struct.Alternate = USART_RX_GPIO_AF; /* ����ΪUSART1 */ - HAL_GPIO_Init(USART_RX_GPIO_PORT, &gpio_init_struct); /* ��ʼ���������� */ + gpio_init_struct.Pin = USART_TX_GPIO_PIN; + gpio_init_struct.Mode = GPIO_MODE_AF_PP; + gpio_init_struct.Pull = GPIO_PULLUP; + gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH; + gpio_init_struct.Alternate = USART_TX_GPIO_AF; + HAL_GPIO_Init(USART_TX_GPIO_PORT, &gpio_init_struct); + gpio_init_struct.Pin = USART_RX_GPIO_PIN; + gpio_init_struct.Alternate = USART_RX_GPIO_AF; + HAL_GPIO_Init(USART_RX_GPIO_PORT, &gpio_init_struct); #if USART_EN_RX - HAL_NVIC_EnableIRQ(USART_UX_IRQn); /* ʹ��USART1�ж�ͨ�� */ - HAL_NVIC_SetPriority(USART_UX_IRQn, 3, 3); /* ��ռ���ȼ�3�������ȼ�3 */ -#endif + HAL_NVIC_EnableIRQ(USART_UX_IRQn); + HAL_NVIC_SetPriority(USART_UX_IRQn, 3, 3); +#endif } } -/** - * @brief Rx����ص����� - * @param huart: UART�������ָ�� - * @retval �� - */ + void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { - if(huart->Instance == USART1) /* ����Ǵ���1 */ + if(huart->Instance == USART1) { - if((g_usart_rx_sta & 0x8000) == 0) /* ����δ��� */ + if((g_usart_rx_sta & 0x8000) == 0) { - if(g_usart_rx_sta & 0x4000) /* ���յ���0x0d */ + if(g_usart_rx_sta & 0x4000) { if(g_rx_buffer[0] != 0x0a) { - g_usart_rx_sta = 0; /* ���մ���,���¿�ʼ */ + g_usart_rx_sta = 0; } else { - g_usart_rx_sta |= 0x8000; /* ��������� */ + g_usart_rx_sta |= 0x8000; } } - else /* ��û�յ�0X0D */ + else { if(g_rx_buffer[0] == 0x0d) { @@ -139,7 +95,7 @@ void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) g_usart_rx_sta++; if(g_usart_rx_sta > (USART_REC_LEN - 1)) { - g_usart_rx_sta = 0; /* �������ݴ���,���¿�ʼ���� */ + g_usart_rx_sta = 0; } } }