/**
  ******************************************************************************
  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
  * Copyright (C) 2021 Shanghai Eastsoft Microelectronics Co., Ltd. ALL rights reserved.
  *******************************************************************************
  */

<--------------------------------------------------------------------------------
Version history:
--------------------------------------------------------------------------------->
2024-10-30	V1.0.0	AE TEAM

<--------------------------------------------------------------------------------
Demo introduction:
--------------------------------------------------------------------------------->
本示例功能：UART_Boot，通过UART通信，BootLoader程序引导MCU完成查空、擦除、烧入、校验、及跳转功能。

<--------------------------------------------------------------------------------
测试环境:
--------------------------------------------------------------------------------->
测试板；
ES-PDS-ES32M0502LQ-T1

辅助软件：
UART-BOOT上位机软件
add_checksum上位机软件

<--------------------------------------------------------------------------------
测试步骤：
--------------------------------------------------------------------------------->
1) 编译工程，编译通过后将程序下载到目标芯片；
2) 打开上位机软件UART-BOOT，选择芯片型号 ES32M0502；
3) 配置串口参数：通信口（查看适配的COM端口号），波特率（115200），校验位（无校验），停止位（1），超时（默认值10，可自行修改合适的超时时间）；
4) 点击“打开”按钮，选择待烧录文件；
5) 点击启动，将合成的校验和软件载入到UART-BOOT中。点击自动烧录，或者 擦除->烧录->引导程序到App。

<--------------------------------------------------------------------------------
注意：
--------------------------------------------------------------------------------->
1) 测试环境需要共GND。
2) 此UART_Boot_app_demo预设放于Flash前12K(0x3000)位置，CRC校验放在0x6000，后面120K提供存放用户自行开发的程序。
3) 用户可自行决定应用程序要透过bootloader烧入于哪个位置，透过设定"APP_ADDR"参数即可修改，但必须以4K为单位之位置，因为使用software remap方式须以4K为单位，否则无法正确remap到指定位置。
4) 用户在开发自家的应用程序时，不用特别指定 ROM 地址，Start Address设为0即可，设定如下: 开启Keil -> Options for target -> Target -> IROM1 : Start Address设定为0，因为此demo code会自动将程序烧入于用户指定位置。
5）在使用跳转至appflash后若需要跳转至bootflash时，直接点击 引导程序到BootLoader就好了。
6) 在使用UART_Boot工程时需注意编译后的大小，需满足代码空间需求即可。

如果需要使用CRC检测功能：
1) 在main.h中打开#define __USE_CRC32宏定义。
2) 打开上位机软件add_checksum，将编译好的template.hex载入到软件中，检验方式CRC校验，校验和保存地址填写为0x6000，格式为hex
3) 点击add_checksum自动合成一个新的hex。
4) 在重新测试步骤第5步的操作，烧录新的hex文件。

<--------------------------------------------------------------------------------
System clock:
--------------------------------------------------------------------------------->
PLL 72MHz.

<--------------------------------------------------------------------------------
Pin connection:
--------------------------------------------------------------------------------->
UART_TX:	PB07(UART1_TX - Output pin)
UART_RX:	PB08(UART1_RX - Input pin)
DEBUG_UART_TX:	PC01(UART2_TX - Output pin)
DEBUG_UART_RX:	PC00(UART2_RX - Input pin)
LED_1:	PA05(GPIO - Output pin)
LED_2:	PA06(GPIO - Output pin)
LED_3:	PA07(GPIO - Output pin)
LED_4:	PB11(GPIO - Output pin)

