137 lines
3.7 KiB
C
137 lines
3.7 KiB
C
/**
|
||
* @file app.c
|
||
* @author xxx
|
||
* @date 2023-08-30 08:58:43
|
||
* @brief app初始化和app启动
|
||
* @copyright Copyright (c) 2023 by xxx, All Rights Reserved.
|
||
*/
|
||
|
||
#include "app.h"
|
||
#include "adcs.h"
|
||
#include "test_bsp.h"
|
||
#include "bootload.h"
|
||
|
||
__IO calib_param_t calib_param[CALIBPARA_NUM]; // 校准参数
|
||
device_typedef udevice; // 设备参数
|
||
real_time_data_t rt_data; // 实时参数
|
||
pid_t _pid; // pid参数
|
||
driver_icon_enable_u driver_icon_enable; // 驱动使能图标
|
||
uint32_t mode_default_autoload; // 默认自动加载
|
||
// 模拟量
|
||
__IO uint16_t adc_raw[ADC1_MAX]; // ADC原始值
|
||
// 数字量
|
||
__IO float32 pid_target = 0; // pid控制目标
|
||
__IO float32 pid_actual = 0; // pid控制实际
|
||
__IO float32 show_loop = 0; // 显示电流
|
||
__IO float32 show_target = 0; // 显示目标
|
||
__IO float32 show_actual = 0; // 显示实际
|
||
__IO float32 range_percentage; // 量程百分比
|
||
__IO const static uint32_t cupid_encrypt = 0xFFFFFFFF;
|
||
#ifndef BOOTLOAD // 非bootload模式
|
||
static void app_preload(void)
|
||
{
|
||
mode_default_autoload = LL_TIM_GetAutoReload(TIM7);
|
||
|
||
if (app_preload_flag != 0xa5)
|
||
{
|
||
app_preload_flag = 0xa5;
|
||
udevice.display_language = CHINESE;
|
||
app_preload_language_flag = udevice.display_language;
|
||
app_preload_cupid_encrypt = 0xFFFFFFFF;
|
||
}
|
||
else
|
||
{
|
||
udevice.display_language = app_preload_language_flag;
|
||
}
|
||
|
||
set_app_preload_bootload_flag(FALSE);
|
||
}
|
||
/**
|
||
* @brief BOOTLOAD传输数据
|
||
* @param {uint8_t} *data
|
||
* @param {uint16_t} len
|
||
* @return {*}
|
||
* @note
|
||
*/
|
||
static void bootload_transmit(const uint8_t data_src, const uint8_t *data, const uint16_t len)
|
||
{
|
||
extern uart_t *uarts[APP_UART_MAX];
|
||
uart_send_data(uarts[data_src], (uint8_t *)data, len);
|
||
}
|
||
|
||
/**
|
||
* @brief BOOTLOAD更新完成处理
|
||
* @return {*}
|
||
* @note BOOTLOAD更新完成恢复业务流程,这个时候不要重启
|
||
*/
|
||
static void bootload_end(BOOL bootload_write_flag)
|
||
{
|
||
set_app_preload_bootload_flag(FALSE); // 更新完成恢复业务流程
|
||
if (bootload_write_flag == TRUE)
|
||
{
|
||
set_app_preload_bootload_jump_flag(APP_PRELOAD_BOOTLOAD_JUMP_WAIT); // 更新完成等待用户通知跳转到bootload
|
||
}
|
||
else
|
||
{
|
||
set_app_preload_bootload_jump_flag(APP_PRELOAD_BOOTLOAD_JUMP_NONE);
|
||
// 更新失败 通知用户
|
||
}
|
||
}
|
||
#endif
|
||
|
||
/**
|
||
* @brief app初始化
|
||
* @return {*}
|
||
* @note
|
||
*/
|
||
void app_init(void)
|
||
{
|
||
leds_on_all(); // 打开所有LED
|
||
#ifndef BOOTLOAD // 非bootload模式
|
||
app_preload(); // 预加载
|
||
{
|
||
system_clock_config_set_flag(TRUE);
|
||
system_clock_config_hight(); // 切换高频
|
||
fal_execution_init(); // fal初始化
|
||
params_init(); // 参数初始化
|
||
system_clock_config_low(); // 切换低频
|
||
app_hart_init(); // HART初始化
|
||
mode_init(); // 工作模式初始化
|
||
flow_init(); // 流程初始化
|
||
|
||
bootload_init(bootload_transmit, bootload_end); // 在用户代码中接受更新文件需要初始化bootload
|
||
}
|
||
|
||
// TIM6 is placed after app_init to wait for the completion of fal_execution initialization.
|
||
ENABLE_TIM(TIM6); // Enable TIM6
|
||
#if LCD_DESIGN == TRUE
|
||
ENABLE_TIM(TIM7); // Enable TIM7
|
||
#endif
|
||
|
||
#else // bootload模式
|
||
// 在BOOTLOAD模式下需要关闭所有外设,且不需要接受用户代码,所以不需要初始化
|
||
board_dinit();
|
||
#endif
|
||
|
||
leds_off_all(); // 关闭所有LED
|
||
}
|
||
|
||
/**
|
||
* @brief app反初始化
|
||
* @return {*}
|
||
* @note
|
||
*/
|
||
void app_dinit(void)
|
||
{
|
||
}
|
||
|
||
/**
|
||
* @brief 业务流程启动
|
||
* @return {*}
|
||
* @note
|
||
*/
|
||
void app_start(void)
|
||
{
|
||
flow_start();
|
||
}
|