支持SPI=FLASH,DAP-LINK

This commit is contained in:
armfly 2020-11-29 21:36:51 +08:00
parent 3398d87db7
commit 0ab5e357af
72 changed files with 4661 additions and 1744 deletions

View File

@ -1,3 +1,21 @@
----------------------------------------------------------------------------
2020-11-29 V1.40 【重大更新】
新增功能:
1.增加SPI Flash脱机烧录功能需要升级PC软件更新EMMC磁盘文件
2.增加CMSIS-DAP仿真器功能。新增2个参数控制TVCC电压和蜂鸣器使能
3.增加DS18B20温度传感器驱动接口D0-D7可外接8个传感器.
- 新增lua接口函数 ok,temp = read("DS18B20", 2) --读D2口外接的传感器数据
- 数据监视器菜单下新增DS18B20温度表显示8路温度值
BUG:
1.解决串口监视器BUGASCII模式如果收到0x00, 则不显示后面的数据。需要将不可见字符转换空格
2.解决在非lua小程序界面执行luaPC机下载无法长按C退出的问题
其他优化:
1.按键驱动底层忽略从其他状态跳转过来时,第一个长按键和按键弹起事件
2.上电不显示logo界面以前有2秒延迟
3.lwip初始化代码拆分到 lwip_pro() 中执行,加快界面启动速度
---------------------------------------------------------------------------- ----------------------------------------------------------------------------
2020-10-19 V1.35 2020-10-19 V1.35
1.解决CX32芯片机台信号异常1拖2模式解除SWD保护时机台GPIO输出解锁脉冲 1.解决CX32芯片机台信号异常1拖2模式解除SWD保护时机台GPIO输出解锁脉冲

View File

@ -9,4 +9,24 @@
2020-09-16 V1.31固件 2020-09-16 V1.31固件
普通触发模式还有遗留问题拖动触发位置滚动条时超出波形范围后H7-TOOL程序假死频繁进入看门狗中断暂未解决。H7-TOOL界面翻到电压档界面可恢复。 普通触发模式还有遗留问题拖动触发位置滚动条时超出波形范围后H7-TOOL程序假死频繁进入看门狗中断暂未解决。H7-TOOL界面翻到电压档界面可恢复。
2020-10-26 SPI Flash烧录器接口方案
- 待定方案, 口线不够实现4路烧录
D0 PD14 PA15 PI0 - DIR PH8 CS2
D1 PD15 PA8 PH19 - DIR PG8 CS3
D2 PE6 PD0 PB7 - DIR PD9 MOSI (硬件SPI信号)
D3 PE5 PD1 PH11 - DIR PG10 MISO_1 (硬件SPI信号)
D4 PE4 PE7 PH12 - DIR PG12 CS1 (软件控制片选)
D5 PE2 PE8 PI5 - DIR PG7 SCK (硬件SPI信号)
D6 PE9 PD3 PA0 - DIR PD10 CS4
D7 PE10 PI6 - DIR PI1 MISO_2 (第2路MISO)
D8 PE11 PD4 PI3 - DIR PG9 MISO_3 (第3路MISO)
D9 PE12 PD5 - DIR PI12 MISO_4 (第4路MISO)
RS232_TX - RS232串口机台信号扩展 START BUSY OK NG
RS232_RX - RS232串口机台信号扩展

View File

@ -182,7 +182,9 @@ int32_t LAN8742_RegisterBusIO(lan8742_Object_t *pObj, lan8742_IOCtx_t *ioctx)
} }
} }
} }
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>2<EFBFBD><32> */
#if 0
if(status == LAN8742_STATUS_OK) if(status == LAN8742_STATUS_OK)
{ {
tickstart = pObj->IO.GetTick(); tickstart = pObj->IO.GetTick();
@ -193,6 +195,9 @@ int32_t LAN8742_RegisterBusIO(lan8742_Object_t *pObj, lan8742_IOCtx_t *ioctx)
} }
pObj->Is_Initialized = 1; pObj->Is_Initialized = 1;
} }
#else
pObj->Is_Initialized = 1;
#endif
return status; return status;
} }

View File

@ -1,5 +1,12 @@
copy Objects\output.hex ..\h7_tool_app.hex copy Objects\output.hex ..\app0.hex
hex2bin ..\app0.hex
LinkBin ..\h7_tool_app.bin =VAR @0x0 ..\app0.bin @0xE0000 ..\dap.bin
del ..\app0.bin
del ..\app0.hex
hex2bin ..\h7_tool_app.hex

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@ -384,9 +384,9 @@
<GroupName>App</GroupName> <GroupName>App</GroupName>
<Files> <Files>
<File> <File>
<FileName>main.h</FileName> <FileName>includes.h</FileName>
<FileType>5</FileType> <FileType>5</FileType>
<FilePath>..\..\User\app\inc\main.h</FilePath> <FilePath>..\..\User\app\inc\includes.h</FilePath>
</File> </File>
<File> <File>
<FileName>main.c</FileName> <FileName>main.c</FileName>
@ -493,6 +493,16 @@
<FileType>1</FileType> <FileType>1</FileType>
<FilePath>..\..\User\app\src\status_uart_monitor.c</FilePath> <FilePath>..\..\User\app\src\status_uart_monitor.c</FilePath>
</File> </File>
<File>
<FileName>status_ds18b20_meter.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\User\app\src\status_ds18b20_meter.c</FilePath>
</File>
<File>
<FileName>disp_lib.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\User\app\src\disp_lib.c</FilePath>
</File>
</Files> </Files>
</Group> </Group>
<Group> <Group>
@ -734,6 +744,11 @@
<FileType>1</FileType> <FileType>1</FileType>
<FilePath>..\..\User\bsp\src\bsp_i2c_gpio_ext.c</FilePath> <FilePath>..\..\User\bsp\src\bsp_i2c_gpio_ext.c</FilePath>
</File> </File>
<File>
<FileName>bsp_ds18b20.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\User\bsp\src\bsp_ds18b20.c</FilePath>
</File>
</Files> </Files>
</Group> </Group>
<Group> <Group>
@ -1574,21 +1589,26 @@
<FileType>1</FileType> <FileType>1</FileType>
<FilePath>..\..\User\programmer\stm8_prog_file.c</FilePath> <FilePath>..\..\User\programmer\stm8_prog_file.c</FilePath>
</File> </File>
<File>
<FileName>n76e_prog_file.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\User\programmer\n76e_prog_file.c</FilePath>
</File>
<File> <File>
<FileName>n76e003_flash.c</FileName> <FileName>n76e003_flash.c</FileName>
<FileType>1</FileType> <FileType>1</FileType>
<FilePath>..\..\User\programmer\n76e003_flash.c</FilePath> <FilePath>..\..\User\programmer\n76e003_flash.c</FilePath>
</File> </File>
<File>
<FileName>w25q_flash.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\User\programmer\w25q_flash.c</FilePath>
</File>
<File> <File>
<FileName>cx32_isp.c</FileName> <FileName>cx32_isp.c</FileName>
<FileType>1</FileType> <FileType>1</FileType>
<FilePath>..\..\User\programmer\cx32_isp.c</FilePath> <FilePath>..\..\User\programmer\cx32_isp.c</FilePath>
</File> </File>
<File>
<FileName>pg_prog_file.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\User\programmer\pg_prog_file.c</FilePath>
</File>
</Files> </Files>
</Group> </Group>
<Group> <Group>

Binary file not shown.

View File

@ -68,7 +68,7 @@ __Vectors DCD __initial_sp ; Top of Stack
DCD MemManage_Handler ; MPU Fault Handler DCD MemManage_Handler ; MPU Fault Handler
DCD BusFault_Handler ; Bus Fault Handler DCD BusFault_Handler ; Bus Fault Handler
DCD UsageFault_Handler ; Usage Fault Handler DCD UsageFault_Handler ; Usage Fault Handler
DCD 0x00000135 ; Reserved H7-TOOL APP 固件版本 DCD 0x00000140 ; Reserved H7-TOOL APP 固件版本
DCD 0 ; Reserved 固件小版本 DCD 0 ; Reserved 固件小版本
DCD 0 ; Reserved DCD 0 ; Reserved
DCD 0 ; Reserved DCD 0 ; Reserved

BIN
Project/dap.bin Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -28,10 +28,10 @@
4. USB-RS232 转换器 4. USB-RS232 转换器
5. USB-TTL 串口转换器 5. USB-TTL 串口转换器
6. USB-CAN 转换器 (未完成) 6. USB-CAN 转换器 (未完成)
7. DAP-Link 仿真器 / 下载器 (未完成) 7. DAP-Link 仿真器 / 下载器
8. 脱机烧录器 (已完成STM32、MM32、GD32、新唐ARM、新唐8051、AT32、APM32、RT1052) 8. 脱机烧录器 (已完成STM32、MM32、GD32、新唐ARM、新唐8051、AT32、APM32、RT1052; SPI Flash)
9. I2C 控制器 (未完成) 9. I2C 控制器
10. SPI 控制器 (未完成) 10. SPI 控制器
11. GPIO 输入输出控制器 11. GPIO 输入输出控制器
12. 模拟信号发生器 12. 模拟信号发生器
13. PWM 发生器 (未完成) 13. PWM 发生器 (未完成)
@ -41,32 +41,28 @@
17. 高侧电流表 & 电池放电容量测量 17. 高侧电流表 & 电池放电容量测量
18. 双通道电压表 18. 双通道电压表
18. 电阻测量 通断蜂鸣 18. 电阻测量 通断蜂鸣
19. 温度测量 19. NTC温度测量
20. 二极管测量 20. 二极管测量
21. 微型数控电源 21. 微型数控电源
22. 串口数据监视器 22. 串口数据监视器
23. lua小程序 23. lua小程序
24. 8通道DS18B20温度表
### :construction: 任务列表 / TODO ### :construction: 任务列表 / TODO
<!-- 以下为示例 --> <!-- 以下为示例 -->
- [ ] DAP-Link - [ ] DAP-Link
- [x] DAP-Link 移植 - [x] DAP-Link 实现RTT打印功能
- [ ] DAP-Link 测试 - [ ] 联机下载
- [ ] `Wi-Fi` 无线调试
- [ ] 逻辑分析仪 - [ ] 逻辑分析仪
- [ ] 底层驱动编码 (FMC、DMA、TIM) - [ ] 底层驱动编码 (FMC、DMA、TIM)
- [ ] 兼容第三方上位机 - [ ] 兼容第三方上位机
- [ ] 脱机烧录器 - [ ] 脱机烧录器
- [x] 界面操作方式规划 - [x] 根据客户需求补充其他厂家ARM芯片
- [x] 实现STM32系列 - [ ] 实现STM32系列
- [ ] 实现STM8系列
- [ ] CAN功能 - [ ] CAN功能
- [ ] 底层驱动验证 - [ ] 底层驱动验证
- [ ] 功能规划
- [ ] TIM 定时器相关 - [ ] TIM 定时器相关
- [ ] 脉冲计数器 (脱机)
- [ ] 频率计 (脱机)
- [ ] PWM 发生器 (联机) - [ ] PWM 发生器 (联机)
### :warning: 注意事项 / Attention ### :warning: 注意事项 / Attention

35
User/app/inc/disp_lib.h Normal file
View File

@ -0,0 +1,35 @@
/*
*********************************************************************************************************
*
* :
* : disp_lib.h
*
*********************************************************************************************************
*/
#ifndef _DISP_LIB_H_
#define _DISP_LIB_H_
void DispHeader(char *_str);
void DispHeaderSn(uint8_t _idx);
void DispMeasBar(uint8_t _ucLine, char *_pName, char *_pValue, char *_pUnit);
void DispMeasBarEx(uint8_t _ucLine, char *_pName, char *_pValue, char *_pUnit, uint16_t _usFillColor);
void DispParamBar(uint8_t _ucLine, char *_pName, char *_pValue, uint8_t _ucActive);
void DispHelpBar(char *_str1, char *_str2);
void DispHeader2(uint8_t _idx, char *_str);
void DispHeaderStr(char *_str);
void DispInfoBar16(uint8_t _ucLine, char *_pName, char *_pValue);
void DispInfoBar16Ex(uint8_t _ucLine, char *_pName, char *_pValue, uint16_t _ucColor);
void DispBox(uint16_t _usX, uint16_t _usY, uint16_t _usHeight, uint16_t _usWidth, uint16_t _usColor);
void DispLabel(uint16_t _usX, uint16_t _usY, uint16_t _usHeight, uint16_t _usWidth,
uint16_t _usColor, char *_pStr, FONT_T *_tFont);
void DispLabelRound(uint16_t _usX, uint16_t _usY, uint16_t _usHeight, uint16_t _usWidth,
uint16_t _usColor, char *_pStr, FONT_T *_tFont);
void DispProgressBar(uint16_t _usX, uint16_t _usY, uint16_t _usHeight, uint16_t _usWidth,
char *_str1, float _Percent, char *_str2, FONT_T *_tFont);
void ProgressBarSetColor(uint16_t _Color);
void DispMsgBox(uint16_t _usX, uint16_t _usY, uint16_t _usHeight, uint16_t _usWidth, char *_str);
#endif
/***************************** 安富莱电子 www.armfly.com (END OF FILE) *********************************/

188
User/app/inc/main.h → User/app/inc/includes.h Executable file → Normal file
View File

@ -1,86 +1,102 @@
/* /*
********************************************************************************************************* *********************************************************************************************************
* *
* : main模块 * :
* : main.h * : includes.h
* * : V1.0
********************************************************************************************************* * : 使
*/ *
* :
#ifndef _MAIN_H_ *
#define _MAIN_H_ * V1.0 2020-06-12 Eric2013
*
#include "ui_def.h" * Copyright (C), 2020-2030, www.armfly.com
#include "param.h" *
#include "modbus_register.h" *********************************************************************************************************
*/
/* 主程序状态字定义, MS = Main Status */
enum #ifndef _INCLUDES_H_
{ #define _INCLUDES_H_
MS_LINK_MODE = 0, /* 联机状态 */
/*
MS_SYSTEM_SET, /* 系统设置 */ *********************************************************************************************************
MS_HARD_INFO, /* 关于-硬件信息 */ * APP / BSP
MS_ESP32_TEST, /* ESP32模块升级状态 */ *********************************************************************************************************
MS_USB_EMMC, /* 虚拟串口状态。RS232 RS485 TTL-UART */ */
MS_MODIFY_PARAM, /* 参数设置 */ #include "bsp.h"
MS_FILE_MANAGE, /* 文件管理 */
/*
MS_PROG_SELECT_FILE, /* 脱机下载器浏览文件 */ *********************************************************************************************************
MS_PROG_WORK, /* 脱机下载器工作界面 */ *
MS_PROG_SETTING, /* 脱机下载器参数设置 */ *********************************************************************************************************
MS_PROG_MODIFY_PARAM, /* 修改参数比如复位类型 */ */
#include "ui_def.h"
MS_VOLTAGE_METER, /* 电压表 */ #include "param.h"
MS_CURRENT_METER, /* 高侧电流表 */ #include "modbus_register.h"
MS_TEMP_METER, /* 温度表 */ #include "disp_lib.h"
MS_RESISTOR_METER, /* 电阻表 */ #include "lcd_menu.h"
MS_TVCC_POWER, /* 微型数控电源 */ #include "file_lib.h"
MS_PULSE_METER, /* 脉冲计 */ #include "lua_if.h"
#include "prog_if.h"
MS_MINI_DSO, /* 迷你示波器 */ #include "modify_param.h"
#include "wifi_if.h"
MS_EXTEND_MENU1, /* 第1级菜单 */ #include "usb_if.h"
MS_EXTEND_MENU_LUA, /* 第2级菜单-LUA程序 */
MS_EXTEND_MENU_REC, /* 第2级菜单-数据记录仪 */ /* 主程序状态字定义, MS = Main Status */
enum
MS_LUA_SELECT_FILE, /* 浏览lua文件 */ {
MS_LUA_EXEC_FILE, /* 执行lua文件 */ MS_LINK_MODE = 0, /* 联机状态 */
MS_MONITOR_UART, /* 串口监视器 */ MS_SYSTEM_SET, /* 系统设置 */
MS_MONITOR_CAN, /* CAN监视器 */ MS_HARD_INFO, /* 关于-硬件信息 */
MS_MONITOR_GPIO, /* IO监视器 */ MS_ESP32_TEST, /* ESP32模块升级状态 */
MS_MONITOR_ANALOG, /* 模拟量监视器 */ MS_USB_EMMC, /* 虚拟串口状态。RS232 RS485 TTL-UART */
}; MS_MODIFY_PARAM, /* 参数设置 */
MS_FILE_MANAGE, /* 文件管理 */
void DispHeader(char *_str);
void DispHeaderSn(uint8_t _idx); MS_PROG_SELECT_FILE, /* 脱机下载器浏览文件 */
void DispMeasBar(uint8_t _ucLine, char *_pName, char *_pValue, char *_pUnit); MS_PROG_WORK, /* 脱机下载器工作界面 */
void DispMeasBarEx(uint8_t _ucLine, char *_pName, char *_pValue, char *_pUnit, uint16_t _usFillColor); MS_PROG_SETTING, /* 脱机下载器参数设置 */
void DispParamBar(uint8_t _ucLine, char *_pName, char *_pValue, uint8_t _ucActive); MS_PROG_MODIFY_PARAM, /* 修改参数比如复位类型 */
void DispHelpBar(char *_str1, char *_str2);
void DispHeader2(uint8_t _idx, char *_str); MS_VOLTAGE_METER, /* 电压表 */
void DispHeaderStr(char *_str); MS_CURRENT_METER, /* 高侧电流表 */
void DispInfoBar16(uint8_t _ucLine, char *_pName, char *_pValue); MS_TEMP_METER, /* 温度表 */
void DispInfoBar16Ex(uint8_t _ucLine, char *_pName, char *_pValue, uint16_t _ucColor); MS_RESISTOR_METER, /* 电阻表 */
void DispBox(uint16_t _usX, uint16_t _usY, uint16_t _usHeight, uint16_t _usWidth, uint16_t _usColor); MS_TVCC_POWER, /* 微型数控电源 */
void DispLabel(uint16_t _usX, uint16_t _usY, uint16_t _usHeight, uint16_t _usWidth, MS_PULSE_METER, /* 脉冲计 */
uint16_t _usColor, char *_pStr, FONT_T *_tFont);
void DispProgressBar(uint16_t _usX, uint16_t _usY, uint16_t _usHeight, uint16_t _usWidth, MS_MINI_DSO, /* 迷你示波器 */
char *_str1, float _Percent, char *_str2, FONT_T *_tFont);
void ProgressBarSetColor(uint16_t _Color); MS_EXTEND_MENU1, /* 第1级菜单 */
uint16_t NextStatus(uint16_t _NowStatus); MS_EXTEND_MENU_LUA, /* 第2级菜单-LUA程序 */
uint16_t LastStatus(uint16_t _NowStatus); MS_EXTEND_MENU_REC, /* 第2级菜单-数据记录仪 */
void DSO_StartMode2(void);
void PlayKeyTone(void); MS_LUA_SELECT_FILE, /* 浏览lua文件 */
void DispMsgBox(uint16_t _usX, uint16_t _usY, uint16_t _usHeight, uint16_t _usWidth, char *_str); MS_LUA_EXEC_FILE, /* 执行lua文件 */
extern uint16_t g_MainStatus; MS_MONITOR_UART, /* 串口监视器 */
MS_MONITOR_CAN, /* CAN监视器 */
extern uint8_t qspi_file_buf[1024]; MS_MONITOR_GPIO, /* IO监视器 */
extern uint8_t qspi_read_buf[1024]; MS_MONITOR_ANALOG, /* 模拟量监视器 */
MS_DAPLINK, /* 仿真器状态 */
#endif MS_JUMP_APP, /* 跳到APP状态 */
/***************************** 安富莱电子 www.armfly.com (END OF FILE) *********************************/ MS_DS18B20_METER, /* DS18B20温度表 */
};
uint16_t NextStatus(uint16_t _NowStatus);
uint16_t LastStatus(uint16_t _NowStatus);
void DSO_StartMode2(void);
void PlayKeyTone(void);
extern uint16_t g_MainStatus;
extern uint8_t qspi_file_buf[1024];
extern uint8_t qspi_read_buf[1024];
#endif
/***************************** 安富莱电子 www.armfly.com (END OF FILE) *********************************/

View File

@ -14,6 +14,15 @@
#ifndef _MODIFY_PARAM_H #ifndef _MODIFY_PARAM_H
#define _MODIFY_PARAM_H #define _MODIFY_PARAM_H
/* 修改参数的界面ID */
enum
{
MODIFY_PARAM_UART_MON = 0, /* 串口监视 */
MODIFY_PARAM_SYSTEM, /* 系统参数 */
MODIFY_PARAM_NET, /* 网络参数 */
MODIFY_PARAM_PROG, /* 脱机烧录器参数 */
};
/* 参数列表结构 */ /* 参数列表结构 */
typedef struct typedef struct
{ {

View File

@ -25,7 +25,7 @@
#define CALIB_VER 0x00000201 /* 校准参数版本 200 */ #define CALIB_VER 0x00000201 /* 校准参数版本 200 */
/* 暂未启用 程序缓存 */ /* 暂未启用 程序缓存 */
#define APP_BUF_ADDR 0x08000000 + 1 * 1024 * 1024 #define APP_BUF_ADDR 0x08000000 + 1 * 1024 * 1024
/* 校准参数结构,两点校准, 通用校准参数ADC */ /* 校准参数结构,两点校准, 通用校准参数ADC */
typedef struct typedef struct
@ -118,6 +118,11 @@ typedef struct
uint8_t UartMonTimeStamp; /* 串口监视,加上时间戳 */ uint8_t UartMonTimeStamp; /* 串口监视,加上时间戳 */
uint8_t UartMonProxy; /* 串口监视,协议 */ uint8_t UartMonProxy; /* 串口监视,协议 */
/* DAP-Link相关参数 */
uint8_t DAP_TVCCVolt; /* DAP=Link TVCC设置 0-关闭 0-50 表示 0-5.0V */
uint8_t DAP_BeepEn; /* DAP=Link 提示音使能 0:关闭 1:烧录完毕鸣叫 */
uint8_t DAP_Sn; /* DAP-Link 序号,用于驱动识别: */
} PARAM_T; } PARAM_T;
/* 模拟量校准参数 */ /* 模拟量校准参数 */

500
User/app/src/disp_lib.c Normal file
View File

@ -0,0 +1,500 @@
/*
*********************************************************************************************************
*
* :
* : disp_lib.c
* : V1.0
* : H7-TOOL APP
*
* :
*
* V1.0 2020-1106-20 armfly 1.APP部分整合而来
*
* Copyright (C), 2020-2030, www.armfly.com
*
*********************************************************************************************************
*/
#include "includes.h"
extern uint16_t g_MainStatus; /* 主状态字 */
/*
*********************************************************************************************************
* : DispHeader
* : 1
* : _str :
* :
*********************************************************************************************************
*/
extern uint16_t GetStatusIndex(uint16_t _NowStatus);
void DispHeader(char *_str)
{
uint8_t idx;
idx = GetStatusIndex(g_MainStatus);
DispHeader2(idx, _str);
}
/* 带序号参数 */
void DispHeader2(uint8_t _idx, char *_str)
{
FONT_T tFont;
char buf[48];
/* 设置字体参数 */
{
tFont.FontCode = FC_ST_24; /* 字体代码 16点阵 */
tFont.FrontColor = HEAD_TEXT_COLOR; /* 字体颜色 */
tFont.BackColor = HEAD_BACK_COLOR; /* 文字背景颜色 */
tFont.Space = 0; /* 文字间距,单位 = 像素 */
}
LCD_Fill_Rect(0, 0, HEAD_HEIGHT, HEAD_HEIGHT, HEAD_SN_COLOR); /* 清屏标题序号区 */
LCD_Fill_Rect(HEAD_HEIGHT, 0, HEAD_HEIGHT, 240 - HEAD_HEIGHT, HEAD_BACK_COLOR); /* 清屏标题栏文本区 */
sprintf(buf, "%02d", _idx);
tFont.BackColor = HEAD_SN_COLOR; /* 文字背景颜色 */
LCD_DispStr(4, 4, buf, &tFont);
/* 显示标题文字 */
tFont.BackColor = HEAD_BACK_COLOR; /* 文字背景颜色 */
LCD_DispStrEx(HEAD_HEIGHT, 4, _str, &tFont, 240 - HEAD_HEIGHT, ALIGN_CENTER);
LCD_DrawLine(0, HEAD_HEIGHT, 239, HEAD_HEIGHT, HEAD_BODER_COLOR);
/* 清屏正文区 00联机界面背景颜色不同于其他界面便于识别 */
LCD_Fill_Rect(0, HEAD_HEIGHT + 1, 240 - HEAD_HEIGHT - 1, 240, FORM_BACK_COLOR);
}
/* 只刷新标题文字部分,不清屏 */
void DispHeaderStr(char *_str)
{
FONT_T tFont;
/* 设置字体参数 */
{
tFont.FontCode = FC_ST_24; /* 字体代码 16点阵 */
tFont.FrontColor = HEAD_TEXT_COLOR; /* 字体颜色 */
tFont.BackColor = HEAD_BACK_COLOR; /* 文字背景颜色 */
tFont.Space = 0; /* 文字间距,单位 = 像素 */
}
LCD_Fill_Rect(HEAD_HEIGHT, 0, HEAD_HEIGHT, 240 - HEAD_HEIGHT, HEAD_BACK_COLOR); /* 清屏标题栏文本区 */
/* 显示标题文字 */
tFont.BackColor = HEAD_BACK_COLOR; /* 文字背景颜色 */
LCD_DispStrEx(HEAD_HEIGHT, 4, _str, &tFont, 240 - HEAD_HEIGHT, ALIGN_CENTER);
}
/* 显示序号 */
void DispHeaderSn(uint8_t _idx)
{
FONT_T tFont;
char buf[48];
/* 设置字体参数 */
{
tFont.FontCode = FC_ST_24; /* 字体代码 16点阵 */
tFont.FrontColor = HEAD_TEXT_COLOR; /* 字体颜色 */
tFont.BackColor = HEAD_BACK_COLOR; /* 文字背景颜色 */
tFont.Space = 0; /* 文字间距,单位 = 像素 */
}
LCD_Fill_Rect(0, 0, HEAD_HEIGHT, HEAD_HEIGHT, HEAD_SN_COLOR); /* 清屏标题序号区 */
sprintf(buf, "%02d", _idx);
tFont.BackColor = HEAD_SN_COLOR; /* 文字背景颜色 */
LCD_DispStr(4, 4, buf, &tFont);
}
/*
*********************************************************************************************************
* : DispBox
* :
* : _usX : X
* _usY : Y
* _usHeight :
* _usWidth :
* _usColor :
* :
*********************************************************************************************************
*/
void DispBox(uint16_t _usX, uint16_t _usY, uint16_t _usHeight, uint16_t _usWidth, uint16_t _usColor)
{
/* 绘制边框 */
LCD_DrawRoundRect(_usX, _usY, _usHeight, _usWidth, B0X_ARC, MEAS_BODER_COLOR);
/* 填充矩形 */
LCD_FillRoundRect(_usX + 1, _usY + 1, _usHeight - 2, _usWidth - 2, B0X_ARC, _usColor);
}
/*
*********************************************************************************************************
* : DispLabel
* :
* : _usX : X
* _usY : Y
* _usHeight :
* _usWidth :
* _usColor :
* _pStr :
* _pFont :
* :
*********************************************************************************************************
*/
void DispLabel(uint16_t _usX, uint16_t _usY, uint16_t _usHeight, uint16_t _usWidth,
uint16_t _usColor, char *_pStr, FONT_T *_tFont)
{
/* 填充矩形 */
LCD_Fill_Rect(_usX, _usY, _usHeight, _usWidth, _usColor);
LCD_DispStr(_usX, _usY, _pStr, _tFont);
}
/*
*********************************************************************************************************
* : DispLabelRound
* : DAP-LINK
* : _usX : X
* _usY : Y
* _usHeight :
* _usWidth :
* _usColor :
* _pStr :
* _pFont :
* :
*********************************************************************************************************
*/
void DispLabelRound(uint16_t _usX, uint16_t _usY, uint16_t _usHeight, uint16_t _usWidth,
uint16_t _usColor, char *_pStr, FONT_T *_tFont)
{
uint16_t fh;
uint16_t offset;
/* 绘制圆角矩形 */
DispBox(_usX, _usY, _usHeight, _usWidth, _usColor);
fh = LCD_GetFontHeight(_tFont);
if (_usHeight > fh)
{
offset = (_usHeight - fh) / 2;
}
else
{
offset = 0;
}
LCD_DispStrEx(_usX, _usY + offset, _pStr, _tFont, _usWidth, ALIGN_CENTER);
}
/*
*********************************************************************************************************
* : DispMeasBar
* :
* : _ucLine : 0 - 3 (4)
* _pName :
* _pValue :
* _pUnit :
* :
*********************************************************************************************************
*/
void DispMeasBar(uint8_t _ucLine, char *_pName, char *_pValue, char *_pUnit)
{
DispMeasBarEx(_ucLine, _pName, _pValue, _pUnit, MEAS_BACK_COLOR);
}
/*
*********************************************************************************************************
* : DispMeasBarEx
* :
* : _ucLine : 0 - 3 (4)
* _pName :
* _pValue :
* _pUnit :
* :
*********************************************************************************************************
*/
void DispMeasBarEx(uint8_t _ucLine, char *_pName, char *_pValue, char *_pUnit, uint16_t _usFillColor)
{
FONT_T tFont;
uint16_t x;
uint16_t y;
/* 设置字体参数 */
{
tFont.FontCode = FC_ST_24; /* 字体代码 16点阵 */
tFont.FrontColor = MEAS_NAME_COLOR; /* 字体颜色 */
tFont.BackColor = CL_MASK; /* 文字背景颜色 */
tFont.Space = 0; /* 文字间距,单位 = 像素 */
}
x = MEAS_WIN_LEFT;
y = HEAD_HEIGHT + 9 + _ucLine * (MEAS_WIN_HEIGHT + 9);
DispBox(x, y, MEAS_WIN_HEIGHT, MEAS_WIN_WIDTH, _usFillColor);
/* 参数名字 */
tFont.FrontColor = MEAS_NAME_COLOR;
LCD_DispStr(MEAS_WIN_LEFT + 5, y + 4, _pName, &tFont);
/* 测量值 */
tFont.FrontColor = MEAS_VALUE_COLOR;
LCD_DispStr(MEAS_WIN_LEFT + 80, y + 4, _pValue, &tFont);
/* 单位 */
tFont.FrontColor = MEAS_UNIT_COLOR;
LCD_DispStr(MEAS_WIN_LEFT + 188, y + 4, _pUnit, &tFont);
}
/*
*********************************************************************************************************
* : DispParamBar
* : - 使
* : _ucLine : 0 - 3 (4)
* _pName :
* _pValue :
* _ucActive :
* :
*********************************************************************************************************
*/
void DispParamBar(uint8_t _ucLine, char *_pName, char *_pValue, uint8_t _ucActive)
{
FONT_T tFont;
uint16_t x;
uint16_t y;
uint16_t NameWidth;
/* 设置字体参数 */
{
tFont.FontCode = FC_ST_24; /* 字体代码 16点阵 */
tFont.FrontColor = MEAS_NAME_COLOR; /* 字体颜色 */
tFont.BackColor = CL_MASK; /* 文字背景颜色 */
tFont.Space = 0; /* 文字间距,单位 = 像素 */
}
x = MEAS_WIN_LEFT;
y = HEAD_HEIGHT + 9 + _ucLine * (MEAS_WIN_HEIGHT + 3);
/* 绘制圆角矩形 */
if (_ucActive == 1) /* 选中是用黄色底 */
{
DispBox(x, y, MEAS_WIN_HEIGHT, MEAS_WIN_WIDTH, CL_YELLOW);
}
else
{
DispBox(x, y, MEAS_WIN_HEIGHT, MEAS_WIN_WIDTH, MEAS_BACK_COLOR);
}
/* 参数名字 */
tFont.FrontColor = MEAS_NAME_COLOR;
LCD_DispStr(MEAS_WIN_LEFT + 5, y + 4, _pName, &tFont);
NameWidth = LCD_GetStrWidth(_pName, &tFont);
/* 测量值 */
tFont.FrontColor = MEAS_VALUE_COLOR;
LCD_DispStr(MEAS_WIN_LEFT + 5 + NameWidth + 5, y + 4, _pValue, &tFont);
}
/*
*********************************************************************************************************
* : DispProgressBar
* :
* : _usX :
* _usX :
* _usHeight :
* _usWidth :
* _str :
* _Percent : ,
* tFont :
* :
*********************************************************************************************************
*/
extern uint8_t s_DispRefresh;
static uint16_t s_ProgressBarColor1 = PROGRESS_BACK_COLOR1;
void ProgressBarSetColor(uint16_t _Color)
{
s_ProgressBarColor1 = _Color;
}
void DispProgressBar(uint16_t _usX, uint16_t _usY, uint16_t _usHeight, uint16_t _usWidth,
char *_str1, float _Percent, char *_str2, FONT_T *_tFont)
{
uint16_t width;
char buf[16];
uint16_t StrWidth;
uint16_t StrHeight;
uint16_t x, y;
if (_Percent > 100)
{
_Percent = 100;
}
width = ((_usWidth - 4) * _Percent) / 100;
/* 填充矩形 */
LCD_DrawRect(_usX, _usY, _usHeight, _usWidth, PROGRESS_BODER_COLOR);
LCD_Fill_Rect(_usX + 2, _usY + 2, _usHeight - 4, width, s_ProgressBarColor1);
if (_Percent < 100)
{
LCD_Fill_Rect(_usX + width + 2, _usY + 2, _usHeight - 4, _usWidth - width - 4, PROGRESS_BACK_COLOR2);
}
StrHeight = LCD_GetFontHeight(_tFont);
y = _usY + (_usHeight - StrHeight) / 2;
if (_str1[0] == 0) /* 只显示显示百分比文字 */
{
sprintf(buf, "%0.0f%%", _Percent);
StrWidth = LCD_GetStrWidth(buf, _tFont);
x = _usX + (_usWidth - StrWidth) / 2;
LCD_DispStr(x, y, buf, _tFont);
}
else
{
/* 显示左侧文本 */
x = _usX + 4;
LCD_DispStr(x, y, _str1, _tFont);
/* 显示百分比 */
sprintf(buf, "%0.0f%%", _Percent);
StrWidth = LCD_GetStrWidth(buf, _tFont);
x = _usX + (_usWidth - StrWidth) / 2;
LCD_DispStr(x, y, buf, _tFont);
/* 显示右侧文本 */
x = x + 36;
LCD_DispStr(x, y, _str2, _tFont);
}
}
/*
*********************************************************************************************************
* : DispHelpBar
* :
* :
* :
*********************************************************************************************************
*/
const unsigned char g_ImageHelp[512] = { /* 0X10,0X10,0X00,0X10,0X00,0X10,0X01,0X1B, */
0XF7,0X9E,0XF7,0X9E,0XF7,0X9E,0XFF,0XBE,0XFF,0XBE,0XEF,0X9E,0XD7,0X5E,0XCF,0X3F,
0XCF,0X1F,0XD7,0X5F,0XE7,0X9F,0XFF,0XDF,0XFF,0XDE,0XF7,0X9E,0XF7,0X9E,0XF7,0X9E,
0XF7,0X9E,0XF7,0X9E,0XF7,0XBE,0XEF,0X7E,0XC6,0XFE,0XAE,0XBE,0XA6,0X7E,0X9E,0X7E,
0X9E,0X7E,0X9E,0X7E,0XA6,0X7E,0XBE,0XDE,0XE7,0X7E,0XFF,0XBE,0XF7,0X9E,0XF7,0X9E,
0XF7,0X9E,0XF7,0XBE,0XE7,0X5E,0XB6,0XBE,0XA6,0X7E,0X9E,0X5E,0X96,0X5E,0X8E,0X1E,
0X8E,0X1E,0X96,0X3E,0X96,0X5E,0X9E,0X5E,0XAE,0X9E,0XDF,0X5E,0XFF,0XBE,0XF7,0X9E,
0XF7,0XBE,0XEF,0X7E,0XB6,0XBD,0X9E,0X7E,0X96,0X3E,0X96,0X3E,0X8E,0X1E,0XA6,0X7E,
0XA6,0X7E,0X8E,0X1D,0X8E,0X1E,0X8E,0X3D,0X96,0X3D,0XA6,0X7D,0XE7,0X7E,0XFF,0XDE,
0XFF,0XBE,0XBE,0XDD,0X9E,0X5D,0X96,0X3D,0X8E,0X1D,0X8E,0X1D,0X85,0XFD,0XDF,0X7E,
0XE7,0X9F,0X85,0XFD,0X86,0X1D,0X86,0X1D,0X8E,0X1D,0X8E,0X1D,0XB6,0XBD,0XFF,0XDF,
0XE7,0X7E,0X96,0X3D,0X8E,0X1D,0X86,0X1D,0X85,0XFD,0X86,0X1D,0X7D,0XFD,0X96,0X3D,
0X96,0X3D,0X85,0XFD,0X85,0XFD,0X85,0XFD,0X85,0XFD,0X85,0XFD,0X8E,0X1C,0XE7,0X7E,
0XCF,0X1E,0X7D,0XFC,0X85,0XFD,0X85,0XFD,0X7D,0XFD,0X7D,0XFD,0X8E,0X3D,0X96,0X3D,
0X8E,0X1D,0X7D,0XFD,0X7D,0XFD,0X7D,0XFD,0X7D,0XDC,0X7D,0XFC,0X75,0XDC,0XC6,0XFE,
0XB6,0XBD,0X75,0XBC,0X7D,0XDC,0X7D,0XDC,0X7D,0XFD,0X7D,0XDD,0X8E,0X3D,0XE7,0X7F,
0XD7,0X5E,0X75,0XDC,0X7D,0XDC,0X7D,0XDC,0X7D,0XDC,0X7D,0XDC,0X75,0X9C,0XAE,0X9D,
0XAE,0X9D,0X75,0X9C,0X7D,0XDC,0X7D,0XDC,0X7D,0XDC,0X7D,0XDC,0X6D,0X9C,0XBE,0XDE,
0XDF,0X5E,0X75,0XBC,0X7D,0XDC,0X7D,0XDC,0X75,0XBC,0X75,0XBC,0X6D,0X7B,0XA6,0X7D,
0XC6,0XFD,0X75,0X9C,0X7D,0XBC,0X75,0XBC,0X75,0XBC,0X75,0XBC,0X6D,0X9C,0XBE,0XDD,
0XD7,0X5E,0X6D,0X9C,0X75,0XBC,0X75,0XBC,0X75,0X9C,0X75,0X9C,0X65,0X7B,0XBE,0XDD,
0XE7,0X7E,0X85,0XDC,0X7D,0XBC,0X75,0X9C,0X75,0X9B,0X75,0X9C,0X65,0X7B,0XB6,0XBD,
0XD7,0X3E,0X65,0X7B,0X6D,0X9C,0X6D,0X7B,0X6D,0X7B,0X75,0X9B,0X75,0X9B,0XDF,0X5E,
0XFF,0XDE,0XAE,0X7C,0X85,0XDB,0X75,0X9B,0X6D,0X7B,0X6D,0X7B,0X5D,0X3B,0XB6,0XBD,
0XD7,0X5E,0X5D,0X3B,0X6D,0X7B,0X6D,0X7B,0X6D,0X7B,0X75,0X7B,0X9E,0X3C,0XFF,0XDF,
0XFF,0XBE,0XE7,0X5E,0X96,0X1C,0X7D,0XBB,0X75,0X7B,0X65,0X5B,0X75,0X9B,0XCF,0X1D,
0XDF,0X7E,0X85,0XDB,0X5D,0X3A,0X6D,0X5B,0X75,0X7B,0X85,0XDB,0XDF,0X5D,0XFF,0XDE,
0XF7,0X9E,0XFF,0XBE,0XD7,0X3D,0X95,0XFB,0X75,0X9B,0X6D,0X7B,0X6D,0X5B,0X6D,0X5A,
0X65,0X5A,0X6D,0X5A,0X65,0X5A,0X6D,0X5A,0X7D,0XBB,0XCE,0XFD,0XFF,0XDE,0XF7,0X9E,
0XF7,0X9E,0XF7,0X9E,0XFF,0XBE,0XDF,0X3D,0X9E,0X1B,0X6D,0X7A,0X5D,0X1A,0X4C,0XFA,
0X4C,0XDA,0X4C,0XFA,0X5D,0X3A,0X8D,0XFB,0XDF,0X3D,0XFF,0XBE,0XF7,0X9E,0XF7,0X9E,
0XF7,0X9E,0XF7,0X9E,0XF7,0X9E,0XF7,0X9E,0XEF,0X5D,0XCE,0XBB,0XA6,0X1A,0X85,0XBA,
0X85,0XBA,0X9E,0X1A,0XC6,0XBC,0XEF,0X7D,0XF7,0XBE,0XF7,0X9E,0XF7,0X9E,0XF7,0X9E,
};
void DispHelpBar(char *_str1, char *_str2)
{
FONT_T tFont; /* 定义字体结构体变量 */
tFont.FontCode = FC_ST_16; /* 字体代码 16点阵 */
tFont.FrontColor = HELP_TEXT_COLOR; /* 字体颜色 */
tFont.BackColor = HELP_BACK_COLOR; /* 文字背景颜色 */
tFont.Space = 0; /* 文字间距,单位 = 像素 */
ST7789_DrawBMP8(1, 240 - 36, 16, 16, (uint8_t *)g_ImageHelp);
LCD_DispStr(20, 240 - 36, _str1, &tFont);
LCD_DispStr(20, 240 - 18, _str2, &tFont);
}
/*
*********************************************************************************************************
* : DispInfoBar16
* : 16.
* : _line :
* _str1 :
* _str2 :
* :
*********************************************************************************************************
*/
void DispInfoBar16(uint8_t _ucLine, char *_pName, char *_pValue)
{
DispInfoBar16Ex(_ucLine, _pName, _pValue, INFO_VALUE_COLOR);
}
/* 带颜色参数 - 用于显示红色超标参数 */
void DispInfoBar16Ex(uint8_t _ucLine, char *_pName, char *_pValue, uint16_t _ucColor)
{
FONT_T tFont;
uint16_t x;
uint16_t y;
/* 设置字体参数 */
{
tFont.FontCode = FC_ST_16; /* 字体代码 16点阵 */
tFont.FrontColor = INFO_NAME_COLOR; /* 字体颜色 */
tFont.BackColor = INFO_BACK_COLOR; /* 文字背景颜色 */
tFont.Space = 0; /* 文字间距,单位 = 像素 */
}
x = 5;
y = HEAD_HEIGHT + 5 + _ucLine * INFO_HEIGHT;
/* 参数名字 */
tFont.FrontColor = INFO_NAME_COLOR;
LCD_DispStr(x, y, _pName, &tFont);
x += LCD_GetStrWidth(_pName, &tFont) + 5;
/* 参数值 */
tFont.FrontColor = _ucColor;
LCD_DispStr(x, y, _pValue, &tFont);
}
/*
*********************************************************************************************************
* : DispMsgBox
* : . 16
* :
* :
*********************************************************************************************************
*/
void DispMsgBox(uint16_t _usX, uint16_t _usY, uint16_t _usHeight, uint16_t _usWidth, char *_str)
{
FONT_T tFont;
/* 设置字体参数 */
{
tFont.FontCode = FC_ST_16; /* 字体代码 16点阵 */
tFont.FrontColor = MEAS_NAME_COLOR; /* 字体颜色 */
tFont.BackColor = CL_MASK; /* 文字背景颜色 */
tFont.Space = 0; /* 文字间距,单位 = 像素 */
}
DispBox(_usX, _usY, _usHeight, _usWidth, MEAS_BACK_COLOR);
/* 参数名字 */
tFont.FrontColor = MEAS_NAME_COLOR;
LCD_DispStr(_usX + 5, _usY + 4, _str, &tFont);
}
/***************************** 安富莱电子 www.armfly.com (END OF FILE) *********************************/

View File

@ -14,11 +14,8 @@
* *
********************************************************************************************************* *********************************************************************************************************
*/ */
#include "bsp.h"
#include "file_lib.h" #include "includes.h"
#include "lcd_menu.h"
#include "main.h"
#include "prog_if.h"
#include "md5.h" #include "md5.h"
/* /*

View File

@ -14,10 +14,7 @@
********************************************************************************************************* *********************************************************************************************************
*/ */
#include "bsp.h" #include "includes.h"
#include "fonts.h"
#include "ui_def.h"
#include "lcd_menu.h"
/* /*
********************************************************************************************************* *********************************************************************************************************

View File

@ -16,8 +16,7 @@
********************************************************************************************************* *********************************************************************************************************
*/ */
#include "bsp.h" #include "includes.h"
#include "main.h"
#include "status_link_mode.h" #include "status_link_mode.h"
#include "status_voltage_meter.h" #include "status_voltage_meter.h"
@ -51,7 +50,11 @@
#include "file_lib.h" #include "file_lib.h"
#include "elf_file.h" #include "elf_file.h"
static void DispLogo(void); #include "w25q_flash.h"
extern void status_DS18B20Meter(void);
uint16_t GetStatusIndex(uint16_t _NowStatus); uint16_t GetStatusIndex(uint16_t _NowStatus);
uint16_t g_MainStatus; /* 主状态字 */ uint16_t g_MainStatus; /* 主状态字 */
@ -66,38 +69,9 @@ static const uint16_t StatusOrder[] =
MS_TEMP_METER, /* 温度表 */ MS_TEMP_METER, /* 温度表 */
MS_TVCC_POWER, /* 微型数控电源 */ MS_TVCC_POWER, /* 微型数控电源 */
MS_PULSE_METER, /* 脉冲计 */ MS_PULSE_METER, /* 脉冲计 */
MS_MINI_DSO, /* 迷你示波器 */ //MS_MINI_DSO, /* 迷你示波器 */
}; };
uint32_t stm32crc(uint32_t *ptr, int len)
{
uint32_t xbit, data;
uint32_t crc = 0xFFFFFFFF; // init value
uint32_t polynom = 0x04c11db7;
while (len--) {
xbit = 1u << 31;
data = *ptr++;
for (int bits = 0; bits < 32; bits++)
{
if (crc & 0x80000000) {
crc <<= 1;
crc ^= polynom;
}
else
crc <<= 1;
if (data & xbit)
crc ^= polynom;
xbit >>= 1;
}
}
return crc;
}
/* /*
********************************************************************************************************* *********************************************************************************************************
* : main * : main
@ -106,53 +80,16 @@ uint32_t stm32crc(uint32_t *ptr, int len)
* : () * : ()
********************************************************************************************************* *********************************************************************************************************
*/ */
void JumpToDAPLink(void);
extern MENU_T g_tMenu1;
int main(void) int main(void)
{ {
bsp_Init(); bsp_Init();
LoadParam(); /* 读取应用程序参数, 该函数在param.c */ LoadParam(); /* 读取应用程序参数, 该函数在param.c */
PERIOD_Start(&g_tRunLed, 50, 50, 0); /* LED一直闪烁, 非阻塞 */
DispLogo();
bsp_InitESP32(); ST7789_SetDirection(g_tParam.DispDir);
bsp_SetTVCC(3300);
DSO_InitHard();
DSO_SetDC(1, 1);
DSO_SetDC(2, 1);
DSO_SetGain(1, 3);
DSO_SetGain(2, 3);
/* 测试一拖四模式 */
{
g_gMulSwd.MultiMode = 0;
g_gMulSwd.Active[0] = 1;
g_gMulSwd.Active[1] = 1;
g_gMulSwd.Active[2] = 1;
g_gMulSwd.Active[3] = 1;
}
/* LwIP 初始化 */
{
/* 如果不插网线,此函数执行时间过长 */
/* 网络参数存在在全局变量 g_tParam.lwip_ip, g_tParam.lwip_net_mask, g_tParam.lwip_gateway */
lwip_start();
lwip_pro();
}
PERIOD_Start(&g_tRunLed, 1000, 1000, 0); /* LED一直闪烁, 每2秒闪1次 */
usbd_Init(); /* 初始化USB协议栈 */
FileSystemLoad(); /* 挂载文件系统 */
lua_Init(); /* 启动lua */
//wifi_state = WIFI_INIT;
/* 主程序采用状态机实现程序功能切换 */ /* 主程序采用状态机实现程序功能切换 */
g_MainStatus = MS_LINK_MODE; /* 初始状态 = 联机界面 */ g_MainStatus = MS_LINK_MODE; /* 初始状态 = 联机界面 */
if (g_tParam.StartRun == 1) if (g_tParam.StartRun == 1)
@ -164,7 +101,84 @@ int main(void)
{ {
g_gMulSwd.MultiMode = g_tParam.MultiProgMode; g_gMulSwd.MultiMode = g_tParam.MultiProgMode;
g_MainStatus = MS_PROG_WORK; /* 多路烧录 */ g_MainStatus = MS_PROG_WORK; /* 多路烧录 */
} }
else if (g_tParam.StartRun == 3)
{
uint32_t RegJump;
/*
32bit
RTC_BKP_DR0 RTC初始化标志
RTC_BKP_DR1
- boot = 1, app = 2, dap = 3
- 0x0102 : boot来app
- 0x0301 : dap来app
- 0x0103 : boot来dap
*/
RegJump = RTC_ReadBkup32(RTC_BKP_DR1);
if (RegJump == 0x0000)
{
JumpToDAPLink(); /* 进入DAP */
}
/* 从DAP返回直接到菜单选择状态 */
if (RegJump == 0x0301)
{
g_tMenu1.Cursor = 0;
g_MainStatus = MS_EXTEND_MENU1;
}
/* 进入00 待机界面 */
RTC_WriteBkup32(RTC_BKP_DR1, 0x0000);
}
else /* 0 - 缺省*/
{
uint32_t RegJump;
RegJump = RTC_ReadBkup32(RTC_BKP_DR1);
/* 从DAP返回直接到菜单选择状态 */
if (RegJump == 0x0301)
{
g_tMenu1.Cursor = 0;
g_MainStatus = MS_EXTEND_MENU1;
}
RTC_WriteBkup32(RTC_BKP_DR1, 0x0000);
}
/* 执行较快的初始化代码部分 */
{
//PERIOD_Start(&g_tRunLed, 50, 50, 0); /* LED一直闪烁, 非阻塞 */
PERIOD_Start(&g_tRunLed, 1000, 1000, 0); /* LED一直闪烁, 每2秒闪1次 */
bsp_InitESP32();
bsp_SetTVCC(3300);
DSO_InitHard();
DSO_SetDC(1, 1);
DSO_SetDC(2, 1);
DSO_SetGain(1, 3);
DSO_SetGain(2, 3);
/* 脱机烧录用的全局变量 */
{
g_gMulSwd.MultiMode = 0;
g_gMulSwd.Active[0] = 1;
g_gMulSwd.Active[1] = 1;
g_gMulSwd.Active[2] = 1;
g_gMulSwd.Active[3] = 1;
}
usbd_Init(); /* 初始化USB协议栈 */
FileSystemLoad(); /* 挂载文件系统 */
lua_Init(); /* 启动lua */
}
//wifi_state = WIFI_INIT;
while (1) while (1)
{ {
switch (g_MainStatus) switch (g_MainStatus)
@ -182,7 +196,7 @@ int main(void)
break; break;
case MS_MODIFY_PARAM: /* 修改参数 */ case MS_MODIFY_PARAM: /* 修改参数 */
status_ModifyParam(); //status_ModifyParam();
break; break;
case MS_ESP32_TEST: /* ESP32模块固件升级 */ case MS_ESP32_TEST: /* ESP32模块固件升级 */
@ -265,13 +279,13 @@ int main(void)
status_MonitorCan(); status_MonitorCan();
break; break;
case MS_MONITOR_GPIO: /* IO监视器 */ case MS_MONITOR_GPIO: /* 串口视器 */
status_MonitorUart();
break;
case MS_MONITOR_ANALOG: /* 模拟量监视器 */
status_MonitorUart(); status_MonitorUart();
break; break;
case MS_DS18B20_METER: /* DS18B20温度表 */
status_DS18B20Meter();
break;
default: default:
g_MainStatus = MS_LINK_MODE; g_MainStatus = MS_LINK_MODE;
@ -280,7 +294,6 @@ int main(void)
} }
} }
/* /*
********************************************************************************************************* *********************************************************************************************************
* : NextStatus * : NextStatus
@ -380,472 +393,6 @@ uint16_t GetStatusIndex(uint16_t _NowStatus)
return idx; return idx;
} }
/*
*********************************************************************************************************
* : DispLogo
* :
* :
* :
*********************************************************************************************************
*/
static void DispLogo(void)
{
FONT_T tFont; /* 定义字体结构体变量 */
tFont.FontCode = FC_ST_16; /* 字体代码 16点阵 */
tFont.FrontColor = RGB(200, 200, 200); /* 字体颜色 */
tFont.BackColor = FORM_BACK_COLOR; /* 文字背景颜色 */
tFont.Space = 0; /* 文字间距,单位 = 像素 */
ST7789_SetDirection(g_tParam.DispDir);
LCD_ClrScr(FORM_BACK_COLOR); /* 清屏,背景蓝色 */
/* 显示APP固件版本。版本号放在中断向量表 */
{
char buf[64];
uint16_t x = 5;
uint16_t y = 3;
uint16_t line_cap = 20;
//LCD_DispStr(x, y, "H7-TOOL多功能开发工具", &tFont);
LCD_DispStr(x, y, "H7-TOOL", &tFont);
y += line_cap;
sprintf(buf, "App Ver:%d.%02X",
APP_VERSION >> 8, APP_VERSION & 0xFF);
LCD_DispStr(x, y, buf, &tFont);
y += line_cap;
sprintf(buf, "Boot Ver:%d.%02X",
BOOT_VERSION >> 8, BOOT_VERSION & 0xFF);
LCD_DispStr(x, y, buf, &tFont);
y += line_cap;
LCD_DispStr(x, y, "正在配置网络...", &tFont);
}
ST7789_DrawScreen(); /* 立即刷屏一次 */
bsp_DelayMS(50); /* 刷屏后延迟50ms再开背光, 避免花屏闪一下问题 */
LCD_SetBackLight(BRIGHT_DEFAULT); /* 打开背光 */
}
/*
*********************************************************************************************************
* : DispHeader
* : 1
* : _str :
* :
*********************************************************************************************************
*/
void DispHeader(char *_str)
{
uint8_t idx;
idx = GetStatusIndex(g_MainStatus);
DispHeader2(idx, _str);
}
/* 带序号参数 */
void DispHeader2(uint8_t _idx, char *_str)
{
FONT_T tFont;
char buf[48];
/* 设置字体参数 */
{
tFont.FontCode = FC_ST_24; /* 字体代码 16点阵 */
tFont.FrontColor = HEAD_TEXT_COLOR; /* 字体颜色 */
tFont.BackColor = HEAD_BACK_COLOR; /* 文字背景颜色 */
tFont.Space = 0; /* 文字间距,单位 = 像素 */
}
LCD_Fill_Rect(0, 0, HEAD_HEIGHT, HEAD_HEIGHT, HEAD_SN_COLOR); /* 清屏标题序号区 */
LCD_Fill_Rect(HEAD_HEIGHT, 0, HEAD_HEIGHT, 240 - HEAD_HEIGHT, HEAD_BACK_COLOR); /* 清屏标题栏文本区 */
sprintf(buf, "%02d", _idx);
tFont.BackColor = HEAD_SN_COLOR; /* 文字背景颜色 */
LCD_DispStr(4, 4, buf, &tFont);
/* 显示标题文字 */
tFont.BackColor = HEAD_BACK_COLOR; /* 文字背景颜色 */
LCD_DispStrEx(HEAD_HEIGHT, 4, _str, &tFont, 240 - HEAD_HEIGHT, ALIGN_CENTER);
LCD_DrawLine(0, HEAD_HEIGHT, 239, HEAD_HEIGHT, HEAD_BODER_COLOR);
LCD_Fill_Rect(0, HEAD_HEIGHT + 1, 240 - HEAD_HEIGHT - 1, 240, FORM_BACK_COLOR); /* 清屏正文区 */
}
/* 只刷新标题文字部分,不清屏 */
void DispHeaderStr(char *_str)
{
FONT_T tFont;
/* 设置字体参数 */
{
tFont.FontCode = FC_ST_24; /* 字体代码 16点阵 */
tFont.FrontColor = HEAD_TEXT_COLOR; /* 字体颜色 */
tFont.BackColor = HEAD_BACK_COLOR; /* 文字背景颜色 */
tFont.Space = 0; /* 文字间距,单位 = 像素 */
}
LCD_Fill_Rect(HEAD_HEIGHT, 0, HEAD_HEIGHT, 240 - HEAD_HEIGHT, HEAD_BACK_COLOR); /* 清屏标题栏文本区 */
/* 显示标题文字 */
tFont.BackColor = HEAD_BACK_COLOR; /* 文字背景颜色 */
LCD_DispStrEx(HEAD_HEIGHT, 4, _str, &tFont, 240 - HEAD_HEIGHT, ALIGN_CENTER);
}
/* 显示序号 */
void DispHeaderSn(uint8_t _idx)
{
FONT_T tFont;
char buf[48];
/* 设置字体参数 */
{
tFont.FontCode = FC_ST_24; /* 字体代码 16点阵 */
tFont.FrontColor = HEAD_TEXT_COLOR; /* 字体颜色 */
tFont.BackColor = HEAD_BACK_COLOR; /* 文字背景颜色 */
tFont.Space = 0; /* 文字间距,单位 = 像素 */
}
LCD_Fill_Rect(0, 0, HEAD_HEIGHT, HEAD_HEIGHT, HEAD_SN_COLOR); /* 清屏标题序号区 */
sprintf(buf, "%02d", _idx);
tFont.BackColor = HEAD_SN_COLOR; /* 文字背景颜色 */
LCD_DispStr(4, 4, buf, &tFont);
}
/*
*********************************************************************************************************
* : DispBox
* :
* : _usX : X
* _usY : Y
* _usHeight :
* _usWidth :
* _usColor :
* :
*********************************************************************************************************
*/
void DispBox(uint16_t _usX, uint16_t _usY, uint16_t _usHeight, uint16_t _usWidth, uint16_t _usColor)
{
/* 绘制边框 */
LCD_DrawRoundRect(_usX, _usY, _usHeight, _usWidth, B0X_ARC, MEAS_BODER_COLOR);
/* 填充矩形 */
LCD_FillRoundRect(_usX + 1, _usY + 1, _usHeight - 2, _usWidth - 2, B0X_ARC, _usColor);
}
/*
*********************************************************************************************************
* : DispLabel
* :
* : _usX : X
* _usY : Y
* _usHeight :
* _usWidth :
* _usColor :
* _pStr :
* _pFont :
* :
*********************************************************************************************************
*/
void DispLabel(uint16_t _usX, uint16_t _usY, uint16_t _usHeight, uint16_t _usWidth,
uint16_t _usColor, char *_pStr, FONT_T *_tFont)
{
/* 填充矩形 */
LCD_Fill_Rect(_usX, _usY, _usHeight, _usWidth, _usColor);
LCD_DispStr(_usX, _usY, _pStr, _tFont);
}
/*
*********************************************************************************************************
* : DispMeasBar
* :
* : _ucLine : 0 - 3 (4)
* _pName :
* _pValue :
* _pUnit :
* :
*********************************************************************************************************
*/
void DispMeasBar(uint8_t _ucLine, char *_pName, char *_pValue, char *_pUnit)
{
DispMeasBarEx(_ucLine, _pName, _pValue, _pUnit, MEAS_BACK_COLOR);
}
/*
*********************************************************************************************************
* : DispMeasBarEx
* :
* : _ucLine : 0 - 3 (4)
* _pName :
* _pValue :
* _pUnit :
* :
*********************************************************************************************************
*/
void DispMeasBarEx(uint8_t _ucLine, char *_pName, char *_pValue, char *_pUnit, uint16_t _usFillColor)
{
FONT_T tFont;
uint16_t x;
uint16_t y;
/* 设置字体参数 */
{
tFont.FontCode = FC_ST_24; /* 字体代码 16点阵 */
tFont.FrontColor = MEAS_NAME_COLOR; /* 字体颜色 */
tFont.BackColor = CL_MASK; /* 文字背景颜色 */
tFont.Space = 0; /* 文字间距,单位 = 像素 */
}
x = MEAS_WIN_LEFT;
y = HEAD_HEIGHT + 9 + _ucLine * (MEAS_WIN_HEIGHT + 9);
DispBox(x, y, MEAS_WIN_HEIGHT, MEAS_WIN_WIDTH, _usFillColor);
/* 参数名字 */
tFont.FrontColor = MEAS_NAME_COLOR;
LCD_DispStr(MEAS_WIN_LEFT + 5, y + 4, _pName, &tFont);
/* 测量值 */
tFont.FrontColor = MEAS_VALUE_COLOR;
LCD_DispStr(MEAS_WIN_LEFT + 80, y + 4, _pValue, &tFont);
/* 单位 */
tFont.FrontColor = MEAS_UNIT_COLOR;
LCD_DispStr(MEAS_WIN_LEFT + 188, y + 4, _pUnit, &tFont);
}
/*
*********************************************************************************************************
* : DispParamBar
* : - 使
* : _ucLine : 0 - 3 (4)
* _pName :
* _pValue :
* _ucActive :
* :
*********************************************************************************************************
*/
void DispParamBar(uint8_t _ucLine, char *_pName, char *_pValue, uint8_t _ucActive)
{
FONT_T tFont;
uint16_t x;
uint16_t y;
uint16_t NameWidth;
/* 设置字体参数 */
{
tFont.FontCode = FC_ST_24; /* 字体代码 16点阵 */
tFont.FrontColor = MEAS_NAME_COLOR; /* 字体颜色 */
tFont.BackColor = CL_MASK; /* 文字背景颜色 */
tFont.Space = 0; /* 文字间距,单位 = 像素 */
}
x = MEAS_WIN_LEFT;
y = HEAD_HEIGHT + 9 + _ucLine * (MEAS_WIN_HEIGHT + 3);
/* 绘制圆角矩形 */
if (_ucActive == 1) /* 选中是用黄色底 */
{
DispBox(x, y, MEAS_WIN_HEIGHT, MEAS_WIN_WIDTH, CL_YELLOW);
}
else
{
DispBox(x, y, MEAS_WIN_HEIGHT, MEAS_WIN_WIDTH, MEAS_BACK_COLOR);
}
/* 参数名字 */
tFont.FrontColor = MEAS_NAME_COLOR;
LCD_DispStr(MEAS_WIN_LEFT + 5, y + 4, _pName, &tFont);
NameWidth = LCD_GetStrWidth(_pName, &tFont);
/* 测量值 */
tFont.FrontColor = MEAS_VALUE_COLOR;
LCD_DispStr(MEAS_WIN_LEFT + 5 + NameWidth + 5, y + 4, _pValue, &tFont);
}
/*
*********************************************************************************************************
* : DispProgressBar
* :
* : _usX :
* _usX :
* _usHeight :
* _usWidth :
* _str :
* _Percent : ,
* tFont :
* :
*********************************************************************************************************
*/
extern uint8_t s_DispRefresh;
static uint16_t s_ProgressBarColor1 = PROGRESS_BACK_COLOR1;
void ProgressBarSetColor(uint16_t _Color)
{
s_ProgressBarColor1 = _Color;
}
void DispProgressBar(uint16_t _usX, uint16_t _usY, uint16_t _usHeight, uint16_t _usWidth,
char *_str1, float _Percent, char *_str2, FONT_T *_tFont)
{
uint16_t width;
char buf[16];
uint16_t StrWidth;
uint16_t StrHeight;
uint16_t x, y;
if (_Percent > 100)
{
_Percent = 100;
}
width = ((_usWidth - 4) * _Percent) / 100;
/* 填充矩形 */
LCD_DrawRect(_usX, _usY, _usHeight, _usWidth, PROGRESS_BODER_COLOR);
LCD_Fill_Rect(_usX + 2, _usY + 2, _usHeight - 4, width, s_ProgressBarColor1);
if (_Percent < 100)
{
LCD_Fill_Rect(_usX + width + 2, _usY + 2, _usHeight - 4, _usWidth - width - 4, PROGRESS_BACK_COLOR2);
}
StrHeight = LCD_GetFontHeight(_tFont);
y = _usY + (_usHeight - StrHeight) / 2;
if (_str1[0] == 0) /* 只显示显示百分比文字 */
{
sprintf(buf, "%0.0f%%", _Percent);
StrWidth = LCD_GetStrWidth(buf, _tFont);
x = _usX + (_usWidth - StrWidth) / 2;
LCD_DispStr(x, y, buf, _tFont);
}
else
{
/* 显示左侧文本 */
x = _usX + 4;
LCD_DispStr(x, y, _str1, _tFont);
/* 显示百分比 */
sprintf(buf, "%0.0f%%", _Percent);
StrWidth = LCD_GetStrWidth(buf, _tFont);
x = _usX + (_usWidth - StrWidth) / 2;
LCD_DispStr(x, y, buf, _tFont);
/* 显示右侧文本 */
x = x + 36;
LCD_DispStr(x, y, _str2, _tFont);
}
}
/*
*********************************************************************************************************
* : DispHelpBar
* :
* :
* :
*********************************************************************************************************
*/
const unsigned char g_ImageHelp[512] = { /* 0X10,0X10,0X00,0X10,0X00,0X10,0X01,0X1B, */
0XF7,0X9E,0XF7,0X9E,0XF7,0X9E,0XFF,0XBE,0XFF,0XBE,0XEF,0X9E,0XD7,0X5E,0XCF,0X3F,
0XCF,0X1F,0XD7,0X5F,0XE7,0X9F,0XFF,0XDF,0XFF,0XDE,0XF7,0X9E,0XF7,0X9E,0XF7,0X9E,
0XF7,0X9E,0XF7,0X9E,0XF7,0XBE,0XEF,0X7E,0XC6,0XFE,0XAE,0XBE,0XA6,0X7E,0X9E,0X7E,
0X9E,0X7E,0X9E,0X7E,0XA6,0X7E,0XBE,0XDE,0XE7,0X7E,0XFF,0XBE,0XF7,0X9E,0XF7,0X9E,
0XF7,0X9E,0XF7,0XBE,0XE7,0X5E,0XB6,0XBE,0XA6,0X7E,0X9E,0X5E,0X96,0X5E,0X8E,0X1E,
0X8E,0X1E,0X96,0X3E,0X96,0X5E,0X9E,0X5E,0XAE,0X9E,0XDF,0X5E,0XFF,0XBE,0XF7,0X9E,
0XF7,0XBE,0XEF,0X7E,0XB6,0XBD,0X9E,0X7E,0X96,0X3E,0X96,0X3E,0X8E,0X1E,0XA6,0X7E,
0XA6,0X7E,0X8E,0X1D,0X8E,0X1E,0X8E,0X3D,0X96,0X3D,0XA6,0X7D,0XE7,0X7E,0XFF,0XDE,
0XFF,0XBE,0XBE,0XDD,0X9E,0X5D,0X96,0X3D,0X8E,0X1D,0X8E,0X1D,0X85,0XFD,0XDF,0X7E,
0XE7,0X9F,0X85,0XFD,0X86,0X1D,0X86,0X1D,0X8E,0X1D,0X8E,0X1D,0XB6,0XBD,0XFF,0XDF,
0XE7,0X7E,0X96,0X3D,0X8E,0X1D,0X86,0X1D,0X85,0XFD,0X86,0X1D,0X7D,0XFD,0X96,0X3D,
0X96,0X3D,0X85,0XFD,0X85,0XFD,0X85,0XFD,0X85,0XFD,0X85,0XFD,0X8E,0X1C,0XE7,0X7E,
0XCF,0X1E,0X7D,0XFC,0X85,0XFD,0X85,0XFD,0X7D,0XFD,0X7D,0XFD,0X8E,0X3D,0X96,0X3D,
0X8E,0X1D,0X7D,0XFD,0X7D,0XFD,0X7D,0XFD,0X7D,0XDC,0X7D,0XFC,0X75,0XDC,0XC6,0XFE,
0XB6,0XBD,0X75,0XBC,0X7D,0XDC,0X7D,0XDC,0X7D,0XFD,0X7D,0XDD,0X8E,0X3D,0XE7,0X7F,
0XD7,0X5E,0X75,0XDC,0X7D,0XDC,0X7D,0XDC,0X7D,0XDC,0X7D,0XDC,0X75,0X9C,0XAE,0X9D,
0XAE,0X9D,0X75,0X9C,0X7D,0XDC,0X7D,0XDC,0X7D,0XDC,0X7D,0XDC,0X6D,0X9C,0XBE,0XDE,
0XDF,0X5E,0X75,0XBC,0X7D,0XDC,0X7D,0XDC,0X75,0XBC,0X75,0XBC,0X6D,0X7B,0XA6,0X7D,
0XC6,0XFD,0X75,0X9C,0X7D,0XBC,0X75,0XBC,0X75,0XBC,0X75,0XBC,0X6D,0X9C,0XBE,0XDD,
0XD7,0X5E,0X6D,0X9C,0X75,0XBC,0X75,0XBC,0X75,0X9C,0X75,0X9C,0X65,0X7B,0XBE,0XDD,
0XE7,0X7E,0X85,0XDC,0X7D,0XBC,0X75,0X9C,0X75,0X9B,0X75,0X9C,0X65,0X7B,0XB6,0XBD,
0XD7,0X3E,0X65,0X7B,0X6D,0X9C,0X6D,0X7B,0X6D,0X7B,0X75,0X9B,0X75,0X9B,0XDF,0X5E,
0XFF,0XDE,0XAE,0X7C,0X85,0XDB,0X75,0X9B,0X6D,0X7B,0X6D,0X7B,0X5D,0X3B,0XB6,0XBD,
0XD7,0X5E,0X5D,0X3B,0X6D,0X7B,0X6D,0X7B,0X6D,0X7B,0X75,0X7B,0X9E,0X3C,0XFF,0XDF,
0XFF,0XBE,0XE7,0X5E,0X96,0X1C,0X7D,0XBB,0X75,0X7B,0X65,0X5B,0X75,0X9B,0XCF,0X1D,
0XDF,0X7E,0X85,0XDB,0X5D,0X3A,0X6D,0X5B,0X75,0X7B,0X85,0XDB,0XDF,0X5D,0XFF,0XDE,
0XF7,0X9E,0XFF,0XBE,0XD7,0X3D,0X95,0XFB,0X75,0X9B,0X6D,0X7B,0X6D,0X5B,0X6D,0X5A,
0X65,0X5A,0X6D,0X5A,0X65,0X5A,0X6D,0X5A,0X7D,0XBB,0XCE,0XFD,0XFF,0XDE,0XF7,0X9E,
0XF7,0X9E,0XF7,0X9E,0XFF,0XBE,0XDF,0X3D,0X9E,0X1B,0X6D,0X7A,0X5D,0X1A,0X4C,0XFA,
0X4C,0XDA,0X4C,0XFA,0X5D,0X3A,0X8D,0XFB,0XDF,0X3D,0XFF,0XBE,0XF7,0X9E,0XF7,0X9E,
0XF7,0X9E,0XF7,0X9E,0XF7,0X9E,0XF7,0X9E,0XEF,0X5D,0XCE,0XBB,0XA6,0X1A,0X85,0XBA,
0X85,0XBA,0X9E,0X1A,0XC6,0XBC,0XEF,0X7D,0XF7,0XBE,0XF7,0X9E,0XF7,0X9E,0XF7,0X9E,
};
void DispHelpBar(char *_str1, char *_str2)
{
FONT_T tFont; /* 定义字体结构体变量 */
tFont.FontCode = FC_ST_16; /* 字体代码 16点阵 */
tFont.FrontColor = HELP_TEXT_COLOR; /* 字体颜色 */
tFont.BackColor = HELP_BACK_COLOR; /* 文字背景颜色 */
tFont.Space = 0; /* 文字间距,单位 = 像素 */
ST7789_DrawBMP8(1, 240 - 36, 16, 16, (uint8_t *)g_ImageHelp);
LCD_DispStr(20, 240 - 36, _str1, &tFont);
LCD_DispStr(20, 240 - 18, _str2, &tFont);
}
/*
*********************************************************************************************************
* : DispInfoBar16
* : 16.
* : _line :
* _str1 :
* _str2 :
* :
*********************************************************************************************************
*/
void DispInfoBar16(uint8_t _ucLine, char *_pName, char *_pValue)
{
DispInfoBar16Ex(_ucLine, _pName, _pValue, INFO_VALUE_COLOR);
}
/* 带颜色参数 - 用于显示红色超标参数 */
void DispInfoBar16Ex(uint8_t _ucLine, char *_pName, char *_pValue, uint16_t _ucColor)
{
FONT_T tFont;
uint16_t x;
uint16_t y;
/* 设置字体参数 */
{
tFont.FontCode = FC_ST_16; /* 字体代码 16点阵 */
tFont.FrontColor = INFO_NAME_COLOR; /* 字体颜色 */
tFont.BackColor = INFO_BACK_COLOR; /* 文字背景颜色 */
tFont.Space = 0; /* 文字间距,单位 = 像素 */
}
x = 5;
y = HEAD_HEIGHT + 5 + _ucLine * INFO_HEIGHT;
/* 参数名字 */
tFont.FrontColor = INFO_NAME_COLOR;
LCD_DispStr(x, y, _pName, &tFont);
x += LCD_GetStrWidth(_pName, &tFont) + 5;
/* 参数值 */
tFont.FrontColor = _ucColor;
LCD_DispStr(x, y, _pValue, &tFont);
}
/* /*
********************************************************************************************************* *********************************************************************************************************
* : DSO_StartMode2 * : DSO_StartMode2
@ -890,31 +437,4 @@ void PlayKeyTone(void)
} }
} }
/*
*********************************************************************************************************
* : DispMsgBox
* : . 16
* :
* :
*********************************************************************************************************
*/
void DispMsgBox(uint16_t _usX, uint16_t _usY, uint16_t _usHeight, uint16_t _usWidth, char *_str)
{
FONT_T tFont;
/* 设置字体参数 */
{
tFont.FontCode = FC_ST_16; /* 字体代码 16点阵 */
tFont.FrontColor = MEAS_NAME_COLOR; /* 字体颜色 */
tFont.BackColor = CL_MASK; /* 文字背景颜色 */
tFont.Space = 0; /* 文字间距,单位 = 像素 */
}
DispBox(_usX, _usY, _usHeight, _usWidth, MEAS_BACK_COLOR);
/* 参数名字 */
tFont.FrontColor = MEAS_NAME_COLOR;
LCD_DispStr(_usX + 5, _usY + 4, _str, &tFont);
}
/***************************** 安富莱电子 www.armfly.com (END OF FILE) *********************************/ /***************************** 安富莱电子 www.armfly.com (END OF FILE) *********************************/

View File

@ -14,12 +14,7 @@
********************************************************************************************************* *********************************************************************************************************
*/ */
#include "bsp.h" #include "includes.h"
#include "fonts.h"
#include "ui_def.h"
#include "main.h"
#include "lcd_menu.h"
#include "modify_param.h"
/* 多行文本框 */ /* 多行文本框 */
#define MEMO_X 5 #define MEMO_X 5
@ -63,16 +58,27 @@ const PARAM_LIST_T UartMonParamList[UART_MON_PARAM_COUNT] =
}; };
/****** 系统设置-基本参数 ******************************************************************************/ /****** 系统设置-基本参数 ******************************************************************************/
#define SYS_BASE_PARAM_COUNT 16 #define SYS_BASE_PARAM_COUNT 4
const char *SysBaseParam0[] = {"关闭", "打开"}; const char *SysBaseParam0[] = {"关闭", "打开"};
const char *SysBaseParam1[] = {"1分钟", "5分钟", "15分钟", "1小时", "关闭"}; const char *SysBaseParam1[] = {"1分钟", "5分钟", "15分钟", "1小时", "关闭"};
const char *SysBaseParam2[] = {"16点阵", "24点阵"}; const char *SysBaseParam2[] = {"16点阵", "24点阵"};
const char *SysBaseParam3[] = {"缺省", "单路烧录", "多路烧录", "DAP-Link"};
const PARAM_LIST_T SysBaseParamList[SYS_BASE_PARAM_COUNT] = const PARAM_LIST_T SysBaseParamList[SYS_BASE_PARAM_COUNT] =
{ {
/* 数据类型, 名称 可选列表, 最小值, 最大值, 缺省值 */ /* 数据类型, 名称 可选列表, 最小值, 最大值, 缺省值 */
{ 0, "按键音: ", SysBaseParam0, 0, 1, 1}, { 0, "按键音: ", SysBaseParam0, 0, 1, 1},
{ 0, "屏保超时: ", SysBaseParam1, 0, 4, 0}, { 0, "屏保超时: ", SysBaseParam1, 0, 4, 0},
{ 0, "列表字体: ", SysBaseParam2, 0, 1, 0}, { 0, "列表字体: ", SysBaseParam2, 0, 1, 0},
{ 0, "开机启动: ", SysBaseParam3, 0, 3, 0},
};
/****** 系统设置-IP参数 ******************************************************************************/
#define NET_PARAM_COUNT 13
const PARAM_LIST_T NetParamList[NET_PARAM_COUNT] =
{
/* 数据类型, 名称 可选列表, 最小值, 最大值, 缺省值 */
{ 0, "RJ45本机IP0: ", 0, 0, 255, 192}, { 0, "RJ45本机IP0: ", 0, 0, 255, 192},
{ 0, "RJ45本机IP1: ", 0, 0, 255, 168}, { 0, "RJ45本机IP1: ", 0, 0, 255, 168},
{ 0, "RJ45本机IP2: ", 0, 0, 255, 1}, { 0, "RJ45本机IP2: ", 0, 0, 255, 1},
@ -88,17 +94,18 @@ const PARAM_LIST_T SysBaseParamList[SYS_BASE_PARAM_COUNT] =
{ 0, "端口号: ", 0, 1024, 65535, 30010}, { 0, "端口号: ", 0, 1024, 65535, 30010},
}; };
/****** 烧录参数 ******************************************************************************/ /****** 烧录参数 ******************************************************************************/
#define PROG_PARAM_COUNT 4 #define PROG_PARAM_COUNT 4
const char *ProgParam0[] = {"关闭", "1路", "1-2路", "1-3路", "1-4路"}; const char *ProgParam0[] = {"关闭", "1路", "1-2路", "1-3路", "1-4路"};
const char *ProgParam1[] = {"缺省", "单路烧录", "多路烧录"}; //const char *ProgParam1[] = {"缺省", "单路烧录", "多路烧录", "DAP-Link"};
const PARAM_LIST_T ProgParamList[PROG_PARAM_COUNT] = const PARAM_LIST_T ProgParamList[PROG_PARAM_COUNT] =
{ {
/* 数据类型, 名称 可选列表, 最小值, 最大值, 缺省值 */ /* 数据类型, 名称 可选列表, 最小值, 最大值, 缺省值 */
{ 0, "多路模式: ", ProgParam0, 0, 4, 4}, { 0, "多路模式: ", ProgParam0, 0, 4, 4},
{ 0, "工厂代码: ", 0, 0, 999, 0}, { 0, "工厂代码: ", 0, 0, 999, 0},
{ 0, "烧录器编号: ", 0, 0, 999, 0}, { 0, "烧录器编号: ", 0, 0, 999, 0},
{ 0, "开机启动: ", ProgParam1, 0, 2, 0}, { 0, "开机启动: ", SysBaseParam3, 0, 3, 0},
}; };
/* /*
@ -307,21 +314,26 @@ void ModifyParam(uint16_t _MainStatus)
*/ */
void UartMonInitParam(uint16_t _MainStatus) void UartMonInitParam(uint16_t _MainStatus)
{ {
if (_MainStatus == MS_MONITOR_UART) if (_MainStatus == MODIFY_PARAM_UART_MON)
{ {
s_pParamList = UartMonParamList; s_pParamList = UartMonParamList;
s_ParamCount = UART_MON_PARAM_COUNT; s_ParamCount = UART_MON_PARAM_COUNT;
} }
else if (_MainStatus == MS_SYSTEM_SET) else if (_MainStatus == MODIFY_PARAM_SYSTEM)
{ {
s_pParamList = SysBaseParamList; s_pParamList = SysBaseParamList;
s_ParamCount = SYS_BASE_PARAM_COUNT; s_ParamCount = SYS_BASE_PARAM_COUNT;
} }
else if (_MainStatus == MS_PROG_MODIFY_PARAM) else if (_MainStatus == MODIFY_PARAM_PROG)
{ {
s_pParamList = ProgParamList; s_pParamList = ProgParamList;
s_ParamCount = PROG_PARAM_COUNT; s_ParamCount = PROG_PARAM_COUNT;
} }
else if (_MainStatus == MODIFY_PARAM_NET)
{
s_pParamList = NetParamList;
s_ParamCount = NET_PARAM_COUNT;
}
} }
/* /*
@ -351,20 +363,24 @@ static int32_t MonDispReadParam(uint8_t _index)
if (_index == 0) value = g_tParam.KeyToneEnable; if (_index == 0) value = g_tParam.KeyToneEnable;
else if (_index == 1) value = g_tParam.LcdSleepTime; else if (_index == 1) value = g_tParam.LcdSleepTime;
else if (_index == 2) value = g_tParam.FileListFont24; else if (_index == 2) value = g_tParam.FileListFont24;
else if (_index == 3) value = g_tParam.LocalIPAddr[0]; else if (_index == 3) value = g_tParam.StartRun;
else if (_index == 4) value = g_tParam.LocalIPAddr[1];
else if (_index == 5) value = g_tParam.LocalIPAddr[2];
else if (_index == 6) value = g_tParam.LocalIPAddr[3];
else if (_index == 7) value = g_tParam.Gateway[0];
else if (_index == 8) value = g_tParam.Gateway[1];
else if (_index == 9) value = g_tParam.Gateway[2];
else if (_index == 10) value = g_tParam.Gateway[3];
else if (_index == 11) value = g_tParam.NetMask[0];
else if (_index == 12) value = g_tParam.NetMask[1];
else if (_index == 13) value = g_tParam.NetMask[2];
else if (_index == 14) value = g_tParam.NetMask[3];
else if (_index == 15) value = g_tParam.LocalTCPPort;
} }
else if (s_pParamList == NetParamList)
{
if (_index == 0) value = g_tParam.LocalIPAddr[0];
else if (_index == 1) value = g_tParam.LocalIPAddr[1];
else if (_index == 2) value = g_tParam.LocalIPAddr[2];
else if (_index == 3) value = g_tParam.LocalIPAddr[3];
else if (_index == 4) value = g_tParam.Gateway[0];
else if (_index == 5) value = g_tParam.Gateway[1];
else if (_index == 6) value = g_tParam.Gateway[2];
else if (_index == 7) value = g_tParam.Gateway[3];
else if (_index == 8) value = g_tParam.NetMask[0];
else if (_index == 9) value = g_tParam.NetMask[1];
else if (_index == 10) value = g_tParam.NetMask[2];
else if (_index == 11) value = g_tParam.NetMask[3];
else if (_index == 12) value = g_tParam.LocalTCPPort;
}
else if (s_pParamList == ProgParamList) else if (s_pParamList == ProgParamList)
{ {
if (_index == 0) value = g_tParam.MultiProgMode; if (_index == 0) value = g_tParam.MultiProgMode;
@ -401,20 +417,24 @@ static void MonDispWriteParam(uint8_t _index, int32_t _value)
if (_index == 0) g_tParam.KeyToneEnable = _value; if (_index == 0) g_tParam.KeyToneEnable = _value;
else if (_index == 1) g_tParam.LcdSleepTime = _value; else if (_index == 1) g_tParam.LcdSleepTime = _value;
else if (_index == 2) g_tParam.FileListFont24 = _value; else if (_index == 2) g_tParam.FileListFont24 = _value;
else if (_index == 3) g_tParam.LocalIPAddr[0] = _value; else if (_index == 3) g_tParam.StartRun = _value;
else if (_index == 4) g_tParam.LocalIPAddr[1] = _value;
else if (_index == 5) g_tParam.LocalIPAddr[2] = _value;
else if (_index == 6) g_tParam.LocalIPAddr[3] = _value;
else if (_index == 7) g_tParam.Gateway[0] = _value;
else if (_index == 8) g_tParam.Gateway[1] = _value;
else if (_index == 9) g_tParam.Gateway[2] = _value;
else if (_index == 10) g_tParam.Gateway[3] = _value;
else if (_index == 11) g_tParam.NetMask[0] = _value;
else if (_index == 12) g_tParam.NetMask[1] = _value;
else if (_index == 13) g_tParam.NetMask[2] = _value;
else if (_index == 14) g_tParam.NetMask[3] = _value;
else if (_index == 15) g_tParam.LocalTCPPort = _value;
} }
else if (s_pParamList == NetParamList)
{
if (_index == 0) g_tParam.LocalIPAddr[0] = _value;
else if (_index == 1) g_tParam.LocalIPAddr[1] = _value;
else if (_index == 2) g_tParam.LocalIPAddr[2] = _value;
else if (_index == 3) g_tParam.LocalIPAddr[3] = _value;
else if (_index == 4) g_tParam.Gateway[0] = _value;
else if (_index == 5) g_tParam.Gateway[1] = _value;
else if (_index == 6) g_tParam.Gateway[2] = _value;
else if (_index == 7) g_tParam.Gateway[3] = _value;
else if (_index == 8) g_tParam.NetMask[0] = _value;
else if (_index == 9) g_tParam.NetMask[1] = _value;
else if (_index == 10) g_tParam.NetMask[2] = _value;
else if (_index == 11) g_tParam.NetMask[3] = _value;
else if (_index == 12) g_tParam.LocalTCPPort = _value;
}
else if (s_pParamList == ProgParamList) else if (s_pParamList == ProgParamList)
{ {
if (_index == 0) g_tParam.MultiProgMode = _value; if (_index == 0) g_tParam.MultiProgMode = _value;

View File

@ -14,9 +14,7 @@
********************************************************************************************************* *********************************************************************************************************
*/ */
#include "bsp.h" #include "includes.h"
#include "param.h"
#include "modbus_reg_addr.h"
PARAM_T g_tParam; /* 基本参数 */ PARAM_T g_tParam; /* 基本参数 */
CALIB_T g_tCalib; /* 校准参数 */ CALIB_T g_tCalib; /* 校准参数 */
@ -59,6 +57,18 @@ void LoadParam(void)
g_tVar.MACaddr[5] = g_tVar.CPU_Sn[0] >> 0; g_tVar.MACaddr[5] = g_tVar.CPU_Sn[0] >> 0;
LoadCalibParam(); LoadCalibParam();
/* 固件升级新增参数的处理 */
{
if (g_tParam.DAP_TVCCVolt > 50)
{
g_tParam.DAP_TVCCVolt = 0;
g_tParam.DAP_BeepEn = 1;
bsp_GenRNG(&g_tParam.DAP_Sn, 1);
SaveParam();
}
}
} }
/* /*
@ -154,6 +164,10 @@ void InitBaseParam(void)
g_tParam.ToolSn = 1; /* 烧录器编号 */ g_tParam.ToolSn = 1; /* 烧录器编号 */
g_tParam.StartRun = 0; /* 开机启动 */ g_tParam.StartRun = 0; /* 开机启动 */
g_tParam.DAP_TVCCVolt = 0;
g_tParam.DAP_BeepEn = 1;
bsp_GenRNG(&g_tParam.DAP_Sn, 1);
SaveParam(); SaveParam();
} }

View File

@ -14,13 +14,7 @@
********************************************************************************************************* *********************************************************************************************************
*/ */
#include "bsp.h" #include "includes.h"
#include "main.h"
#include "lcd_menu.h"
#include "file_lib.h"
#include "lua_if.h"
#include "prog_if.h"
#include "modify_param.h"
/* 多行文本框 */ /* 多行文本框 */
#define MEMO_X 0 #define MEMO_X 0
@ -213,7 +207,7 @@ void status_MonitorCan(void)
case KEY_LONG_DOWN_S: /* S键 长按 */ case KEY_LONG_DOWN_S: /* S键 长按 */
LCD_SetEncode(ENCODE_UTF8); LCD_SetEncode(ENCODE_UTF8);
ModifyParam(MS_MONITOR_UART); /* 参数修改界面,阻塞 */ ModifyParam(MODIFY_PARAM_UART_MON); /* 参数修改界面,阻塞 */
LCD_SetEncode(ENCODE_GBK); LCD_SetEncode(ENCODE_GBK);
fRefresh = 1; fRefresh = 1;
fInit = 1; fInit = 1;

View File

@ -14,8 +14,7 @@
* *
********************************************************************************************************* *********************************************************************************************************
*/ */
#include "bsp.h" #include "includes.h"
#include "main.h"
static void DispCurrentVolt(void); static void DispCurrentVolt(void);
static void AutoCurrentRange(void); static void AutoCurrentRange(void);

View File

@ -0,0 +1,210 @@
/*
*********************************************************************************************************
*
* : DS18B20温度传感器监视
* : status_ds18b20_meter.c
* : V1.0
* : 8DS18B20温度值
* :
*
* V1.0 2020-11-29 armfly
*
* Copyright (C), 2019-2030, www.armfly.com
*
*********************************************************************************************************
*/
#include "includes.h"
static void DispDS18B20(void);
static float TemperatureMin[8];
static float TemperatureMax[8];
/*
*********************************************************************************************************
* : status_DS18B20Meter
* : DS18B20温度表状态.
* :
* :
*********************************************************************************************************
*/
void status_DS18B20Meter(void)
{
uint8_t ucKeyCode; /* 按键代码 */
uint8_t fRefresh;
DispHeader("DS18B20温度表");
// DispHelpBar("D0-D7可接8个DS18B20",
// "");
fRefresh = 1;
{
uint8_t i;
for (i = 0; i < 8; i++)
{
TemperatureMin[i] = 125;
TemperatureMax[i] = -60;
}
}
bsp_StartAutoTimer(0, 300);
while (g_MainStatus == MS_DS18B20_METER)
{
if (fRefresh) /* 刷新整个界面 */
{
fRefresh = 0;
DispDS18B20();
}
bsp_Idle();
if (bsp_CheckTimer(0))
{
fRefresh = 1;
}
ucKeyCode = bsp_GetKey(); /* 读取键值, 无键按下时返回 KEY_NONE = 0 */
if (ucKeyCode != KEY_NONE)
{
/* 有键按下 */
switch (ucKeyCode)
{
case KEY_DOWN_S: /* S键按下 */
break;
case KEY_UP_S: /* S键释放 */
;
break;
case KEY_LONG_DOWN_S: /* S键长按 */
break;
case KEY_DOWN_C: /* C键按下 */
break;
case KEY_UP_C: /* C键释放 */
;
break;
case KEY_LONG_DOWN_C: /* C键长按 */
PlayKeyTone();
g_MainStatus = MS_EXTEND_MENU_REC;
break;
default:
break;
}
}
}
bsp_StopTimer(0);
}
/*
*********************************************************************************************************
* : DispDS18B20
* : 8DS18B20数据
* :
* :
*********************************************************************************************************
*/
#define LABLE_X 5
static void DispDS18B20(void)
{
/*
BackColor = RGB(255, 236, 245);
BackColor = RGB(150, 240, 40);
BackColor = RGB(255, 255, 136);
BackColor = RGB(239, 223, 255);
BackColor = RGB(119, 253, 213);
*/
FONT_T tFont16, tFont24;
char buf[32];
uint16_t x, y, h, w;
uint8_t i;
uint8_t SensorOk[8];
float Temperature[8];
for (i = 0; i < 8; i++)
{
if (DS18B20_ReadTemp(i, &Temperature[i]) == 1)
{
SensorOk[i] = 1;
/* DS18B20第1次读出数据可能是 85.0 */
if ((uint16_t)(Temperature[i] * 10) != 850)
{
if (Temperature[i] < TemperatureMin[i])
{
TemperatureMin[i] = Temperature[i];
}
if (Temperature[i] > TemperatureMax[i])
{
TemperatureMax[i] = Temperature[i];
}
}
}
else
{
SensorOk[i] = 0;
}
}
/* 设置字体参数 */
{
tFont16.FontCode = FC_ST_16; /* 字体代码 16点阵 */
tFont16.FrontColor = RGB(120,120,120); /* 字体颜色 */
tFont16.BackColor = CL_MASK; /* 文字背景 - 透明 */
tFont16.Space = 0; /* 文字间距,单位 = 像素 */
tFont24.FontCode = FC_ST_24; /* 字体代码 16点阵 */
tFont24.FrontColor = RGB(50,50,50); /* 字体颜色 */
tFont24.BackColor = CL_MASK; /* 文字背景 - 透明 */
tFont24.Space = 0; /* 文字间距,单位 = 像素 */
}
x = LABLE_X;
y = 36;
h = 24 + 1;
w = 200;
for (i = 0; i < 8; i++)
{
/* 显示数字编号 */
sprintf(buf, "%d", i);
w = 24;
DispLabelRound(x, y, h, w, RGB(150, 240, 40), buf, &tFont24);
/* 显示实时温度值 */
if (SensorOk[i] == 0)
{
sprintf(buf, "----");
}
else
{
/* -40.0℃ */
sprintf(buf, "%0.1f℃", Temperature[i]);
}
w = 100;
DispLabelRound(x + 24 + 5, y, h, w, RGB(255, 236, 245), buf, &tFont24);
/* 显示温度最大最小值 */
if (SensorOk[i] == 0)
{
sprintf(buf, "----");
}
else
{
/* -40.0℃ */
sprintf(buf, "%0.1f, %0.1f", TemperatureMin[i],TemperatureMax[i]);
}
w = 100;
DispLabelRound(x + 24 + 8 + 100, y, h, w, RGB(255, 255, 136), buf, &tFont16);
y += h;
}
}
/***************************** 安富莱电子 www.armfly.com (END OF FILE) *********************************/

View File

@ -13,19 +13,20 @@
* *
********************************************************************************************************* *********************************************************************************************************
*/ */
#include "bsp.h" #include "includes.h"
#include "main.h"
#include "lcd_menu.h" #include "lcd_menu.h"
#include "SW_DP_Multi.h" #include "SW_DP_Multi.h"
#include "modify_param.h" #include "modify_param.h"
#include "usb_if.h"
const uint8_t *g_Menu1_Text[] = const uint8_t *g_Menu1_Text[] =
{ {
" 1 脱机烧录器(单路)", " 1 CMSIS-DAP仿真器",
" 2 脱机烧录器(多路)", " 2 脱机烧录器(单路)",
" 3 LUA小程序", " 3 脱机烧录器(多路)",
" 4 数据监视器", " 4 LUA小程序",
" 5 系统设置", " 5 数据监视器",
" 6 系统设置",
/* 结束符号, 用于菜单函数自动识别菜单项个数 */ /* 结束符号, 用于菜单函数自动识别菜单项个数 */
"&" "&"
@ -36,7 +37,7 @@ MENU_T g_tMenu1;
const uint8_t *g_MenuRec_Text[] = const uint8_t *g_MenuRec_Text[] =
{ {
"1 串口(TTL 485 232)", "1 串口(TTL 485 232)",
"2 CAN总线(预留)", "2 DS18B20温度表",
/* 结束符号, 用于菜单函数自动识别菜单项个数 */ /* 结束符号, 用于菜单函数自动识别菜单项个数 */
"&" "&"
@ -44,6 +45,8 @@ const uint8_t *g_MenuRec_Text[] =
MENU_T g_tMenuRec; MENU_T g_tMenuRec;
void JumpToDAPLink(void);
/* /*
********************************************************************************************************* *********************************************************************************************************
* : status_ExtendMenu1 * : status_ExtendMenu1
@ -109,27 +112,32 @@ void status_ExtendMenu1(void)
case KEY_LONG_DOWN_S: /* S键 上 */ case KEY_LONG_DOWN_S: /* S键 上 */
if (g_tMenu1.Cursor == 0) if (g_tMenu1.Cursor == 0)
{
/* 跳转到DAP固件 */
JumpToDAPLink();
}
else if (g_tMenu1.Cursor == 1)
{ {
g_gMulSwd.MultiMode = 0; g_gMulSwd.MultiMode = 0;
g_MainStatus = MS_PROG_WORK; g_MainStatus = MS_PROG_WORK;
} }
else if (g_tMenu1.Cursor == 1) else if (g_tMenu1.Cursor == 2)
{ {
g_gMulSwd.MultiMode = g_tParam.MultiProgMode; g_gMulSwd.MultiMode = g_tParam.MultiProgMode;
g_MainStatus = MS_PROG_WORK; g_MainStatus = MS_PROG_WORK;
} }
else if (g_tMenu1.Cursor == 2) else if (g_tMenu1.Cursor == 3)
{ {
g_MainStatus = MS_LUA_SELECT_FILE; g_MainStatus = MS_LUA_SELECT_FILE;
} }
else if (g_tMenu1.Cursor == 3) else if (g_tMenu1.Cursor == 4)
{ {
g_MainStatus = MS_EXTEND_MENU_REC; g_MainStatus = MS_EXTEND_MENU_REC;
} }
else if (g_tMenu1.Cursor == 4) else if (g_tMenu1.Cursor == 5)
{ {
g_MainStatus = MS_SYSTEM_SET; g_MainStatus = MS_SYSTEM_SET;
} }
break; break;
case KEY_UP_C: /* C键 下 */ case KEY_UP_C: /* C键 下 */
@ -222,7 +230,7 @@ void status_ExtendMenuRec(void)
} }
else if (g_tMenuRec.Cursor == 1) else if (g_tMenuRec.Cursor == 1)
{ {
g_MainStatus = MS_MONITOR_CAN; g_MainStatus = MS_DS18B20_METER;
} }
else if (g_tMenuRec.Cursor == 2) else if (g_tMenuRec.Cursor == 2)
{ {
@ -251,4 +259,75 @@ void status_ExtendMenuRec(void)
} }
} }
/*
*********************************************************************************************************
* : JumpToDAPLink
* : daplink固件
* :
* :
*********************************************************************************************************
*/
void JumpToDAPLink(void)
{
uint8_t i;
__IO uint32_t AppAddr = 0x08100000; /* APP 地址 */
void (*AppJump)(void); /* 声明一个函数指针 */
usbd_UnInit();
/* 关闭全局中断 */
DISABLE_INT();
/* 关闭所有的外设 */
bsp_DeInit();
/* 设置所有时钟到默认状态使用HSI时钟 */
HAL_RCC_DeInit();
/* 关闭UART外设 */
{
USART1->CR1 &= ~USART_CR1_UE;
USART2->CR1 &= ~USART_CR1_UE;
USART3->CR1 &= ~USART_CR1_UE;
UART4->CR1 &= ~USART_CR1_UE;
UART5->CR1 &= ~USART_CR1_UE;
USART6->CR1 &= ~USART_CR1_UE;
UART7->CR1 &= ~USART_CR1_UE;
UART8->CR1 &= ~USART_CR1_UE;
}
/* 关闭滴答定时器,复位到默认值 */
SysTick->CTRL = 0;
SysTick->LOAD = 0;
SysTick->VAL = 0;
/* 关闭所有中断,清除所有中断挂起标志 */
for (i = 0; i < 8; i++)
{
NVIC->ICER[i]=0xFFFFFFFF;
NVIC->ICPR[i]=0xFFFFFFFF;
}
/* 使能全局中断 */
ENABLE_INT();
/* 跳转到应用程序首地址是MSP地址+4是复位中断服务程序地址 */
AppJump = (void (*)(void)) (*((uint32_t *) (AppAddr + 4)));
/* 设置主堆栈指针 */
__set_MSP(*(uint32_t *)AppAddr);
/* 在RTOS工程这条语句很重要设置为特权级模式使用MSP指针 */
__set_CONTROL(0);
/* 跳转到系统BootLoader */
AppJump();
/* 跳转成功的话,不会执行到这里,用户可以在这里添加代码 */
while (1)
{
}
}
/***************************** 安富莱电子 www.armfly.com (END OF FILE) *********************************/ /***************************** 安富莱电子 www.armfly.com (END OF FILE) *********************************/

View File

@ -13,8 +13,7 @@
* *
********************************************************************************************************* *********************************************************************************************************
*/ */
#include "bsp.h" #include "includes.h"
#include "main.h"
#include "usbd_user.h" #include "usbd_user.h"
#define DATE_X 5 #define DATE_X 5

View File

@ -13,8 +13,7 @@
* *
********************************************************************************************************* *********************************************************************************************************
*/ */
#include "bsp.h" #include "includes.h"
#include "main.h"
#include "lcd_menu.h" #include "lcd_menu.h"
#include "file_lib.h" #include "file_lib.h"
#include "lua_if.h" #include "lua_if.h"

View File

@ -13,9 +13,7 @@
* *
********************************************************************************************************* *********************************************************************************************************
*/ */
#include "bsp.h" #include "includes.h"
#include "main.h"
#include "lcd_menu.h"
/* /*
********************************************************************************************************* *********************************************************************************************************

View File

@ -13,8 +13,7 @@
* *
********************************************************************************************************* *********************************************************************************************************
*/ */
#include "bsp.h" #include "includes.h"
#include "main.h"
static void DispPulse(void); static void DispPulse(void);

View File

@ -13,14 +13,9 @@
* *
********************************************************************************************************* *********************************************************************************************************
*/ */
#include "bsp.h" #include "includes.h"
#include "main.h"
#include "file_lib.h"
#include "lua_if.h"
#include "prog_if.h"
#include "lcd_menu.h"
#include "SW_DP_Multi.h" #include "SW_DP_Multi.h"
#include "modify_param.h"
/* 三个按钮 */ /* 三个按钮 */
#define BTN1_X (240 - BTN1_W - 5) #define BTN1_X (240 - BTN1_W - 5)
@ -98,6 +93,7 @@ static void DispProgCounter(void);
extern void sysTickInit(void); extern void sysTickInit(void);
extern uint8_t swd_init_debug(void); extern uint8_t swd_init_debug(void);
extern uint8_t swd_read_idcode(uint32_t *id); extern uint8_t swd_read_idcode(uint32_t *id);
extern uint8_t swd_init(void);
/* /*
********************************************************************************************************* *********************************************************************************************************
@ -282,6 +278,18 @@ void status_ProgWork(void)
// } // }
// } // }
/* V1.36 解决第一次上电第1次烧录失败问题 */
{
if (g_gMulSwd.MultiMode == 0)
{
MUL_PORT_SWD_SETUP();
}
else
{
swd_init();
}
}
g_tProg.AutoStart = 0; g_tProg.AutoStart = 0;
fRefresh = 1; fRefresh = 1;
while (g_MainStatus == MS_PROG_WORK) while (g_MainStatus == MS_PROG_WORK)
@ -931,7 +939,7 @@ void status_ProgSetting(void)
{ {
//g_MainStatus = MS_PROG_MODIFY_PARAM);; //g_MainStatus = MS_PROG_MODIFY_PARAM);;
ModifyParam(MS_PROG_MODIFY_PARAM); ModifyParam(MODIFY_PARAM_PROG);
LCD_DispMenu(&g_tMenuProg1); LCD_DispMenu(&g_tMenuProg1);
/* 通知lua程序多路编程参数变化 */ /* 通知lua程序多路编程参数变化 */
lua_do("MULTI_MODE = pg_read_c_var(\"MultiProgMode\")"); lua_do("MULTI_MODE = pg_read_c_var(\"MultiProgMode\")");

View File

@ -13,8 +13,7 @@
* *
********************************************************************************************************* *********************************************************************************************************
*/ */
#include "bsp.h" #include "includes.h"
#include "main.h"
static void DispResistor(void); static void DispResistor(void);

View File

@ -13,24 +13,17 @@
* *
********************************************************************************************************* *********************************************************************************************************
*/ */
#include "bsp.h" #include "includes.h"
#include "main.h"
#include "status_system_set.h"
#include "lcd_menu.h"
#include "wifi_if.h"
#include "usb_if.h"
#include "file_lib.h"
#include "modify_param.h"
const uint8_t *g_MenuSys_Text[] = const uint8_t *g_MenuSys_Text[] =
{ {
" 1 硬件信息", " 1 基本参数",
" 2 参数设置", " 2 网络参数",
" 3 ESP32固件升级", " 3 ESP32固件升级",
" 4 USB eMMC磁盘", " 4 USB eMMC磁盘",
" 5 数据维护", " 5 数据维护",
" 6 重启", " 6 硬件信息",
" 7 重启",
/* 结束符号, 用于菜单函数自动识别菜单项个数 */ /* 结束符号, 用于菜单函数自动识别菜单项个数 */
"&" "&"
}; };
@ -109,15 +102,16 @@ void status_SystemSetMain(void)
case KEY_LONG_DOWN_S: /* S键 上 */ case KEY_LONG_DOWN_S: /* S键 上 */
PlayKeyTone(); PlayKeyTone();
s_enter_sub_menu = 1; s_enter_sub_menu = 1;
if (g_tMenuSys.Cursor == 0) if (g_tMenuSys.Cursor == 0)
{ {
g_MainStatus = MS_HARD_INFO; ModifyParam(MODIFY_PARAM_SYSTEM);
DispHeader2(90, "系统设置"); /* 需要清屏 */
LCD_DispMenu(&g_tMenuSys);
} }
else if (g_tMenuSys.Cursor == 1) else if (g_tMenuSys.Cursor == 1)
{ {
//g_MainStatus = MS_MODIFY_PARAM; ModifyParam(MODIFY_PARAM_NET);
ModifyParam(MS_SYSTEM_SET);
DispHeader2(90, "系统设置"); /* 需要清屏 */ DispHeader2(90, "系统设置"); /* 需要清屏 */
LCD_DispMenu(&g_tMenuSys); LCD_DispMenu(&g_tMenuSys);
} }
@ -133,7 +127,11 @@ void status_SystemSetMain(void)
{ {
g_MainStatus = MS_FILE_MANAGE; g_MainStatus = MS_FILE_MANAGE;
} }
else if (g_tMenuSys.Cursor == 5) /* 重启 */ else if (g_tMenuSys.Cursor == 5)
{
g_MainStatus = MS_HARD_INFO;
}
else if (g_tMenuSys.Cursor == 6) /* 重启 */
{ {
ResetReq = 1; ResetReq = 1;
} }
@ -379,250 +377,6 @@ void status_HardInfo(void)
} }
} }
/*
*********************************************************************************************************
* : status_ModifyParam
* :
* :
* :
*********************************************************************************************************
*/
#define PARAM_NUM 4
void status_ModifyParam(void)
{
uint8_t ucKeyCode; /* 按键代码 */
uint8_t fRefresh = 1;
uint8_t fSaveParam = 0;
uint8_t cursor = 0;
char buf[48];
uint8_t ucIgnoreKey = 1;
uint8_t active;
DispHeader2(92, "参数设置");
DispHelpBar("长按S键选择参数",
"短按S、C键修改参数值");
while (g_MainStatus == MS_MODIFY_PARAM)
{
bsp_Idle();
if (fRefresh == 1)
{
fRefresh = 0;
/* 第1个参数 */
{
if (cursor == 0)
{
active = 1;
}
else
{
active = 0;
}
if (g_tParam.KeyToneEnable == 0)
{
sprintf(buf, "关闭");
DispParamBar(0, "1 按键音:", buf, active);
}
else
{
sprintf(buf, "打开");
DispParamBar(0, "1 按键音:", buf, active);
}
}
/* 第2个参数 - 界面风格 */
{
if (cursor == 1)
{
active = 1;
}
else
{
active = 0;
}
sprintf(buf, "%3d", g_tParam.UIStyle);
DispParamBar(1, "2 主 题:", buf, active);
}
/* 第3个参数 - 屏保 */
{
uint16_t min;
if (cursor == 2)
{
active = 1;
}
else
{
active = 0;
}
min = GetSleepTimeMinute();
if (min == 0)
{
sprintf(buf, "关闭");
}
else
{
sprintf(buf, "%3d 分钟", min);
}
DispParamBar(2, "3 屏 保:", buf, active);
}
/* 第3个参数 - 文件列表字体 */
{
if (cursor == 3)
{
active = 1;
}
else
{
active = 0;
}
if (g_tParam.FileListFont24 == 1)
{
sprintf(buf, "24点阵");
}
else
{
sprintf(buf, "16点阵");
}
DispParamBar(3, "4 列表字体:", buf, active);
}
}
ucKeyCode = bsp_GetKey(); /* 读取键值, 无键按下时返回 KEY_NONE = 0 */
if (ucKeyCode != KEY_NONE)
{
/* 有键按下 */
switch (ucKeyCode)
{
case KEY_UP_S: /* S键 弹起 */
if (ucIgnoreKey == 1)
{
ucIgnoreKey = 0;
break;
}
if (cursor == 0)
{
if (g_tParam.KeyToneEnable == 0)
{
g_tParam.KeyToneEnable = 1;
}
else
{
g_tParam.KeyToneEnable = 0;
}
}
else if (cursor == 1)
{
g_tParam.UIStyle++;
if (g_tParam.UIStyle >= UI_STYLE_NUM)
{
g_tParam.UIStyle = 0;
}
}
else if (cursor == 2)
{
if (g_tParam.LcdSleepTime > 0)
{
g_tParam.LcdSleepTime--;
}
else
{
g_tParam.LcdSleepTime = 4;
}
}
else if (cursor == 3)
{
if (g_tParam.FileListFont24 == 0)
{
g_tParam.FileListFont24 = 1;
}
else
{
g_tParam.FileListFont24 = 0;
}
}
fRefresh = 1;
fSaveParam = 1;
break;
case KEY_UP_C: /* C键 下 */
if (cursor == 0)
{
if (g_tParam.KeyToneEnable == 0)
{
g_tParam.KeyToneEnable = 1;
}
else
{
g_tParam.KeyToneEnable = 0;
}
}
else if (cursor == 1)
{
if (g_tParam.UIStyle > 0)
{
g_tParam.UIStyle--;
}
else
{
g_tParam.UIStyle = UI_STYLE_NUM;
}
}
else if (cursor == 2)
{
if (++g_tParam.LcdSleepTime > 4)
{
g_tParam.LcdSleepTime = 0;
}
}
else if (cursor == 3)
{
if (g_tParam.FileListFont24 == 0)
{
g_tParam.FileListFont24 = 1;
}
else
{
g_tParam.FileListFont24 = 0;
}
}
fRefresh = 1;
fSaveParam = 1;
break;
case KEY_LONG_DOWN_S: /* S键长按 - 选择参数 */
if (++cursor >= PARAM_NUM)
{
cursor = 0;
}
ucIgnoreKey = 1;
fRefresh = 1;
break;
case KEY_LONG_DOWN_C: /* C键长按 - 返回 */
PlayKeyTone();
g_MainStatus = MS_SYSTEM_SET;
break;
default:
break;
}
}
}
if (fSaveParam == 1)
{
SaveParam(); /* 保存参数 */
}
}
/* /*
********************************************************************************************************* *********************************************************************************************************
* : status_ESP32Test * : status_ESP32Test

View File

@ -13,8 +13,7 @@
* *
********************************************************************************************************* *********************************************************************************************************
*/ */
#include "bsp.h" #include "includes.h"
#include "main.h"
static void DispTemp(void); static void DispTemp(void);

View File

@ -13,8 +13,7 @@
* *
********************************************************************************************************* *********************************************************************************************************
*/ */
#include "bsp.h" #include "includes.h"
#include "main.h"
static void DispTVccVoltCurr(void); static void DispTVccVoltCurr(void);
static void DispTVccSetting(uint16_t _volt, uint8_t _mode); static void DispTVccSetting(uint16_t _volt, uint8_t _mode);

View File

@ -13,13 +13,8 @@
* *
********************************************************************************************************* *********************************************************************************************************
*/ */
#include "bsp.h" #include "includes.h"
#include "main.h"
#include "lcd_menu.h"
#include "file_lib.h"
#include "lua_if.h"
#include "prog_if.h"
#include "modify_param.h"
/* 多行文本框 */ /* 多行文本框 */
#define TITLE_X 0 #define TITLE_X 0
@ -183,6 +178,10 @@ void UartReciveNew2(uint8_t _byte)
if (g_tParam.UartMonHex == 0) /* ASCII格式显示 */ if (g_tParam.UartMonHex == 0) /* ASCII格式显示 */
{ {
if (_byte < ' ')
{
_byte = ' '; /* 不可见字符转换为空格 */
}
LCD_MemoAddChar(&g_RecMemo, _byte); LCD_MemoAddChar(&g_RecMemo, _byte);
} }
else /* HEX格式显示 */ else /* HEX格式显示 */
@ -396,7 +395,7 @@ void status_MonitorUart(void)
else if (g_tMenuUart.Cursor == 3) /* 设置串口参数 */ else if (g_tMenuUart.Cursor == 3) /* 设置串口参数 */
{ {
LCD_SetEncode(ENCODE_UTF8); LCD_SetEncode(ENCODE_UTF8);
ModifyParam(MS_MONITOR_UART); /* 参数修改界面,阻塞 */ ModifyParam(MODIFY_PARAM_UART_MON); /* 参数修改界面,阻塞 */
LCD_SetEncode(ENCODE_GBK); LCD_SetEncode(ENCODE_GBK);
fInit = 1; fInit = 1;
} }

View File

@ -13,8 +13,7 @@
* *
********************************************************************************************************* *********************************************************************************************************
*/ */
#include "bsp.h" #include "includes.h"
#include "main.h"
static void DispCH1CH2(void); static void DispCH1CH2(void);
static void AutoVoltRange(void); static void AutoVoltRange(void);

View File

@ -14,10 +14,7 @@
********************************************************************************************************* *********************************************************************************************************
*/ */
#include "bsp.h" #include "includes.h"
#include "wifi_if.h"
#include "param.h"
#include "main.h"
uint8_t link_id = 0xFF; /* 当前的TCP连接id, 0-4有效。 FF表示无TCP连接 */ uint8_t link_id = 0xFF; /* 当前的TCP连接id, 0-4有效。 FF表示无TCP连接 */
uint8_t wifi_state = WIFI_STOP; uint8_t wifi_state = WIFI_STOP;

View File

@ -100,6 +100,20 @@ void bsp_Init(void)
bsp_InitRNG(); /* 配置启用随机数模块 */ bsp_InitRNG(); /* 配置启用随机数模块 */
} }
/*
*********************************************************************************************************
* : bsp_DeInit
* :
* :
* :
*********************************************************************************************************
*/
void bsp_DeInit(void)
{
bsp_DeInitUart();
}
/* /*
********************************************************************************************************* *********************************************************************************************************
* : SystemClock_Config * : SystemClock_Config

View File

@ -99,6 +99,7 @@
#include "bsp_ext_io.h" #include "bsp_ext_io.h"
#include "bsp_rng.h" #include "bsp_rng.h"
#include "bsp_ds18b20.h"
@ -108,6 +109,7 @@
/* 提供给其他C文件调用的函数 */ /* 提供给其他C文件调用的函数 */
void bsp_Init(void); void bsp_Init(void);
void bsp_DeInit(void);
void bsp_Idle(void); void bsp_Idle(void);
void bsp_GetCpuID(uint32_t *_id); void bsp_GetCpuID(uint32_t *_id);

View File

@ -33,6 +33,8 @@ void bsp_InitRTC(void);
uint8_t RTC_WriteClock(uint16_t _year, uint8_t _mon, uint8_t _day, uint8_t _hour, uint8_t _min, uint8_t _sec); uint8_t RTC_WriteClock(uint16_t _year, uint8_t _mon, uint8_t _day, uint8_t _hour, uint8_t _min, uint8_t _sec);
void RTC_ReadClock(void); void RTC_ReadClock(void);
uint8_t RTC_CalcWeek(uint16_t _year, uint8_t _mon, uint8_t _day); uint8_t RTC_CalcWeek(uint16_t _year, uint8_t _mon, uint8_t _day);
uint32_t RTC_ReadBkup32(uint32_t _addr);
void RTC_WriteBkup32(uint32_t _addr, uint32_t _value);
extern RTC_T g_tRTC; extern RTC_T g_tRTC;

View File

@ -0,0 +1,19 @@
/*
*********************************************************************************************************
*
* : DS18B20 (1-wire
* : bsp_ds18b20.h
*
* Copyright (C), 2020, www.armfly.com
*
*********************************************************************************************************
*/
#ifndef _BSP_DS18B20_H
#define _BSP_DS18B20_H
uint8_t DS18B20_ReadTemp(uint8_t _ch, float *_result);
#endif
/***************************** 安富莱电子 www.armfly.com (END OF FILE) *********************************/

View File

@ -55,7 +55,8 @@ typedef enum
ES_GPIO_SWD_OUT = 8, /* 1拖4 SWD接口用 */ ES_GPIO_SWD_OUT = 8, /* 1拖4 SWD接口用 */
ES_GPIO_SPI = 9, /* SPI功能 */ ES_GPIO_SPI = 9, /* 硬件SPI功能 */
ES_PROG_SPI_FLASH = 10, /* 脱机烧录SPI FLASH */
} EIO_SELECT_E; } EIO_SELECT_E;
void bsp_InitExtIO(void); void bsp_InitExtIO(void);

View File

@ -187,6 +187,7 @@ typedef struct
}UART_T; }UART_T;
void bsp_InitUart(void); void bsp_InitUart(void);
void bsp_DeInitUart(void);
void comSendBuf(COM_PORT_E _ucPort, uint8_t *_ucaBuf, uint16_t _usLen); void comSendBuf(COM_PORT_E _ucPort, uint8_t *_ucaBuf, uint16_t _usLen);
void comSendChar(COM_PORT_E _ucPort, uint8_t _ucByte); void comSendChar(COM_PORT_E _ucPort, uint8_t _ucByte);
uint8_t comGetChar(COM_PORT_E _ucPort, uint8_t *_pByte); uint8_t comGetChar(COM_PORT_E _ucPort, uint8_t *_pByte);

View File

@ -633,10 +633,10 @@ void DSO_SetGain(uint8_t _ch, uint8_t _gain)
{ {
if (_gain == 0) {G1C_0(); G1B_0(); G1A_0();} if (_gain == 0) {G1C_0(); G1B_0(); G1A_0();}
else if (_gain == 1) {G1C_0(); G1B_0(); G1A_1();} else if (_gain == 1) {G1C_0(); G1B_0(); G1A_1();}
else if (_gain == 2) {G1C_0(); G1B_1(); G1A_0();} else if (_gain == 2) {G1C_0(); G1B_1(); G1A_0();}
else if (_gain == 3) {G1C_0(); G1B_1(); G1A_1();} else if (_gain == 3) {G1C_0(); G1B_1(); G1A_1();}
else if (_gain == 4) {G1C_1(); G1B_0(); G1A_0();} else if (_gain == 4) {G1C_1(); G1B_0(); G1A_0();}
else if (_gain == 5) {G1C_1(); G1B_0(); G1A_1();} else if (_gain == 5) {G1C_1(); G1B_0(); G1A_1();}
else if (_gain == 6) {G1C_1(); G1B_1(); G1A_0();} else if (_gain == 6) {G1C_1(); G1B_1(); G1A_0();}
else if (_gain == 7) {G1C_1(); G1B_1(); G1A_1();} else if (_gain == 7) {G1C_1(); G1B_1(); G1A_1();}
} }
@ -644,10 +644,10 @@ void DSO_SetGain(uint8_t _ch, uint8_t _gain)
{ {
if (_gain == 0) {G2C_0(); G2B_0(); G2A_0();} if (_gain == 0) {G2C_0(); G2B_0(); G2A_0();}
else if (_gain == 1) {G2C_0(); G2B_0(); G2A_1();} else if (_gain == 1) {G2C_0(); G2B_0(); G2A_1();}
else if (_gain == 2) {G2C_0(); G2B_1(); G2A_0();} else if (_gain == 2) {G2C_0(); G2B_1(); G2A_0();}
else if (_gain == 3) {G2C_0(); G2B_1(); G2A_1();} else if (_gain == 3) {G2C_0(); G2B_1(); G2A_1();}
else if (_gain == 4) {G2C_1(); G2B_0(); G2A_0();} else if (_gain == 4) {G2C_1(); G2B_0(); G2A_0();}
else if (_gain == 5) {G2C_1(); G2B_0(); G2A_1();} else if (_gain == 5) {G2C_1(); G2B_0(); G2A_1();}
else if (_gain == 6) {G2C_1(); G2B_1(); G2A_0();} else if (_gain == 6) {G2C_1(); G2B_1(); G2A_0();}
else if (_gain == 7) {G2C_1(); G2B_1(); G2A_1();} else if (_gain == 7) {G2C_1(); G2B_1(); G2A_1();}
} }

View File

@ -296,4 +296,31 @@ uint8_t RTC_CalcWeek(uint16_t _year, uint8_t _mon, uint8_t _day)
return w; return w;
} }
/*
*********************************************************************************************************
* : RTC_ReadBkup32
* :
* : _addr 0-31
* :
*********************************************************************************************************
*/
uint32_t RTC_ReadBkup32(uint32_t _addr)
{
return HAL_RTCEx_BKUPRead(&RtcHandle, _addr);
}
/*
*********************************************************************************************************
* : RTC_WriteBkup32
* :
* : _addr 0-31
* :
*********************************************************************************************************
*/
void RTC_WriteBkup32(uint32_t _addr, uint32_t _value)
{
HAL_RTCEx_BKUPWrite(&RtcHandle, _addr, _value);
}
/***************************** 安富莱电子 www.armfly.com (END OF FILE) *********************************/ /***************************** 安富莱电子 www.armfly.com (END OF FILE) *********************************/

491
User/bsp/src/bsp_ds18b20.c Normal file
View File

@ -0,0 +1,491 @@
/*
*********************************************************************************************************
*
* : DS18B20 (1-wire
* : bsp_ds18b20.c
* : V1.0
* : H7-TOOL 10us定时中断模式驱动. 8.
*
*********************************************************************************************************
*/
#include "bsp.h"
#include "param.h"
#define DS18B20_IRQ_HANDLE TIM16_IRQHandler
#define TIM_HARD TIM16
#define TIM_HARD_IRQn TIM16_IRQn
#define DQ_DIR_OUTPUT(ch) EIO_ConfigPort(ch, ES_GPIO_OUT)
#define DQ_DIR_INPUT(ch) EIO_ConfigPort(ch, ES_GPIO_IN)
#define DQ_0(ch) EIO_SetOutLevel(ch, 0)
#define DQ_1(ch) EIO_SetOutLevel(ch, 1)
/* 判断DQ输入是否为低 */
#define DQ_IS_LOW(ch) (EIO_GetInputLevel(ch) == 0)
/*
D0 PD14 PA15 PI0 - DIR PH8 CS2
D1 PD15 PA8 PH19 - DIR PG8 CS3
D2 PE6 PD0 PB7 - DIR PD9 MOSI_1 (SPI信号)
D3 PE5 PD1 PH11 - DIR PG10 MISO_1 (SPI信号)
D4 PE4 PE7 PH12 - DIR PG12 CS1 ()
D5 PE2 PE8 PI5 - DIR PG7 SCK (SPI信号)
D6 PE9 PD3 PA0 - DIR PD10 MOSI_2
D7 PE10 PI6 - DIR PI1 MISO_2 (2MISO)
D8 PE11 PD4 PI3 - DIR PG9 MISO_3 (3MISO)
D9 PE12 PD5 - DIR PI12 MISO_4 (4MISO)
*/
static float s_DS18B20_TempReg[8];
static uint16_t s_err[8] = {0};
static void DS18B20_StartTimerIRQ(void);
static void DS18B20_StopTimerIRQ(void);
static uint8_t s_ch = 0;
static uint16_t s_status = 0;
/*
*********************************************************************************************************
* : DS18B20_ReadTempReg
* : . .
* :
* : 01OK
*********************************************************************************************************
*/
uint8_t DS18B20_ReadTemp(uint8_t _ch, float *_result)
{
uint8_t re = 0;
if (_ch > 7)
{
return re;
}
EIO_ConfigPort(_ch, ES_GPIO_OUT); /* DQ方向输出 */
s_err[_ch] = 1;
s_ch = _ch;
s_status = 0;
/* 定时周期10us频率100KHz */
DS18B20_StartTimerIRQ();
while (s_status != 10)
{
//bsp_Idle();
}
DS18B20_StopTimerIRQ();
if (s_err[s_ch] == 1)
{
re = 0; /* 返回异常温度值 */
}
else
{
*_result = (float)s_DS18B20_TempReg[s_ch] / 16;
re = 1;
}
return re;
}
/*
*********************************************************************************************************
* : DS18B20_CaculCRC
* : CRC校验
* : _buf:
* _len :
* :
*********************************************************************************************************
*/
uint8_t DS18B20_CaculCRC(uint8_t *_buf, uint8_t _len)
{
uint8_t crc = 0, i, j;
for (i = 0; i < _len; i++)
{
crc = crc ^ _buf[i];
for (j = 0; j < 8; j++)
{
if (crc & 0x01)
{
crc = (crc >> 1) ^ 0x8C;
}
else
{
crc >>= 1;
}
}
}
return crc;
}
/*
*********************************************************************************************************
* : DS18B20_IRQ_HANDLE
* : 10us定时中断服务程序DS18B20温度值
* :
* :
*********************************************************************************************************
*/
void DS18B20_IRQ_HANDLE(void)
{
static uint16_t s_time = 0;
static uint16_t s_call_ret = 0;
static uint16_t s_write_value = 0;
static uint8_t s_i;
static uint8_t s_read;
static uint8_t s_rx_buf[9];
static uint8_t s_rx_len = 0;
if (TIM_HARD->SR & TIM_IT_UPDATE)
{
TIM_HARD->SR = (uint16_t)~TIM_IT_UPDATE;
}
/*
, DS18B20 page 15
DQ 480us
DQDQ被上拉电阻拉高 15-60us
DS18B20 DQ为低 60-240us presence pulse (,DS18B20准备就绪 )
DS18B20复位成功
*/
s_time++;
switch (s_status)
{
// DS18B20_Reset(_ch);
// DS18B20_WriteByte(_ch, 0xcc); /* 发命令 - 跳过ROM */
// DS18B20_WriteByte(_ch,0x44); /* 发转换命令 */
// DS18B20_Reset(_ch); /* 总线复位 */
// DS18B20_WriteByte(_ch, 0xcc); /* 发命令 */
// DS18B20_WriteByte(_ch,0xbe); /* 读温度 */
// temp1 = DS18B20_ReadByte(_ch); /* 读温度值低字节 */
// temp2 = DS18B20_ReadByte(_ch); /* 读温度值高字节 */
// return ((temp2 << 8) | temp1); /* 返回16位寄存器值 */
case 0:
s_status++;
break;
case 1:
s_call_ret = s_status + 1; /* 执行完毕返回状态 */
s_status = 100; /* 去执行DS18B20_Reset */
break;
case 2:
s_call_ret = s_status + 1;
s_write_value = 0xcc;
s_status = 110; /* DS18B20_WriteByte(_ch, 0xcc); */
break;
case 3:
s_call_ret = s_status + 1;
s_write_value = 0x44;
s_status = 110; /* DS18B20_WriteByte(_ch,0x44); */
break;
case 4:
s_call_ret = s_status + 1;
s_status = 100; /* DS18B20_Reset */
break;
case 5:
s_call_ret = s_status + 1;
s_write_value = 0xcc;
s_status = 110; /* DS18B20_WriteByte(_ch, 0xcc); */
break;
case 6:
s_call_ret = s_status + 1;
s_write_value = 0xBE;
s_status = 110; /* DS18B20_WriteByte(_ch,0xbe); */
break;
case 7:
s_call_ret = s_status + 1;
s_status = 120; /* DS18B20_ReadByte(_ch); 读温度值 */
break;
case 8:
if (DS18B20_CaculCRC(s_rx_buf, 8) == s_rx_buf[8] && s_rx_buf[4] == 0x7F)
{
int16_t reg16;
reg16 = (s_rx_buf[1] << 8) + s_rx_buf[0];
s_DS18B20_TempReg[s_ch] = reg16;
s_err[s_ch] = 0; /* 读取成功清0 */
}
else
{
s_err[s_ch] = 1;
}
s_status++;
break;
case 9:
/* 任务结束,关闭定时中断 */
DS18B20_StopTimerIRQ();
s_status++;
break;
case 10: /* 执行一次结束,再此处等待 */
;
break;
case 99: /* 异常处理 */
s_err[s_ch] = 1; /* 错误 */
s_status = 9; /* 结束任务 */
break;
/************ DS18B20_Reset 总线复位子程序 ************/
case 100:
DQ_DIR_OUTPUT(s_ch); /* DQ方向输出 */
DQ_0(s_ch); /* 拉低DQ */
s_time = 0;
s_status++;
break;
case 101: /* 延迟 520uS 要求这个延迟大于 480us */
if (s_time >= 52)
{
DQ_DIR_INPUT(s_ch); /* DQ方向输入, 外部上拉会拉到高 */
//DQ_1(s_ch); /* 释放DQ */
s_time = 0;
s_status++;
}
break;
case 102: /* 延时60us等待总线电平归位 */
if (s_time >= 6)
{
s_time = 0;
s_status++;
}
if (!DQ_IS_LOW(s_ch)) /* 总线已经拉高 */
{
s_time = 0;
s_status++;
}
break;
case 103: /* 等待DS18B20拉低总线 */
if (DQ_IS_LOW(s_ch))
{
s_time = 0;
s_status++;
}
if (s_time > 8) /* 80us 没检测到应答则认为DS18B20异常 */
{
s_status = 99; /* 错误处理 */
}
break;
case 104: /* 等待DS18B20释放总线 */
if (!DQ_IS_LOW(s_ch))
{
s_time = 0;
s_status++;
}
if (s_time > 30) /* 300us 没释放则认为DS18B20异常 */
{
s_status = 99; /* 错误处理 */
}
break;
case 105: /* 复位成功,下面可以开始读数据了 */
s_status = s_call_ret;
break;
/************ DS18B20_WriteByte ************/
// for (i = 0; i < 8; i++)
// {
// DQ_0(_ch);
// bsp_DelayUS(2);
// if (_val & 0x01)
// {
// DQ_1(_ch);
// }
// else
// {
// DQ_0(_ch);
// }
// bsp_DelayUS(60);
// DQ_1(_ch);
// bsp_DelayUS(2);
// _val >>= 1;
// }
case 110:
s_i = 0;
s_status++;
break;
case 110 + 1:
DQ_DIR_OUTPUT(s_ch); /* DQ方向输出 */
DQ_0(s_ch); /* 拉低DQ */
bsp_DelayUS(2);
if (s_write_value & 0x01)
{
DQ_1(s_ch);
}
else
{
DQ_0(s_ch);
}
s_time = 0;
s_status++;
break;
case 110 + 2:
if (s_time >= 6)
{
DQ_1(s_ch);
s_write_value >>= 1;
if (++s_i >= 8)
{
s_status++;
}
else
{
s_status--;
}
}
break;
case 110 + 3:
s_status = s_call_ret;
break;
/************ DS18B20_ReadByte ************/
// uint8_t i;
// uint8_t read = 0;
// for (i = 0; i < 8; i++)
// {
// read >>= 1;
// DQ_0(_ch);
// bsp_DelayUS(3);
// DQ_1(_ch);
// bsp_DelayUS(3);
// if (DQ_IS_LOW(_ch))
// {
// ;
// }
// else
// {
// read |= 0x80;
// }
// bsp_DelayUS(60);
// }
// return read;
case 120:
s_rx_len = 0;
s_status++;
break;
case 120 + 1:
s_i = 0;
s_read = 0;
s_status++;
break;
case 120 + 2:
s_read >>= 1;
DQ_DIR_OUTPUT(s_ch); /* DQ方向输出 */
DQ_0(s_ch);
bsp_DelayUS(3);
//DQ_1(s_ch);
DQ_DIR_INPUT(s_ch); /* DQ方向输入 */
bsp_DelayUS(3);
if (DQ_IS_LOW(s_ch))
{
;
}
else
{
s_read |= 0x80;
}
s_time = 0;
s_status++;
break;
case 120 + 3:
if (s_time >= 6) /* 延迟60us */
{
if (++s_i >= 8)
{
s_status++;
}
else
{
s_status--;
}
}
break;
case 120 + 4:
s_rx_buf[s_rx_len] = s_read;
if (++s_rx_len >= 9)
{
s_status++;
}
else
{
s_status = 120 + 1;
}
break;
case 120 + 5:
//s_err[s_ch] = 0; /* 读取成功清0 */
s_status = s_call_ret;
break;
}
}
/*
*********************************************************************************************************
* : DS18B20_StartTimerIRQ
* : TIM定时中断
* :
* :
*********************************************************************************************************
*/
static void DS18B20_StartTimerIRQ(void)
{
bsp_SetTIMforInt(TIM_HARD, 100*1000, 0, 0);
}
/*
*********************************************************************************************************
* : DS18B20_StopTimerIRQ
* : TIM定时中断
* :
* :
*********************************************************************************************************
*/
static void DS18B20_StopTimerIRQ(void)
{
bsp_SetTIMforInt(TIM_HARD, 0, 0, 0);
}
/***************************** 安富莱电子 www.armfly.com (END OF FILE) *********************************/

View File

@ -351,6 +351,12 @@ void EIO_D0_Config(EIO_SELECT_E _mode)
GPIO_INIT_UART7(GPIOA, GPIO_PIN_15); /* 配置GPIO为UART7功能 */ GPIO_INIT_UART7(GPIOA, GPIO_PIN_15); /* 配置GPIO为UART7功能 */
GPIO_INIT_INPUT(GPIOI, GPIO_PIN_0); /* 配置为GPIO 输入功能 */ GPIO_INIT_INPUT(GPIOI, GPIO_PIN_0); /* 配置为GPIO 输入功能 */
} }
else if (_mode == ES_PROG_SPI_FLASH)
{
GPIO_DIR_SET_OUT(GPIO_D0_DIR, PIN_D0_DIR); /* 设置为输出方向 - 先执行 */
GPIO_INIT_INPUT(GPIOA, GPIO_PIN_15); /* 配置为GPIO 输入功能 */
GPIO_INIT_OUT_PP(GPIOI, GPIO_PIN_0); /* 配置为GPIO 输出功能 */
}
else else
{ {
g_tVar.GpioMode[0] = 0; g_tVar.GpioMode[0] = 0;
@ -405,6 +411,13 @@ void EIO_D1_Config(EIO_SELECT_E _mode)
GPIO_INIT_INPUT(GPIOI, GPIO_PIN_0); /* 配置为GPIO 输入功能 */ GPIO_INIT_INPUT(GPIOI, GPIO_PIN_0); /* 配置为GPIO 输入功能 */
GPIO_DIR_SET_IN(GPIO_D1_DIR, PIN_D1_DIR); /* 设置为输入方向 - 后执行 */ GPIO_DIR_SET_IN(GPIO_D1_DIR, PIN_D1_DIR); /* 设置为输入方向 - 后执行 */
} }
else if (_mode == ES_PROG_SPI_FLASH) /* PD15 输出 */
{
GPIO_DIR_SET_OUT(GPIO_D1_DIR, PIN_D1_DIR); /* 设置为输出方向 - 先执行 */
GPIO_INIT_INPUT(GPIOA, GPIO_PIN_8); /* 配置为GPIO输入功能 */
GPIO_INIT_INPUT(GPIOH, GPIO_PIN_10); /* 配置为GPIO输入功能 */
GPIO_INIT_OUT_PP(GPIOD, GPIO_PIN_15); /* 配置为GPIO输出功能 */
}
else else
{ {
g_tVar.GpioMode[1] = 0; g_tVar.GpioMode[1] = 0;
@ -420,8 +433,8 @@ void EIO_D1_Config(EIO_SELECT_E _mode)
* : * :
********************************************************************************************************* *********************************************************************************************************
*/ */
#define GPIO_D2_DIR GPIOD #define GPIO_D2_DIR GPIOD
#define PIN_D2_DIR GPIO_PIN_9 #define PIN_D2_DIR GPIO_PIN_9
void EIO_D2_Config(EIO_SELECT_E _mode) void EIO_D2_Config(EIO_SELECT_E _mode)
{ {
/* /*
@ -458,6 +471,13 @@ void EIO_D2_Config(EIO_SELECT_E _mode)
GPIO_DIR_SET_OUT(GPIO_D2_DIR, PIN_D2_DIR); /* 设置为输出方向 - 先执行 */ GPIO_DIR_SET_OUT(GPIO_D2_DIR, PIN_D2_DIR); /* 设置为输出方向 - 先执行 */
GPIO_INIT_INPUT(GPIOB, GPIO_PIN_7); /* 配置为GPIO 输入功能 */ GPIO_INIT_INPUT(GPIOB, GPIO_PIN_7); /* 配置为GPIO 输入功能 */
GPIO_INIT_AF_PP(GPIOE, GPIO_PIN_6); /* 配置为GPIO AF功能 */ GPIO_INIT_AF_PP(GPIOE, GPIO_PIN_6); /* 配置为GPIO AF功能 */
}
else if (_mode == ES_PROG_SPI_FLASH) /* MOSI_1 = PD0(写时) PE6(读时) */
{
GPIO_DIR_SET_OUT(GPIO_D2_DIR, PIN_D2_DIR); /* 设置为输出方向 - 先执行 */
GPIO_INIT_INPUT(GPIOB, GPIO_PIN_7); /* 配置为GPIO 输入功能 */
GPIO_INIT_INPUT(GPIOE, GPIO_PIN_6); /* 配置为GPIO 输入功能 */
GPIO_INIT_OUT_PP(GPIOD, GPIO_PIN_0); /* 配置为GPIO 输出功能 */
} }
else else
{ {
@ -512,7 +532,14 @@ void EIO_D3_Config(EIO_SELECT_E _mode)
GPIO_INIT_INPUT(GPIOH, GPIO_PIN_11); /* 配置为GPIO 输入功能 */ GPIO_INIT_INPUT(GPIOH, GPIO_PIN_11); /* 配置为GPIO 输入功能 */
GPIO_INIT_AF_PP(GPIOE, GPIO_PIN_5); /* 配置为GPIO AF */ GPIO_INIT_AF_PP(GPIOE, GPIO_PIN_5); /* 配置为GPIO AF */
GPIO_DIR_SET_IN(GPIO_D3_DIR, PIN_D3_DIR); /* 设置为输入方向 - 后执行 */ GPIO_DIR_SET_IN(GPIO_D3_DIR, PIN_D3_DIR); /* 设置为输入方向 - 后执行 */
} }
else if (_mode == ES_PROG_SPI_FLASH) /* MOSI_2 = PD1(写时) PE5(读时) */
{
GPIO_DIR_SET_OUT(GPIO_D3_DIR, PIN_D3_DIR); /* 设置为输出方向 - 先执行 */
GPIO_INIT_INPUT(GPIOH, GPIO_PIN_11); /* 配置为GPIO 输入功能 */
GPIO_INIT_INPUT(GPIOE, GPIO_PIN_5); /* 配置为GPIO 输入功能 */
GPIO_INIT_OUT_PP(GPIOD, GPIO_PIN_1); /* 配置为GPIO 输出功能 */
}
else else
{ {
g_tVar.GpioMode[3] = 0; g_tVar.GpioMode[3] = 0;
@ -561,6 +588,12 @@ void EIO_D4_Config(EIO_SELECT_E _mode)
GPIO_INIT_INPUT(GPIOH, GPIO_PIN_12); /* 配置为GPIO 输入功能 */ GPIO_INIT_INPUT(GPIOH, GPIO_PIN_12); /* 配置为GPIO 输入功能 */
GPIO_INIT_INPUT(GPIOE, GPIO_PIN_4); /* 配置为GPIO 输入功能 */ GPIO_INIT_INPUT(GPIOE, GPIO_PIN_4); /* 配置为GPIO 输入功能 */
} }
else if (_mode == ES_PROG_SPI_FLASH) /* MISO_1 = PE4 */
{
GPIO_INIT_INPUT(GPIOH, GPIO_PIN_12); /* 配置为GPIO 输入功能 */
GPIO_INIT_INPUT(GPIOE, GPIO_PIN_4); /* 配置为GPIO 输入功能 */
GPIO_DIR_SET_IN(GPIO_D4_DIR, PIN_D4_DIR); /* 设置为输入方向 - 后执行 */
}
else else
{ {
g_tVar.GpioMode[4] = 0; g_tVar.GpioMode[4] = 0;
@ -614,7 +647,13 @@ void EIO_D5_Config(EIO_SELECT_E _mode)
GPIO_DIR_SET_OUT(GPIO_D5_DIR, PIN_D5_DIR); /* 设置为输出方向 - 先执行 */ GPIO_DIR_SET_OUT(GPIO_D5_DIR, PIN_D5_DIR); /* 设置为输出方向 - 先执行 */
GPIO_INIT_INPUT(GPIOI, GPIO_PIN_5); /* 配置为GPIO 输入功能 */ GPIO_INIT_INPUT(GPIOI, GPIO_PIN_5); /* 配置为GPIO 输入功能 */
GPIO_INIT_AF_PP(GPIOE, GPIO_PIN_2); /* 配置为GPIO 为AF给 */ GPIO_INIT_AF_PP(GPIOE, GPIO_PIN_2); /* 配置为GPIO 为AF给 */
} }
else if (_mode == ES_PROG_SPI_FLASH) /* MISO_2 = PE2 */
{
GPIO_INIT_INPUT(GPIOI, GPIO_PIN_5); /* 配置为GPIO 输入功能 */
GPIO_INIT_INPUT(GPIOE, GPIO_PIN_2); /* 配置为GPIO 输入功能 */
GPIO_DIR_SET_IN(GPIO_D5_DIR, PIN_D5_DIR); /* 设置为输入方向 - 后执行 */
}
else else
{ {
g_tVar.GpioMode[5] = 0; g_tVar.GpioMode[5] = 0;
@ -670,6 +709,13 @@ void EIO_D6_Config(EIO_SELECT_E _mode)
GPIO_INIT_INPUT(GPIOA, GPIO_PIN_0); /* 配置为GPIO 输入功能 */ GPIO_INIT_INPUT(GPIOA, GPIO_PIN_0); /* 配置为GPIO 输入功能 */
GPIO_INIT_INPUT(GPIOD, GPIO_PIN_3); /* 配置为GPIO 输入功能 */ GPIO_INIT_INPUT(GPIOD, GPIO_PIN_3); /* 配置为GPIO 输入功能 */
} }
else if (_mode == ES_PROG_SPI_FLASH) /* MOSI_3 = PD3(写时) PE9(读时) */
{
GPIO_DIR_SET_OUT(GPIO_D6_DIR, PIN_D6_DIR); /* 设置为输出方向 - 先执行 */
GPIO_INIT_INPUT(GPIOA, GPIO_PIN_0); /* 配置为GPIO 输入功能 */
GPIO_INIT_OUT_PP(GPIOD, GPIO_PIN_3); /* 配置为GPIO 输出功能 */
GPIO_INIT_INPUT(GPIOE, GPIO_PIN_9);
}
else else
{ {
g_tVar.GpioMode[6] = 0; g_tVar.GpioMode[6] = 0;
@ -732,6 +778,13 @@ void EIO_D7_Config(EIO_SELECT_E _mode)
GPIO_INIT_INPUT(GPIOI, GPIO_PIN_6); /* 配置为GPIO 输入功能 */ GPIO_INIT_INPUT(GPIOI, GPIO_PIN_6); /* 配置为GPIO 输入功能 */
GPIO_DIR_SET_IN(GPIO_D7_DIR, PIN_D7_DIR); /* 设置为输入方向 - 后执行 */ GPIO_DIR_SET_IN(GPIO_D7_DIR, PIN_D7_DIR); /* 设置为输入方向 - 后执行 */
} }
else if (_mode == ES_PROG_SPI_FLASH) /* MISO_3 = PE10 */
{
GPIO_INIT_INPUT(GPIOF, GPIO_PIN_0); /* 配置为GPIO 输入功能 */
GPIO_INIT_INPUT(GPIOI, GPIO_PIN_6); /* 配置为GPIO 输入功能 */
GPIO_INIT_INPUT(GPIOE, GPIO_PIN_10); /* 配置为GPIO 输入功能 */
GPIO_DIR_SET_IN(GPIO_D7_DIR, PIN_D7_DIR); /* 设置为输入方向 - 后执行 */
}
else else
{ {
g_tVar.GpioMode[7] = 0; g_tVar.GpioMode[7] = 0;
@ -806,6 +859,14 @@ void EIO_D8_Config(EIO_SELECT_E _mode)
GPIO_INIT_INPUT(GPIOE, GPIO_PIN_11); /* 配置为GPIO 输入功能 */ GPIO_INIT_INPUT(GPIOE, GPIO_PIN_11); /* 配置为GPIO 输入功能 */
GPIO_INIT_FMC(GPIOD, GPIO_PIN_4); /* 配置为FMC功能 NOE */ GPIO_INIT_FMC(GPIOD, GPIO_PIN_4); /* 配置为FMC功能 NOE */
} }
else if (_mode == ES_PROG_SPI_FLASH) /* MOSI_4 = PD4(写时) PE11(读时) */
{
GPIO_DIR_SET_OUT(GPIO_D8_DIR, PIN_D8_DIR); /* 设置为输出方向 - 先执行 */
GPIO_INIT_OUT_PP(GPIOD, GPIO_PIN_4); /* 配置为GPIO 输出功能 */
GPIO_INIT_INPUT(GPIOI, GPIO_PIN_3); /* 配置为GPIO 输入功能 */
GPIO_INIT_INPUT(GPIOE, GPIO_PIN_3); /* 配置为GPIO 输入功能 */
}
else else
{ {
g_tVar.GpioMode[8] = 0; g_tVar.GpioMode[8] = 0;
@ -883,6 +944,14 @@ void EIO_D9_Config(EIO_SELECT_E _mode)
GPIO_INIT_INPUT(GPIOD, GPIO_PIN_5); /* 配置为GPIO 输入功能 */ GPIO_INIT_INPUT(GPIOD, GPIO_PIN_5); /* 配置为GPIO 输入功能 */
GPIO_DIR_SET_IN(GPIO_D9_DIR, PIN_D9_DIR); /* 设置为输入方向 - 后执行 */ GPIO_DIR_SET_IN(GPIO_D9_DIR, PIN_D9_DIR); /* 设置为输入方向 - 后执行 */
} }
else if (_mode == ES_PROG_SPI_FLASH) /* MISO_4 = PE12(读时) */
{
GPIO_INIT_INPUT(GPIOE, GPIO_PIN_12); /* 配置为GPIO 输入功能 */
GPIO_INIT_INPUT(GPIOF, GPIO_PIN_1); /* 配置为GPIO 输入功能 */
GPIO_INIT_INPUT(GPIOD, GPIO_PIN_5); /* 配置为GPIO 输入功能 */
GPIO_DIR_SET_IN(GPIO_D9_DIR, PIN_D9_DIR); /* 设置为输入方向 - 后执行 */
}
else else
{ {
g_tVar.GpioMode[9] = 0; g_tVar.GpioMode[9] = 0;

View File

@ -252,6 +252,33 @@ void bsp_PutKey(uint8_t _KeyCode)
return; return;
} }
/* 启动后 100ms内检测到按键按下全部忽略 - 例如从 DAP返回C键一直按着. 需要忽略这个按键事件 */
{
static uint8_t s_JumpFlag = 0;
if (s_JumpFlag == 0)
{
if (bsp_CheckRunTime(0) < 100)
{
s_JumpFlag = 1;
return;
}
else
{
s_JumpFlag = 2;
}
}
else if (s_JumpFlag == 1)
{
if (_KeyCode == KEY_1_UP || _KeyCode == KEY_1_LONG_UP
|| _KeyCode == KEY_2_UP || _KeyCode == KEY_2_LONG_UP)
{
s_JumpFlag = 2;
return;
}
}
}
s_tKey.Buf[s_tKey.Write] = _KeyCode; s_tKey.Buf[s_tKey.Write] = _KeyCode;
if (++s_tKey.Write >= KEY_FIFO_SIZE) if (++s_tKey.Write >= KEY_FIFO_SIZE)

View File

@ -333,6 +333,7 @@ void ST7789_DrawScreen(void)
} }
#else #else
static int32_t s_time1 = 0; static int32_t s_time1 = 0;
static uint8_t s_first_run = 0; /* 上电第1次运行准备好数据后开背光避免短暂花屏 */
if (s_DispRefresh == 0) if (s_DispRefresh == 0)
{ {
@ -343,7 +344,7 @@ void ST7789_DrawScreen(void)
if (bsp_CheckRunTime(s_time1) < 50) if (bsp_CheckRunTime(s_time1) < 50)
{ {
return; return;
} }
s_DispRefresh = 0; s_DispRefresh = 0;
@ -360,6 +361,13 @@ void ST7789_DrawScreen(void)
while (wTransferState == 0){} while (wTransferState == 0){}
s_time1 = bsp_GetRunTime(); s_time1 = bsp_GetRunTime();
if (s_first_run == 0)
{
s_first_run = 1;
LCD_SetBackLight(BRIGHT_DEFAULT); /* 打开背光 255 */
}
#endif #endif
} }

View File

@ -413,6 +413,40 @@ void bsp_SetTIMforInt(TIM_TypeDef* TIMx, uint32_t _ulFreq, uint8_t _PreemptionPr
uint16_t usPrescaler; uint16_t usPrescaler;
uint32_t uiTIMxCLK; uint32_t uiTIMxCLK;
if (_ulFreq == 0)
{
bsp_RCC_TIM_Disable(TIMx);
__HAL_TIM_ENABLE_IT(&TimHandle, TIM_IT_UPDATE);
/* 配置TIM定时更新中断 (Update) */
{
uint8_t irq = 0; /* 中断号, 定义在 stm32h7xx.h */
if (TIMx == TIM1) irq = TIM1_UP_IRQn;
else if (TIMx == TIM2) irq = TIM2_IRQn;
else if (TIMx == TIM3) irq = TIM3_IRQn;
else if (TIMx == TIM4) irq = TIM4_IRQn;
else if (TIMx == TIM5) irq = TIM5_IRQn;
else if (TIMx == TIM6) irq = TIM6_DAC_IRQn;
else if (TIMx == TIM7) irq = TIM7_IRQn;
else if (TIMx == TIM8) irq = TIM8_UP_TIM13_IRQn;
else if (TIMx == TIM12) irq = TIM8_BRK_TIM12_IRQn;
else if (TIMx == TIM13) irq = TIM8_UP_TIM13_IRQn;
else if (TIMx == TIM14) irq = TIM8_TRG_COM_TIM14_IRQn;
else if (TIMx == TIM15) irq = TIM15_IRQn;
else if (TIMx == TIM16) irq = TIM16_IRQn;
else if (TIMx == TIM17) irq = TIM17_IRQn;
else
{
Error_Handler(__FILE__, __LINE__);
}
HAL_NVIC_DisableIRQ((IRQn_Type)irq);
}
return;
}
/* 使能TIM时钟 */ /* 使能TIM时钟 */
bsp_RCC_TIM_Enable(TIMx); bsp_RCC_TIM_Enable(TIMx);

View File

@ -330,7 +330,7 @@ void bsp_StartTimer(uint8_t _id, uint32_t _period)
* : bsp_StartAutoTimer * : bsp_StartAutoTimer
* : * :
* : _id : ID0,TMR_COUNT-1IDID冲突 * : _id : ID0,TMR_COUNT-1IDID冲突
* _period : 10ms * _period : 1ms
* : * :
********************************************************************************************************* *********************************************************************************************************
*/ */

View File

@ -238,6 +238,14 @@ void bsp_InitUart(void)
RS485_InitTXE(); /* 配置RS485芯片的发送使能硬件配置为推挽输出 */ RS485_InitTXE(); /* 配置RS485芯片的发送使能硬件配置为推挽输出 */
} }
void bsp_DeInitUart(void)
{
HAL_UART_DeInit(&(g_tUart1.huart));
HAL_UART_DeInit(&(g_tUart4.huart));
HAL_UART_DeInit(&(g_tUart7.huart));
}
/* /*
********************************************************************************************************* *********************************************************************************************************
* : ComToUart * : ComToUart

View File

@ -51,21 +51,21 @@
*/ */
/* /*
H7-TOOL程序 0: 16.7M, 9M
...(FLM_CRC32)
19968ms, 0.00% 1: 6.2M 5.4M
20894ms, 100.00% 2: 5.7M 5.0M
3: 5.3M 4.6M
4: 4.2M 4.3M
-- PIN_DELAY_SLOW(0) 10: 2.94M 3.1M
...(FLM_CRC32) 20: 2.1M 2.0M
20708ms, 0.00% 40: 1.29M 1.29M
21648ms, 100.00% 100: 594K 594K
-- PIN_DELAY_SLOW(1) 200: 313K 313K
...(FLM_CRC32) 1000: 65K 65K
21417ms, 0.00% 2000: 33.1K 33.1K
22376ms, 100.00% 5000: 13.2K 13.2K
*/ */
//#define PIN_SWCLK_SET() PIN_SWCLK_TCK_SET();PIN_SWCLK_TCK_SET() //#define PIN_SWCLK_SET() PIN_SWCLK_TCK_SET();PIN_SWCLK_TCK_SET()
@ -130,13 +130,13 @@
if (val & 1) \ if (val & 1) \
{ \ { \
GPIOD->BSRR = GPIO_PIN_4 + (GPIO_PIN_3 << 16U); \ GPIOD->BSRR = GPIO_PIN_4 + (GPIO_PIN_3 << 16U); \
val >>= 1; \ val >>= 1; PIN_DELAY_S(); \
PIN_SWCLK_SET(); PIN_DELAY_S(); \ PIN_SWCLK_SET(); PIN_DELAY_S(); \
} \ } \
else \ else \
{ \ { \
GPIOD->BSRR = (GPIO_PIN_4 + GPIO_PIN_3) << 16U; \ GPIOD->BSRR = (GPIO_PIN_4 + GPIO_PIN_3) << 16U; \
val >>= 1; \ val >>= 1; PIN_DELAY_S(); \
PIN_SWCLK_SET(); PIN_DELAY_S(); \ PIN_SWCLK_SET(); PIN_DELAY_S(); \
} }
@ -212,13 +212,66 @@ uint8_t SWD_TransferFast(uint32_t request, uint32_t *data)
/* Read data */ /* Read data */
/* armfly 优化奇偶校验算法 */ /* armfly 优化奇偶校验算法 */
val = 0U; val = 0U;
#if 0
{
uint32_t buf[32];
// PD3 = CLK PD4 = DIO
GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[0] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3;
GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[1] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3;
GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[2] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3;
GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[3] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3;
GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[4] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3;
GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[5] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3;
GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[6] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3;
GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[7] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3;
GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[8] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3;
GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[9] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3;
GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[10] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3;
GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[11] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3;
GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[12] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3;
GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[13] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3;
GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[14] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3;
GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[15] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3;
GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[16] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3;
GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[17] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3;
GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[18] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3;
GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[19] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3;
GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[20] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3;
GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[21] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3;
GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[22] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3;
GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[23] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3;
GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[24] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3;
GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[25] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3;
GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[26] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3;
GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[27] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3;
GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[28] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3;
GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[29] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3;
GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[30] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3;
GPIOD->BSRR = (GPIO_PIN_3 << 16U); buf[31] = GPIOD->IDR; GPIOD->BSRR = GPIO_PIN_3;
parity = 0;
for (n = 0; n < 32; n++)
{
val >>= 1;
if (buf[n] & GPIO_PIN_4)
{
val |= 0x80000000;
parity++;
}
}
//parity = GetParity(val);
}
#else
for (n = 32U; n; n--) { for (n = 32U; n; n--) {
SW_READ_BIT_FAST(bit); /* Read RDATA[0:31] */ SW_READ_BIT_FAST(bit); /* Read RDATA[0:31] */
val >>= 1; val >>= 1;
val |= bit << 31; val |= bit << 31;
} }
parity = GetParity(val);
#endif
parity = GetParity(val);
SW_READ_BIT_FAST(bit); /* Read Parity */ SW_READ_BIT_FAST(bit); /* Read Parity */

View File

@ -611,7 +611,7 @@ Status LEDs. In detail the operation of Hardware I/O and LED pins are enabled an
- LED output pins are enabled and LEDs are turned off. - LED output pins are enabled and LEDs are turned off.
*/ */
extern void bsp_InitSPI2_Fast(void); extern void bsp_InitSPI2_Fast(void);
static __inline void DAP_SETUP(void) __inline void DAP_SETUP(void)
{ {
// /* Enable port clock */ // /* Enable port clock */
// __HAL_RCC_GPIOA_CLK_ENABLE(); // __HAL_RCC_GPIOA_CLK_ENABLE();
@ -637,7 +637,9 @@ static __inline void DAP_SETUP(void)
EIO_D6_Config(ES_GPIO_OUT); /* SWCLK - <20><><EFBFBD><EFBFBD> */ EIO_D6_Config(ES_GPIO_OUT); /* SWCLK - <20><><EFBFBD><EFBFBD> */
EIO_D8_Config(ES_GPIO_OUT); /* SWDIO - <20><><EFBFBD><EFBFBD> */ EIO_D8_Config(ES_GPIO_OUT); /* SWDIO - <20><><EFBFBD><EFBFBD> */
EIO_D2_Config(ES_GPIO_OUT); /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD> */ //EIO_D2_Config(ES_GPIO_OUT); /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD> */
//DAP_SETUP
#if SPI_MODE_ENABLE == 1 #if SPI_MODE_ENABLE == 1
bsp_InitSPI2_Fast(); bsp_InitSPI2_Fast();

View File

@ -1,3 +1,21 @@
/*
*********************************************************************************************************
*
* : lua接口API
* : lua_if.c
* : V1.0
* :
* :
*
* V1.0 2019-10-06 armfly
*
* Copyright (C), 2019-2030, www.armfly.com
*
*********************************************************************************************************
*/
#include "includes.h"
#include "lua_if.h" #include "lua_if.h"
#include "bsp.h" #include "bsp.h"
#include "param.h" #include "param.h"
@ -164,8 +182,8 @@ void LuaYeildHook(lua_State *_L, lua_Debug *ar)
} }
} }
} }
else
if (g_MainStatus == MS_PROG_WORK) //if (g_MainStatus == MS_PROG_WORK) 在其他状态按C键退出
{ {
uint8_t ucKeyCode; uint8_t ucKeyCode;
@ -1007,7 +1025,79 @@ uint32_t lua_GetVarUint32(const char *_VarName, uint32_t _Default)
return data; return data;
} }
/*
*********************************************************************************************************
* : lua_ReadDev
* : ok, temp = read("DS18B20", 1)
* :
* :
*********************************************************************************************************
*/
static int lua_ReadDev(lua_State* L)
{
const char *device;
size_t len;
if (lua_type(L, 1) == LUA_TSTRING) /* 判断第1个参数 */
{
device = luaL_checklstring(L, 1, &len); /* 1是参数的位置 len是string的长度 */
}
if (strcmp(device, "DS18B20") == 0) /* re,temp = read("DS18B20", 0) */
{
float ftemp;
uint8_t ch;
if (lua_type(L, 2) == LUA_TNUMBER) /* 判断第2个参数, 通道 */
{
ch = luaL_checknumber(L, 2);
}
else
{
ch = 0;
}
if (DS18B20_ReadTemp(ch, &ftemp) == 1) /* 正常返回温度值 */
{
lua_pushnumber(L, 1);
lua_pushnumber(L, ftemp);
return 2;
}
else
{
lua_pushnumber(L, 0);
return 1;
}
}
return 0;
}
/*
*********************************************************************************************************
* : lua_WriteDev
* :
* :
* :
*********************************************************************************************************
*/
static int lua_WriteDev(lua_State* L)
{
const char *device;
size_t len;
if (lua_type(L, 1) == LUA_TSTRING) /* 判断第1个参数 */
{
device = luaL_checklstring(L, 1, &len); /* 1是参数的位置 len是string的长度 */
}
if (strcmp(device, "DS18B20") == 0) /* re,temp = read("DS18B20", 0) */
{
;
}
return 0;
}
/* /*
********************************************************************************************************* *********************************************************************************************************
* : lua_RegisterFunc * : lua_RegisterFunc
@ -1039,7 +1129,10 @@ static void lua_RegisterFunc(void)
lua_register(g_Lua, "get_rng", get_rng); lua_register(g_Lua, "get_rng", get_rng);
lua_register(g_Lua, "crc32_stm32", crc32_stm32); lua_register(g_Lua, "crc32_stm32", crc32_stm32);
/* 读写2个通用函数 */
lua_register(g_Lua, "read", lua_ReadDev);
lua_register(g_Lua, "write", lua_WriteDev);
/* 注册接口函数 */ /* 注册接口函数 */
lua_gpio_RegisterFun(); lua_gpio_RegisterFun();

View File

@ -50,7 +50,7 @@ static int lua_PowerOnDac(lua_State* L)
{ {
WriteRegValue_06H(REG03_DAC_WAVE_TYPE, 0); /* 直流 */ WriteRegValue_06H(REG03_DAC_WAVE_TYPE, 0); /* 直流 */
WriteRegValue_06H(REG03_DAC_WAVE_START, 1); WriteRegValue_06H(REG03_DAC_WAVE_START, 1);
return 1; return 0;
} }
/* /*
@ -65,7 +65,7 @@ static int lua_PowerOffDac(lua_State* L)
{ {
WriteRegValue_06H(REG03_DAC_WAVE_TYPE, 0); /* 直流 */ WriteRegValue_06H(REG03_DAC_WAVE_TYPE, 0); /* 直流 */
WriteRegValue_06H(REG03_DAC_WAVE_START, 0); WriteRegValue_06H(REG03_DAC_WAVE_START, 0);
return 1; return 0;
} }
/* /*
@ -87,7 +87,7 @@ static int lua_WriteDac(lua_State* L)
WriteRegValue_06H(REG03_OUT_VOLT_DAC, value); WriteRegValue_06H(REG03_OUT_VOLT_DAC, value);
return 1; return 0;
} }
/* /*
@ -109,7 +109,7 @@ static int lua_WriteVolt(lua_State* L)
WriteRegValue_06H(REG03_OUT_VOLT_MV, value); WriteRegValue_06H(REG03_OUT_VOLT_MV, value);
return 1; return 0;
} }
/* /*
@ -132,7 +132,7 @@ static int lua_WriteCurr(lua_State* L)
WriteRegValue_06H(REG03_OUT_CURR_UA, value); WriteRegValue_06H(REG03_OUT_CURR_UA, value);
return 1; return 0;
} }
/* /*
@ -154,7 +154,7 @@ static int lua_WriteTvccDac(lua_State* L)
WriteRegValue_06H(REG03_OUT_TVCC_DAC, value); WriteRegValue_06H(REG03_OUT_TVCC_DAC, value);
return 1; return 0;
} }
/* /*
@ -176,7 +176,7 @@ static int lua_WriteTvccVolt(lua_State* L)
WriteRegValue_06H(REG03_OUT_TVCC_MV, value); WriteRegValue_06H(REG03_OUT_TVCC_MV, value);
return 1; return 0;
} }
/***************************** 安富莱电子 www.armfly.com (END OF FILE) *********************************/ /***************************** 安富莱电子 www.armfly.com (END OF FILE) *********************************/

View File

@ -1,11 +1,24 @@
/*
*********************************************************************************************************
*
* : lua接口SWD烧录器器
* : lua_if_swd.c
* : V1.0
* :
* :
*
* V1.0 2019-10-06 armfly
*
* Copyright (C), 2019-2030, www.armfly.com
*
*********************************************************************************************************
*/
#include "includes.h"
#include "lauxlib.h" #include "lauxlib.h"
#include "lualib.h" #include "lualib.h"
#include "time.h" #include "time.h"
#include "lua_if.h"
#include "bsp.h"
#include "elf_file.h" #include "elf_file.h"
#include "file_lib.h"
#include "prog_if.h"
#include "target_reset.h" #include "target_reset.h"
#include "target_config.h" #include "target_config.h"
#include "swd_host.h" #include "swd_host.h"
@ -20,7 +33,7 @@
#include "debug_cm.h" #include "debug_cm.h"
#include "n76e003_flash.h" #include "n76e003_flash.h"
#include "cx32_isp.h" #include "cx32_isp.h"
#include "w25q_flash.h"
/* 为了避免和DAP驱动中的函数混淆本模块函数名前缀用 h7swd */ /* 为了避免和DAP驱动中的函数混淆本模块函数名前缀用 h7swd */
@ -240,9 +253,9 @@ static int h7swd_Init(lua_State* L)
N76E_EnterIAP(); /* 进入IAP状态 */ N76E_EnterIAP(); /* 进入IAP状态 */
} }
else else if (g_tProg.ChipType == CHIP_SPI_FLASH)
{ {
; W25Q_InitHard();
} }
return 0; return 0;
@ -258,44 +271,70 @@ static int h7swd_Init(lua_State* L)
*/ */
static int h7swd_ReadID(lua_State* L) static int h7swd_ReadID(lua_State* L)
{ {
uint32_t id; // uint32_t id;
uint32_t id_buf[4]; // uint32_t id_buf[4];
if (g_tProg.ChipType == CHIP_SWD_ARM) // if (g_tProg.ChipType == CHIP_SWD_ARM)
{ // {
if (g_gMulSwd.MultiMode > 0) /* 多路模式 */ // if (g_gMulSwd.MultiMode > 0) /* 多路模式 */
{ // {
if (MUL_swd_read_idcode(id_buf) == 0) // if (MUL_swd_read_idcode(id_buf) == 0)
{ // {
lua_pushnumber(L, 0); /* 出错 */ // lua_pushnumber(L, 0); /* 出错 */
} // }
else // else
{ // {
lua_pushnumber(L, id); /* 成功,返回ID */ // lua_pushnumber(L, id); /* 成功,返回ID */
} // }
} // }
else // else
{ // {
if (swd_read_idcode(&id) == 0) // if (swd_read_idcode(&id) == 0)
{ // {
lua_pushnumber(L, 0); /* 出错 */ // lua_pushnumber(L, 0); /* 出错 */
} // }
else // else
{ // {
lua_pushnumber(L, id); /* 成功,返回ID */ // lua_pushnumber(L, id); /* 成功,返回ID */
} // }
} // }
} // }
else if (g_tProg.ChipType == CHIP_SWIM_STM8) // else if (g_tProg.ChipType == CHIP_SWIM_STM8)
{ // {
id = 0x00000800; /* STM8没有ID, 填一个固定值 */ // id = 0x00000800; /* STM8没有ID, 填一个固定值 */
lua_pushnumber(L, id); /* 成功,返回ID */ // lua_pushnumber(L, id); /* 成功,返回ID */
} // }
else // else if (g_tProg.ChipType == CHIP_SPI_FLASH)
{ // {
id = 0; // W25Q_DetectIC(id_buf);
lua_pushnumber(L, 0); /* 出错 */ // if (g_gMulSwd.MultiMode > 0) /* 多路模式 */
} // {
// if (MUL_swd_read_idcode(id_buf) == 0)
// {
// lua_pushnumber(L, 0); /* 出错 */
// }
// else
// {
// lua_pushnumber(L, id); /* 成功,返回ID */
// }
// }
// else
// {
// if (swd_read_idcode(&id) == 0)
// {
// lua_pushnumber(L, 0); /* 出错 */
// }
// else
// {
// lua_pushnumber(L, id); /* 成功,返回ID */
// }
// }
// }
// else
// {
// id = 0;
// lua_pushnumber(L, 0); /* 出错 */
// }
return 1; return 1;
} }
@ -479,7 +518,42 @@ static int h7swd_ReadMemory(lua_State* L)
lua_pushlstring(L, (char *)s_lua_read_buf, num); lua_pushlstring(L, (char *)s_lua_read_buf, num);
return 2; return 2;
} }
else if (g_tProg.ChipType == CHIP_SPI_FLASH)
{
if (g_gMulSwd.MultiMode > 0) /* 多路模式 */
{
if (W25Q_ReadBuf(addr, s_lua_read_buf, num) == 0)
{
lua_pushnumber(L, 0); /* 出错 */
}
else
{
lua_pushnumber(L, 1); /* 成功 */
}
lua_pushlstring(L, (char *)s_lua_read_buf, num);
lua_pushlstring(L, (char *)(s_lua_read_buf + num), num);
lua_pushlstring(L, (char *)(s_lua_read_buf + 2 * num), num);
lua_pushlstring(L, (char *)(s_lua_read_buf + 3 * num), num);
return 5;
}
else
{
if (W25Q_ReadBuf(addr, s_lua_read_buf, num) == 0)
{
lua_pushnumber(L, 0); /* 出错 */
}
else
{
lua_pushnumber(L, 1); /* 成功 */
}
lua_pushlstring(L, (char *)s_lua_read_buf, num);
return 2;
}
}
else else
{ {
lua_pushnumber(L, 0); /* 出错 */ lua_pushnumber(L, 0); /* 出错 */
@ -1116,7 +1190,7 @@ static int h7_LoadAlgoFile(lua_State* L)
* : 0 1 * : 0 1
********************************************************************************************************* *********************************************************************************************************
*/ */
uint16_t PG_N76E_ProgFile(const char *_Path, uint32_t _FlashAddr, uint32_t _EndAddr, uint32_t _CtrlByte, extern uint16_t PG_ProgFile(const char *_Path, uint32_t _FlashAddr, uint32_t _EndAddr, uint32_t _CtrlByte,
uint32_t _FileIndex, const char *_AlgoName); uint32_t _FileIndex, const char *_AlgoName);
static int h7_ProgFile(lua_State* L) static int h7_ProgFile(lua_State* L)
{ {
@ -1217,7 +1291,7 @@ static int h7_ProgFile(lua_State* L)
} }
else if (g_tProg.ChipType == CHIP_NUVOTON_8051) else if (g_tProg.ChipType == CHIP_NUVOTON_8051)
{ {
if (PG_N76E_ProgFile(file_name, FlashAddr, EndAddr, CtrlByte, FileIndex, AlgoName) == 0) if (PG_ProgFile(file_name, FlashAddr, EndAddr, CtrlByte, FileIndex, AlgoName) == 0)
{ {
lua_pushnumber(L, 1); /*OK */ lua_pushnumber(L, 1); /*OK */
} }
@ -1226,6 +1300,17 @@ static int h7_ProgFile(lua_State* L)
lua_pushnumber(L, 0); /* 出错 */ lua_pushnumber(L, 0); /* 出错 */
} }
} }
else if (g_tProg.ChipType == CHIP_SPI_FLASH)
{
if (PG_ProgFile(file_name, FlashAddr, EndAddr, CtrlByte, FileIndex, AlgoName) == 0)
{
lua_pushnumber(L, 1); /*OK */
}
else
{
lua_pushnumber(L, 0); /* 出错 */
}
}
else else
{ {
lua_pushnumber(L, 0); /* 出错 */ lua_pushnumber(L, 0); /* 出错 */
@ -1374,7 +1459,7 @@ static int h7_reset_pin(lua_State* L)
static int h7_DetectIC(lua_State* L) static int h7_DetectIC(lua_State* L)
{ {
uint32_t mode = 0; uint32_t mode = 0;
if (lua_type(L, 1) == LUA_TNUMBER) /* 判断第1个参数 */ if (lua_type(L, 1) == LUA_TNUMBER) /* 判断第1个参数 */
{ {
mode = luaL_checknumber(L, 1); /* 1表示仅用于检测芯片插入状态, 无需检测3次 */ mode = luaL_checknumber(L, 1); /* 1表示仅用于检测芯片插入状态, 无需检测3次 */
@ -1469,7 +1554,28 @@ static int h7_DetectIC(lua_State* L)
} }
lua_pushnumber(L, id); /* 成功,返回ID */ lua_pushnumber(L, id); /* 成功,返回ID */
return 1; return 1;
} }
else if (g_tProg.ChipType == CHIP_SPI_FLASH)
{
uint32_t id[4];
W25Q_InitHard();
W25Q_DetectIC(id);
if (g_gMulSwd.MultiMode > 0) /* 多路模式 */
{
lua_pushnumber(L, id[0]); /* 成功,返回ID */
lua_pushnumber(L, id[1]); /* 成功,返回ID */
lua_pushnumber(L, id[2]); /* 成功,返回ID */
lua_pushnumber(L, id[3]); /* 成功,返回ID */
return 4;
}
else
{
lua_pushnumber(L, id[0]); /* 成功,返回ID */
return 1;
}
}
lua_pushnumber(L, -1); /* 失败 */ lua_pushnumber(L, -1); /* 失败 */
return 1; return 1;
} }
@ -2021,6 +2127,17 @@ static int h7_EraseSector(lua_State* L)
lua_pushnumber(L, 1); /* 成功 */ lua_pushnumber(L, 1); /* 成功 */
} }
} }
else if (g_tProg.ChipType == CHIP_SPI_FLASH)
{
if (W25Q_EraseSector(FlashAddr) == 0)
{
lua_pushnumber(L, 0); /* 出错 */
}
else
{
lua_pushnumber(L, 1); /* 成功 */
}
}
else else
{ {
lua_pushnumber(L, 0); /* 出错 */ lua_pushnumber(L, 0); /* 出错 */

View File

@ -38,7 +38,7 @@
#include "lwip_user.h" #include "lwip_user.h"
#include "net_udp.h" #include "net_udp.h"
static uint8_t s_init_lwip_ok = 0; static uint8_t s_lwip_status = 0;
struct netif gnetif; struct netif gnetif;
@ -72,34 +72,6 @@ static void Netif_Config(void)
#endif #endif
} }
/*
*********************************************************************************************************
* : lwip_start
* : lwip_start, g_tParam.lwip_ip, g_tParam.lwip_net_mask,
* g_tParam.lwip_gateway
* :
* :
*********************************************************************************************************
*/
void lwip_start(void)
{
/* Initialize the LwIP stack */
lwip_init();
/* Configure the Network interface */
Netif_Config();
/* Http webserver Init */
http_server_init();
/* tcp server init */
tcp_echoserver_init();
udp_server_init(); /* 开启UDP监听 */
s_init_lwip_ok = 1;
}
/* /*
********************************************************************************************************* *********************************************************************************************************
* : lwip_pro * : lwip_pro
@ -110,25 +82,48 @@ void lwip_start(void)
*/ */
void lwip_pro(void) void lwip_pro(void)
{ {
if (s_init_lwip_ok == 0) switch (s_lwip_status)
{ {
return; case 0:
lwip_init(); /* Initialize the LwIP stack */
s_lwip_status++;
break;
case 1:
/* Configure the Network interface */
Netif_Config();
s_lwip_status++;
break;
case 2:
/* Http webserver Init */
http_server_init();
/* tcp server init */
tcp_echoserver_init();
udp_server_init(); /* 开启UDP监听 */
s_lwip_status = 10;
break;
case 10:
/* Read a received packet from the Ethernet buffers and send it
to the lwIP for handling */
ethernetif_input(&gnetif);
/* Handle timeouts */
sys_check_timeouts();
#if LWIP_NETIF_LINK_CALLBACK
Ethernet_Link_Periodic_Handle(&gnetif);
#endif
#if LWIP_DHCP
DHCP_Periodic_Handle(&gnetif);
#endif
break;
} }
/* Read a received packet from the Ethernet buffers and send it
to the lwIP for handling */
ethernetif_input(&gnetif);
/* Handle timeouts */
sys_check_timeouts();
#if LWIP_NETIF_LINK_CALLBACK
Ethernet_Link_Periodic_Handle(&gnetif);
#endif
#if LWIP_DHCP
DHCP_Periodic_Handle(&gnetif);
#endif
} }
/***************************** 安富莱电子 www.armfly.com (END OF FILE) *********************************/ /***************************** 安富莱电子 www.armfly.com (END OF FILE) *********************************/

View File

@ -63,7 +63,7 @@ AI : 示波器 CH1 均值, mV单位
#define REG03_DEV_ID5 0x0005 #define REG03_DEV_ID5 0x0005
#define REG03_HARD_MODEL 0x0006 /* 硬件型号(只读),内部型号代码 0750 */ #define REG03_HARD_MODEL 0x0006 /* 硬件型号(只读),内部型号代码 0750 */
#define REG03_APP_VER 0x0007 /* APP固件版本0x0102 表示V1.02 */ #define REG03_APP_VER 0x0007 /* APP固件版本0x0102 表示V1.02 */
#define REG03_X15_00 0x0008 /* DI的实时状态只读Bit0表示D0通道Bit15表示D15通道 */ #define REG03_X15_00 0x0008 /* DI的实时状态只读Bit0表示D0通道Bit15表示D15通道 */
#define REG03_X31_16 0x0009 /* DI的实时状态只读 */ #define REG03_X31_16 0x0009 /* DI的实时状态只读 */
@ -83,38 +83,38 @@ AI : 示波器 CH1 均值, mV单位
AN_USB_VOLT, /* USB供电电压检测 */ AN_USB_VOLT, /* USB供电电压检测 */
#endif #endif
/* 校准后的模拟量 */ /* 校准后的模拟量 */
#define REG03_AI_CH1 0x000C /* 4字节浮点数, 示波器CH1通道电压值均值单位V */ #define REG03_AI_CH1 0x000C /* 4字节浮点数, 示波器CH1通道电压值均值单位V */
#define REG03_AI_CH2 0x000E /* 4字节浮点数, 示波器CH2通道电压值均值单位V */ #define REG03_AI_CH2 0x000E /* 4字节浮点数, 示波器CH2通道电压值均值单位V */
#define REG03_AI_HIGH_SIDE_VOLT 0x0010 /* 4字节浮点数, 高端电流检测-电压值 均值单位V */ #define REG03_AI_HIGH_SIDE_VOLT 0x0010 /* 4字节浮点数, 高端电流检测-电压值 均值单位V */
#define REG03_AI_HIGH_SIDE_CURR 0x0012 /* 4字节浮点数, 高端电流检测-电流值 均值, 单位A */ #define REG03_AI_HIGH_SIDE_CURR 0x0012 /* 4字节浮点数, 高端电流检测-电流值 均值, 单位A */
#define REG03_AI_TVCC_VOLT 0x0014 /* 4字节浮点数, 目标板电压 均值, 单位V */ #define REG03_AI_TVCC_VOLT 0x0014 /* 4字节浮点数, 目标板电压 均值, 单位V */
#define REG03_AI_TVCC_CURR 0x0016 /* 4字节浮点数, 目标板电压 均值, 单位V */ #define REG03_AI_TVCC_CURR 0x0016 /* 4字节浮点数, 目标板电压 均值, 单位V */
#define REG03_AI_NTC_RES 0x0018 /* NTC热敏电阻阻值检测, 单位欧姆 */ #define REG03_AI_NTC_RES 0x0018 /* NTC热敏电阻阻值检测, 单位欧姆 */
#define REG03_AI_NTC_TEMP 0x001A /* 4字节浮点数 NTC温度换算后 */ #define REG03_AI_NTC_TEMP 0x001A /* 4字节浮点数 NTC温度换算后 */
#define REG03_AI_USB_5V 0x001C /* 4字节浮点数, USB 5V电压 均值, 单位V */ #define REG03_AI_USB_5V 0x001C /* 4字节浮点数, USB 5V电压 均值, 单位V */
#define REG03_AI_EXT_POWER 0x001E /* 4字节浮点数, 外部12V电源电压均值, 单位V */ #define REG03_AI_EXT_POWER 0x001E /* 4字节浮点数, 外部12V电源电压均值, 单位V */
/* 空挡预留 */ /* 空挡预留 */
#define REG03_ADC_CH1 0x0040 /* 4字节浮点数, 示波器CH1通道 adc 均值 */ #define REG03_ADC_CH1 0x0040 /* 4字节浮点数, 示波器CH1通道 adc 均值 */
#define REG03_ADC_CH2 0x0042 /* 4字节浮点数, 示波器CH2通道 adc 均值 */ #define REG03_ADC_CH2 0x0042 /* 4字节浮点数, 示波器CH2通道 adc 均值 */
#define REG03_ADC_HIGH_SIDE_VOLT 0x0044 /* 4字节浮点数, 高端电流检测-电压值 adc 均值 */ #define REG03_ADC_HIGH_SIDE_VOLT 0x0044 /* 4字节浮点数, 高端电流检测-电压值 adc 均值 */
#define REG03_ADC_HIGH_SIDE_CURR 0x0046 /* 4字节浮点数, 高端电流检测-电流值 adc 均值 */ #define REG03_ADC_HIGH_SIDE_CURR 0x0046 /* 4字节浮点数, 高端电流检测-电流值 adc 均值 */
#define REG03_ADC_TVCC_VOLT 0x0048 /* 4字节浮点数, 目标板电压 adc 均值 */ #define REG03_ADC_TVCC_VOLT 0x0048 /* 4字节浮点数, 目标板电压 adc 均值 */
#define REG03_ADC_TVCC_CURR 0x004A /* 4字节浮点数, 目标板电压 adc 均值 */ #define REG03_ADC_TVCC_CURR 0x004A /* 4字节浮点数, 目标板电压 adc 均值 */
#define REG03_ADC_NTC_RES 0x004C /* NTC热敏电阻阻值检测 adc 均值*/ #define REG03_ADC_NTC_RES 0x004C /* NTC热敏电阻阻值检测 adc 均值*/
#define REG03_ADC_USB_5V 0x004E /* 4字节浮点数, USB 5V电压 adc 均值 */ #define REG03_ADC_USB_5V 0x004E /* 4字节浮点数, USB 5V电压 adc 均值 */
#define REG03_ADC_EXT_POWER 0x0050 /* 4字节浮点数, 外部12V电源电压 adc 均值 */ #define REG03_ADC_EXT_POWER 0x0050 /* 4字节浮点数, 外部12V电源电压 adc 均值 */
#define REG03_ADC_PF4 0x0052 /* 保留单元 */ #define REG03_ADC_PF4 0x0052 /* 保留单元 */
#define REG03_OUT_VOLT_DAC 0x0080 /* 2字节整数 设置输出电压的 DAC值 */ #define REG03_OUT_VOLT_DAC 0x0080 /* 2字节整数 设置输出电压的 DAC值 */
#define REG03_OUT_VOLT_MV 0x0081 /* 2字节整数 设置输出电压的 mV值 */ #define REG03_OUT_VOLT_MV 0x0081 /* 2字节整数 设置输出电压的 mV值 */
#define REG03_OUT_CURR_DAC 0x0082 /* 2字节整数 设置输出电流的 DAC值 */ #define REG03_OUT_CURR_DAC 0x0082 /* 2字节整数 设置输出电流的 DAC值 */
#define REG03_OUT_CURR_UA 0x0083 /* 2字节整数 设置输出电流的 uA值 */ #define REG03_OUT_CURR_UA 0x0083 /* 2字节整数 设置输出电流的 uA值 */
#define REG03_OUT_TVCC_DAC 0x0084 /* 2字节整数 设置TVCC电压的档位值0-127 */ #define REG03_OUT_TVCC_DAC 0x0084 /* 2字节整数 设置TVCC电压的档位值0-127 */
#define REG03_OUT_TVCC_MV 0x0085 /* 2字节整数 mV值 1260 - 5000mV */ #define REG03_OUT_TVCC_MV 0x0085 /* 2字节整数 mV值 1260 - 5000mV */
/* 空挡预留 */ /* 空挡预留 */
@ -124,127 +124,127 @@ AI : 示波器 CH1 均值, mV单位
2 2
3 3
*/ */
#define REG03_DAC_WAVE_VOLT_RANGE 0x0100 /* 电压量程保留不用。固定正负10V */ #define REG03_DAC_WAVE_VOLT_RANGE 0x0100 /* 电压量程保留不用。固定正负10V */
#define REG03_DAC_WAVE_TYPE 0x0101 /* DAC波形类型 */ #define REG03_DAC_WAVE_TYPE 0x0101 /* DAC波形类型 */
#define REG03_DAC_WAVE_VOLT_MIN 0x0102 /* 波形最小电压mV */ #define REG03_DAC_WAVE_VOLT_MIN 0x0102 /* 波形最小电压mV */
#define REG03_DAC_WAVE_VOLT_MAX 0x0103 /* 波形最大电压mV */ #define REG03_DAC_WAVE_VOLT_MAX 0x0103 /* 波形最大电压mV */
#define REG03_DAC_WAVE_FREQ 0x0104 /* 32bit 波形频率Hz */ #define REG03_DAC_WAVE_FREQ 0x0104 /* 32bit 波形频率Hz */
#define REG03_DAC_WAVE_FREQ_Low 0x0105 /* 32bit 波形频率Hz */ #define REG03_DAC_WAVE_FREQ_Low 0x0105 /* 32bit 波形频率Hz */
#define REG03_DAC_WAVE_DUTY 0x0106 /* 波形占空比 百分比 */ #define REG03_DAC_WAVE_DUTY 0x0106 /* 波形占空比 百分比 */
#define REG03_DAC_WAVE_COUNT_SET 0x0107 /* 32bit 波形个数设置 高16bit */ #define REG03_DAC_WAVE_COUNT_SET 0x0107 /* 32bit 波形个数设置 高16bit */
#define REG03_DAC_WAVE_COUNT_SET0 0x0108 /* 32bit 波形个数设置 低16bit */ #define REG03_DAC_WAVE_COUNT_SET0 0x0108 /* 32bit 波形个数设置 低16bit */
#define REG03_DAC_WAVE_START 0x0109 /* DAC波形启动停止控制 */ #define REG03_DAC_WAVE_START 0x0109 /* DAC波形启动停止控制 */
/* 空挡保留未用 */ /* 空挡保留未用 */
#define REG03_D0_GPIO_MODE 0x0140 /* DO口的GPIO模式 - 0=输入1=输出 2=其他特殊功能 */ #define REG03_D0_GPIO_MODE 0x0140 /* DO口的GPIO模式 - 0=输入1=输出 2=其他特殊功能 */
#define REG03_D1_GPIO_MODE 0x0141 #define REG03_D1_GPIO_MODE 0x0141
#define REG03_D2_GPIO_MODE 0x0142 #define REG03_D2_GPIO_MODE 0x0142
#define REG03_D3_GPIO_MODE 0x0143 #define REG03_D3_GPIO_MODE 0x0143
#define REG03_D4_GPIO_MODE 0x0144 #define REG03_D4_GPIO_MODE 0x0144
#define REG03_D5_GPIO_MODE 0x0145 #define REG03_D5_GPIO_MODE 0x0145
#define REG03_D6_GPIO_MODE 0x0146 #define REG03_D6_GPIO_MODE 0x0146
#define REG03_D7_GPIO_MODE 0x0147 #define REG03_D7_GPIO_MODE 0x0147
#define REG03_D8_GPIO_MODE 0x0148 #define REG03_D8_GPIO_MODE 0x0148
#define REG03_D9_GPIO_MODE 0x0149 #define REG03_D9_GPIO_MODE 0x0149
#define REG03_D10_GPIO_MODE 0x014A /* TTL-TX */ #define REG03_D10_GPIO_MODE 0x014A /* TTL-TX */
#define REG03_D11_GPIO_MODE 0x014B /* TTL-RX */ #define REG03_D11_GPIO_MODE 0x014B /* TTL-RX */
#define REG03_D12_GPIO_MODE 0x014C /* CAN-TX */ #define REG03_D12_GPIO_MODE 0x014C /* CAN-TX */
#define REG03_D13_GPIO_MODE 0x014D /* CAN-RX */ #define REG03_D13_GPIO_MODE 0x014D /* CAN-RX */
/* 空挡保留未用 */ /* 空挡保留未用 */
#define REG03_RTC_YEAR 0x0180 /* 设备时钟 */ #define REG03_RTC_YEAR 0x0180 /* 设备时钟 */
#define REG03_RTC_MON 0x0181 #define REG03_RTC_MON 0x0181
#define REG03_RTC_DAY 0x0182 #define REG03_RTC_DAY 0x0182
#define REG03_RTC_HOUR 0x0183 #define REG03_RTC_HOUR 0x0183
#define REG03_RTC_MIN 0x0184 #define REG03_RTC_MIN 0x0184
#define REG03_RTC_SEC 0x0185 #define REG03_RTC_SEC 0x0185
#define REG03_NTC_COEF_K 0x0186 /* NTC温度传感器温度修正公式 y = kx + b 之K值 浮点 缺省 = 1 */ #define REG03_NTC_COEF_K 0x0186 /* NTC温度传感器温度修正公式 y = kx + b 之K值 浮点 缺省 = 1 */
#define REG03_NTC_COEF_B 0x0187 /* NTC温度传感器温度修正公式 y = kx + b 之B值 浮点 缺省 = 0 */ #define REG03_NTC_COEF_B 0x0187 /* NTC温度传感器温度修正公式 y = kx + b 之B值 浮点 缺省 = 0 */
/* ADC 示波器控制 */ /* ADC 示波器控制 */
#define REG03_DSO_MEASURE_MODE 0x01FF /* 1表示电流检测模式 */ #define REG03_DSO_MEASURE_MODE 0x01FF /* 1表示电流检测模式 */
#define REG03_CH1_DC 0x0200 /* CH1通道AC/DC耦合切换 1表示DC */ #define REG03_CH1_DC 0x0200 /* CH1通道AC/DC耦合切换 1表示DC */
#define REG03_CH2_DC 0x0201 /* CH2通道AC/DC耦合切换 */ #define REG03_CH2_DC 0x0201 /* CH2通道AC/DC耦合切换 */
#define REG03_CH1_GAIN 0x0202 /* CH1通道增益切换0-3 */ #define REG03_CH1_GAIN 0x0202 /* CH1通道增益切换0-7 */
#define REG03_CH2_GAIN 0x0203 /* CH2通道增益切换0-3 */ #define REG03_CH2_GAIN 0x0203 /* CH2通道增益切换0-7 */
#define REG03_CH1_OFFSET 0x0204 /* CH1通道直流偏值0-2500mV 保留,不支持) */ #define REG03_CH1_OFFSET 0x0204 /* CH1通道直流偏值0-2500mV 保留,不支持) */
#define REG03_CH2_OFFSET 0x0205 /* CH2通道直流偏值0-2500mV 保留,不支持) */ #define REG03_CH2_OFFSET 0x0205 /* CH2通道直流偏值0-2500mV 保留,不支持) */
#define REG03_DSO_FREQ_ID 0x0206 /* 示波器采样频率档位 */ #define REG03_DSO_FREQ_ID 0x0206 /* 示波器采样频率档位 */
#define DSO_FREQ_100 0 #define DSO_FREQ_100 0
#define DSO_FREQ_200 1 #define DSO_FREQ_200 1
#define DSO_FREQ_500 2 #define DSO_FREQ_500 2
#define DSO_FREQ_1K 3 #define DSO_FREQ_1K 3
#define DSO_FREQ_2K 4 #define DSO_FREQ_2K 4
#define DSO_FREQ_5K 5 #define DSO_FREQ_5K 5
#define DSO_FREQ_10K 6 #define DSO_FREQ_10K 6
#define DSO_FREQ_20K 7 #define DSO_FREQ_20K 7
#define DSO_FREQ_50K 8 #define DSO_FREQ_50K 8
#define DSO_FREQ_100K 9 #define DSO_FREQ_100K 9
#define DSO_FREQ_200K 10 #define DSO_FREQ_200K 10
#define DSO_FREQ_500K 11 #define DSO_FREQ_500K 11
#define DSO_FREQ_1M 12 #define DSO_FREQ_1M 12
#define DSO_FREQ_2M 13 #define DSO_FREQ_2M 13
#define DSO_FREQ_5M 14 #define DSO_FREQ_5M 14
#define DSO_FREQ_10M 15 #define DSO_FREQ_10M 15
#define DSO_FREQ_20M 16 #define DSO_FREQ_20M 16
#define REG03_DSO_SAMPLE_SIZE 0x0207 /* 采样深度档位 */ #define REG03_DSO_SAMPLE_SIZE 0x0207 /* 采样深度档位 */
#define DSO_SIZE_1K 0 #define DSO_SIZE_1K 0
#define DSO_SIZE_2K 1 #define DSO_SIZE_2K 1
#define DSO_SIZE_4K 2 #define DSO_SIZE_4K 2
#define DSO_SIZE_8K 3 #define DSO_SIZE_8K 3
#define DSO_SIZE_16K 4 #define DSO_SIZE_16K 4
#define DSO_SIZE_32K 5 #define DSO_SIZE_32K 5
// #define DSO_SIZE_64K 6 /* 后面暂时不支持 */ // #define DSO_SIZE_64K 6 /* 后面暂时不支持 */
// #define DSO_SIZE_128K 7 // #define DSO_SIZE_128K 7
// #define DSO_FREQ_512K 8 // #define DSO_FREQ_512K 8
#define DSO_SIZE_MAX DSO_SIZE_32K #define DSO_SIZE_MAX DSO_SIZE_32K
#define REG03_DSO_TRIG_LEVEL 0x0208 /* 触发电平0-65535 */ #define REG03_DSO_TRIG_LEVEL 0x0208 /* 触发电平0-65535 */
#define REG03_DSO_TRIG_POS 0x0209 /* 触发位置 0-100 百分比 */ #define REG03_DSO_TRIG_POS 0x0209 /* 触发位置 0-100 百分比 */
#define REG03_DSO_TRIG_MODE 0x020A /* 触发模式 0=自动 1=普通 2=单次 */ #define REG03_DSO_TRIG_MODE 0x020A /* 触发模式 0=自动 1=普通 2=单次 */
#define REG03_DSO_TRIG_CHAN 0x020B /* 触发通道 0=CH1 1=CH2*/ #define REG03_DSO_TRIG_CHAN 0x020B /* 触发通道 0=CH1 1=CH2*/
#define REG03_DSO_TRIG_EDGE 0x020C /* 触发边沿 0下降 1上升 */ #define REG03_DSO_TRIG_EDGE 0x020C /* 触发边沿 0下降 1上升 */
#define REG03_DSO_CHAN_EN 0x020D /* 通道使能控制 bit0 = CH1 bit1 = CH2 bit2 = CH2 - CH1 */ #define REG03_DSO_CHAN_EN 0x020D /* 通道使能控制 bit0 = CH1 bit1 = CH2 bit2 = CH2 - CH1 */
#define REG03_DSO_RUN 0x020E /* 示波器采集控制,0停止 1: 启动 */ #define REG03_DSO_RUN 0x020E /* 示波器采集控制,0停止 1: 启动 */
#define REG03_DSO_CURR_GAIN 0x0211 /* 0表示100mA, 1表示1A量程 */ #define REG03_DSO_CURR_GAIN 0x0211 /* 0表示100mA, 1表示1A量程 */
#define REG03_WAVE_LOCK 0x021C /* 波形锁定,等待读取 */ #define REG03_WAVE_LOCK 0x021C /* 波形锁定,等待读取 */
#define REG03_LUA_CMD 0x0300 /* LUA控制指令 */ #define REG03_LUA_CMD 0x0300 /* LUA控制指令 */
#define REG03_LUA_STATE 0x0301 /* LUA程序状态 */ #define REG03_LUA_STATE 0x0301 /* LUA程序状态 */
#define REG03_WORK_MODE 0x1000 /* 终端工作模式。1 :常规工作模式。其他值:保留做其他应用 */ #define REG03_WORK_MODE 0x1000 /* 终端工作模式。1 :常规工作模式。其他值:保留做其他应用 */
#define REG03_RS485_ADDR 0x1001 /* 本机RS485 MODBUS地址1254*/ #define REG03_RS485_ADDR 0x1001 /* 本机RS485 MODBUS地址1254*/
#define REG03_RS485_BAUD 0x1002 /* RS485波特率01200 , 124002 : 48003 : 9600 , 419200 , 5384006576007115200*/ #define REG03_RS485_BAUD 0x1002 /* RS485波特率01200 , 124002 : 48003 : 9600 , 419200 , 5384006576007115200*/
#define REG03_RS485_PARITY 0x1003 /* RS485奇偶校验位0无奇偶校验 1奇校验2偶校验*/ #define REG03_RS485_PARITY 0x1003 /* RS485奇偶校验位0无奇偶校验 1奇校验2偶校验*/
#define REG03_IPAddr_Format 0x1100 /*以太网IP地址格式。IPv4或IPv6 0 表示IPv4 1 表示IPv6*/ #define REG03_IPAddr_Format 0x1100 /*以太网IP地址格式。IPv4或IPv6 0 表示IPv4 1 表示IPv6*/
#define REG03_DHCP 0x1101 /*以太网DHCP设置。0表示禁止1表示启用。*/ #define REG03_DHCP 0x1101 /*以太网DHCP设置。0表示禁止1表示启用。*/
#define REG03_LocalIPAddr_H 0x1102 /*IPv4本机IP地址静态地址4字节。缺省 192.168.1.105*/ #define REG03_LocalIPAddr_H 0x1102 /*IPv4本机IP地址静态地址4字节。缺省 192.168.1.105*/
#define REG03_LocalIPAddr_L 0x1103 /*IPv4本机IP地址静态地址4字节。缺省 192.168.1.105*/ #define REG03_LocalIPAddr_L 0x1103 /*IPv4本机IP地址静态地址4字节。缺省 192.168.1.105*/
#define REG03_GatewayAddr_H 0x1104 /*IPv4网关地址4字节。缺省192.168.1.1*/ #define REG03_GatewayAddr_H 0x1104 /*IPv4网关地址4字节。缺省192.168.1.1*/
#define REG03_GatewayAddr_L 0x1105 /*IPv4网关地址4字节。缺省192.168.1.1*/ #define REG03_GatewayAddr_L 0x1105 /*IPv4网关地址4字节。缺省192.168.1.1*/
#define REG03_SubMask_H 0x1106 /*IPv4子网掩码4字节。缺省255.255.255.0*/ #define REG03_SubMask_H 0x1106 /*IPv4子网掩码4字节。缺省255.255.255.0*/
#define REG03_SubMask_L 0x1107 /*IPv4子网掩码4字节。缺省255.255.255.0*/ #define REG03_SubMask_L 0x1107 /*IPv4子网掩码4字节。缺省255.255.255.0*/
#define REG03_TCP_PORT 0x1108 /*本机TCP服务端口号缺省值30010*/ #define REG03_TCP_PORT 0x1108 /*本机TCP服务端口号缺省值30010*/
#define REG03_MAC12 0x1109 /*MAC地址12字节*/ #define REG03_MAC12 0x1109 /*MAC地址12字节*/
#define REG03_MAC34 0x110A /*MAC地址34字节*/ #define REG03_MAC34 0x110A /*MAC地址34字节*/
#define REG03_MAC56 0x110B /*MAC地址56字节*/ #define REG03_MAC56 0x110B /*MAC地址56字节*/
/* 用于读取波形数据的寄存器入口 */ /* 用于读取波形数据的寄存器入口 */
#define REG03_CH1_WAVE_0 0x2000 /* CH1波形数据 入口寄存器。 特殊处理1K整数字节读取 */ #define REG03_CH1_WAVE_0 0x2000 /* CH1波形数据 入口寄存器。 特殊处理1K整数字节读取 */
#define REG03_CH1_WAVE_1 0x2001 /* CH1波形数据 第2段 1K字节 */ #define REG03_CH1_WAVE_1 0x2001 /* CH1波形数据 第2段 1K字节 */
#define REG03_CH1_WAVE_2 0x2002 /* CH1波形数据 第3段 1K字节 */ #define REG03_CH1_WAVE_2 0x2002 /* CH1波形数据 第3段 1K字节 */
#define REG03_CH1_WAVE_END 0x2FFF /* CH1波形数据 第4096段 1K字节 */ #define REG03_CH1_WAVE_END 0x2FFF /* CH1波形数据 第4096段 1K字节 */
#define REG03_CH2_WAVE_0 0x4000 /* CH2波形数据 入口寄存器。 特殊处理1K整数字节读取 */ #define REG03_CH2_WAVE_0 0x4000 /* CH2波形数据 入口寄存器。 特殊处理1K整数字节读取 */
#define REG03_CH2_WAVE_END 0x4FFF /* CH2波形数据 入口寄存器。 特殊处理1K整数字节读取 */ #define REG03_CH2_WAVE_END 0x4FFF /* CH2波形数据 入口寄存器。 特殊处理1K整数字节读取 */
/********************************** 校准参数 ***********************************/ /********************************** 校准参数 ***********************************/
/* 校准开关, /* 校准开关,
@ -256,29 +256,29 @@ AI : 示波器 CH1 均值, mV单位
#define REG03_CALIB_KEY 0xBFFF #define REG03_CALIB_KEY 0xBFFF
/* 输入模拟量校准 */ /* 输入模拟量校准 */
#define REG03_CALIB_CH1_R1_X1 0xC000 /* CH1 X1档位 校准参数X1 Y1 X2 Y2 均为浮点数. 每个浮点数占用2个寄存器 */ #define REG03_CALIB_CH1_R1_X1 0xC000 /* CH1 X1档位 校准参数X1 Y1 X2 Y2 均为浮点数. 每个浮点数占用2个寄存器 */
#define REG03_CALIB_CH1_R1_Y1 0xC002 #define REG03_CALIB_CH1_R1_Y1 0xC002
#define REG03_CALIB_CH1_R1_X2 0xC004 #define REG03_CALIB_CH1_R1_X2 0xC004
#define REG03_CALIB_CH1_R1_Y2 0xC006 #define REG03_CALIB_CH1_R1_Y2 0xC006
#define REG03_CALIB_CH1_R2_X1 0xC008 /* CH1 X2档位 校准参数X1 Y1 X2 Y2 均为浮点数. 每个浮点数占用2个寄存器 */ #define REG03_CALIB_CH1_R2_X1 0xC008 /* CH1 X2档位 校准参数X1 Y1 X2 Y2 均为浮点数. 每个浮点数占用2个寄存器 */
#define REG03_CALIB_CH1_R3_X1 0xC010 /* CH1 X4档位 校准参数X1 Y1 X2 Y2 均为浮点数. 每个浮点数占用2个寄存器 */ #define REG03_CALIB_CH1_R3_X1 0xC010 /* CH1 X4档位 校准参数X1 Y1 X2 Y2 均为浮点数. 每个浮点数占用2个寄存器 */
#define REG03_CALIB_CH1_R4_X1 0xC018 /* CH1 X8档位 校准参数 */ #define REG03_CALIB_CH1_R4_X1 0xC018 /* CH1 X8档位 校准参数 */
#define REG03_CALIB_CH1_R5_X1 0xC020 /* CH1 X16档位 校准参数 */ #define REG03_CALIB_CH1_R5_X1 0xC020 /* CH1 X16档位 校准参数 */
#define REG03_CALIB_CH1_R6_X1 0xC028 /* CH1 X32档位 校准参数 */ #define REG03_CALIB_CH1_R6_X1 0xC028 /* CH1 X32档位 校准参数 */
#define REG03_CALIB_CH1_R7_X1 0xC030 /* CH1 X64档位 校准参数 */ #define REG03_CALIB_CH1_R7_X1 0xC030 /* CH1 X64档位 校准参数 */
#define REG03_CALIB_CH1_R8_X1 0xC038 /* CH1 X128档位 校准参数 */ #define REG03_CALIB_CH1_R8_X1 0xC038 /* CH1 X128档位 校准参数 */
#define REG03_CALIB_CH2_R1_X1 0xC040 /* CH2 X1档位 校准参数X1 Y1 X2 Y2 均为浮点数. 每个浮点数占用2个寄存器 */ #define REG03_CALIB_CH2_R1_X1 0xC040 /* CH2 X1档位 校准参数X1 Y1 X2 Y2 均为浮点数. 每个浮点数占用2个寄存器 */
#define REG03_CALIB_CH2_R1_Y1 0xC042 #define REG03_CALIB_CH2_R1_Y1 0xC042
#define REG03_CALIB_CH2_R1_X2 0xC044 #define REG03_CALIB_CH2_R1_X2 0xC044
#define REG03_CALIB_CH2_R1_Y2 0xC046 #define REG03_CALIB_CH2_R1_Y2 0xC046
#define REG03_CALIB_CH2_R2_X1 0xC048 /* CH2 X2档位 校准参数X1 Y1 X2 Y2 均为浮点数. 每个浮点数占用2个寄存器 */ #define REG03_CALIB_CH2_R2_X1 0xC048 /* CH2 X2档位 校准参数X1 Y1 X2 Y2 均为浮点数. 每个浮点数占用2个寄存器 */
#define REG03_CALIB_CH2_R3_X1 0xC050 /* CH2 X4档位 校准参数X1 Y1 X2 Y2 均为浮点数. 每个浮点数占用2个寄存器 */ #define REG03_CALIB_CH2_R3_X1 0xC050 /* CH2 X4档位 校准参数X1 Y1 X2 Y2 均为浮点数. 每个浮点数占用2个寄存器 */
#define REG03_CALIB_CH2_R4_X1 0xC058 /* CH2 X8档位 校准参数 */ #define REG03_CALIB_CH2_R4_X1 0xC058 /* CH2 X8档位 校准参数 */
#define REG03_CALIB_CH2_R5_X1 0xC060 /* CH2 X16档位 校准参数 */ #define REG03_CALIB_CH2_R5_X1 0xC060 /* CH2 X16档位 校准参数 */
#define REG03_CALIB_CH2_R6_X1 0xC068 /* CH2 X32档位 校准参数 */ #define REG03_CALIB_CH2_R6_X1 0xC068 /* CH2 X32档位 校准参数 */
#define REG03_CALIB_CH2_R7_X1 0xC070 /* CH2 X64档位 校准参数 */ #define REG03_CALIB_CH2_R7_X1 0xC070 /* CH2 X64档位 校准参数 */
#define REG03_CALIB_CH2_R8_X1 0xC078 /* CH2 X128档位 校准参数 */ #define REG03_CALIB_CH2_R8_X1 0xC078 /* CH2 X128档位 校准参数 */
#define REG03_CALIB_LOAD_VOLT_X1 0xC080 /* 高端电流检测-电压值 校准参数X1 Y1 X2 Y2 均为浮点数. 每个浮点数占用2个寄存器 */ #define REG03_CALIB_LOAD_VOLT_X1 0xC080 /* 高端电流检测-电压值 校准参数X1 Y1 X2 Y2 均为浮点数. 每个浮点数占用2个寄存器 */
#define REG03_CALIB_LOAD_VOLT_Y1 0xC082 #define REG03_CALIB_LOAD_VOLT_Y1 0xC082
@ -341,67 +341,67 @@ AI : 示波器 CH1 均值, mV单位
#define REG03_CALIB_DAC_CURR_X4 0xC0D6 #define REG03_CALIB_DAC_CURR_X4 0xC0D6
#define REG03_CALIB_DAC_CURR_Y4 0xC0D7 #define REG03_CALIB_DAC_CURR_Y4 0xC0D7
#define REG03_CALIB_NTC_RES_X1 0xC0D8 /* NTC电阻 校准参数X1 Y1 X2 Y2 均为浮点数. 每个浮点数占用2个寄存器 */ #define REG03_CALIB_NTC_RES_X1 0xC0D8 /* NTC电阻 校准参数X1 Y1 X2 Y2 均为浮点数. 每个浮点数占用2个寄存器 */
#define REG03_CALIB_NTC_RES_Y1 0xC0DA #define REG03_CALIB_NTC_RES_Y1 0xC0DA
#define REG03_CALIB_NTC_RES_X2 0xC0DC #define REG03_CALIB_NTC_RES_X2 0xC0DC
#define REG03_CALIB_NTC_RES_Y2 0xC0DE #define REG03_CALIB_NTC_RES_Y2 0xC0DE
#define REG03_CALIB_NTC_RES_X3 0xC0E0 #define REG03_CALIB_NTC_RES_X3 0xC0E0
#define REG03_CALIB_NTC_RES_Y3 0xC0E2 #define REG03_CALIB_NTC_RES_Y3 0xC0E2
#define REG03_CALIB_NTC_RES_X4 0xC0E4 #define REG03_CALIB_NTC_RES_X4 0xC0E4
#define REG03_CALIB_NTC_RES_Y4 0xC0E6 #define REG03_CALIB_NTC_RES_Y4 0xC0E6
#define REG03_CALIB_PARAM_END REG03_CALIB_NTC_RES_Y4 + 1 /* 校准参数如最后1个寄存器 */ #define REG03_CALIB_PARAM_END REG03_CALIB_NTC_RES_Y4 + 1 /* 校准参数如最后1个寄存器 */
#define REG03_BOOT_VER 0xE000 /* BOOT 固件版本0x0102 表示V1.02 */ #define REG03_BOOT_VER 0xE000 /* BOOT 固件版本0x0102 表示V1.02 */
/* 重映射部分寄存器专用于UDP网路搜索 */ /* 重映射部分寄存器专用于UDP网路搜索 */
#define REG03_NET_CPU_ID0 0xFF00 #define REG03_NET_CPU_ID0 0xFF00
#define REG03_NET_CPU_ID1 0xFF01 #define REG03_NET_CPU_ID1 0xFF01
#define REG03_NET_CPU_ID2 0xFF02 #define REG03_NET_CPU_ID2 0xFF02
#define REG03_NET_CPU_ID3 0xFF03 #define REG03_NET_CPU_ID3 0xFF03
#define REG03_NET_CPU_ID4 0xFF04 #define REG03_NET_CPU_ID4 0xFF04
#define REG03_NET_CPU_ID5 0xFF05 #define REG03_NET_CPU_ID5 0xFF05
#define REG03_NET_HARD_VER 0xFF06 /* 硬件型号只读内部型号代码非型号全称0xC200 表示TC200*/ #define REG03_NET_HARD_VER 0xFF06 /* 硬件型号只读内部型号代码非型号全称0xC200 表示TC200*/
#define REG03_NET_SOFT_VER 0xFF07 /* 硬件版本只读如0x0100表示H1.00 */ #define REG03_NET_SOFT_VER 0xFF07 /* 硬件版本只读如0x0100表示H1.00 */
#define REG03_NET_MAC12 0xFF08 /* MAC */ #define REG03_NET_MAC12 0xFF08 /* MAC */
#define REG03_NET_MAC34 0xFF09 /* MAC */ #define REG03_NET_MAC34 0xFF09 /* MAC */
#define REG03_NET_MAC56 0xFF0A /* MAC */ #define REG03_NET_MAC56 0xFF0A /* MAC */
#define REG03_NET_LOCAL_IP_H 0xFF0B /* IPv4本机IP地址静态地址高2字节 */ #define REG03_NET_LOCAL_IP_H 0xFF0B /* IPv4本机IP地址静态地址高2字节 */
#define REG03_NET_LOCAL_IP_L 0xFF0C /* IPv4本机IP地址静态地址低2字节 */ #define REG03_NET_LOCAL_IP_L 0xFF0C /* IPv4本机IP地址静态地址低2字节 */
#define REG03_NET_NETMASK_H 0xFF0D /* IPv4子网掩码高2字节。 */ #define REG03_NET_NETMASK_H 0xFF0D /* IPv4子网掩码高2字节。 */
#define REG03_NET_NETMASK_L 0xFF0E /* IPv4子网掩码低2字节。 */ #define REG03_NET_NETMASK_L 0xFF0E /* IPv4子网掩码低2字节。 */
#define REG03_NET_GATEWAY_H 0xFF0F /* IPv4网关地址高2字节。 */ #define REG03_NET_GATEWAY_H 0xFF0F /* IPv4网关地址高2字节。 */
#define REG03_NET_GATEWAY_L 0xFF10 /* IPv4网关地址第2字节。 */ #define REG03_NET_GATEWAY_L 0xFF10 /* IPv4网关地址第2字节。 */
#define REG03_NET_LOCAL_PORT 0xFF11 /* 本地端口 */ #define REG03_NET_LOCAL_PORT 0xFF11 /* 本地端口 */
#define REG03_NET_SYSTEM_IP_H 0xFF12 /* 管理系统IP地址高位 */ #define REG03_NET_SYSTEM_IP_H 0xFF12 /* 管理系统IP地址高位 */
#define REG03_NET_SYSTEM_IP_L 0xFF13 /* 管理系统IP地址低位 */ #define REG03_NET_SYSTEM_IP_L 0xFF13 /* 管理系统IP地址低位 */
#define REG03_NET_SYSTEM_PORT 0xFF14 /* 远程服务器端口 */ #define REG03_NET_SYSTEM_PORT 0xFF14 /* 远程服务器端口 */
#define REG03_RESET_TO_BOOT 0xFF7F /* 特殊寄存器复位进入BOOT */ #define REG03_RESET_TO_BOOT 0xFF7F /* 特殊寄存器复位进入BOOT */
/* BOOT 程序用的寄存器 */ /* BOOT 程序用的寄存器 */
#define REG03_BOOT_CPU_ID0 0xFF80 #define REG03_BOOT_CPU_ID0 0xFF80
#define REG03_BOOT_CPU_ID1 0xFF81 #define REG03_BOOT_CPU_ID1 0xFF81
#define REG03_BOOT_CPU_ID2 0xFF82 #define REG03_BOOT_CPU_ID2 0xFF82
#define REG03_BOOT_CPU_ID3 0xFF83 #define REG03_BOOT_CPU_ID3 0xFF83
#define REG03_BOOT_CPU_ID4 0xFF84 #define REG03_BOOT_CPU_ID4 0xFF84
#define REG03_BOOT_CPU_ID5 0xFF85 #define REG03_BOOT_CPU_ID5 0xFF85
#define REG03_BOOT_HARD_VER 0xFF86 /* 硬件型号只读内部型号代码非型号全称0xC200 表示TC200*/ #define REG03_BOOT_HARD_VER 0xFF86 /* 硬件型号只读内部型号代码非型号全称0xC200 表示TC200*/
#define REG03_BOOT_SOFT_VER 0xFF87 /* 硬件版本只读如0x0100表示H1.00 */ #define REG03_BOOT_SOFT_VER 0xFF87 /* 硬件版本只读如0x0100表示H1.00 */
#define REG03_BOOT_PROG_TYPE 0xFF88 /* APP程序类型: 0 = CPU内部Flash ; 1 = QSPI Flash */ #define REG03_BOOT_PROG_TYPE 0xFF88 /* APP程序类型: 0 = CPU内部Flash ; 1 = QSPI Flash */
#define REG03_BOOT_PROG_ADDR 0xFF89 /* APP程序地址 32位 */ #define REG03_BOOT_PROG_ADDR 0xFF89 /* APP程序地址 32位 */
#define REG03_BOOT_PROG_SIZE 0xFF8B /* APP程序长度 32位 */ #define REG03_BOOT_PROG_SIZE 0xFF8B /* APP程序长度 32位 */
/* 系统控制参数 /* 系统控制参数
1 - flash. 2 1 - flash. 2
2 - 2 -
3 - 3 -
*/ */
#define REG03_BOOT_SYSTEM 0xFF8D #define REG03_BOOT_SYSTEM 0xFF8D
#define REG03_BOOT_STATUS 0xFFA0 /* 设备状态寄存器 0空闲1表示正忙 */ #define REG03_BOOT_STATUS 0xFFA0 /* 设备状态寄存器 0空闲1表示正忙 */
#define REG03_BOOT_CRC32_HIGH 0xFFA1 /* 程序区CRC32校验 - 未用 */ #define REG03_BOOT_CRC32_HIGH 0xFFA1 /* 程序区CRC32校验 - 未用 */
#define REG03_BOOT_CRC32_LOW 0xFFA2 /* 程序区CRC32校验 - 未用 */ #define REG03_BOOT_CRC32_LOW 0xFFA2 /* 程序区CRC32校验 - 未用 */
#endif #endif

View File

@ -42,40 +42,48 @@ uint8_t ReadRegValue_03H(uint16_t reg_addr, uint16_t *reg_value)
{ {
case REG03_NET_CPU_ID0: /* MCU序号只读 */ case REG03_NET_CPU_ID0: /* MCU序号只读 */
case REG03_DEV_ID0: case REG03_DEV_ID0:
case REG03_BOOT_CPU_ID0:
value = g_tVar.CPU_Sn[0]; value = g_tVar.CPU_Sn[0];
break; break;
case REG03_NET_CPU_ID1: case REG03_NET_CPU_ID1:
case REG03_DEV_ID1: case REG03_DEV_ID1:
case REG03_BOOT_CPU_ID1:
value = g_tVar.CPU_Sn[0] >> 16; value = g_tVar.CPU_Sn[0] >> 16;
break; break;
case REG03_NET_CPU_ID2: case REG03_NET_CPU_ID2:
case REG03_DEV_ID2: case REG03_DEV_ID2:
case REG03_BOOT_CPU_ID2:
value = g_tVar.CPU_Sn[1]; value = g_tVar.CPU_Sn[1];
break; break;
case REG03_NET_CPU_ID3: case REG03_NET_CPU_ID3:
case REG03_DEV_ID3: case REG03_DEV_ID3:
case REG03_BOOT_CPU_ID3:
value = g_tVar.CPU_Sn[1] >> 16; value = g_tVar.CPU_Sn[1] >> 16;
break; break;
case REG03_NET_CPU_ID4: case REG03_NET_CPU_ID4:
case REG03_DEV_ID4: case REG03_DEV_ID4:
case REG03_BOOT_CPU_ID4:
value = g_tVar.CPU_Sn[2]; value = g_tVar.CPU_Sn[2];
break; break;
case REG03_NET_CPU_ID5: case REG03_NET_CPU_ID5:
case REG03_DEV_ID5: case REG03_DEV_ID5:
case REG03_BOOT_CPU_ID5:
value = g_tVar.CPU_Sn[2] >> 16; value = g_tVar.CPU_Sn[2] >> 16;
break; break;
case REG03_NET_HARD_VER: case REG03_NET_HARD_VER:
case REG03_HARD_MODEL: case REG03_HARD_MODEL:
case REG03_BOOT_HARD_VER:
value = HARD_MODEL; value = HARD_MODEL;
break; break;
case REG03_BOOT_VER: case REG03_BOOT_VER:
case REG03_BOOT_SOFT_VER:
value = BOOT_VERSION; value = BOOT_VERSION;
break; break;

View File

@ -28,6 +28,7 @@
#include "stm8_flash.h" #include "stm8_flash.h"
#include "stm8_swim.h" #include "stm8_swim.h"
#include "n76e003_flash.h" #include "n76e003_flash.h"
#include "w25q_flash.h"
/* 64H帧子功能码定义 */ /* 64H帧子功能码定义 */
enum enum
@ -42,8 +43,8 @@ static void MODS66_WriteMem(void);
/* /*
********************************************************************************************************* *********************************************************************************************************
* : MODS_64H * : MODS_66H
* : * : SWD内存读写操作通信接
* : * :
* : * :
********************************************************************************************************* *********************************************************************************************************
@ -239,9 +240,23 @@ static void MODS66_ReadMem(void)
memcpy(&g_tModS.TxBuf[g_tModS.TxCount], s_lua_read_buf, package_len); memcpy(&g_tModS.TxBuf[g_tModS.TxCount], s_lua_read_buf, package_len);
g_tModS.TxCount += package_len; g_tModS.TxCount += package_len;
} }
else if (g_tProg.ChipType == CHIP_SPI_FLASH)
{
if (W25Q_ReadBuf(offset_addr, s_lua_read_buf, package_len) == 0)
{
g_tModS.TxBuf[g_tModS.TxCount++] = 0x01; /* 出错 */
}
else
{
g_tModS.TxBuf[g_tModS.TxCount++] = 0x00; /* 执行结果 00 */
}
memcpy(&g_tModS.TxBuf[g_tModS.TxCount], s_lua_read_buf, package_len);
g_tModS.TxCount += package_len;
}
else else
{ {
; g_tModS.TxBuf[g_tModS.TxCount++] = 0x01; /* 出错 */
} }
} }

View File

@ -1,10 +1,10 @@
/* /*
********************************************************************************************************* *********************************************************************************************************
* *
* : N76E003芯片编程模块 * :
* : n76e_prog_file.c * : pg_prog_file.c
* : V1.0 * : V1.0
* : N76E003芯 * :
* *
* : * :
* *
@ -31,7 +31,7 @@ extern const program_target_t flash_algo;
/* /*
********************************************************************************************************* *********************************************************************************************************
* : PG_N76E_ProgFile * : PG_ProgFile
* : flash lua程序调用 * : flash lua程序调用
* : _Path : * : _Path :
* _FlashAddr : flash起始地址 * _FlashAddr : flash起始地址
@ -42,7 +42,7 @@ extern const program_target_t flash_algo;
* : 0 = ok, * : 0 = ok,
********************************************************************************************************* *********************************************************************************************************
*/ */
uint16_t PG_N76E_ProgFile(const char *_Path, uint32_t _FlashAddr, uint32_t _EndAddr, uint32_t _CtrlByte, uint16_t PG_ProgFile(const char *_Path, uint32_t _FlashAddr, uint32_t _EndAddr, uint32_t _CtrlByte,
uint32_t _FileIndex, const char *_AlgoName) uint32_t _FileIndex, const char *_AlgoName)
{ {
char path[256]; char path[256];
@ -54,7 +54,8 @@ uint16_t PG_N76E_ProgFile(const char *_Path, uint32_t _FlashAddr, uint32_t _EndA
uint8_t CheckBankMode = 0; uint8_t CheckBankMode = 0;
// uint8_t fBlankChip = 0; // uint8_t fBlankChip = 0;
// uint32_t BlockSize; // uint32_t BlockSize;
uint32_t CheckLen; /* 实际扫描的空间大小 */ uint32_t CheckLen; /* 实际扫描的空间大小 */
uint8_t EmptyValue; /* 空片的值 */
/* 传入的文件名是相对路径 */ /* 传入的文件名是相对路径 */
if (strlen(_Path) + strlen(PROG_USER_DIR) > sizeof(path)) if (strlen(_Path) + strlen(PROG_USER_DIR) > sizeof(path))
@ -125,6 +126,19 @@ uint16_t PG_N76E_ProgFile(const char *_Path, uint32_t _FlashAddr, uint32_t _EndA
} }
} }
if (g_tProg.ChipType == CHIP_SWIM_STM8 || g_tProg.ChipType == CHIP_NUVOTON_8051)
{
EmptyValue = 0x00;
}
else if (g_tProg.ChipType == CHIP_SPI_FLASH)
{
EmptyValue = 0xFF;
}
else
{
EmptyValue = 0x00;
}
/* /*
4bit表示擦除模式 0 1 2 4bit表示擦除模式 0 1 2
4bit表示查空 0 1 4bit表示查空 0 1
@ -169,6 +183,9 @@ uint16_t PG_N76E_ProgFile(const char *_Path, uint32_t _FlashAddr, uint32_t _EndA
{ {
uint32_t addr; uint32_t addr;
uint32_t endAddr; uint32_t endAddr;
uint32_t SectorSize;
SectorSize = PG_GetSectorSize(_AlgoName, addr);
endAddr = _FlashAddr + FileLen; endAddr = _FlashAddr + FileLen;
if (endAddr > _EndAddr) if (endAddr > _EndAddr)
@ -196,12 +213,13 @@ uint16_t PG_N76E_ProgFile(const char *_Path, uint32_t _FlashAddr, uint32_t _EndA
float percent; float percent;
percent = addr - _FlashAddr; /* 已擦除大小 */ percent = addr - _FlashAddr; /* 已擦除大小 */
percent = percent / (endAddr - _FlashAddr); percent = 100 * percent / (endAddr - _FlashAddr);
PG_PrintPercent(percent, addr); /* 显示100% */ PG_PrintPercent(percent, addr); /* 显示100% */
} }
addr += PG_GetSectorSize(_AlgoName, addr); addr += SectorSize;
} }
PG_PrintPercent(100.0, addr); /* 显示100% */
} }
else if (EraseMode == 1) /* 1:整片擦除 */ else if (EraseMode == 1) /* 1:整片擦除 */
{ {
@ -284,7 +302,7 @@ uint16_t PG_N76E_ProgFile(const char *_Path, uint32_t _FlashAddr, uint32_t _EndA
/* V1.11 修正bug : 烧写非整数倍PageSize的文件失败 */ /* V1.11 修正bug : 烧写非整数倍PageSize的文件失败 */
if (bytes % PageSize) if (bytes % PageSize)
{ {
memset(&FsReadBuf[bytes], 0x00 ,PageSize - (bytes % PageSize)); /* 填充空值 00 */ memset(&FsReadBuf[bytes], EmptyValue ,PageSize - (bytes % PageSize)); /* 填充空值 00 or FF */
bytes = ((bytes + PageSize - 1) / PageSize) * PageSize; bytes = ((bytes + PageSize - 1) / PageSize) * PageSize;
} }
@ -306,8 +324,8 @@ uint16_t PG_N76E_ProgFile(const char *_Path, uint32_t _FlashAddr, uint32_t _EndA
FileOffset += PageSize; FileOffset += PageSize;
/* 进度指示 - 每2KB刷新一次 */ /* 进度指示 - 每4KB刷新一次 */
if ((FileOffset % 2048) == 0 || (bytes < 2048 && (FileOffset % 512) == 0)) if ((FileOffset % 8192) == 0 || (bytes < 8192 && (FileOffset % 512) == 0))
{ {
float percent; float percent;
@ -393,12 +411,17 @@ uint16_t PG_N76E_ProgFile(const char *_Path, uint32_t _FlashAddr, uint32_t _EndA
{ {
PageSize = sizeof(FsReadBuf); PageSize = sizeof(FsReadBuf);
} }
if (g_gMulSwd.MultiMode > 0) /* 多路模式 */
{
PageSize = PageSize / 4;
}
if (PageSize >= DeviceSize) if (PageSize >= DeviceSize)
{ {
PageSize = DeviceSize; PageSize = DeviceSize;
} }
for (; FileOffset < FileLen; ) for (; FileOffset < FileLen; )
{ {
if (ProgCancelKey()) if (ProgCancelKey())
@ -437,6 +460,7 @@ uint16_t PG_N76E_ProgFile(const char *_Path, uint32_t _FlashAddr, uint32_t _EndA
} }
/* 进度指示 */ /* 进度指示 */
if ((FileOffset % 8192) == 0 || (bytes < 8192 && (FileOffset % 512) == 0))
{ {
float percent = -1; float percent = -1;

View File

@ -14,19 +14,17 @@
* *
********************************************************************************************************* *********************************************************************************************************
*/ */
#include "bsp.h"
#include "param.h" #include "includes.h"
#include "file_lib.h"
#include "lua_if.h"
#include "prog_if.h"
#include "swd_host.h" #include "swd_host.h"
#include "swd_flash.h" #include "swd_flash.h"
#include "elf_file.h" #include "elf_file.h"
#include "main.h"
#include "stm8_flash.h" #include "stm8_flash.h"
#include "n76e003_flash.h" #include "n76e003_flash.h"
#include "SW_DP_Multi.h" #include "SW_DP_Multi.h"
#include "swd_host_multi.h" #include "swd_host_multi.h"
#include "w25q_flash.h"
extern const program_target_t flash_algo; extern const program_target_t flash_algo;
@ -216,6 +214,29 @@ void PG_ReloadLuaVar(void)
{ {
h7swim_ReadLuaVar(); /* 读取LUA中的全局变量 */ h7swim_ReadLuaVar(); /* 读取LUA中的全局变量 */
} }
else if (g_tProg.ChipType == CHIP_SPI_FLASH)
{
// uint32_t Capacity; /* 芯片容量 */
// uint32_t SectorSize; /* 扇区大小 */
// uint32_t EraseSectorCmd; /* 扇区擦除指令 */
// uint32_t EraseSectorTimeout; /* 擦除扇区超时 ms */
// uint32_t EraseChipTimeout; /* 擦除整片超时 ms */
// uint32_t ProgPageTimeout; /* 编程page超时 */
// uint8_t AutoAddrInc; /* AAI模式写 */
g_tW25Q.Capacity = lua_GetVarUint32("FLASH_SIZE", 0);
g_tW25Q.SectorSize = lua_GetVarUint32("SECTOR_SIZE", 4096);
g_tW25Q.EraseSectorCmd = lua_GetVarUint32("ERASE_SECTOR_CMD", 0x20);
g_tW25Q.EraseSectorTimeout = lua_GetVarUint32("ERASE_SECTOR_TIMEOUT", 2 * 1000);
g_tW25Q.EraseChipTimeout = lua_GetVarUint32("ERASE_CHIP_TIMEOUT", 400 * 1000);
g_tW25Q.ProgPageTimeout = 100; /* 100ms */
g_tW25Q.AutoAddrInc = lua_GetVarUint32("PROG_AAI", 0);
g_tW25Q.ReadMode = lua_GetVarUint32("READ_MODE", 0);
g_tW25Q.ReadIDCmd = lua_GetVarUint32("READ_ID_CMD", 0x9F);
g_tW25Q.EraseChipCmd = lua_GetVarUint32("ERASE_CHIP_CMD", 0xC7);
g_tW25Q.UnlockCmd = lua_GetVarUint32("UNLOCK_CMD", 0x00);
}
} }
/* /*
@ -522,6 +543,11 @@ uint8_t PG_FixDataIsDiff(void)
return 0; return 0;
} }
/*
*********************************************************************************************************
* . pg_prog_file.c
*********************************************************************************************************
*/
/* /*
********************************************************************************************************* *********************************************************************************************************
@ -546,7 +572,11 @@ uint32_t PG_GetSectorSize(const char *_Algo, uint32_t _Addr)
else if (g_tProg.ChipType == CHIP_NUVOTON_8051) else if (g_tProg.ChipType == CHIP_NUVOTON_8051)
{ {
sz = 128; sz = 128;
} }
else if (g_tProg.ChipType == CHIP_SPI_FLASH)
{
sz = lua_GetVarUint32("SECTOR_SIZE", 4*1024);
}
return sz; return sz;
} }
@ -560,6 +590,23 @@ uint32_t PG_GetSectorSize(const char *_Algo, uint32_t _Addr)
*/ */
uint8_t PG_EraseSector(const char *_Algo, uint32_t _Addr) uint8_t PG_EraseSector(const char *_Algo, uint32_t _Addr)
{ {
if (g_tProg.ChipType == CHIP_SWD_ARM)
{
/* ARM不用这个文件 */;
}
else if (g_tProg.ChipType == CHIP_SWIM_STM8)
{
/* STM8都是整片擦除 */;
}
else if (g_tProg.ChipType == CHIP_NUVOTON_8051)
{
/* 选择整片擦除 */
}
else if (g_tProg.ChipType == CHIP_SPI_FLASH)
{
W25Q_EraseSector(_Addr);
}
return 1; return 1;
} }
@ -586,7 +633,11 @@ uint32_t PG_GetPageSize(const char *_Algo)
else if (g_tProg.ChipType == CHIP_NUVOTON_8051) else if (g_tProg.ChipType == CHIP_NUVOTON_8051)
{ {
sz = 32; sz = 32;
} }
else if (g_tProg.ChipType == CHIP_SPI_FLASH)
{
sz = lua_GetVarUint32("FLASH_PAGE_SIZE", 1024);;
}
return sz; return sz;
} }
@ -640,7 +691,10 @@ uint32_t PG_GetDeviceAddr(const char *_Algo)
addr = 0; addr = 0;
} }
} }
else if (g_tProg.ChipType == CHIP_SPI_FLASH)
{
addr = lua_GetVarUint32("FLASH_ADDRESS", 0);
}
return addr; return addr;
} }
@ -694,7 +748,10 @@ uint32_t PG_GetDeviceSize(const char *_Algo)
sz = 1024; sz = 1024;
} }
} }
else if (g_tProg.ChipType == CHIP_SPI_FLASH)
{
sz = lua_GetVarUint32("FLASH_SIZE", 0);
}
return sz; return sz;
} }
@ -720,7 +777,10 @@ uint8_t PG_EraseChip(void)
{ {
N76E_EraseChip(); N76E_EraseChip();
} }
else if (g_tProg.ChipType == CHIP_SPI_FLASH)
{
W25Q_EraseChip();
}
return 1; return 1;
} }
@ -746,7 +806,10 @@ uint8_t PG_CheckBlank(const char *_Algo, uint32_t _Addr, uint32_t _Size)
{ {
; ;
} }
else if (g_tProg.ChipType == CHIP_SPI_FLASH)
{
;
}
return 0; return 0;
} }
@ -776,7 +839,10 @@ uint8_t PG_ProgramBuf(const char *_Algo, uint32_t _FlashAddr, uint8_t *_Buff, ui
{ {
re = N76E_FLASH_ProgramBuf(_FlashAddr, _Buff, _Size); re = N76E_FLASH_ProgramBuf(_FlashAddr, _Buff, _Size);
} }
else if (g_tProg.ChipType == CHIP_SPI_FLASH)
{
re = W25Q_FLASH_ProgramBuf(_FlashAddr, _Buff, _Size);
}
return re; return re;
} }
@ -806,6 +872,10 @@ uint8_t PG_ReadBuf(const char *_Algo, uint32_t _FlashAddr, uint8_t *_Buff, uint3
{ {
re = N76E_ReadBuf(_FlashAddr, _Buff, _Size); re = N76E_ReadBuf(_FlashAddr, _Buff, _Size);
} }
else if (g_tProg.ChipType == CHIP_SPI_FLASH)
{
re = W25Q_ReadBuf(_FlashAddr, _Buff, _Size);
}
return re; return re;
} }

View File

@ -67,6 +67,8 @@ typedef struct
uint8_t AbortOnError; /* 多路模式0表示出错时继续烧录OK的芯片 1表示出错后立刻同时终止 */ uint8_t AbortOnError; /* 多路模式0表示出错时继续烧录OK的芯片 1表示出错后立刻同时终止 */
uint8_t ChNum; /* 通道个数 */
}OFFLINE_PROG_T; }OFFLINE_PROG_T;
/* lua脚本fix_data_begin()返回一个table用于通知C程序哪些内存地址需要填充数据 */ /* lua脚本fix_data_begin()返回一个table用于通知C程序哪些内存地址需要填充数据 */

1493
User/programmer/w25q_flash.c Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,38 @@
/*
*********************************************************************************************************
*
* : SPI Flash编程驱动
* : w25q_flash.h
*
*********************************************************************************************************
*/
#ifndef _W25Q_FLASH_H
#define _W25Q_FLASH_H
typedef struct
{
uint32_t Capacity; /* 芯片容量 */
uint32_t SectorSize; /* 扇区大小 */
uint32_t EraseSectorCmd; /* 扇区擦除指令 */
uint32_t EraseSectorTimeout; /* 擦除扇区超时 ms */
uint32_t EraseChipCmd; /* 全片擦除指令 */
uint32_t EraseChipTimeout; /* 擦除整片超时 ms */
uint32_t ProgPageTimeout; /* 编程page超时 */
uint8_t AutoAddrInc; /* AAI模式写 */
uint8_t ReadMode; /* 0表示单线1表示单线MOSI,双线MISO2表示双线MOSI,双线MISO */
uint8_t ReadIDCmd; /* 大多数是0x9F SST是0x90 */
uint8_t UnlockCmd; /* 解锁指令 */
}W25Q_T;
void W25Q_InitHard(void);
uint8_t W25Q_DetectIC(uint32_t *_id);
uint8_t W25Q_EraseSector(uint32_t _addr);
uint8_t W25Q_EraseChip(void);
uint8_t W25Q_FLASH_ProgramBuf(uint32_t _FlashAddr, uint8_t *_Buff, uint32_t _Size);
uint8_t W25Q_ReadBuf(uint32_t _Addr, uint8_t *_Buf, uint16_t _Len);
extern W25Q_T g_tW25Q;
#endif

View File

@ -38,6 +38,24 @@ void usbd_Init(void)
//tusb_init(); //tusb_init();
} }
/*
*********************************************************************************************************
* : usbd_UnInit
* : 退USB协议栈
* :
* :
*********************************************************************************************************
*/
void usbd_UnInit(void)
{
if (USBD_Device.dev_config > 0)
{
USBD_Stop(&USBD_Device);
USBD_DeInit(&USBD_Device);
}
}
/* /*
********************************************************************************************************* *********************************************************************************************************
* : usbd_OpenCDC * : usbd_OpenCDC

View File

@ -18,6 +18,7 @@
#include "usbd_cdc_interface.h" #include "usbd_cdc_interface.h"
void usbd_Init(void); void usbd_Init(void);
void usbd_UnInit(void);
void usbd_OpenCDC(uint8_t _com); void usbd_OpenCDC(uint8_t _com);
void usbd_OpenCDC2(uint8_t _com); void usbd_OpenCDC2(uint8_t _com);
void usbd_CloseCDC(void); void usbd_CloseCDC(void);

View File

@ -475,12 +475,6 @@ static void TIM_Config(void)
/* ## Enable TIM peripherals Clock ####################################### */ /* ## Enable TIM peripherals Clock ####################################### */
TIMx_CLK_ENABLE(); TIMx_CLK_ENABLE();
/* ## Configure the NVIC for TIMx ######################################## */
/* Set Interrupt Group Priority */
HAL_NVIC_SetPriority(TIMx_IRQn, 6, 0);
/* Enable the TIMx global Interrupt */
HAL_NVIC_EnableIRQ(TIMx_IRQn);
/* Set TIMx instance */ /* Set TIMx instance */
TimHandle.Instance = TIMx; TimHandle.Instance = TIMx;
@ -507,6 +501,14 @@ static void TIM_Config(void)
/* Starting Error */ /* Starting Error */
ERROR_HANDLER(); ERROR_HANDLER();
} }
/* 2020-11-27 V1.36 移动到后面在前面从DAP跳转时会死机 */
/* ## Configure the NVIC for TIMx ######################################## */
/* Set Interrupt Group Priority */
HAL_NVIC_SetPriority(TIMx_IRQn, 6, 0);
/* Enable the TIMx global Interrupt */
HAL_NVIC_EnableIRQ(TIMx_IRQn);
} }
/* /*