Browse Source

update

master
Yuenold 3 years ago
parent
commit
7d3fbe77a6
  1. 83
      APP/adc.c
  2. 18
      APP/key.c
  3. 20
      APP/key.h
  4. 124
      APP/main.c
  5. 9
      APP/main.h
  6. 31
      APP/ozone_pwm_control.c
  7. 24
      APP/port.c
  8. 56
      APP/port.h
  9. 76
      APP/pwm.c
  10. 4
      APP/pwm.h
  11. 9
      APP/systick.c
  12. 10
      APP/systick.h
  13. 34
      APP/uart0.c
  14. 6
      project_ozone/project_o.uvgui.admin

83
APP/adc.c

@ -4,52 +4,50 @@ static float prv_adc_get_value();
static void prv_adc_pa2_init() {
ADC_InitStruType x;
GPIO_InitSettingType y;
y.Signal = GPIO_Pin_Signal_Analog; //
y.Dir = GPIO_Direction_Input; //
y.Signal = GPIO_Pin_Signal_Analog; //
y.Dir = GPIO_Direction_Input; //
y.Func = GPIO_Reuse_Func0;
// x.CHS设置adc采集的通道每个引脚对应一个通道
// x.CHS璁剧疆adc閲囬泦鐨勯
GPIO_Init(GPIO_Pin_A2, &y);
//Tadclk=1/(PCLK/4)0.083us
//Tadclk=1/(PCLK/4)0.083us
x.CLKS = ADC_CLKS_PCLK;
x.CLKDIV = ADC_CLKDIV_1_32; /* ADC时钟源预分频 */
x.CLKDIV = ADC_CLKDIV_1_32; /* ADC鏃堕挓婧愰�鍒嗛� */
//*3.3/4096=
x.VREF_SEL = ADC_VREF_SEL_0; /* 内部参考电压2.048v,仅设置内部参考电压为多少 */
x.VREFP = ADC_VREFP_VDD; /* 选择芯片的工作电压VDD,这个是设置adc具体是要哪个电压来做参考adc的参考电压为多少 */
x.VREFN = ADC_VREFN_VSS; /* 负向参考电压选择 */
//*3.3/4096=
x.VREF_SEL = ADC_VREF_SEL_0; /* 鍐呴儴鍙傝€冪數鍘�2.048v,浠呰�缃�唴閮ㄥ弬鑰冪數鍘嬩负澶氬皯 */
x.VREFP = ADC_VREFP_VDD; /* 閫夋嫨鑺�墖鐨勫伐浣滅數鍘媀DD锛岃繖涓�槸璁剧疆adc鍏蜂綋鏄��鍝�釜鐢靛帇鏉ュ仛鍙傝€僡dc鐨勫弬鑰冪數鍘嬩负澶氬皯 */
x.VREFN = ADC_VREFN_VSS; /* 璐熷悜鍙傝€冪數鍘嬮€夋嫨 */
x.CHS = ADC_CHS_AIN8;
x.SMPS = ADC_SMPS_SOFT; /* AD采样模式为软件控制 */
//st*2+1(Tadclk)=1.743us
x.ST = 10; /* AD硬件采样时间选择 */
x.BITSEL = ADC_BITSEL_12; /* AD分辨率12位 */
x.SMPS = ADC_SMPS_SOFT; /* AD閲囨牱妯″紡涓鸿蒋浠舵帶鍒� */
//st*2+1(adclk)=1.743us
x.ST = 10; /* AD纭�欢閲囨牱鏃堕棿閫夋嫨 */
x.BITSEL = ADC_BITSEL_12; /* AD鍒嗚鲸鐜�12浣� */
ADC_Init(&x);
prv_adc_get_value();
}
static void prv_adc_pb8_init() {
ADC_InitStruType x;
GPIO_InitSettingType y;
y.Signal = GPIO_Pin_Signal_Analog; //
y.Dir = GPIO_Direction_Input; //
y.Signal = GPIO_Pin_Signal_Analog; //
y.Dir = GPIO_Direction_Input; //
y.Func = GPIO_Reuse_Func0;
// x.CHS设置adc采集的通道每个引脚对应一个通道
// x.CHS璁剧疆adc閲囬泦鐨勯
GPIO_Init(GPIO_Pin_B8, &y);
//Tadclk=1/(PCLK/4)0.083us
//Tadclk=1/(PCLK/4)0.083us
x.CLKS = ADC_CLKS_PCLK;
x.CLKDIV = ADC_CLKDIV_1_32; /* ADC时钟源预分频 */
//*3.3/4096=
x.CLKDIV = ADC_CLKDIV_1_32; /* ADC鏃堕挓婧愰�鍒嗛� */
x.VREF_SEL = ADC_VREF_SEL_0; /* 内部参考电压2.048v,仅设置内部参考电压为多少 */
x.VREFP = ADC_VREFP_VDD; /* 选择芯片的工作电压VDD,这个是设置adc具体是要哪个电压来做参考adc的参考电压为多少 */
x.VREFN = ADC_VREFN_VSS; /* 负向参考电压选择 */
//*3.3/4096=
x.VREF_SEL = ADC_VREF_SEL_0; /* 鍐呴儴鍙傝€冪數鍘�2.048v,浠呰�缃�唴閮ㄥ弬鑰冪數鍘嬩负澶氬皯 */
x.VREFP = ADC_VREFP_VDD; /* 閫夋嫨鑺�墖鐨勫伐浣滅數鍘媀DD锛岃繖涓�槸璁剧疆adc鍏蜂綋鏄��鍝�釜鐢靛帇鏉ュ仛鍙傝€僡dc鐨勫弬鑰冪數鍘嬩负澶氬皯 */
x.VREFN = ADC_VREFN_VSS; /* 璐熷悜鍙傝€冪數鍘嬮€夋嫨 */
x.CHS = ADC_CHS_AIN3;
x.SMPS = ADC_SMPS_SOFT; /* AD采样模式为软件控制 */
//st*2+1(Tadclk)=1.743us
x.ST = 10; /* AD硬件采样时间选择 */
x.BITSEL = ADC_BITSEL_12; /* AD分辨率12位 */
x.SMPS = ADC_SMPS_SOFT; /* AD閲囨牱妯″紡涓鸿蒋浠舵帶鍒� */
//st*2+1(adclk)=1.743us
x.ST = 10; /* AD纭�欢閲囨牱鏃堕棿閫夋嫨 */
x.BITSEL = ADC_BITSEL_12; /* AD鍒嗚鲸鐜�12浣� */
ADC_Init(&x);
prv_adc_get_value();
}
@ -57,27 +55,26 @@ static void prv_adc_pb8_init() {
static void prv_adc_pb9_init() {
ADC_InitStruType x;
GPIO_InitSettingType y;
y.Signal = GPIO_Pin_Signal_Analog; //
y.Dir = GPIO_Direction_Input; //
y.Signal = GPIO_Pin_Signal_Analog; //
y.Dir = GPIO_Direction_Input; //
y.Func = GPIO_Reuse_Func0;
// x.CHS设置adc采集的通道每个引脚对应一个通道
// x.CHS璁剧疆adc閲囬泦鐨勯
GPIO_Init(GPIO_Pin_B9, &y);
//Tadclk=1/(PCLK/32)
//Tadclk=1/(PCLK/32)
x.CLKS = ADC_CLKS_PCLK;
x.CLKDIV = ADC_CLKDIV_1_32; /* ADC时钟源预分频 */
x.CLKDIV = ADC_CLKDIV_1_32; /* ADC鏃堕挓婧愰�鍒嗛� */
//*3.3/4096=
x.VREF_SEL = ADC_VREF_SEL_0; /* 内部参考电压2.048v,仅设置内部参考电压为多少 */
x.VREFP = ADC_VREFP_VDD; /* 选择芯片的工作电压VDD,这个是设置adc具体是要哪个电压来做参考adc的参考电压为多少 */
x.VREFN = ADC_VREFN_VSS; /* 负向参考电压选择 */
//*3.3/4096=
x.VREF_SEL = ADC_VREF_SEL_0; /* 鍐呴儴鍙傝€冪數鍘�2.048v,浠呰�缃�唴閮ㄥ弬鑰冪數鍘嬩负澶氬皯 */
x.VREFP = ADC_VREFP_VDD; /* 閫夋嫨鑺�墖鐨勫伐浣滅數鍘媀DD锛岃繖涓�槸璁剧疆adc鍏蜂綋鏄��鍝�釜鐢靛帇鏉ュ仛鍙傝€僡dc鐨勫弬鑰冪數鍘嬩负澶氬皯 */
x.VREFN = ADC_VREFN_VSS; /* 璐熷悜鍙傝€冪數鍘嬮€夋嫨 */
x.CHS = ADC_CHS_AIN4;
// x.CHS = ADC_CHS_AIN8;
x.SMPS = ADC_SMPS_SOFT; /* AD采样模式为软件控制 */
//st*2+1(Tadclk)=1.743us
x.ST = 10; /* AD硬件采样时间选择 */
x.BITSEL = ADC_BITSEL_12; /* AD分辨率12位 */
x.SMPS = ADC_SMPS_SOFT; /* AD閲囨牱妯″紡涓鸿蒋浠舵帶鍒� */
//st*2+1(adclk)=1.743us
x.ST = 10; /* AD纭�欢閲囨牱鏃堕棿閫夋嫨 */
x.BITSEL = ADC_BITSEL_12; /* AD鍒嗚鲸鐜�12浣� */
ADC_Init(&x);
prv_adc_get_value();
}
@ -114,4 +111,4 @@ float adc_get_value_pb8(void) {
float adc_get_value_pb9(void) {
prv_adc_pb9_init();
return prv_adc_get_value_average(AVERAGE_TABLE_SIZE);
}
}

18
APP/key.c

@ -27,12 +27,12 @@ void zkey_process_each(zkey_t *each);
void zkey_init(zkey_module_t *module) {
/**
* @brief
* @brief
*
*/
s_module = module;
s_inited = true; //
s_inited = true; //
for (int i = 0; i < s_module->nkey; i++) {
s_module->keys[i].cur_state = zks_keep;
s_module->keys[i].last_io_state = s_module->keys[i].get_key_state();
@ -41,21 +41,21 @@ void zkey_init(zkey_module_t *module) {
}
void zkey_process_each(zkey_t *each) {
/**
* @brief
* @brief
*
* @param each
*/
each->keep_state_count++;
bool now_io_state = each->get_key_state(); //io状态
bool now_io_state = each->get_key_state(); //o鐘舵
if (each->currentstatekeep_count < 1000) {
each->currentstatekeep_count++;
}
if (now_io_state != each->last_real_state) //
if (now_io_state != each->last_real_state) //
{
each->currentstatekeep_count = 0;
}
if (each->currentstatekeep_count >= 1) //20ms,
if (each->currentstatekeep_count >= 1) //20ms,
{
each->after_filter_state = now_io_state;
}
@ -64,11 +64,11 @@ void zkey_process_each(zkey_t *each) {
}
void zkey_do_loop_in_each_period(void *_null) { /**
* @brief
* @brief
*
*/
if (!s_inited) return;
for (int i = 0; i < s_module->nkey; i++) //
for (int i = 0; i < s_module->nkey; i++) //
{
zkey_process_each(&s_module->keys[i]);
}

20
APP/key.h

@ -3,7 +3,7 @@
#include "port.h"
#include "pwm.h"
#define POWER_KEY_TRIGGER_TIME 3000
#define KEY_SCAN_PERIOD 20 //扫描周期20ms
#define KEY_SCAN_PERIOD 20 //鎵�弿鍛ㄦ湡20ms
#define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0]))
#define ZKEY_INIT(_name, _get_key_state) \
@ -20,12 +20,12 @@ typedef bool (*get_key_state_t)(void);
typedef enum {
// mode1
zks_keep,
zks_rising_edge, //沿0-1
zks_falling_edge, //沿1-0
zks_rising_edge, //0-1
zks_falling_edge, //1-0
// mode2
zks_trigger_event, //
zks_longtime_trigger_event, //
zks_trigger_event, //
zks_longtime_trigger_event, //Е
} zkey_state_t;
/**
@ -36,14 +36,14 @@ typedef struct {
get_key_state_t get_key_state;
bool last_io_state;
zkey_state_t cur_state; //
uint32_t keep_state_count; /*按键当前状态保持了多久*/
zkey_state_t cur_state; //
uint32_t keep_state_count; /*鎸夐敭褰撳墠鐘舵€佷繚鎸佷簡澶氫箙*/
bool hasProcessed; /*useful for user*/
bool after_filter_state;
uint32_t currentstatekeep_count; //使
bool last_real_state; //使
uint32_t currentstatekeep_count; //
bool last_real_state; //
} zkey_t;
/**

124
APP/main.c

@ -1,16 +1,16 @@
#include "main.h"
#include <stdbool.h> //定义布尔
#include <stdbool.h> //瀹氫箟甯冨皵
#include "board.h"
#define PWM_FREQHZ 25000 //硬件pwm频率
#define PWM_FREQHZ 25000 //纭�欢pwm棰戠巼
/***********************************************************************************************************************
* =========================================================================================================== *
* =========================================================================================================== *
***********************************************************************************************************************/
void onkey(zkey_t *key, zkey_state_t key_state);
/***********************************************************************************************************************
* =========================================================================================================== *
* =========================================================================================================== *
***********************************************************************************************************************/
static zkey_t s_keys[] = {
@ -22,22 +22,22 @@ static zkey_t s_keys[] = {
zkey_module_t key_module = ZMODULE_INIT(s_keys, onkey);
/***********************************************************************************************************************
* =========================================================================================================== *
* =========================================================================================================== *
***********************************************************************************************************************/
static bool error_even_trigger_after_stop_ozone_work_state; //
static bool error_even_trigger_after_stop_ozone_work_state; //у
//
bool g_setting_interval_work_flag = false; //
WORK_LEVEL_T g_setting_level = WORK_LEVEL_LOW; //
//
bool g_setting_interval_work_flag = false; //
WORK_LEVEL_T g_setting_level = WORK_LEVEL_LOW; //
//
bool g_power_flag = false; //
//
bool g_power_flag = false; //
static int g_error_num;
bool g_auto_shutdown_flag = false; //使
static uint32_t g_auto_shutdown_countdown_s; //
bool g_auto_shutdown_flag = false; //
static uint32_t g_auto_shutdown_countdown_s; //
//
static bool pwm_modble_enable_falg; //pwm使能标志位
//
static bool pwm_modble_enable_falg; //pwm浣胯兘鏍囧織浣
/***********************************************************************************************************************
* =======================================================HOOK======================================================== *
@ -47,7 +47,7 @@ void HOOK_pwm_module_set_pwm_duty(uint32_t frequencyhz, uint32_t duty) {
pwm_modble_enable_falg = true;
}
void HOOK_pwm_stop(void) {
set_pwm_modbul_freq_duty(PWM_FREQHZ, 0); //PWM输出
set_pwm_modbul_freq_duty(PWM_FREQHZ, 0); //PWM杈撳嚭
pwm_modble_enable_falg = false;
}
bool HOOK_pwm_is_enable(void) { return pwm_modble_enable_falg; }
@ -57,7 +57,7 @@ int hook_get_autoshutdown_timecount() { return g_auto_shutdown_countdown_s; }
* =================================================INTERNAL_FUNCTION================================================= *
***********************************************************************************************************************/
/**
* @brief pwm输出rgb的颜色
* @brief pwm杈撳嚭锛宺gb鐨勯
*
* @param gears
*/
@ -90,7 +90,7 @@ void update_ozone_work_level(bool interval_work, WORK_LEVEL_T level) {
}
/**
* @brief
* @brief
*/
void shutdown(void) {
printf("shutdown\n");
@ -101,83 +101,83 @@ void shutdown(void) {
update_ozone_work_level(false, WORK_LEVEL_CLOSE);
port_fan_set(false); //
port_fan_set(false); //
light_module_close_all_light();
}
/***********************************************************************************************************************
* ============================================================================================================= *
* ============================================================================================================= *
***********************************************************************************************************************/
void iwdt_init(void) {
/**
* @brief 0+1
* 2
* 4
* @brief 0+1
* 2х
* 4
*/
IWDT_InitStruType x;
x.WDT_Tms = 4000;
x.WDT_IE = Enable; /* IWDT中断使能 */
x.WDT_Rst = Enable; /* IWDT复位使能 */
x.WDT_IE = Enable; /* IWDT涓�柇浣胯兘 */
x.WDT_Rst = Enable; /* IWDT澶嶄綅浣胯兘 */
x.WDT_Clock = IWDT_CLOCK_WDT; /* LRC */
IWDT_Init(&x);
/* 使能IWDT */
/* 浣胯兘IWDT */
IWDT_Enable();
}
void feed_iwdt(void) {
//
//
if (0x01 == IWDT_GetFlagStatus()) {
IWDT_Clear();
// printf("喂狗\r\n");
// printf("鍠傜嫍\r\n");
}
}
void onkey(zkey_t *key, zkey_state_t key_state) {
if (key->hasProcessed) return;
/**
* @brief
* @brief
*/
if (!g_power_flag) {
if (key == &s_keys[3] && key->cur_state == zks_falling_edge) {
key->hasProcessed = true;
// printf("key zks_rising_edge\r\n");
/**
* @brief
* 1.
* 2.
* 3.
* @brief
* 1.
* 2.
* 3.稿
*/
g_power_flag = true; //
g_power_flag = true; //
g_error_num = 0;
g_auto_shutdown_flag = false; //使
g_auto_shutdown_countdown_s = 0; //
g_auto_shutdown_flag = false; //
g_auto_shutdown_countdown_s = 0; //
port_fan_set(true); //
port_fan_set(true); //
update_ozone_work_level(g_setting_interval_work_flag, g_setting_level);
}
return;
}
/**
* @brief
* @brief
*/
if (g_error_num != 0) { //
if (g_error_num != 0) { //
if (key == &s_keys[3] && key->cur_state == zks_falling_edge) {
key->hasProcessed = true;
printf("process key[2] event\r\n");
/**
* @brief
* @brief
*/
shutdown();
}
return;
}
if (key == &s_keys[0] && key->cur_state == zks_falling_edge) //3s
if (key == &s_keys[0] && key->cur_state == zks_falling_edge) //3s
{
printf("process key[0] event\r\n");
/**
* @brief
* @brief
*/
if (!g_auto_shutdown_flag) {
g_auto_shutdown_flag = true;
@ -193,7 +193,7 @@ void onkey(zkey_t *key, zkey_state_t key_state) {
} else if (key == &s_keys[1] && key->cur_state == zks_falling_edge) {
/**
* @brief
* @brief
*/
printf("process key[1] event\r\n");
if (g_setting_level == WORK_LEVEL_HIGHT) {
@ -209,14 +209,14 @@ void onkey(zkey_t *key, zkey_state_t key_state) {
} else if (key == &s_keys[2] && key->cur_state == zks_falling_edge) {
printf("process key[2] event\r\n");
/**
* @brief
* @brief
*/
g_setting_interval_work_flag = !g_setting_interval_work_flag;
update_ozone_work_level(g_setting_interval_work_flag, g_setting_level);
} else if (key == &s_keys[3] && key->cur_state == zks_falling_edge) {
printf("process key[2] event\r\n");
/**
* @brief
* @brief
*/
shutdown();
}
@ -232,36 +232,36 @@ void onkey(zkey_t *key, zkey_state_t key_state) {
} \
}
/***********************************************************************************************************************
* =============================================================================================================
* =============================================================================================================
***********************************************************************************************************************/
int main(void) {
HRC_Config(Enable, SCU_HRC_48M, Enable); //SCU_CLK_HRC
HRC_Config(Enable, SCU_HRC_48M, Enable); //CU_CLK_HRC
SystemInit();
DeviceClockAllEnable(); //
User_SysTickInit(); //(1ms中断)
DeviceClockAllEnable(); //
User_SysTickInit(); //(1ms涓)
SysTick_Enable();
//
//
unused_gpio_init();
gpio_init();
uart0_init();
//
//
zkey_init(&key_module);
//
//樿
shutdown();
//
//
printf("Initialization completed\r\n");
//
//
// set_pwm_modbul_freq_duty(25000, 10);
// while (1) {
// }
while (true) {
/*******************************************************************************************************************
* ===================================================================================================== *
* ===================================================================================================== *
*******************************************************************************************************************/
DO_IT_EACH_MS(200) {
static uint8_t debug_led_state = 1;
@ -270,22 +270,22 @@ int main(void) {
}
END()
/***********************************************************************************************************************
* =================================================================================================== *
* =================================================================================================== *
***********************************************************************************************************************/
DO_IT_EACH_MS(KEY_PERIOD) { zkey_do_loop_in_each_period(NULL); }
END();
/***********************************************************************************************************************
* =============================================================================================== *
* ===============================================у================================================ *
***********************************************************************************************************************/
light_module_schedule();
/***********************************************************************************************************************
* =============================================================================================== *
* ===============================================у================================================ *
***********************************************************************************************************************/
ozone_pwm_control_module_loop();
/***********************************************************************************************************************
* ======================================================================================================= *
* ======================================================================================================= *
***********************************************************************************************************************/
//
DO_IT_EACH_MS(1000) {
@ -296,7 +296,7 @@ int main(void) {
} else {
g_auto_shutdown_flag = false;
/**
* @brief
* @brief
*/
shutdown();
}
@ -304,12 +304,12 @@ int main(void) {
}
END();
/***********************************************************************************************************************
* =======================================================================================================
* =======================================================================================================
***********************************************************************************************************************/
DO_IT_EACH_MS(EXCEPTION_CHECK_PERIOD) {
/**
* @brief
* ADC的数值是否超出规定范围
* DC鐨勬暟鍊兼槸鍚鸿
*/
if (false) {
}

9
APP/main.h

@ -1,12 +1,3 @@
/*********************************************************
*Copyright (C), 2017, Shanghai Eastsoft Microelectronics Co., Ltd
*: main.h
* : AE Team
* : V1.00
* : 2021/05/13
* :
* : 使
**********************************************************/
#ifndef __MAIN_H__
#define __MAIN_H__

31
APP/ozone_pwm_control.c

@ -1,9 +1,8 @@
#include "ozone_pwm_control.h"
uint32_t s_hardware_frequency; // hz
uint32_t s_hardware_duty; //msPWM占空比
uint32_t s_large_period; //ms
uint32_t s_large_duty = 100; //ms
uint32_t s_hardware_duty; //ms锛屼繚瀛樼幇鍦ㄧ殑PWM鍗犵
uint32_t s_large_period; //ms锛屼繚瀛樼幇鍦ㄧ殑瀹氭椂鍛ㄦ湡
uint32_t s_large_duty = 100; //ms锛屼繚瀛樼幇鍦ㄧ殑瀹氭椂鍗犵
uint32_t begin_ticket;
bool ozone_pwm_control_enable_falg = false;
@ -12,14 +11,14 @@ void HOOK_pwm_stop(void);
bool HOOK_pwm_is_enable(void);
static void prv_update_begin_ticket(void) {
begin_ticket = get_sys_ticket(); //
begin_ticket = get_sys_ticket(); //у
}
bool ozone_pwm_control_is_enable(void) { return ozone_pwm_control_enable_falg; }
/**
* @brief 100
* 300000
* @brief 100
* 300000
* @param freq
* @param duty
*/
@ -27,12 +26,12 @@ void ozone_pwm_control_module_set_pwm_output_1(uint32_t freqhz, uint8_t hardware
ozone_pwm_control_module_set_pwm_output_2(freqhz, hardware_duty, 100 * 1000, 100);
}
/**
* @brief PWM
* @brief WM
*
* @param hardware_period pwm频率
* @param hardware_duty pwm占空比
* @param large_period
* @param large_duty
* @param hardware_period pwm棰戠巼
* @param hardware_duty pwm鍗犵
* @param large_period
* @param large_duty
*/
void ozone_pwm_control_module_set_pwm_output_2(uint32_t freqhz, uint8_t hardware_duty, uint32_t large_period, uint8_t large_duty) {
s_hardware_frequency = freqhz;
@ -49,7 +48,7 @@ void ozone_pwm_control_module_stop_pwm(void) { ozone_pwm_control_enable_falg = f
void ozone_pwm_control_module_loop(void) {
static uint32_t hardware_frequency;
static uint32_t hardware_duty;
if (ozone_pwm_control_is_enable() == false) { //使退
if (ozone_pwm_control_is_enable() == false) { //
if (HOOK_pwm_is_enable()) {
HOOK_pwm_stop();
}
@ -63,9 +62,9 @@ void ozone_pwm_control_module_loop(void) {
} else {
if (HOOK_pwm_is_enable()) {
printf("set rest\r\n");
hardware_frequency = s_hardware_frequency; //
hardware_duty = s_hardware_duty; //
hardware_frequency = s_hardware_frequency; //
hardware_duty = s_hardware_duty; //
HOOK_pwm_stop();
}
}
}
}

24
APP/port.c

@ -1,13 +1,13 @@
#include "port.h"
// io led4+1 RGB:3 1
// o led锛4+1 RGB:3 1
/**
* @brief 使io设置为输出模式
* @brief io璁剧疆涓鸿緭鍑烘ā寮忥紝鍥哄畾鐢靛钩骞舵诞绌
*
*/
void unused_gpio_init(void) {
GPIO_InitSettingType x;
x.Signal = GPIO_Pin_Signal_Digital;
x.Dir = GPIO_Direction_Output; //
x.Dir = GPIO_Direction_Output; //
// x.Dir = GPIO_Direction_Input;
x.Func = GPIO_Reuse_Func0;
x.ODE = GPIO_ODE_Output_Disable;
@ -16,10 +16,10 @@ void unused_gpio_init(void) {
x.PDE = GPIO_PDE_Input_Enable;
GPIO_Init(GPIO_Pin_A10, &x);
GPIO_Init(GPIO_Pin_A23, &x);
GPIO_Init(GPIO_Pin_A27, &x); // 26
GPIO_Init(GPIO_Pin_A28, &x); // 27
GPIO_Init(GPIO_Pin_A27, &x); // 26
GPIO_Init(GPIO_Pin_A28, &x); // 27
GPIO_Init(GPIO_Pin_B0, &x);
//adc
//adc
GPIO_Init(GPIO_Pin_B8, &x);
GPIO_Init(GPIO_Pin_B9, &x);
GPIO_Init(GPIO_Pin_A2, &x);
@ -50,7 +50,7 @@ static void led_gpio_init(void) {
GPIO_Init(GPIO_Pin_A7, &x);
GPIO_Init(GPIO_Pin_A8, &x);
GPIO_Init(GPIO_Pin_A9, &x);
GPIO_Init(GPIO_Pin_B1, &x); //
GPIO_Init(GPIO_Pin_B1, &x); //
GPIO_Init(GPIO_Pin_A22, &x);
}
@ -87,12 +87,12 @@ void port_led_r_set(bool state) { GPIO_SET(A, 7, !, state); }
void port_led_g_set(bool state) { GPIO_SET(A, 8, !, state); }
void port_led_b_set(bool state) { GPIO_SET(A, 9, !, state); }
bool port_gpio_get_timer_key_state(void) { return GPIO_GET(A, 11, !!); } //??H
bool port_gpio_get_gears_key_state(void) { return GPIO_GET(A, 16, !!); } //??M
bool port_gpio_get_timer_key_state(void) { return GPIO_GET(A, 11, !!); }
bool port_gpio_get_gears_key_state(void) { return GPIO_GET(A, 16, !!); }
bool port_gpio_get_switch_key_state(void) { return GPIO_GET(A, 12, !!); }
bool port_gpio_get_interval_key_state(void) { return GPIO_GET(A, 13, !!); }
bool port_led0_get_state(void) { return GPIO_GET(A, 3, !); } //??H
bool port_led1_get_state(void) { return GPIO_GET(B, 13, !); } //??M
bool port_led0_get_state(void) { return GPIO_GET(A, 3, !); }
bool port_led1_get_state(void) { return GPIO_GET(B, 13, !); }
bool port_led2_get_state(void) { return GPIO_GET(A, 5, !); }
bool port_led3_get_state(void) { return GPIO_GET(A, 6, !); }
bool port_led3_get_state(void) { return GPIO_GET(A, 6, !); }

56
APP/port.h

@ -1,20 +1,17 @@
#pragma once
#include <stdbool.h> //¶¨Òå²¼¶û
#include <stdbool.h> //定义布尔
#include "lib_config.h"
#include "system_ES8P5066.h"
// #define UART0_RXD0_PIN GPIO_Pin_A22
// #define UART0_TXD0_PIN GPIO_Pin_A23
#define UART0_RXD0_PIN GPIO_Pin_A24
#define UART0_TXD0_PIN GPIO_Pin_A25
#define GPIO_GET(port, pin, mirror) (mirror(GPIO_ReadBit(GPIO_Pin_##port##pin) == 1))
#define GPIO_SET(port, pin, mirror, _state) GPIO_WriteBit(GPIO_Pin_##port##pin, mirror _state ? 1 : 0);
void unused_gpio_init(void);
void gpio_init(void);
//ÉùÃ÷
//声明
void port_debug_set(bool state);
void port_led0_set(bool state);
void port_led1_set(bool state);
@ -36,17 +33,14 @@ bool port_led2_get_state(void);
bool port_led3_get_state(void);
/*
GPIO_Pin_B0 = 0, //δʹÓÃ
GPIO_Pin_B1 = 1,//·çÉÈ
GPIO_Pin_B0 = 0, //未使ç¨
GPIO_Pin_B1 = 1,//风æ
GPIO_Pin_B8 = 8,//ADC
GPIO_Pin_B9 = 9,//ADC
GPIO_Pin_B10 = 10,//OSCI
GPIO_Pin_B11 = 11,//OSCO
GPIO_Pin_B12 = 12,//MRSTN
GPIO_Pin_B13 = 13,//LED1
GPIO_Pin_A1 = 15,//VCC
GPIO_Pin_A2 = 16,//ADC
GPIO_Pin_A3 = 17,//LED0
@ -56,27 +50,24 @@ bool port_led3_get_state(void);
GPIO_Pin_A7 = 21,//LED_R
GPIO_Pin_A8 = 22,//LED_G
GPIO_Pin_A9 = 23,//LED_B
GPIO_Pin_A10 = 24, //δʹÓÃ
GPIO_Pin_A10 = 24, //未使ç¨
GPIO_Pin_A11 = 25,//KEY1
GPIO_Pin_A12 = 26,//KEY2
GPIO_Pin_A13 = 27,//KEY3
GPIO_Pin_A14 = 28,//ISPSCK
GPIO_Pin_A15 = 29,//ISPSDA
GPIO_Pin_A16 = 30,//KEY4
GPIO_Pin_A22 = 36,//DEBUG
GPIO_Pin_A23 = 37, //δʹÓÃ
GPIO_Pin_A23 = 37, //未使ç¨
GPIO_Pin_A24 = 38,//RX0
GPIO_Pin_A25 = 39,//RX1
GPIO_Pin_A27 = 41, //δʹÓÃ
GPIO_Pin_A28 = 42, //δʹÓÃ
Òý½Å·ÖÅä FUN0
Ö÷¼üH PA11 ¨Ê±°´¼ü
Ö÷¼üM PA16 ¸ßµÍµµµÄÑ¡ÔñºÍ¹Ø±Õ£¨1¿ª»ú¸ßµµºì£¬2ÂÌÉ«£¬3ÀÉ«£¬4¹Ø±Õ£©
¼äЪ PA13
¿ª¹Ø PA12
GPIO_Pin_A27 = 41, //未使ç¨
GPIO_Pin_A28 = 42, //未使ç¨
å¼èšåˆé FUN0
主é®H PA11 å®šææŒé®
主é®M PA16 高低档çšéæ©åŒå³é­ï¼ˆ1弿œºé«˜æ¡£çº¢ï¼Œ2绿è²ï¼Œ3èè²ï¼Œ4å³é­ï¼
é´æ­ PA13
å¼å³ PA12
LED0 PA3
LED1 PB13
LED2 PA5
@ -85,25 +76,24 @@ bool port_led3_get_state(void);
LED_G PA8
LED_B PA9
PWM PA4
·çÉÈ PB1
ʱ¼äµÄÉèÖà |¡Ì
风æ PB1
æé´çšè®¾ç½® |√
--------------------|------
µµÎ»µÄÉèÖà | ¡Ì
æ¡£ä½çšè®¾ç½® | √
--------------------|------
ÔÓ¦ledµÄÁÁÃð | ¡Ì
对åºledçšäº®ç­ | √
--------------------|------
RGBµÆ |
RGBç¯ |
--------------------|------
ÉèÖÃPWMƵÂÊ |
设置PWMé¢çŽ |
--------------------|------
ÉèÖÃpwmÕ¼¿Õ±È |¡Ì
设置pwmå ç©ºæ¯ |√
--------------------|------
µ¹¼ÆÊ± |¡Ì
å计æ |√
--------------------|------
*/
/*
δʹÓãº
未使ç¨ï¼š
PA10 PA23 PA26 PA27 PB0
*/
*/

76
APP/pwm.c

@ -1,6 +1,5 @@
#include "pwm.h"
#define CLCK 48
static double calculate_top(double target_frequency_hz) {
int clck = 0;
int top = 0;
@ -10,7 +9,7 @@ static double calculate_top(double target_frequency_hz) {
}
void set_pwm_t16_pa4(int freqhz, float duty) {
double top_double = calculate_top(freqhz); //TOP
double top_double = calculate_top(freqhz); //OP锛堣嚜鍔ㄩ噸瑁呰浇鍊硷級
uint16_t top = (uint16_t)top_double;
uint16_t Mat2 = (uint16_t)top_double * (duty / 100.0);
uint16_t Mat3 = top;
@ -19,68 +18,65 @@ void set_pwm_t16_pa4(int freqhz, float duty) {
printf("Mat3:%d\r\n", Mat3);
printf("top:%d\r\n", top);
/////////////////////////////////////////////////
T16Nx_Disable(T16N0);
// PA4 T16N0_1
T16Nx_BaseInitStruType x;
T16Nx_PWMInitStruType y;
/* 初始化T16Nx定时器*/
x.T16Nx_ClkS = T16Nx_ClkS_PCLK; //48M
x.T16Nx_SYNC = Disable; //
x.T16Nx_EDGE = T16Nx_EDGE_Rise; //沿
x.T16Nx_Mode = T16Nx_Mode_PWM; // PWM模式
x.T16Nx_PREMAT = 0x01; /* 预分频比1:1 */
/* 鍒濆�鍖朤16Nx瀹氭椂鍣�*/
x.T16Nx_ClkS = T16Nx_ClkS_PCLK; //48M
x.T16Nx_SYNC = Disable; //
x.T16Nx_EDGE = T16Nx_EDGE_Rise; //Е
x.T16Nx_Mode = T16Nx_Mode_PWM; // PWM妯
x.T16Nx_PREMAT = 0x01; /* 棰勫垎棰戞瘮1:1 */
T16Nx_BaseInit(T16N0, &x);
/* 配置T16N0通道1输出 */
/* 閰嶇疆T16N0閫氶亾1杈撳嚭 */
y.T16Nx_MOE0 = Disable;
y.T16Nx_MOE1 = Enable;
y.T16Nx_POL0 = POSITIVE; //
y.T16Nx_POL0 = POSITIVE; //т稿т稿
y.T16Nx_POL1 = POSITIVE;
y.T16Nx_PWMMODE = T16Nx_PWMMode_INDEP; //
y.PWMDZE = Disable; // PWM互补模式死区使能
y.REGBUFEN = Enable; //使 (REGBUFEN目前不知道干什么用的)
y.T16Nx_PWMMODE = T16Nx_PWMMode_INDEP; //
y.PWMDZE = Disable; // PWM浜掕ˉ妯
y.REGBUFEN = Enable; // (REGBUFEN鐩)
T16Nx_PMWOutInit(T16N0, &y);
/* 配置T16N0 通道1输出 */
/*MAT2 MAT3 通道的中断配置*/
//
/* 閰嶇疆T16N0 閫氶亾1杈撳嚭 */
/*MAT2 MAT3 閫氶亾鐨勪腑鏂�厤缃�*/
//ā х
T16Nx_MAT2ITConfig(T16N0, T16Nx_Go_No);
//,
//ā,х
T16Nx_MAT3ITConfig(T16N0, T16Nx_Clr_Int);
/*MAT2 MAT3 匹配后的输出电平高低*/
/*MAT2 MAT3 鍖归厤鍚庣殑杈撳嚭鐢靛钩楂樹綆*/
T16Nx_MAT2Out1Config(T16N0,
T16Nx_Out_Low); //
T16Nx_Out_Low); //
T16Nx_MAT3Out1Config(T16N0,
T16Nx_Out_High); //
//
T16Nx_SetCNT1(T16N0, 0); //
T16Nx_SetMAT2(T16N0, Mat2); //
T16Nx_SetMAT3(T16N0, Mat3); //
////48M/48000=1khZ(PWM的周期由TOP1决定为TOP+11ms)
T16Nx_Out_High); //
//ā
T16Nx_SetCNT1(T16N0, 0); //
T16Nx_SetMAT2(T16N0, Mat2); //
T16Nx_SetMAT3(T16N0, Mat3); //
////48M/48000=1khZ(āPWM鐨勫懆鏈熺敱TOP1鍐冲畾涓篢OP+11ms)
T16Nx_SetTOP1(T16N0, top);
//
/* 配置输出管脚 */
//
/* 閰嶇疆杈撳嚭绠¤剼 */
GPIO_InitSettingType initset;
initset.Signal = GPIO_Pin_Signal_Digital; //
initset.Dir = GPIO_Direction_Output; //
initset.Func = GPIO_Reuse_Func2; //T16N0_1功能
initset.ODE = GPIO_ODE_Output_Disable; //使
initset.DS = GPIO_DS_Output_Normal; //
initset.PUE = GPIO_PUE_Input_Enable; //使
initset.PDE = GPIO_PDE_Input_Disable; //
/* 配置PA4为T16N0输出通道1 */
initset.Signal = GPIO_Pin_Signal_Digital; //
initset.Dir = GPIO_Direction_Output; //
initset.Func = GPIO_Reuse_Func2; //16N0_1鍔熻兘
initset.ODE = GPIO_ODE_Output_Disable; //
initset.DS = GPIO_DS_Output_Normal; //ā
initset.PUE = GPIO_PUE_Input_Enable; //
initset.PDE = GPIO_PDE_Input_Disable; //
/* 閰嶇疆PA4涓篢16N0杈撳嚭閫氶亾1 */
GPIO_Init(GPIO_Pin_A4, &initset);
T16Nx_Enable(T16N0);
return;
}
//######################################################
/**
* @brief pwm的周期占空比
* @brief pwm鐨勫懆鏈熷崰绌烘瘮
*
* @param frequency
* @param duty
@ -90,4 +86,4 @@ void set_pwm_modbul_freq_duty(uint32_t frequencyhz, uint32_t duty) {
set_pwm_t16_pa4(frequencyhz, duty);
printf("set_pwm_modbul_freq_duty freq:%d,duty%d\n", frequencyhz, duty);
}
//######################################################
//######################################################

4
APP/pwm.h

@ -1,5 +1,5 @@
#ifndef _pwm_module_H_
#define _pwm_module_H_
#ifndef _PWM_MODULE_H_
#define _PWM_MODULE_H_
#include "lib_config.h"
#include "light.h"

9
APP/systick.c

@ -1,12 +1,3 @@
/*********************************************************
*Copyright (C), 2017, Shanghai Eastsoft Microelectronics Co., Ltd.
*: systick.c
* : AE Team
* : V1.00
* : 2021/05/13
* :
* : 使
**********************************************************/
#include "systick.h"
extern uint32_t g_sys_sick;

10
APP/systick.h

@ -1,13 +1,3 @@
/*********************************************************
*Copyright (C), 2017, Shanghai Eastsoft Microelectronics Co., Ltd.
*: systick.h
* : AE Team
* : V1.00
* : 2021/05/13
* :
* :
使
**********************************************************/
#ifndef __SYSTICK_H__
#define __SYSTICK_H__

34
APP/uart0.c

@ -1,9 +1,8 @@
#include "uart0.h"
void uart0_init(void) {
/**
* @brief 0115200
* Fpclk
* @brief 0115200
* Fpclk
*
*/
GPIO_InitSettingType InitSet;
@ -27,26 +26,26 @@ void uart0_init(void) {
UART_InitStruType UART_InitStruct;
UART_InitStruct.UART_BaudRate = 115200; //
UART_InitStruct.UART_ClockSet = UART_Clock_1; //
UART_InitStruct.UART_RxMode = UART_DataMode_8; // 8
//
UART_InitStruct.UART_BaudRate = 115200; //
UART_InitStruct.UART_ClockSet = UART_Clock_1; //
UART_InitStruct.UART_RxMode = UART_DataMode_8; // 8
//х稿
UART_InitStruct.UART_RxPolar = UART_Polar_Normal;
UART_InitStruct.UART_StopBits = UART_StopBits_1; //
UART_InitStruct.UART_TxMode = UART_DataMode_8; // 8
UART_InitStruct.UART_TxPolar = UART_Polar_Normal; //usart极性
UART_InitStruct.UART_StopBits = UART_StopBits_1; //
UART_InitStruct.UART_TxMode = UART_DataMode_8; // 8
UART_InitStruct.UART_TxPolar = UART_Polar_Normal; //usart鏋佹
UART_Init(UART0, &UART_InitStruct);
UART_ITConfig(UART0, UART_IT_RB, Enable); /* UART0接收中断使能 */
/* UART0发送缓冲区空中断模式: 全空中断 */
UART_ITConfig(UART0, UART_IT_RB, Enable); /* UART0鎺ユ敹涓�柇浣胯兘 */
/* UART0鍙戦€佺紦鍐插尯绌轰腑鏂�ā寮�: 鍏ㄧ┖涓�柇 */
UART_TBIMConfig(UART0, UART_TBIM_Byte);
NVIC_Init(NVIC_UART0_IRQn, NVIC_Priority_1, Enable); //使0
NVIC_Init(NVIC_UART0_IRQn, NVIC_Priority_1, Enable); //0
UART0_TxEnable();
UART0_RxEnable();
}
void UART0_IRQHandler(void) {
/**
* @brief
* @brief
*
*/
uint8_t uart0_data;
@ -62,9 +61,4 @@ void Uart0SendBuff(uint8_t *buff) {
UART_ClearITPendingBit(UART0, UART_FLAG_TC);
buff++;
}
}
}

6
project_ozone/project_o.uvgui.admin

@ -87,7 +87,7 @@
<WindowPosition>
<length>44</length>
<flags>0</flags>
<showCmd>1</showCmd>
<showCmd>2</showCmd>
<MinPosition>
<xPos>-32000</xPos>
<yPos>-32000</yPos>
@ -107,7 +107,7 @@
<RegID>0</RegID>
<MDITabState>
<Len>943</Len>
<Data>0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000800000000000000010000003D443A5C55736572735C61646D696E5C4465736B746F705C7A68616F5C70726F6A6563745F6F7A6F6E655F65733870353036365C4150505C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF51443A5C55736572735C61646D696E5C4465736B746F705C7A68616F5C70726F6A6563745F6F7A6F6E655F65733870353036365C4D444B5F537461727455705C737461727475705F45533850353036362E730000000012737461727475705F45533850353036362E7300000000FFDC7800FFFFFFFF4C443A5C55736572735C61646D696E5C4465736B746F705C7A68616F5C70726F6A6563745F6F7A6F6E655F65733870353036365C4C6962726172795C536F757263655C6C69625F756172742E63000000000A6C69625F756172742E6300000000BECEA100FFFFFFFF4E443A5C55736572735C61646D696E5C4465736B746F705C7A68616F5C70726F6A6563745F6F7A6F6E655F65733870353036365C4C6962726172795C536F757263655C6C69625F7072696E74662E63000000000C6C69625F7072696E74662E6300000000F0A0A100FFFFFFFF3D443A5C55736572735C61646D696E5C4465736B746F705C7A68616F5C70726F6A6563745F6F7A6F6E655F65733870353036365C4150505C706F72742E630000000006706F72742E6300000000BCA8E100FFFFFFFF3C443A5C55736572735C61646D696E5C4465736B746F705C7A68616F5C70726F6A6563745F6F7A6F6E655F65733870353036365C4150505C70776D2E63000000000570776D2E63000000009CC1B600FFFFFFFF48443A5C55736572735C61646D696E5C4465736B746F705C7A68616F5C70726F6A6563745F6F7A6F6E655F65733870353036365C506C6174466F726D5C69727168616E646C65722E63000000000C69727168616E646C65722E6300000000F7B88600FFFFFFFF3E443A5C55736572735C61646D696E5C4465736B746F705C7A68616F5C70726F6A6563745F6F7A6F6E655F65733870353036365C4150505C75617274302E63000000000775617274302E6300000000D9ADC200FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000AE010000E40000004A06000008030000</Data>
<Data>0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000800000000000000010000003D443A5C55736572735C61646D696E5C4465736B746F705C7A68616F5C70726F6A6563745F6F7A6F6E655F65733870353036365C4150505C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF51443A5C55736572735C61646D696E5C4465736B746F705C7A68616F5C70726F6A6563745F6F7A6F6E655F65733870353036365C4D444B5F537461727455705C737461727475705F45533850353036362E730000000012737461727475705F45533850353036362E7300000000FFDC7800FFFFFFFF4C443A5C55736572735C61646D696E5C4465736B746F705C7A68616F5C70726F6A6563745F6F7A6F6E655F65733870353036365C4C6962726172795C536F757263655C6C69625F756172742E63000000000A6C69625F756172742E6300000000BECEA100FFFFFFFF4E443A5C55736572735C61646D696E5C4465736B746F705C7A68616F5C70726F6A6563745F6F7A6F6E655F65733870353036365C4C6962726172795C536F757263655C6C69625F7072696E74662E63000000000C6C69625F7072696E74662E6300000000F0A0A100FFFFFFFF3D443A5C55736572735C61646D696E5C4465736B746F705C7A68616F5C70726F6A6563745F6F7A6F6E655F65733870353036365C4150505C706F72742E630000000006706F72742E6300000000BCA8E100FFFFFFFF3C443A5C55736572735C61646D696E5C4465736B746F705C7A68616F5C70726F6A6563745F6F7A6F6E655F65733870353036365C4150505C70776D2E63000000000570776D2E63000000009CC1B600FFFFFFFF48443A5C55736572735C61646D696E5C4465736B746F705C7A68616F5C70726F6A6563745F6F7A6F6E655F65733870353036365C506C6174466F726D5C69727168616E646C65722E63000000000C69727168616E646C65722E6300000000F7B88600FFFFFFFF3E443A5C55736572735C61646D696E5C4465736B746F705C7A68616F5C70726F6A6563745F6F7A6F6E655F65733870353036365C4150505C75617274302E63000000000775617274302E6300000000D9ADC200FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000F483FFFF4F83FFFF9088FFFF7385FFFF</Data>
</MDITabState>
</MDIClientArea>
<ViewEx>
@ -1818,7 +1818,7 @@
<Name>Build</Name>
<Buttons>
<Len>976</Len>
<Data>00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000002001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0000000000000000010000000000000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA000000000000000000000000000000000000000000000000010000000100000096000000030020500000000008546172676574203196000000000000000100085461726765742031000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000004004E00000000000000000000000000000000010000000100000001807202000000000400530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000</Data>
<Data>00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0000000000000000010000000000000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA000000000000000000000000000000000000000000000000010000000100000096000000030020500000000008546172676574203196000000000000000100085461726765742031000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000004004E00000000000000000000000000000000010000000100000001807202000000000400530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000</Data>
</Buttons>
<OriginalItems>
<Len>583</Len>

Loading…
Cancel
Save