From bdd69e2e5968670a73ea2c8e83672e923f690b02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=95=E6=98=8E=E6=B1=9F?= <246462502@qq.com> Date: Sat, 24 Feb 2024 15:06:30 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat:=E5=AE=8C=E6=88=90ui=E8=AE=BE=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/tasks.json | 28 +++++++ app/jj_param.c | 88 +++++++++++++--------- app/jj_param.h | 40 ++++++---- app/main.c | 3 +- app/page/page.c | 14 ++-- app/page/page.h | 20 +++-- app/page/page_dparam.c | 71 ++++++++++++++++++ app/page/page_menu.c | 6 +- app/page/page_param.c | 133 --------------------------------- app/page/page_rtcam.c | 4 +- app/page/page_sparam.c | 163 +++++++++++++++++++++++++++++++++++++++++ 11 files changed, 364 insertions(+), 206 deletions(-) create mode 100644 .vscode/tasks.json create mode 100644 app/page/page_dparam.c delete mode 100644 app/page/page_param.c create mode 100644 app/page/page_sparam.c diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..ddfadc2 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,28 @@ +{ + "tasks": [ + { + "type": "cppbuild", + "label": "C/C++: gcc.exe 生成活动文件", + "command": "D:\\MinGW\\bin\\gcc.exe", + "args": [ + "-fdiagnostics-color=always", + "-g", + "${file}", + "-o", + "${fileDirname}\\${fileBasenameNoExtension}.exe" + ], + "options": { + "cwd": "${fileDirname}" + }, + "problemMatcher": [ + "$gcc" + ], + "group": { + "kind": "build", + "isDefault": true + }, + "detail": "调试器生成的任务。" + } + ], + "version": "2.0.0" +} \ No newline at end of file diff --git a/app/jj_param.c b/app/jj_param.c index ced4ada..1142af9 100644 --- a/app/jj_param.c +++ b/app/jj_param.c @@ -5,44 +5,34 @@ PARAM_INFO Param_Data[DATA_NUM]; soft_iic_info_struct eeprom_param; TYPE_UNION iic_buffer[DATA_IN_FLASH_NUM]; - -void jj_param_eeprom_init() -{ - soft_iic_init(&eeprom_param, K24C02_DEV_ADDR, K24C02_SOFT_IIC_DELAY, K24C02_SCL_PIN, K24C02_SDA_PIN); // eeprom 初始化 - // PARAM_REG(angle_Kp, &an_Kp, EFLOAT, 1, "an_P"); // 注冊 - // PARAM_REG(angle_Ki, &an_Ki, EFLOAT, 1, "an_I"); // 注冊 - // PARAM_REG(angle_Kd, &an_Kd, EFLOAT, 1, "an_D"); // 注冊 - // PARAM_REG(imgax_Kp, &im_Kp, EFLOAT, 1, "im_P"); // 注冊 - // PARAM_REG(imgax_Ki, &im_Ki, EFLOAT, 1, "im_I"); // 注冊 - // PARAM_REG(imgax_Kd, &im_Kd, EFLOAT, 1, "im_D"); // 注冊 - - for (uint8 i = 0; i < DATA_IN_FLASH_NUM; i++) { - - soft_iic_read_8bit_registers(&eeprom_param, 4 * i, (uint8 *)&iic_buffer[i], 4); - switch (Param_Data[i].type) { - case EFLOAT: - *((float *)(Param_Data[i].p_data)) = - iic_buffer[i].f32; - break; - case EUINT32: - *((uint32 *)(Param_Data[i].p_data)) = - iic_buffer[i].u32; - break; - case EINT32: - *((int32 *)(Param_Data[i].p_data)) = - iic_buffer[i].s32; - break; - default: - break; - } - system_delay_ms(10); - } -} +float data0 = 1.0f; +float data1 = 1.05f; +float data2 = 10.0f; +float data3 = 100.0f; +float data4 = 4.0f; +float data5 = 66.0f; +float data6 = 13.130f; /** - * @brief 参数更新 + * @brief 参数初始化注册 * */ -void jj_param_update() +void jj_param_eeprom_init(void) +{ + soft_iic_init(&eeprom_param, K24C02_DEV_ADDR, K24C02_SOFT_IIC_DELAY, K24C02_SCL_PIN, K24C02_SDA_PIN); // eeprom初始化 + PARAM_REG(angle_Kp, &data0, EFLOAT, 1, "an_P:"); // 注冊 + PARAM_REG(angle_Ki, &data1, EFLOAT, 1, "an_I:"); // 注冊 + PARAM_REG(angle_Kd, &data2, EFLOAT, 1, "an_D:"); // 注冊 + PARAM_REG(imgax_Kp, &data3, EFLOAT, 1, "im_P:"); // 注冊 + PARAM_REG(imgax_Ki, &data4, EFLOAT, 1, "im_I:"); // 注冊 + PARAM_REG(imgax_Kd, &data5, EFLOAT, 1, "im_D:"); + PARAM_REG(other, &data6, EFLOAT, 1, "add:"); + jj_param_read(); // 注冊 +} +/** + * @brief 参数写入 + * + */ +void jj_param_write(void) { for (uint8 i = 0; i < DATA_IN_FLASH_NUM; i++) { switch (Param_Data[i].type) { @@ -62,3 +52,31 @@ void jj_param_update() system_delay_ms(10); } } +/** + * @brief 参数读出 + * + */ +void jj_param_read(void) +{ + for (uint8 i = 0; i < DATA_IN_FLASH_NUM; i++) { + + soft_iic_read_8bit_registers(&eeprom_param, 4 * i, (uint8 *)&iic_buffer[i], 4); + switch (Param_Data[i].type) { + case EFLOAT: + *((float *)(Param_Data[i].p_data)) = + iic_buffer[i].f32; + break; + case EUINT32: + *((uint32 *)(Param_Data[i].p_data)) = + iic_buffer[i].u32; + break; + case EINT32: + *((int32 *)(Param_Data[i].p_data)) = + iic_buffer[i].s32; + break; + default: + break; + } + system_delay_ms(10); + } +} diff --git a/app/jj_param.h b/app/jj_param.h index 3fbe8bb..6faea53 100644 --- a/app/jj_param.h +++ b/app/jj_param.h @@ -6,22 +6,30 @@ #include "zf_driver_soft_iic.h" /** * @brief 注册需调参数 - * + * */ -#define PARAM_REG(_data_tag_, _p_data_, _type_, _cmd_,_text_) \ - Param_Data[_data_tag_].p_data = (void *)_p_data_; \ - Param_Data[_data_tag_].type = _type_; \ - Param_Data[_data_tag_].cmd = _cmd_; \ +#define PARAM_REG(_data_tag_, _p_data_, _type_, _cmd_, _text_) \ + Param_Data[_data_tag_].p_data = (void *)_p_data_; \ + Param_Data[_data_tag_].type = _type_; \ + Param_Data[_data_tag_].cmd = _cmd_; \ Param_Data[_data_tag_].text = _text_; - + typedef enum { - DATA_HEAD = -1, - angle_Kp, + + Page1_head=0, + + angle_Kp=Page1_head, angle_Ki, angle_Kd, - imgax_Kp, + other, + + Page2_head, + // 第二页参数 + imgax_Kp=Page2_head, imgax_Ki, imgax_Kd, + + Page3_head, DATA_IN_FLASH_NUM, DATA_NUM, } data_tag_t; @@ -30,26 +38,26 @@ typedef enum { EUINT32, EINT32, EFLOAT, -}ENUM_TYPE; +} ENUM_TYPE; -typedef union{ +typedef union { uint32_t u32; int32_t s32; float f32; uint8_t u8; -}TYPE_UNION; +} TYPE_UNION; typedef struct { void *p_data; ENUM_TYPE type; uint8_t cmd; char *text; -}PARAM_INFO; +} PARAM_INFO; extern soft_iic_info_struct eeprom_param; extern PARAM_INFO Param_Data[DATA_NUM]; extern TYPE_UNION iic_buffer[DATA_IN_FLASH_NUM]; -void jj_param_eeprom_init(); -void jj_param_update(); -void jj_param_show(); +void jj_param_eeprom_init(void); +void jj_param_write(void); +void jj_param_read(void); #endif \ No newline at end of file diff --git a/app/main.c b/app/main.c index 8e69e41..9421a54 100644 --- a/app/main.c +++ b/app/main.c @@ -43,8 +43,7 @@ int main(void) by_button_init(); jj_bt_init(); - // jj_param_eeprom_init(); - + jj_param_eeprom_init(); Page_Init(); pit_ms_init(TIM6_PIT, 2); diff --git a/app/page/page.c b/app/page/page.c index 942940c..01ef310 100644 --- a/app/page/page.c +++ b/app/page/page.c @@ -4,8 +4,8 @@ PAGE_LIST pagelist[page_max]; static uint8_t page_busy = 0; +int8_t new_page = page_menu; static int8_t now_page = page_menu; -static int8_t new_page = page_menu; /** * @brief 注册一个基本页面,包含一个初始化函数,循环函数,退出函数,事件函数 @@ -17,11 +17,11 @@ static int8_t new_page = page_menu; * @param eventCallback: 事件函数回调 * @retval 无 */ -void Page_Register(uint8_t pageID, char *pageText, +void Page_Register(uint8_t pageID, CallbackFunction_t setupCallback, CallbackFunction_t loopCallback, CallbackFunction_t exitCallback, EventFunction_t eventCallback) { - pagelist[pageID].Text = pageText; + pagelist[pageID].SetupCallback = setupCallback; pagelist[pageID].LoopCallback = loopCallback; pagelist[pageID].ExitCallback = exitCallback; @@ -123,9 +123,11 @@ void Page_Run(void) */ void Page_Init(void) { - PAGE_REG(page_menu); - PAGE_REG(page_rtcam); - PAGE_REG(page_param); + PAGE_REG(page_menu, "main"); + PAGE_REG(page_rtcam, "rtcam"); + PAGE_REG(page_param1, "Param1"); + PAGE_REG(page_param2, "param2"); + PAGE_REG(page_dparam, "dparam"); // PAGE_REG(page_argv); // PAGE_REG(page_sys); // PAGE_REG(page_run); diff --git a/app/page/page.h b/app/page/page.h index 3d51e41..39ef9eb 100644 --- a/app/page/page.h +++ b/app/page/page.h @@ -20,7 +20,9 @@ enum PageID { //...... page_menu, page_rtcam, - page_param, + page_param1, + page_param2, + page_dparam, // page_argv, // page_sys, // page_run, @@ -46,13 +48,15 @@ typedef struct { } PAGE_LIST; // 页面注册函数 -#define PAGE_REG(name) \ - do { \ - extern void PageRegister_##name(unsigned char pageID); \ - PageRegister_##name(name); \ - } while (0) +#define PAGE_REG(_name_, _text_) \ + do { \ + extern void PageRegister_##_name_(unsigned char pageID); \ + PageRegister_##_name_(_name_); \ + } while (0); \ + pagelist[_name_].Text = _text_ ; -void Page_Register(uint8_t pageID, char *pageText, + +void Page_Register(uint8_t pageID, CallbackFunction_t setupCallback, CallbackFunction_t loopCallback, CallbackFunction_t exitCallback, EventFunction_t eventCallback); @@ -65,5 +69,5 @@ void Page_Run(void); void Page_Init(void); extern PAGE_LIST pagelist[page_max]; - +extern int8_t new_page ; #endif diff --git a/app/page/page_dparam.c b/app/page/page_dparam.c new file mode 100644 index 0000000..ebcb4be --- /dev/null +++ b/app/page/page_dparam.c @@ -0,0 +1,71 @@ +#include "zf_common_headfile.h" +#include "page_ui_widget.h" +#include "page.h" +float ddata0=0.0f; +// #define LINE_HEAD 1 +// #define LINE_END 7 +// static int8_t Curser = LINE_HEAD; // 定义光标位置 +// static int8_t Curser_Last = LINE_HEAD; // 定义光标位置 +/*************************************************************************************** + * + * 以下为页面模板函数 + * + ***************************************************************************************/ + +/** + * @brief 页面初始化事件 + * @param 无 + * @retval 无 + */ +static void Setup() +{ + ips200_clear(); + // 显示参数名称 + ips200_show_string(0, 0, "Dparam"); + ips200_show_string(20, 18 + 2, "ddata0:"); +} + +/** + * @brief 页面退出事件 + * @param 无 + * @retval 无 + */ +static void Exit() +{ + +} + +/** + * @brief 页面循环执行的内容 + * @param 无 + * @retval 无 + */ +static void Loop() +{ + // 刷新参数数值 + ips200_show_float(80, 18 + 2, ddata0, 4, 5); + ddata0+=0.01f; +} + +/** + * @brief 页面事件 + * @param btn:发出事件的按键 + * @param event:事件编号 + * @retval 无 + */ +static void Event(page_event event) +{ + if (page_event_press_long == event) { + Page_Shift(page_menu); + } +} + +/** + * @brief 页面注册函数 + * + * @param pageID + */ +void PageRegister_page_dparam(unsigned char pageID) +{ + Page_Register(pageID, Setup, Loop, Exit, Event); +} diff --git a/app/page/page_menu.c b/app/page/page_menu.c index 8605e47..be60e04 100644 --- a/app/page/page_menu.c +++ b/app/page/page_menu.c @@ -57,9 +57,9 @@ static void Event(page_event event) Curser_Last = Curser; if (page_event_forward == event) { - Curser--; // 光标上移 + Curser++; // 光标上移 } else if (page_event_backward == event) { - Curser++; // 光标下移 + Curser--; // 光标下移 } else if (page_event_press_short == event) { if (page_max > Curser && page_menu < Curser) { Page_Shift(Curser); // 切换到光标选中的页面 @@ -82,7 +82,7 @@ static void Event(page_event event) */ void PageRegister_page_menu(unsigned char pageID) { - Page_Register(pageID, Text, Setup, Loop, Exit, Event); + Page_Register(pageID, Setup, Loop, Exit, Event); } /*************************************************************************************** diff --git a/app/page/page_param.c b/app/page/page_param.c deleted file mode 100644 index ef57df5..0000000 --- a/app/page/page_param.c +++ /dev/null @@ -1,133 +0,0 @@ -#include "jj_param.h" -#include "page_ui_widget.h" -#include "page.h" - -#define LINE_HEAD 0 -#define LINE_END DATA_NUM - 2 -static char Text[] = "Param"; -int event_flag = 0; -int32_t index_power = 0; -static int8_t Curser = LINE_HEAD; // 定义光标位置 -static int8_t Curser_Last = LINE_HEAD; // 定义光标位置 -void jj_param_show(); -/*************************************************************************************** - * - * 以下为页面模板函数 - * - ***************************************************************************************/ -/** - * @brief 页面初始化事件 - * @param 无 - * @retval 无 - */ -static void Setup() -{ - ips200_clear(); - Print_Curser(Curser, Curser_Last, RGB565_PURPLE); - for (int16 i = 0; i < DATA_NUM - 1; i++) { - ips200_show_string(10, i * 18 + 2, Param_Data[i].text); - if (Param_Data[i].type == EINT32) - ips200_show_int(50, i * 18 + 2, *((int32 *)(Param_Data[i].p_data)), 5); - else if (Param_Data[i].type == EFLOAT) - ips200_show_float(50, i * 18 + 2, *((float *)(Param_Data[i].p_data)), 4, 5); - } - ips200_show_int(50, (DATA_NUM-1)* 18 + 2, index_power, 5); - -} - -/** - * @brief 页面退出事件 - * @param 无 - * @retval 无 - */ -static void Exit() -{ -} - -/** - * @brief 页面循环执行的内容 - * @param 无 - * @retval 无 - */ -static void Loop() -{ -} -/** - * @brief 页面事件 - * @param btn:发出事件的按键 - * @param event:事件编号 - * @retval 无 - */ -static void Event(page_event event) -{ - - if (0 == event_flag) { - - Curser_Last = Curser; - if (page_event_forward == event) { - Curser--; // 光标上移 - } else if (page_event_backward == event) { - Curser++; // 光标下移 - } else if (page_event_press_short == event) { - event_flag = 1; // 选中参数 - Print_Curser(Curser, Curser_Last, RGB565_RED); - return; - } else if (page_event_press_long == event) { - jj_param_update(); - Page_Shift(page_menu); - return; - } - if (Curser < LINE_HEAD) { - Curser = LINE_END; - } else if (Curser > LINE_END) { - Curser = LINE_HEAD; - } - Print_Curser(Curser, Curser_Last, RGB565_PURPLE); - } else if (1 == event_flag) { - if (page_event_forward == event) { - if (Param_Data[Curser].type == EFLOAT) { - *((float *)(Param_Data[Curser].p_data)) += powf(10.0f,(float)index_power); - } else if (Param_Data[Curser].type == EINT32) { - *((int32 *)(Param_Data[Curser].p_data)) += 1; - } else if (Param_Data[Curser].type == EUINT32) { - *((uint32 *)(Param_Data[Curser].p_data)) += 1; - } - } else if (page_event_backward == event) { - if (Param_Data[Curser].type == EFLOAT) { - *((float *)(Param_Data[Curser].p_data)) -=powf(10.0f,(float)index_power); - } else if (Param_Data[Curser].type == EINT32) { - *((int32 *)(Param_Data[Curser].p_data)) -= 1; - } else if (Param_Data[Curser].type == EUINT32) { - *((uint32 *)(Param_Data[Curser].p_data)) -= 1; - } - } else if (page_event_press_short == event) { - index_power++; - if (index_power > 2) { - index_power = -2; - } - ips200_show_int(50, (DATA_NUM-1)* 18 + 2, index_power, 5); - } else if (page_event_press_long == event) { - event_flag = 0; - Print_Curser(Curser, Curser_Last, RGB565_PURPLE); - } - jj_param_show(); - } -} -void jj_param_show() -{ - if (EINT32 == Param_Data[Curser].type) - ips200_show_int(50, Curser * 18 + 2, *((int32 *)(Param_Data[Curser].p_data)), 5); - else if (EUINT32 == Param_Data[Curser].type) - ips200_show_uint(50, Curser * 18 + 2, *((int32 *)(Param_Data[Curser].p_data)), 5); - else if (EFLOAT == Param_Data[Curser].type) - ips200_show_float(50, Curser * 18 + 2, *((float *)(Param_Data[Curser].p_data)), 4, 5); -} -/** - * @brief 页面注册函数 - * - * @param pageID - */ -void PageRegister_page_param(unsigned char pageID) -{ - Page_Register(pageID, Text, Setup, Loop, Exit, Event); -} diff --git a/app/page/page_rtcam.c b/app/page/page_rtcam.c index 7b479bd..9d520ee 100644 --- a/app/page/page_rtcam.c +++ b/app/page/page_rtcam.c @@ -5,8 +5,6 @@ #define LINE_HEAD 11 #define LINE_END 16 -static char Text[] = "RealTime Image"; - static int8_t Curser = LINE_HEAD; // 定义光标位置 static int8_t Curser_Last = LINE_HEAD; // 定义光标位置 /*************************************************************************************** @@ -81,7 +79,7 @@ static void Event(page_event event) */ void PageRegister_page_rtcam(unsigned char pageID) { - Page_Register(pageID, Text, Setup, Loop, Exit, Event); + Page_Register(pageID, Setup, Loop, Exit, Event); } /*************************************************************************************** diff --git a/app/page/page_sparam.c b/app/page/page_sparam.c new file mode 100644 index 0000000..a062093 --- /dev/null +++ b/app/page/page_sparam.c @@ -0,0 +1,163 @@ +#include "jj_param.h" +#include "page_ui_widget.h" +#include "page.h" + +#define LINE_HEAD 1 + +static int16 pafrist; +static int16 paend; +static int16 palong; +static int event_flag = 0; +static int32_t index_power = 0; +static int8_t Curser = LINE_HEAD; // 定义光标位置 +static int8_t Curser_Last = LINE_HEAD; // 定义光标位置 +/*************************************************************************************** + * + * 以下为页面模板函数 + * + ***************************************************************************************/ +/** + * @brief 页面初始化事件 + * @param 无 + * @retval 无 + */ +static void Setup() +{ + ips200_clear(); + + if (new_page == page_param1) { + pafrist = 0; + paend = Page2_head; + ips200_show_string(0, 0, "Param1"); + } else if (new_page == page_param2) { + pafrist = Page2_head; + paend = Page3_head; + ips200_show_string(0, 0, "Param2"); + } + + palong = paend - pafrist; + if (Curser < LINE_HEAD) { + Curser = palong; + } else if (Curser > palong) { + Curser = LINE_HEAD; + } + Print_Curser(Curser, Curser_Last, RGB565_PURPLE); + for (int16 i = 0; i < palong; i++) { + ips200_show_string(20, i * 18 + 20, Param_Data[i + pafrist].text); + if (Param_Data[i].type == EINT32) + ips200_show_int(60, i * 18 + 20, *((int32 *)(Param_Data[i + pafrist].p_data)), 5); + else if (Param_Data[i].type == EFLOAT) + ips200_show_float(60, i * 18 + 20, *((float *)(Param_Data[i + pafrist].p_data)), 4, 5); + } + ips200_show_int(50, palong * 18 + 20, index_power, 5); +} + +/** + * @brief 页面退出事件 + * @param 无 + * @retval 无 + */ +static void Exit() +{ +} + +/** + * @brief 页面循环执行的内容 + * @param 无 + * @retval 无 + */ +static void Loop() +{ +} +/** + * @brief 页面事件 + * @param btn:发出事件的按键 + * @param event:事件编号 + * @retval 无 + */ +static void Event(page_event event) +{ + + if (0 == event_flag) { + + Curser_Last = Curser; + if (page_event_forward == event) { + Curser++; // 光标上移 + } else if (page_event_backward == event) { + Curser--; // 光标下移 + } else if (page_event_press_short == event) { + event_flag = 1; // 选中参数 + Print_Curser(Curser, Curser_Last, RGB565_RED); + return; + } else if (page_event_press_long == event) { + jj_param_write(); + Page_Shift(page_menu); + return; + } + if (Curser < LINE_HEAD) { + Curser = palong; + } else if (Curser > palong) { + Curser = LINE_HEAD; + } + Print_Curser(Curser, Curser_Last, RGB565_PURPLE); + } else if (1 == event_flag) { + if (page_event_forward == event) { + switch (Param_Data[Curser + pafrist - 1].type) { + case EFLOAT: + *((float *)(Param_Data[Curser + pafrist - 1].p_data)) += powf(10.0f, (float)index_power); + break; + case EINT32: + *((int32 *)(Param_Data[Curser + pafrist - 1].p_data)) += 1; + break; + case EUINT32: + *((uint32 *)(Param_Data[Curser + pafrist - 1].p_data)) += 1; + break; + default: + break; + } + } else if (page_event_backward == event) { + switch (Param_Data[Curser + pafrist - 1].type) { + case EFLOAT: + *((float *)(Param_Data[Curser + pafrist - 1].p_data)) -= powf(10.0f, (float)index_power); + break; + case EINT32: + *((int32 *)(Param_Data[Curser + pafrist - 1].p_data)) -= 1; + break; + case EUINT32: + *((uint32 *)(Param_Data[Curser + pafrist - 1].p_data)) -= 1; + break; + default: + break; + } + } else if (page_event_press_short == event) { + index_power++; + if (index_power > 2) { + index_power = -2; + } + ips200_show_int(50, palong * 18 + 20, index_power, 5); + } else if (page_event_press_long == event) { + event_flag = 0; + Print_Curser(Curser, Curser_Last, RGB565_PURPLE); + } + if (EINT32 == Param_Data[Curser + pafrist - 1].type) + ips200_show_int(60, Curser * 18 + 2, *((int32 *)(Param_Data[Curser + pafrist - 1].p_data)), 5); + else if (EUINT32 == Param_Data[Curser + pafrist - 1].type) + ips200_show_uint(60, Curser * 18 + 2, *((int32 *)(Param_Data[Curser + pafrist - 1].p_data)), 5); + else if (EFLOAT == Param_Data[Curser + pafrist - 1].type) + ips200_show_float(60, Curser * 18 + 2, *((float *)(Param_Data[Curser + pafrist - 1].p_data)), 4, 5); + } +} + +/** + * @brief 页面注册函数 + * + * @param pageID + */ +void PageRegister_page_param1(unsigned char pageID) +{ + Page_Register(pageID, Setup, Loop, Exit, Event); +} +void PageRegister_page_param2(unsigned char pageID) +{ + Page_Register(pageID, Setup, Loop, Exit, Event); +} \ No newline at end of file From a758d0f94fe58501c45ee9add024560eef406f5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=95=E6=98=8E=E6=B1=9F?= <246462502@qq.com> Date: Sat, 2 Mar 2024 16:00:05 +0800 Subject: [PATCH 2/2] =?UTF-8?q?feat:=20=E5=AE=8C=E6=88=90eeprom=E5=8F=8A?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2ui=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/isr.c | 1 + app/jj_param.c | 13 +- app/jj_param.h | 8 +- app/main.c | 53 +++--- app/page/page.c | 8 +- app/page/page.h | 2 +- app/page/page_dparam.c | 15 +- app/page/page_menu.c | 4 +- app/page/{page_sparam.c => page_sparam1.c} | 11 +- app/page/page_sparam2.c | 160 ++++++++++++++++++ app/tiny_frame/by_tiny_frame_config.h | 8 +- .../by_tiny_frame_slave_read_write.c | 56 +++--- libraries/zf_device/zf_device_k24c02.h | 2 +- libraries/zf_device/zf_device_mt9v03x_dvp.h | 4 +- libraries/zf_driver/zf_driver_soft_iic.c | 30 ++++ libraries/zf_driver/zf_driver_soft_iic.h | 122 ++++++------- 16 files changed, 348 insertions(+), 149 deletions(-) rename app/page/{page_sparam.c => page_sparam1.c} (92%) create mode 100644 app/page/page_sparam2.c diff --git a/app/isr.c b/app/isr.c index cf9dd1c..ee7debe 100644 --- a/app/isr.c +++ b/app/isr.c @@ -284,6 +284,7 @@ void TIM1_UP_IRQHandler(void) { if (TIM_GetITStatus(TIM1, TIM_IT_Update) != RESET) { TIM_ClearITPendingBit(TIM1, TIM_IT_Update); + by_tiny_frame_parse_timer_handle(); } } diff --git a/app/jj_param.c b/app/jj_param.c index 1142af9..27befa7 100644 --- a/app/jj_param.c +++ b/app/jj_param.c @@ -5,6 +5,7 @@ PARAM_INFO Param_Data[DATA_NUM]; soft_iic_info_struct eeprom_param; TYPE_UNION iic_buffer[DATA_IN_FLASH_NUM]; +uint32_t *addre[2]; float data0 = 1.0f; float data1 = 1.05f; float data2 = 10.0f; @@ -12,6 +13,8 @@ float data3 = 100.0f; float data4 = 4.0f; float data5 = 66.0f; float data6 = 13.130f; +float data7 = 10.0f; +float data8 = 0.0f; /** * @brief 参数初始化注册 * @@ -25,7 +28,9 @@ void jj_param_eeprom_init(void) PARAM_REG(imgax_Kp, &data3, EFLOAT, 1, "im_P:"); // 注冊 PARAM_REG(imgax_Ki, &data4, EFLOAT, 1, "im_I:"); // 注冊 PARAM_REG(imgax_Kd, &data5, EFLOAT, 1, "im_D:"); - PARAM_REG(other, &data6, EFLOAT, 1, "add:"); + PARAM_REG(other , &data6, EFLOAT, 1, "add:"); + PARAM_REG(delta_x , &data7, EFLOAT, 2, "delta_x:"); + PARAM_REG(delta_y , &data8, EFLOAT, 0, "delta_y:"); jj_param_read(); // 注冊 } /** @@ -48,7 +53,7 @@ void jj_param_write(void) default: break; } - soft_iic_write_8bit_registers(&eeprom_param, 4 * i, (uint8 *)&iic_buffer[i], 4); + eep_soft_iic_write_8bit_registers(&eeprom_param, (4 * i) >> 8, (4 * i), (uint8 *)&iic_buffer[i], 4); system_delay_ms(10); } } @@ -60,7 +65,7 @@ void jj_param_read(void) { for (uint8 i = 0; i < DATA_IN_FLASH_NUM; i++) { - soft_iic_read_8bit_registers(&eeprom_param, 4 * i, (uint8 *)&iic_buffer[i], 4); + eep_soft_iic_read_8bit_registers(&eeprom_param, (4 * i) >> 8, (4 * i), (uint8 *)&iic_buffer[i], 4); switch (Param_Data[i].type) { case EFLOAT: *((float *)(Param_Data[i].p_data)) = @@ -77,6 +82,6 @@ void jj_param_read(void) default: break; } - system_delay_ms(10); + system_delay_ms(10); } } diff --git a/app/jj_param.h b/app/jj_param.h index 6faea53..2e78fdc 100644 --- a/app/jj_param.h +++ b/app/jj_param.h @@ -31,6 +31,9 @@ typedef enum { Page3_head, DATA_IN_FLASH_NUM, + + delta_x, + delta_y, DATA_NUM, } data_tag_t; @@ -50,14 +53,15 @@ typedef union { typedef struct { void *p_data; ENUM_TYPE type; - uint8_t cmd; + uint8_t cmd;//01:仅存储 00:仅显示 02:传输并显示 char *text; } PARAM_INFO; - +extern uint32_t * addre[2]; extern soft_iic_info_struct eeprom_param; extern PARAM_INFO Param_Data[DATA_NUM]; extern TYPE_UNION iic_buffer[DATA_IN_FLASH_NUM]; void jj_param_eeprom_init(void); void jj_param_write(void); void jj_param_read(void); +extern float data7; #endif \ No newline at end of file diff --git a/app/main.c b/app/main.c index 889d833..b0acd5a 100644 --- a/app/main.c +++ b/app/main.c @@ -52,65 +52,60 @@ int main(void) clock_init(SYSTEM_CLOCK_144M); system_delay_init(); debug_init(); - // mt9v03x_init(); + mt9v03x_init(); ips200_init(IPS200_TYPE_SPI); by_led_init(); - by_buzzer_init(); + // by_buzzer_init(); by_button_init(); jj_bt_init(); jj_param_eeprom_init(); - // jj_bt_init(); - // jj_param_eeprom_init(); Page_Init(); - - // pit_ms_init(TIM6_PIT, 2); - // pit_ms_init(TIM1_PIT, 2); + + pit_ms_init(TIM1_PIT, 1); by_tiny_frame_init(); printf("start running\r\n"); /** 测试完成后移除 **/ - // by_tiny_frame_parse_handle_register(test); by_tiny_frame_parse_start_listern(); by_tf_pack_frame_t frame_now; frame_now.cmd = 0x06; frame_now.data = 0x19260817; - frame_now.reg_addr = 0x4059; + frame_now.reg_addr = 0x00; frame_now.slave_id = 0x0D; /** 测试完成后移除 **/ while (1) { Page_Run(); - by_buzzer_run(); + // by_buzzer_run(); /** 测试完成后移除 **/ - by_tiny_frame_run(); - // by_tiny_frame_pack_send(&frame_now); + by_tiny_frame_pack_send(&frame_now); system_delay_ms(10); - by_tiny_frame_parse_timer_handle(); /** 测试完成后移除 **/ - // if (mt9v03x_finish_flag) { - // // 该操作消耗大概 1970 个 tick,折合约 110us - // memcpy(mt9v03x_image_copy[0], mt9v03x_image[0], (sizeof(mt9v03x_image_copy) / sizeof(uint8_t))); - // // adaptiveThreshold((uint8_t*)mt9v03x_image_copy, (uint8_t*)mt9v03x_image_copy, 188, 120, 7, 17); - // // ips200_show_gray_image(0, 0, mt9v03x_image_copy[0], MT9V03X_W, MT9V03X_H, MT9V03X_W, MT9V03X_H, 0); - // mt9v03x_finish_flag = 0; - // by_led_info_blink(); - // state_type = COMMON_STATE; - // img_processing(); - // get_corners(); - // aim_distance = COMMON_AIM; - // tracking(); - // ElementJudge(); - // ElementRun(); - // MidLineTrack(); - // } + if (mt9v03x_finish_flag) { + // 该操作消耗大概 1970 个 tick,折合约 110us + memcpy(mt9v03x_image_copy[0], mt9v03x_image[0], (sizeof(mt9v03x_image_copy) / sizeof(uint8_t))); + // adaptiveThreshold((uint8_t*)mt9v03x_image_copy, (uint8_t*)mt9v03x_image_copy, 188, 120, 7, 17); + // ips200_show_gray_image(0, 0, mt9v03x_image_copy[0], MT9V03X_W, MT9V03X_H, MT9V03X_W, MT9V03X_H, 0); + mt9v03x_finish_flag = 0; + by_led_info_blink(); + // state_type = COMMON_STATE; + // img_processing(); + // get_corners(); + // aim_distance = COMMON_AIM; + // tracking(); + // ElementJudge(); + // ElementRun(); + // MidLineTrack(); + + } } } diff --git a/app/page/page.c b/app/page/page.c index 01ef310..877b879 100644 --- a/app/page/page.c +++ b/app/page/page.c @@ -4,9 +4,13 @@ PAGE_LIST pagelist[page_max]; static uint8_t page_busy = 0; -int8_t new_page = page_menu; +static int8_t new_page = page_menu; static int8_t now_page = page_menu; +int8_t Get_new_page(void) +{ + return new_page; +} /** * @brief 注册一个基本页面,包含一个初始化函数,循环函数,退出函数,事件函数 * @param pageID: 页面编号 @@ -127,7 +131,7 @@ void Page_Init(void) PAGE_REG(page_rtcam, "rtcam"); PAGE_REG(page_param1, "Param1"); PAGE_REG(page_param2, "param2"); - PAGE_REG(page_dparam, "dparam"); + PAGE_REG(page_dparam, "dparam"); // PAGE_REG(page_argv); // PAGE_REG(page_sys); // PAGE_REG(page_run); diff --git a/app/page/page.h b/app/page/page.h index 39ef9eb..7e18f75 100644 --- a/app/page/page.h +++ b/app/page/page.h @@ -67,7 +67,7 @@ void Page_OpenCurrentPage(void); uint8_t Page_GetStatus(void); void Page_Run(void); void Page_Init(void); +int8_t Get_new_page(void); extern PAGE_LIST pagelist[page_max]; -extern int8_t new_page ; #endif diff --git a/app/page/page_dparam.c b/app/page/page_dparam.c index ebcb4be..3407df5 100644 --- a/app/page/page_dparam.c +++ b/app/page/page_dparam.c @@ -1,7 +1,7 @@ #include "zf_common_headfile.h" #include "page_ui_widget.h" #include "page.h" -float ddata0=0.0f; +#include "jj_param.h" // #define LINE_HEAD 1 // #define LINE_END 7 // static int8_t Curser = LINE_HEAD; // 定义光标位置 @@ -21,8 +21,10 @@ static void Setup() { ips200_clear(); // 显示参数名称 - ips200_show_string(0, 0, "Dparam"); - ips200_show_string(20, 18 + 2, "ddata0:"); + ips200_show_string(0, 0, "Dparam"); + + ips200_show_string(20, 18 + 2, (Param_Data[delta_x].text)); + ips200_show_string(20, 18 + 20, (Param_Data[delta_y].text)); } /** @@ -32,7 +34,6 @@ static void Setup() */ static void Exit() { - } /** @@ -43,8 +44,8 @@ static void Exit() static void Loop() { // 刷新参数数值 - ips200_show_float(80, 18 + 2, ddata0, 4, 5); - ddata0+=0.01f; + ips200_show_float(90, 18 + 2, *((float *)(Param_Data[delta_x].p_data)), 4, 5); + ips200_show_float(90, 18 + 20, *((float *)(Param_Data[delta_x].p_data)), 4, 5); } /** @@ -55,7 +56,7 @@ static void Loop() */ static void Event(page_event event) { - if (page_event_press_long == event) { + if (page_event_press_long == event) { Page_Shift(page_menu); } } diff --git a/app/page/page_menu.c b/app/page/page_menu.c index be60e04..687499b 100644 --- a/app/page/page_menu.c +++ b/app/page/page_menu.c @@ -25,7 +25,7 @@ static void Setup() { ips200_clear(); Print_Menu_p(); - Print_Curser(Curser, Curser_Last,RGB565_PURPLE); + Print_Curser(Curser, Curser_Last, RGB565_PURPLE); } /** @@ -72,7 +72,7 @@ static void Event(page_event event) Curser = LINE_HEAD; } - Print_Curser(Curser, Curser_Last,RGB565_PURPLE); + Print_Curser(Curser, Curser_Last, RGB565_PURPLE); } /** diff --git a/app/page/page_sparam.c b/app/page/page_sparam1.c similarity index 92% rename from app/page/page_sparam.c rename to app/page/page_sparam1.c index a062093..fe425ab 100644 --- a/app/page/page_sparam.c +++ b/app/page/page_sparam1.c @@ -1,6 +1,7 @@ #include "jj_param.h" #include "page_ui_widget.h" #include "page.h" +#include #define LINE_HEAD 1 @@ -25,11 +26,11 @@ static void Setup() { ips200_clear(); - if (new_page == page_param1) { + if (Get_new_page() == page_param1) { pafrist = 0; paend = Page2_head; ips200_show_string(0, 0, "Param1"); - } else if (new_page == page_param2) { + } else if (Get_new_page() == page_param2) { pafrist = Page2_head; paend = Page3_head; ips200_show_string(0, 0, "Param2"); @@ -104,7 +105,7 @@ static void Event(page_event event) if (page_event_forward == event) { switch (Param_Data[Curser + pafrist - 1].type) { case EFLOAT: - *((float *)(Param_Data[Curser + pafrist - 1].p_data)) += powf(10.0f, (float)index_power); + *((float *)(Param_Data[Curser + pafrist - 1].p_data)) += powf(10, index_power); break; case EINT32: *((int32 *)(Param_Data[Curser + pafrist - 1].p_data)) += 1; @@ -157,7 +158,3 @@ void PageRegister_page_param1(unsigned char pageID) { Page_Register(pageID, Setup, Loop, Exit, Event); } -void PageRegister_page_param2(unsigned char pageID) -{ - Page_Register(pageID, Setup, Loop, Exit, Event); -} \ No newline at end of file diff --git a/app/page/page_sparam2.c b/app/page/page_sparam2.c new file mode 100644 index 0000000..2335b13 --- /dev/null +++ b/app/page/page_sparam2.c @@ -0,0 +1,160 @@ +#include "jj_param.h" +#include "page_ui_widget.h" +#include "page.h" +#include + +#define LINE_HEAD 1 + +static int16 pafrist; +static int16 paend; +static int16 palong; +static int event_flag = 0; +static int32_t index_power = 0; +static int8_t Curser = LINE_HEAD; // 定义光标位置 +static int8_t Curser_Last = LINE_HEAD; // 定义光标位置 +/*************************************************************************************** + * + * 以下为页面模板函数 + * + ***************************************************************************************/ +/** + * @brief 页面初始化事件 + * @param 无 + * @retval 无 + */ +static void Setup() +{ + ips200_clear(); + + if (Get_new_page() == page_param1) { + pafrist = 0; + paend = Page2_head; + ips200_show_string(0, 0, "Param1"); + } else if (Get_new_page() == page_param2) { + pafrist = Page2_head; + paend = Page3_head; + ips200_show_string(0, 0, "Param2"); + } + + palong = paend - pafrist; + if (Curser < LINE_HEAD) { + Curser = palong; + } else if (Curser > palong) { + Curser = LINE_HEAD; + } + Print_Curser(Curser, Curser_Last, RGB565_PURPLE); + for (int16 i = 0; i < palong; i++) { + ips200_show_string(20, i * 18 + 20, Param_Data[i + pafrist].text); + if (Param_Data[i].type == EINT32) + ips200_show_int(60, i * 18 + 20, *((int32 *)(Param_Data[i + pafrist].p_data)), 5); + else if (Param_Data[i].type == EFLOAT) + ips200_show_float(60, i * 18 + 20, *((float *)(Param_Data[i + pafrist].p_data)), 4, 5); + } + ips200_show_int(50, palong * 18 + 20, index_power, 5); +} + +/** + * @brief 页面退出事件 + * @param 无 + * @retval 无 + */ +static void Exit() +{ +} + +/** + * @brief 页面循环执行的内容 + * @param 无 + * @retval 无 + */ +static void Loop() +{ +} +/** + * @brief 页面事件 + * @param btn:发出事件的按键 + * @param event:事件编号 + * @retval 无 + */ +static void Event(page_event event) +{ + + if (0 == event_flag) { + + Curser_Last = Curser; + if (page_event_forward == event) { + Curser++; // 光标上移 + } else if (page_event_backward == event) { + Curser--; // 光标下移 + } else if (page_event_press_short == event) { + event_flag = 1; // 选中参数 + Print_Curser(Curser, Curser_Last, RGB565_RED); + return; + } else if (page_event_press_long == event) { + jj_param_write(); + Page_Shift(page_menu); + return; + } + if (Curser < LINE_HEAD) { + Curser = palong; + } else if (Curser > palong) { + Curser = LINE_HEAD; + } + Print_Curser(Curser, Curser_Last, RGB565_PURPLE); + } else if (1 == event_flag) { + if (page_event_forward == event) { + switch (Param_Data[Curser + pafrist - 1].type) { + case EFLOAT: + *((float *)(Param_Data[Curser + pafrist - 1].p_data)) += powf(10, index_power); + break; + case EINT32: + *((int32 *)(Param_Data[Curser + pafrist - 1].p_data)) += 1; + break; + case EUINT32: + *((uint32 *)(Param_Data[Curser + pafrist - 1].p_data)) += 1; + break; + default: + break; + } + } else if (page_event_backward == event) { + switch (Param_Data[Curser + pafrist - 1].type) { + case EFLOAT: + *((float *)(Param_Data[Curser + pafrist - 1].p_data)) -= powf(10.0f, (float)index_power); + break; + case EINT32: + *((int32 *)(Param_Data[Curser + pafrist - 1].p_data)) -= 1; + break; + case EUINT32: + *((uint32 *)(Param_Data[Curser + pafrist - 1].p_data)) -= 1; + break; + default: + break; + } + } else if (page_event_press_short == event) { + index_power++; + if (index_power > 2) { + index_power = -2; + } + ips200_show_int(50, palong * 18 + 20, index_power, 5); + } else if (page_event_press_long == event) { + event_flag = 0; + Print_Curser(Curser, Curser_Last, RGB565_PURPLE); + } + if (EINT32 == Param_Data[Curser + pafrist - 1].type) + ips200_show_int(60, Curser * 18 + 2, *((int32 *)(Param_Data[Curser + pafrist - 1].p_data)), 5); + else if (EUINT32 == Param_Data[Curser + pafrist - 1].type) + ips200_show_uint(60, Curser * 18 + 2, *((int32 *)(Param_Data[Curser + pafrist - 1].p_data)), 5); + else if (EFLOAT == Param_Data[Curser + pafrist - 1].type) + ips200_show_float(60, Curser * 18 + 2, *((float *)(Param_Data[Curser + pafrist - 1].p_data)), 4, 5); + } +} + +/** + * @brief 页面注册函数 + * + * @param pageID + */ +void PageRegister_page_param2(unsigned char pageID) +{ + Page_Register(pageID, Setup, Loop, Exit, Event); +} \ No newline at end of file diff --git a/app/tiny_frame/by_tiny_frame_config.h b/app/tiny_frame/by_tiny_frame_config.h index ebc3549..0cb1a78 100644 --- a/app/tiny_frame/by_tiny_frame_config.h +++ b/app/tiny_frame/by_tiny_frame_config.h @@ -3,15 +3,15 @@ #define BY_TF_DEBUG (1) -#define BY_TF_UART_TX_PIN (UART3_MAP0_TX_B10) -#define BY_TF_UART_RX_PIN (UART3_MAP0_RX_B11) -#define BY_TF_UART_INDEX (UART_3) +#define BY_TF_UART_TX_PIN (UART2_MAP0_TX_A2) +#define BY_TF_UART_RX_PIN (UART2_MAP0_RX_A3) +#define BY_TF_UART_INDEX (UART_2) #define BY_TF_UART_BAUDRATE (115200) #define BY_TF_PARSE_BUFFER_SIZE (50) // 注释此项则为主机,否则为从机 -#define BY_TF_DEVICE_SLAVE +//#define BY_TF_DEVICE_SLAVE /********** 从机模式配置选项 **********/ #if defined(BY_TF_DEVICE_SLAVE) diff --git a/app/tiny_frame/by_tiny_frame_slave_read_write.c b/app/tiny_frame/by_tiny_frame_slave_read_write.c index 9883ce6..a49649f 100644 --- a/app/tiny_frame/by_tiny_frame_slave_read_write.c +++ b/app/tiny_frame/by_tiny_frame_slave_read_write.c @@ -3,6 +3,8 @@ #include "by_tiny_frame_parse.h" #include "by_tiny_frame_pack.h" +#include "jj_param.h" + void by_tiny_frame_read_write_run(void) { // empty @@ -10,35 +12,35 @@ void by_tiny_frame_read_write_run(void) void by_tiny_frame_read_write_handle(by_tf_parse_frame_t frame_s, uint8_t status) { - by_tf_pack_frame_t frame_pack_s; +// by_tf_pack_frame_t frame_pack_s; - frame_pack_s.slave_id = BY_TF_DEVICE_SLAVE_ADDRESS; - frame_pack_s.cmd = frame_s.cmd; - frame_pack_s.reg_addr = frame_s.reg_addr; +// frame_pack_s.slave_id = BY_TF_DEVICE_SLAVE_ADDRESS; +// frame_pack_s.cmd = frame_s.cmd; +// frame_pack_s.reg_addr = frame_s.reg_addr; - if (status) { - // 接收出错,一般为 CRC 校验错误 - return; - } +// if (status) { +// // 接收出错,一般为 CRC 校验错误 +// return; +// } - switch (frame_s.cmd) { - case 0x03: - // 添加查询接口,操作完成后应答 - frame_pack_s.data = 0XFFFFFFFF; // 示例 - by_tiny_frame_pack_send(&frame_pack_s); - break; - case 0x06: - // 添加写入接口,操作完成后应答 - frame_pack_s.data = frame_s.data; - by_tiny_frame_pack_send(&frame_pack_s); - break; - default: - break; - } +// switch (frame_s.cmd) { +// case 0x03: +// // 添加查询接口,操作完成后应答,主机接收,即读取 +// frame_pack_s.data =(uint32_t)(addre[frame_pack_s.reg_addr]); +// by_tiny_frame_pack_send(&frame_pack_s); +// break; +// case 0x06: +// // 添加写入接口,操作完成后应答,主机发送,即写入 +// *addre[frame_pack_s.reg_addr] = frame_pack_s.data; +// by_tiny_frame_pack_send(&frame_pack_s); +// break; +// default: +// break; +// } -#if (BY_TF_DEBUG) - printf("****** EXECUTE CMD SUCCESSFUL ******\r\n"); - printf("Device ID: 0x%0.2X\r\n", BY_TF_DEVICE_SLAVE_ADDRESS); - printf("--cmd: %0.2X\n--reg_addr: %0.4X\n--data: %0.8X\r\n", frame_s.cmd, frame_s.reg_addr, frame_s.data); -#endif +// #if (BY_TF_DEBUG) +// printf("****** EXECUTE CMD SUCCESSFUL ******\r\n"); +// printf("Device ID: 0x%0.2X\r\n", BY_TF_DEVICE_SLAVE_ADDRESS); +// printf("--cmd: %0.2X\n--reg_addr: %0.4X\n--data: %0.8X\r\n", frame_s.cmd, frame_s.reg_addr, frame_s.data); +// #endif } diff --git a/libraries/zf_device/zf_device_k24c02.h b/libraries/zf_device/zf_device_k24c02.h index b8f479c..f4ca366 100644 --- a/libraries/zf_device/zf_device_k24c02.h +++ b/libraries/zf_device/zf_device_k24c02.h @@ -55,7 +55,7 @@ //==================================================== IIC ==================================================== #define K24C02_SOFT_IIC_DELAY (500) // IIC ʱʱ ֵԽС IIC ͨԽ #define K24C02_SCL_PIN (D13) // IIC SCL K24C02 SCL -#define K24C02_SDA_PIN (D14) // IIC SDA K24C02 SDA +#define K24C02_SDA_PIN (D12) // IIC SDA K24C02 SDA //==================================================== IIC ==================================================== #else //====================================================Ӳ IIC ==================================================== diff --git a/libraries/zf_device/zf_device_mt9v03x_dvp.h b/libraries/zf_device/zf_device_mt9v03x_dvp.h index c1b8d56..14890a2 100644 --- a/libraries/zf_device/zf_device_mt9v03x_dvp.h +++ b/libraries/zf_device/zf_device_mt9v03x_dvp.h @@ -95,7 +95,7 @@ #define MT9V03X_IMAGE_SIZE ( MT9V03X_W * MT9V03X_H ) // ͼСܳ 65535 #define MT9V03X_COF_BUFFER_SIZE ( 64 ) // ôڻС 64 -#define MT9V03X_AUTO_EXP_DEF (0 ) // Զع ĬϲԶع Χ [0-63] 0 Ϊر +#define MT9V03X_AUTO_EXP_DEF (0 ) // Զع ĬϲԶع Χ [0-63] 0 Ϊر // Զع⿪ EXP_TIME Զعʱ // һDzҪԶع ߷dzȵԳԶع⣬ͼȶ #define MT9V03X_EXP_TIME_DEF (512) // عʱ ͷյԶعʱ䣬ùΪعֵ @@ -104,7 +104,7 @@ // ͷƫݺԶƫƣüƫ #define MT9V03X_UD_OFFSET_DEF (0 ) // ͼƫ ֵ ƫ ֵ ƫ Ϊ 120 240 480 ʱ޷ƫ // ͷƫݺԶƫƣüƫ -#define MT9V03X_GAIN_DEF (32 ) // ͼ Χ [16-64] عʱ̶¸ıͼ̶ +#define MT9V03X_GAIN_DEF (64 ) // ͼ Χ [16-64] عʱ̶¸ıͼ̶ #define MT9V03X_PCLK_MODE_DEF (1 ) // ʱģʽ Χ [0-1] Ĭϣ0 ѡΪ[0źţ1ź] // ͨΪ 0ʹ CH32V307 DVP ӿڻ STM32 DCMI ӿڲɼҪΪ 1 // MT9V034 V1.5 Լϰ汾ָ֧ diff --git a/libraries/zf_driver/zf_driver_soft_iic.c b/libraries/zf_driver/zf_driver_soft_iic.c index 61094df..7f322e2 100644 --- a/libraries/zf_driver/zf_driver_soft_iic.c +++ b/libraries/zf_driver/zf_driver_soft_iic.c @@ -709,3 +709,33 @@ void soft_iic_init (soft_iic_info_struct *soft_iic_obj, uint8 addr, uint32 delay gpio_init(scl_pin, GPO, GPIO_HIGH, GPO_PUSH_PULL); // ȡӦIO AFܱ gpio_init(sda_pin, GPO, GPIO_HIGH, GPO_OPEN_DTAIN); // ȡӦIO AFܱ } +void eep_soft_iic_read_8bit_registers (soft_iic_info_struct *soft_iic_obj, const uint8 register_name_h, const uint8 register_name_l, uint8 *data, uint32 len) +{ + zf_assert(soft_iic_obj != NULL); + zf_assert(data != NULL); + soft_iic_start(soft_iic_obj); + soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1); + soft_iic_send_data(soft_iic_obj, register_name_h); + soft_iic_send_data(soft_iic_obj, register_name_l); + soft_iic_start(soft_iic_obj); + soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1 | 0x01); + while(len --) + { + *data ++ = soft_iic_read_data(soft_iic_obj, len == 0); + } + soft_iic_stop(soft_iic_obj); +} +void eep_soft_iic_write_8bit_registers (soft_iic_info_struct *soft_iic_obj, const uint8 register_name_h,const uint8 register_name_l, const uint8 *data, uint32 len) +{ + zf_assert(soft_iic_obj != NULL); + zf_assert(data != NULL); + soft_iic_start(soft_iic_obj); + soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1); + soft_iic_send_data(soft_iic_obj, register_name_h); + soft_iic_send_data(soft_iic_obj, register_name_l); + while(len --) + { + soft_iic_send_data(soft_iic_obj, *data ++); + } + soft_iic_stop(soft_iic_obj); +} \ No newline at end of file diff --git a/libraries/zf_driver/zf_driver_soft_iic.h b/libraries/zf_driver/zf_driver_soft_iic.h index 1323324..5a9be20 100644 --- a/libraries/zf_driver/zf_driver_soft_iic.h +++ b/libraries/zf_driver/zf_driver_soft_iic.h @@ -1,83 +1,83 @@ /********************************************************************************************************************* -* CH32V307VCT6 Opensourec Library CH32V307VCT6 Դ⣩һڹٷ SDK ӿڵĵԴ -* Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļCH32V307VCT6 Դһ -* -* CH32V307VCT6 Դ -* Ըᷢ GPLGNU General Public License GNUͨù֤ -* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* -* Դķϣܷãδκεı֤ -* ûԻʺض;ı֤ -* ϸμ GPL -* -* ӦյԴͬʱյһ GPL ĸ -* ûУ -* -* ע -* Դʹ GPL3.0 Դ֤Э Ϊİ汾 -* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ -* ֤ libraries ļ ļµ LICENSE ļ -* ӭλʹò ޸ʱ뱣ɿƼİȨ -* -* ļ zf_driver_soft_iic -* ˾ ɶɿƼ޹˾ -* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* MounRiver Studio V1.8.1 -* ƽ̨ CH32V307VCT6 -* https://seekfree.taobao.com/ -* -* ޸ļ¼ -* ע -* 2022-09-15 W first version -********************************************************************************************************************/ + * CH32V307VCT6 Opensourec Library CH32V307VCT6 Դ⣩һڹٷ SDK ӿڵĵԴ + * Copyright (c) 2022 SEEKFREE ɿƼ + * + * ļCH32V307VCT6 Դһ + * + * CH32V307VCT6 Դ + * Ըᷢ GPLGNU General Public License GNUͨù֤ + * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ + * + * Դķϣܷãδκεı֤ + * ûԻʺض;ı֤ + * ϸμ GPL + * + * ӦյԴͬʱյһ GPL ĸ + * ûУ + * + * ע + * Դʹ GPL3.0 Դ֤Э Ϊİ汾 + * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ + * ֤ libraries ļ ļµ LICENSE ļ + * ӭλʹò ޸ʱ뱣ɿƼİȨ + * + * ļ zf_driver_soft_iic + * ˾ ɶɿƼ޹˾ + * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ + * MounRiver Studio V1.8.1 + * ƽ̨ CH32V307VCT6 + * https://seekfree.taobao.com/ + * + * ޸ļ¼ + * ע + * 2022-09-15 W first version + ********************************************************************************************************************/ #ifndef _zf_driver_soft_iic_h_ #define _zf_driver_soft_iic_h_ - #include "zf_driver_gpio.h" typedef struct { - gpio_pin_enum scl_pin; // ڼ¼Ӧű - gpio_pin_enum sda_pin; // ڼ¼Ӧű - uint8 addr; // ַ λַģʽ - uint32 delay; // ģ IIC ʱʱ -}soft_iic_info_struct; + gpio_pin_enum scl_pin; // ڼ¼Ӧű + gpio_pin_enum sda_pin; // ڼ¼Ӧű + uint8 addr; // ַ λַģʽ + uint32 delay; // ģ IIC ʱʱ +} soft_iic_info_struct; -void soft_iic_write_8bit (soft_iic_info_struct *soft_iic_obj, const uint8 data); -void soft_iic_write_8bit_array (soft_iic_info_struct *soft_iic_obj, const uint8 *data, uint32 len); +void soft_iic_write_8bit(soft_iic_info_struct *soft_iic_obj, const uint8 data); +void soft_iic_write_8bit_array(soft_iic_info_struct *soft_iic_obj, const uint8 *data, uint32 len); -void soft_iic_write_16bit (soft_iic_info_struct *soft_iic_obj, const uint16 data); -void soft_iic_write_16bit_array (soft_iic_info_struct *soft_iic_obj, const uint16 *data, uint32 len); +void soft_iic_write_16bit(soft_iic_info_struct *soft_iic_obj, const uint16 data); +void soft_iic_write_16bit_array(soft_iic_info_struct *soft_iic_obj, const uint16 *data, uint32 len); -void soft_iic_write_8bit_register (soft_iic_info_struct *soft_iic_obj, const uint8 register_name, const uint8 data); -void soft_iic_write_8bit_registers (soft_iic_info_struct *soft_iic_obj, const uint8 register_name, const uint8 *data, uint32 len); +void soft_iic_write_8bit_register(soft_iic_info_struct *soft_iic_obj, const uint8 register_name, const uint8 data); +void soft_iic_write_8bit_registers(soft_iic_info_struct *soft_iic_obj, const uint8 register_name, const uint8 *data, uint32 len); -void soft_iic_write_16bit_register (soft_iic_info_struct *soft_iic_obj, const uint16 register_name, const uint16 data); -void soft_iic_write_16bit_registers (soft_iic_info_struct *soft_iic_obj, const uint16 register_name, const uint16 *data, uint32 len); +void soft_iic_write_16bit_register(soft_iic_info_struct *soft_iic_obj, const uint16 register_name, const uint16 data); +void soft_iic_write_16bit_registers(soft_iic_info_struct *soft_iic_obj, const uint16 register_name, const uint16 *data, uint32 len); -uint8 soft_iic_read_8bit (soft_iic_info_struct *soft_iic_obj); -void soft_iic_read_8bit_array (soft_iic_info_struct *soft_iic_obj, uint8 *data, uint32 len); +uint8 soft_iic_read_8bit(soft_iic_info_struct *soft_iic_obj); +void soft_iic_read_8bit_array(soft_iic_info_struct *soft_iic_obj, uint8 *data, uint32 len); -uint16 soft_iic_read_16bit (soft_iic_info_struct *soft_iic_obj); -void soft_iic_read_16bit_array (soft_iic_info_struct *soft_iic_obj, uint16 *data, uint32 len); +uint16 soft_iic_read_16bit(soft_iic_info_struct *soft_iic_obj); +void soft_iic_read_16bit_array(soft_iic_info_struct *soft_iic_obj, uint16 *data, uint32 len); -uint8 soft_iic_read_8bit_register (soft_iic_info_struct *soft_iic_obj, const uint8 register_name); -void soft_iic_read_8bit_registers (soft_iic_info_struct *soft_iic_obj, const uint8 register_name, uint8 *data, uint32 len); +uint8 soft_iic_read_8bit_register(soft_iic_info_struct *soft_iic_obj, const uint8 register_name); +void soft_iic_read_8bit_registers(soft_iic_info_struct *soft_iic_obj, const uint8 register_name, uint8 *data, uint32 len); -uint16 soft_iic_read_16bit_register (soft_iic_info_struct *soft_iic_obj, const uint16 register_name); -void soft_iic_read_16bit_registers (soft_iic_info_struct *soft_iic_obj, const uint16 register_name, uint16 *data, uint32 len); +uint16 soft_iic_read_16bit_register(soft_iic_info_struct *soft_iic_obj, const uint16 register_name); +void soft_iic_read_16bit_registers(soft_iic_info_struct *soft_iic_obj, const uint16 register_name, uint16 *data, uint32 len); -void soft_iic_transfer_8bit_array (soft_iic_info_struct *soft_iic_obj, const uint8 *write_data, uint32 write_len, uint8 *read_data, uint32 read_len); -void soft_iic_transfer_16bit_array (soft_iic_info_struct *soft_iic_obj, const uint16 *write_data, uint32 write_len, uint16 *read_data, uint32 read_len); +void soft_iic_transfer_8bit_array(soft_iic_info_struct *soft_iic_obj, const uint8 *write_data, uint32 write_len, uint8 *read_data, uint32 read_len); +void soft_iic_transfer_16bit_array(soft_iic_info_struct *soft_iic_obj, const uint16 *write_data, uint32 write_len, uint16 *read_data, uint32 read_len); -void soft_iic_sccb_write_register (soft_iic_info_struct *soft_iic_obj, const uint8 register_name, uint8 data); -uint8 soft_iic_sccb_read_register (soft_iic_info_struct *soft_iic_obj, const uint8 register_name); +void soft_iic_sccb_write_register(soft_iic_info_struct *soft_iic_obj, const uint8 register_name, uint8 data); +uint8 soft_iic_sccb_read_register(soft_iic_info_struct *soft_iic_obj, const uint8 register_name); -void soft_iic_init (soft_iic_info_struct *soft_iic_obj, uint8 addr, uint32 delay, gpio_pin_enum scl_pin, gpio_pin_enum sda_pin); +void soft_iic_init(soft_iic_info_struct *soft_iic_obj, uint8 addr, uint32 delay, gpio_pin_enum scl_pin, gpio_pin_enum sda_pin); +void eep_soft_iic_write_8bit_registers(soft_iic_info_struct *soft_iic_obj, const uint8 register_name_h, const uint8 register_name_l, const uint8 *data, uint32 len); +void eep_soft_iic_read_8bit_registers(soft_iic_info_struct *soft_iic_obj, const uint8 register_name_h, const uint8 register_name_l, uint8 *data, uint32 len); #endif -