mirror of
https://github.com/armfly/H7-TOOL_STM32H7_App.git
synced 2024-08-09 10:05:34 +08:00
支持SPI=FLASH,DAP-LINK
This commit is contained in:
parent
3398d87db7
commit
0ab5e357af
18
CHANGELOG
18
CHANGELOG
@ -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.解决串口监视器BUG,ASCII模式如果收到0x00, 则不显示后面的数据。需要将不可见字符转换空格
|
||||
2.解决在非lua小程序界面执行lua(PC机下载)无法长按C退出的问题
|
||||
|
||||
其他优化:
|
||||
1.按键驱动底层忽略从其他状态跳转过来时,第一个长按键和按键弹起事件
|
||||
2.上电不显示logo界面(以前有2秒延迟)
|
||||
3.lwip初始化代码拆分到 lwip_pro() 中执行,加快界面启动速度
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
2020-10-19 V1.35
|
||||
1.解决CX32芯片机台信号异常(1拖2模式解除SWD保护时,机台GPIO输出解锁脉冲)
|
||||
|
@ -9,4 +9,24 @@
|
||||
2020-09-16 V1.31固件
|
||||
普通触发模式还有遗留问题:拖动触发位置滚动条时,超出波形范围后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串口机台信号扩展
|
||||
|
||||
|
||||
|
@ -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)
|
||||
{
|
||||
tickstart = pObj->IO.GetTick();
|
||||
@ -193,6 +195,9 @@ int32_t LAN8742_RegisterBusIO(lan8742_Object_t *pObj, lan8742_IOCtx_t *ioctx)
|
||||
}
|
||||
pObj->Is_Initialized = 1;
|
||||
}
|
||||
#else
|
||||
pObj->Is_Initialized = 1;
|
||||
#endif
|
||||
|
||||
return status;
|
||||
}
|
||||
|
@ -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
|
||||
|
||||
|
||||
|
BIN
Project/MDK-ARM(uV5)/LinkBin.exe
Normal file
BIN
Project/MDK-ARM(uV5)/LinkBin.exe
Normal file
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@ -384,9 +384,9 @@
|
||||
<GroupName>App</GroupName>
|
||||
<Files>
|
||||
<File>
|
||||
<FileName>main.h</FileName>
|
||||
<FileName>includes.h</FileName>
|
||||
<FileType>5</FileType>
|
||||
<FilePath>..\..\User\app\inc\main.h</FilePath>
|
||||
<FilePath>..\..\User\app\inc\includes.h</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>main.c</FileName>
|
||||
@ -493,6 +493,16 @@
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\User\app\src\status_uart_monitor.c</FilePath>
|
||||
</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>
|
||||
</Group>
|
||||
<Group>
|
||||
@ -734,6 +744,11 @@
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\User\bsp\src\bsp_i2c_gpio_ext.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>bsp_ds18b20.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\User\bsp\src\bsp_ds18b20.c</FilePath>
|
||||
</File>
|
||||
</Files>
|
||||
</Group>
|
||||
<Group>
|
||||
@ -1574,21 +1589,26 @@
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\User\programmer\stm8_prog_file.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>n76e_prog_file.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\User\programmer\n76e_prog_file.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>n76e003_flash.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\User\programmer\n76e003_flash.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>w25q_flash.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\User\programmer\w25q_flash.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>cx32_isp.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\User\programmer\cx32_isp.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>pg_prog_file.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\User\programmer\pg_prog_file.c</FilePath>
|
||||
</File>
|
||||
</Files>
|
||||
</Group>
|
||||
<Group>
|
||||
|
Binary file not shown.
@ -68,7 +68,7 @@ __Vectors DCD __initial_sp ; Top of Stack
|
||||
DCD MemManage_Handler ; MPU Fault Handler
|
||||
DCD BusFault_Handler ; Bus 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
|
||||
|
BIN
Project/dap.bin
Normal file
BIN
Project/dap.bin
Normal file
Binary file not shown.
Binary file not shown.
BIN
Project/h7_tool_app(v1.40).bin
Normal file
BIN
Project/h7_tool_app(v1.40).bin
Normal file
Binary file not shown.
Binary file not shown.
24
README.md
24
README.md
@ -28,10 +28,10 @@
|
||||
4. USB-RS232 转换器
|
||||
5. USB-TTL 串口转换器
|
||||
6. USB-CAN 转换器 (未完成)
|
||||
7. DAP-Link 仿真器 / 下载器 (未完成)
|
||||
8. 脱机烧录器 (已完成STM32、MM32、GD32、新唐ARM、新唐8051、AT32、APM32、RT1052)
|
||||
9. I2C 控制器 (未完成)
|
||||
10. SPI 控制器 (未完成)
|
||||
7. DAP-Link 仿真器 / 下载器
|
||||
8. 脱机烧录器 (已完成STM32、MM32、GD32、新唐ARM、新唐8051、AT32、APM32、RT1052; SPI Flash)
|
||||
9. I2C 控制器
|
||||
10. SPI 控制器
|
||||
11. GPIO 输入输出控制器
|
||||
12. 模拟信号发生器
|
||||
13. PWM 发生器 (未完成)
|
||||
@ -41,32 +41,28 @@
|
||||
17. 高侧电流表 & 电池放电容量测量
|
||||
18. 双通道电压表
|
||||
18. 电阻测量 通断蜂鸣
|
||||
19. 温度测量
|
||||
19. NTC温度测量
|
||||
20. 二极管测量
|
||||
21. 微型数控电源
|
||||
22. 串口数据监视器
|
||||
23. lua小程序
|
||||
24. 8通道DS18B20温度表
|
||||
|
||||
|
||||
### :construction: 任务列表 / TODO
|
||||
<!-- 以下为示例 -->
|
||||
- [ ] DAP-Link
|
||||
- [x] DAP-Link 移植
|
||||
- [ ] DAP-Link 测试
|
||||
- [ ] `Wi-Fi` 无线调试
|
||||
- [x] DAP-Link 实现RTT打印功能
|
||||
- [ ] 联机下载
|
||||
- [ ] 逻辑分析仪
|
||||
- [ ] 底层驱动编码 (FMC、DMA、TIM)
|
||||
- [ ] 兼容第三方上位机
|
||||
- [ ] 脱机烧录器
|
||||
- [x] 界面操作方式规划
|
||||
- [x] 实现STM32系列
|
||||
- [ ] 实现STM8系列
|
||||
- [x] 根据客户需求补充其他厂家ARM芯片
|
||||
- [ ] 实现STM32系列
|
||||
- [ ] CAN功能
|
||||
- [ ] 底层驱动验证
|
||||
- [ ] 功能规划
|
||||
- [ ] TIM 定时器相关
|
||||
- [ ] 脉冲计数器 (脱机)
|
||||
- [ ] 频率计 (脱机)
|
||||
- [ ] PWM 发生器 (联机)
|
||||
|
||||
### :warning: 注意事项 / Attention
|
||||
|
35
User/app/inc/disp_lib.h
Normal file
35
User/app/inc/disp_lib.h
Normal 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
188
User/app/inc/main.h → User/app/inc/includes.h
Executable file → Normal file
@ -1,86 +1,102 @@
|
||||
/*
|
||||
*********************************************************************************************************
|
||||
*
|
||||
* 模块名称 : main模块
|
||||
* 文件名称 : main.h
|
||||
*
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
|
||||
#ifndef _MAIN_H_
|
||||
#define _MAIN_H_
|
||||
|
||||
#include "ui_def.h"
|
||||
#include "param.h"
|
||||
#include "modbus_register.h"
|
||||
|
||||
/* 主程序状态字定义, MS = Main Status */
|
||||
enum
|
||||
{
|
||||
MS_LINK_MODE = 0, /* 联机状态 */
|
||||
|
||||
MS_SYSTEM_SET, /* 系统设置 */
|
||||
MS_HARD_INFO, /* 关于-硬件信息 */
|
||||
MS_ESP32_TEST, /* ESP32模块升级状态 */
|
||||
MS_USB_EMMC, /* 虚拟串口状态。RS232 RS485 TTL-UART */
|
||||
MS_MODIFY_PARAM, /* 参数设置 */
|
||||
MS_FILE_MANAGE, /* 文件管理 */
|
||||
|
||||
MS_PROG_SELECT_FILE, /* 脱机下载器浏览文件 */
|
||||
MS_PROG_WORK, /* 脱机下载器工作界面 */
|
||||
MS_PROG_SETTING, /* 脱机下载器参数设置 */
|
||||
MS_PROG_MODIFY_PARAM, /* 修改参数比如复位类型 */
|
||||
|
||||
MS_VOLTAGE_METER, /* 电压表 */
|
||||
MS_CURRENT_METER, /* 高侧电流表 */
|
||||
MS_TEMP_METER, /* 温度表 */
|
||||
MS_RESISTOR_METER, /* 电阻表 */
|
||||
MS_TVCC_POWER, /* 微型数控电源 */
|
||||
MS_PULSE_METER, /* 脉冲计 */
|
||||
|
||||
MS_MINI_DSO, /* 迷你示波器 */
|
||||
|
||||
MS_EXTEND_MENU1, /* 第1级菜单 */
|
||||
MS_EXTEND_MENU_LUA, /* 第2级菜单-LUA程序 */
|
||||
MS_EXTEND_MENU_REC, /* 第2级菜单-数据记录仪 */
|
||||
|
||||
MS_LUA_SELECT_FILE, /* 浏览lua文件 */
|
||||
MS_LUA_EXEC_FILE, /* 执行lua文件 */
|
||||
|
||||
MS_MONITOR_UART, /* 串口监视器 */
|
||||
MS_MONITOR_CAN, /* CAN监视器 */
|
||||
MS_MONITOR_GPIO, /* IO监视器 */
|
||||
MS_MONITOR_ANALOG, /* 模拟量监视器 */
|
||||
};
|
||||
|
||||
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 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);
|
||||
uint16_t NextStatus(uint16_t _NowStatus);
|
||||
uint16_t LastStatus(uint16_t _NowStatus);
|
||||
void DSO_StartMode2(void);
|
||||
void PlayKeyTone(void);
|
||||
void DispMsgBox(uint16_t _usX, uint16_t _usY, uint16_t _usHeight, uint16_t _usWidth, char *_str);
|
||||
|
||||
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) *********************************/
|
||||
/*
|
||||
*********************************************************************************************************
|
||||
*
|
||||
* 模块名称 : 头文件汇总
|
||||
* 文件名称 : includes.h
|
||||
* 版 本 : V1.0
|
||||
* 说 明 : 当前使用头文件汇总
|
||||
*
|
||||
* 修改记录 :
|
||||
* 版本号 日期 作者 说明
|
||||
* V1.0 2020-06-12 Eric2013 首次发布
|
||||
*
|
||||
* Copyright (C), 2020-2030, 安富莱电子 www.armfly.com
|
||||
*
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
|
||||
#ifndef _INCLUDES_H_
|
||||
#define _INCLUDES_H_
|
||||
|
||||
/*
|
||||
*********************************************************************************************************
|
||||
* APP / BSP
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
#include "bsp.h"
|
||||
|
||||
/*
|
||||
*********************************************************************************************************
|
||||
* 其它
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
#include "ui_def.h"
|
||||
#include "param.h"
|
||||
#include "modbus_register.h"
|
||||
#include "disp_lib.h"
|
||||
#include "lcd_menu.h"
|
||||
#include "file_lib.h"
|
||||
#include "lua_if.h"
|
||||
#include "prog_if.h"
|
||||
#include "modify_param.h"
|
||||
#include "wifi_if.h"
|
||||
#include "usb_if.h"
|
||||
|
||||
/* 主程序状态字定义, MS = Main Status */
|
||||
enum
|
||||
{
|
||||
MS_LINK_MODE = 0, /* 联机状态 */
|
||||
|
||||
MS_SYSTEM_SET, /* 系统设置 */
|
||||
MS_HARD_INFO, /* 关于-硬件信息 */
|
||||
MS_ESP32_TEST, /* ESP32模块升级状态 */
|
||||
MS_USB_EMMC, /* 虚拟串口状态。RS232 RS485 TTL-UART */
|
||||
MS_MODIFY_PARAM, /* 参数设置 */
|
||||
MS_FILE_MANAGE, /* 文件管理 */
|
||||
|
||||
MS_PROG_SELECT_FILE, /* 脱机下载器浏览文件 */
|
||||
MS_PROG_WORK, /* 脱机下载器工作界面 */
|
||||
MS_PROG_SETTING, /* 脱机下载器参数设置 */
|
||||
MS_PROG_MODIFY_PARAM, /* 修改参数比如复位类型 */
|
||||
|
||||
MS_VOLTAGE_METER, /* 电压表 */
|
||||
MS_CURRENT_METER, /* 高侧电流表 */
|
||||
MS_TEMP_METER, /* 温度表 */
|
||||
MS_RESISTOR_METER, /* 电阻表 */
|
||||
MS_TVCC_POWER, /* 微型数控电源 */
|
||||
MS_PULSE_METER, /* 脉冲计 */
|
||||
|
||||
MS_MINI_DSO, /* 迷你示波器 */
|
||||
|
||||
MS_EXTEND_MENU1, /* 第1级菜单 */
|
||||
MS_EXTEND_MENU_LUA, /* 第2级菜单-LUA程序 */
|
||||
MS_EXTEND_MENU_REC, /* 第2级菜单-数据记录仪 */
|
||||
|
||||
MS_LUA_SELECT_FILE, /* 浏览lua文件 */
|
||||
MS_LUA_EXEC_FILE, /* 执行lua文件 */
|
||||
|
||||
MS_MONITOR_UART, /* 串口监视器 */
|
||||
MS_MONITOR_CAN, /* CAN监视器 */
|
||||
MS_MONITOR_GPIO, /* IO监视器 */
|
||||
MS_MONITOR_ANALOG, /* 模拟量监视器 */
|
||||
|
||||
MS_DAPLINK, /* 仿真器状态 */
|
||||
MS_JUMP_APP, /* 跳到APP状态 */
|
||||
|
||||
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) *********************************/
|
@ -14,6 +14,15 @@
|
||||
#ifndef _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
|
||||
{
|
||||
|
@ -25,7 +25,7 @@
|
||||
#define CALIB_VER 0x00000201 /* 校准参数版本 200 */
|
||||
|
||||
/* 暂未启用 程序缓存 */
|
||||
#define APP_BUF_ADDR 0x08000000 + 1 * 1024 * 1024
|
||||
#define APP_BUF_ADDR 0x08000000 + 1 * 1024 * 1024
|
||||
|
||||
/* 校准参数结构,两点校准, 通用校准参数,ADC */
|
||||
typedef struct
|
||||
@ -118,6 +118,11 @@ typedef struct
|
||||
uint8_t UartMonTimeStamp; /* 串口监视,加上时间戳 */
|
||||
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;
|
||||
|
||||
/* 模拟量校准参数 */
|
||||
|
500
User/app/src/disp_lib.c
Normal file
500
User/app/src/disp_lib.c
Normal 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) *********************************/
|
@ -14,11 +14,8 @@
|
||||
*
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
#include "bsp.h"
|
||||
#include "file_lib.h"
|
||||
#include "lcd_menu.h"
|
||||
#include "main.h"
|
||||
#include "prog_if.h"
|
||||
|
||||
#include "includes.h"
|
||||
#include "md5.h"
|
||||
|
||||
/*
|
||||
|
@ -14,10 +14,7 @@
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
|
||||
#include "bsp.h"
|
||||
#include "fonts.h"
|
||||
#include "ui_def.h"
|
||||
#include "lcd_menu.h"
|
||||
#include "includes.h"
|
||||
|
||||
/*
|
||||
*********************************************************************************************************
|
||||
|
@ -16,8 +16,7 @@
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
|
||||
#include "bsp.h"
|
||||
#include "main.h"
|
||||
#include "includes.h"
|
||||
|
||||
#include "status_link_mode.h"
|
||||
#include "status_voltage_meter.h"
|
||||
@ -51,7 +50,11 @@
|
||||
#include "file_lib.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 g_MainStatus; /* 主状态字 */
|
||||
@ -66,38 +69,9 @@ static const uint16_t StatusOrder[] =
|
||||
MS_TEMP_METER, /* 温度表 */
|
||||
MS_TVCC_POWER, /* 微型数控电源 */
|
||||
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
|
||||
@ -106,53 +80,16 @@ uint32_t stm32crc(uint32_t *ptr, int len)
|
||||
* 返 回 值: 错误代码(无需处理)
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
void JumpToDAPLink(void);
|
||||
extern MENU_T g_tMenu1;
|
||||
int main(void)
|
||||
{
|
||||
{
|
||||
bsp_Init();
|
||||
|
||||
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; /* 初始状态 = 联机界面 */
|
||||
if (g_tParam.StartRun == 1)
|
||||
@ -164,7 +101,84 @@ int main(void)
|
||||
{
|
||||
g_gMulSwd.MultiMode = g_tParam.MultiProgMode;
|
||||
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)
|
||||
{
|
||||
switch (g_MainStatus)
|
||||
@ -182,7 +196,7 @@ int main(void)
|
||||
break;
|
||||
|
||||
case MS_MODIFY_PARAM: /* 修改参数 */
|
||||
status_ModifyParam();
|
||||
//status_ModifyParam();
|
||||
break;
|
||||
|
||||
case MS_ESP32_TEST: /* ESP32模块固件升级 */
|
||||
@ -265,13 +279,13 @@ int main(void)
|
||||
status_MonitorCan();
|
||||
break;
|
||||
|
||||
case MS_MONITOR_GPIO: /* IO监视器 */
|
||||
status_MonitorUart();
|
||||
break;
|
||||
|
||||
case MS_MONITOR_ANALOG: /* 模拟量监视器 */
|
||||
case MS_MONITOR_GPIO: /* 串口视器 */
|
||||
status_MonitorUart();
|
||||
break;
|
||||
|
||||
case MS_DS18B20_METER: /* DS18B20温度表 */
|
||||
status_DS18B20Meter();
|
||||
break;
|
||||
|
||||
default:
|
||||
g_MainStatus = MS_LINK_MODE;
|
||||
@ -280,7 +294,6 @@ int main(void)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
*********************************************************************************************************
|
||||
* 函 数 名: NextStatus
|
||||
@ -380,472 +393,6 @@ uint16_t GetStatusIndex(uint16_t _NowStatus)
|
||||
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
|
||||
@ -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) *********************************/
|
||||
|
@ -14,12 +14,7 @@
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
|
||||
#include "bsp.h"
|
||||
#include "fonts.h"
|
||||
#include "ui_def.h"
|
||||
#include "main.h"
|
||||
#include "lcd_menu.h"
|
||||
#include "modify_param.h"
|
||||
#include "includes.h"
|
||||
|
||||
/* 多行文本框 */
|
||||
#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 *SysBaseParam1[] = {"1分钟", "5分钟", "15分钟", "1小时", "关闭"};
|
||||
const char *SysBaseParam2[] = {"16点阵", "24点阵"};
|
||||
const char *SysBaseParam3[] = {"缺省", "单路烧录", "多路烧录", "DAP-Link"};
|
||||
|
||||
const PARAM_LIST_T SysBaseParamList[SYS_BASE_PARAM_COUNT] =
|
||||
{
|
||||
/* 数据类型, 名称 可选列表, 最小值, 最大值, 缺省值 */
|
||||
{ 0, "按键音: ", SysBaseParam0, 0, 1, 1},
|
||||
{ 0, "屏保超时: ", SysBaseParam1, 0, 4, 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本机IP1: ", 0, 0, 255, 168},
|
||||
{ 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},
|
||||
};
|
||||
|
||||
|
||||
/****** 烧录参数 ******************************************************************************/
|
||||
#define PROG_PARAM_COUNT 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] =
|
||||
{
|
||||
/* 数据类型, 名称 可选列表, 最小值, 最大值, 缺省值 */
|
||||
{ 0, "多路模式: ", ProgParam0, 0, 4, 4},
|
||||
{ 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)
|
||||
{
|
||||
if (_MainStatus == MS_MONITOR_UART)
|
||||
if (_MainStatus == MODIFY_PARAM_UART_MON)
|
||||
{
|
||||
s_pParamList = UartMonParamList;
|
||||
s_ParamCount = UART_MON_PARAM_COUNT;
|
||||
}
|
||||
else if (_MainStatus == MS_SYSTEM_SET)
|
||||
else if (_MainStatus == MODIFY_PARAM_SYSTEM)
|
||||
{
|
||||
s_pParamList = SysBaseParamList;
|
||||
s_ParamCount = SYS_BASE_PARAM_COUNT;
|
||||
}
|
||||
else if (_MainStatus == MS_PROG_MODIFY_PARAM)
|
||||
else if (_MainStatus == MODIFY_PARAM_PROG)
|
||||
{
|
||||
s_pParamList = ProgParamList;
|
||||
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;
|
||||
else if (_index == 1) value = g_tParam.LcdSleepTime;
|
||||
else if (_index == 2) value = g_tParam.FileListFont24;
|
||||
else if (_index == 3) value = g_tParam.LocalIPAddr[0];
|
||||
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 (_index == 3) value = g_tParam.StartRun;
|
||||
}
|
||||
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)
|
||||
{
|
||||
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;
|
||||
else if (_index == 1) g_tParam.LcdSleepTime = _value;
|
||||
else if (_index == 2) g_tParam.FileListFont24 = _value;
|
||||
else if (_index == 3) g_tParam.LocalIPAddr[0] = _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 (_index == 3) g_tParam.StartRun = _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)
|
||||
{
|
||||
if (_index == 0) g_tParam.MultiProgMode = _value;
|
||||
|
@ -14,9 +14,7 @@
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
|
||||
#include "bsp.h"
|
||||
#include "param.h"
|
||||
#include "modbus_reg_addr.h"
|
||||
#include "includes.h"
|
||||
|
||||
PARAM_T g_tParam; /* 基本参数 */
|
||||
CALIB_T g_tCalib; /* 校准参数 */
|
||||
@ -59,6 +57,18 @@ void LoadParam(void)
|
||||
g_tVar.MACaddr[5] = g_tVar.CPU_Sn[0] >> 0;
|
||||
|
||||
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.StartRun = 0; /* 开机启动 */
|
||||
|
||||
g_tParam.DAP_TVCCVolt = 0;
|
||||
g_tParam.DAP_BeepEn = 1;
|
||||
bsp_GenRNG(&g_tParam.DAP_Sn, 1);
|
||||
|
||||
SaveParam();
|
||||
}
|
||||
|
@ -14,13 +14,7 @@
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
|
||||
#include "bsp.h"
|
||||
#include "main.h"
|
||||
#include "lcd_menu.h"
|
||||
#include "file_lib.h"
|
||||
#include "lua_if.h"
|
||||
#include "prog_if.h"
|
||||
#include "modify_param.h"
|
||||
#include "includes.h"
|
||||
|
||||
/* 多行文本框 */
|
||||
#define MEMO_X 0
|
||||
@ -213,7 +207,7 @@ void status_MonitorCan(void)
|
||||
|
||||
case KEY_LONG_DOWN_S: /* S键 长按 */
|
||||
LCD_SetEncode(ENCODE_UTF8);
|
||||
ModifyParam(MS_MONITOR_UART); /* 参数修改界面,阻塞 */
|
||||
ModifyParam(MODIFY_PARAM_UART_MON); /* 参数修改界面,阻塞 */
|
||||
LCD_SetEncode(ENCODE_GBK);
|
||||
fRefresh = 1;
|
||||
fInit = 1;
|
||||
|
@ -14,8 +14,7 @@
|
||||
*
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
#include "bsp.h"
|
||||
#include "main.h"
|
||||
#include "includes.h"
|
||||
|
||||
static void DispCurrentVolt(void);
|
||||
static void AutoCurrentRange(void);
|
||||
|
210
User/app/src/status_ds18b20_meter.c
Normal file
210
User/app/src/status_ds18b20_meter.c
Normal file
@ -0,0 +1,210 @@
|
||||
/*
|
||||
*********************************************************************************************************
|
||||
*
|
||||
* 模块名称 : DS18B20温度传感器监视
|
||||
* 文件名称 : status_ds18b20_meter.c
|
||||
* 版 本 : V1.0
|
||||
* 说 明 : 显示8路DS18B20温度值
|
||||
* 修改记录 :
|
||||
* 版本号 日期 作者 说明
|
||||
* 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
|
||||
* 功能说明: 显示8通道DS18B20数据
|
||||
* 形 参: 无
|
||||
* 返 回 值: 无
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
#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) *********************************/
|
@ -13,19 +13,20 @@
|
||||
*
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
#include "bsp.h"
|
||||
#include "main.h"
|
||||
#include "includes.h"
|
||||
#include "lcd_menu.h"
|
||||
#include "SW_DP_Multi.h"
|
||||
#include "modify_param.h"
|
||||
#include "usb_if.h"
|
||||
|
||||
const uint8_t *g_Menu1_Text[] =
|
||||
{
|
||||
" 1 脱机烧录器(单路)",
|
||||
" 2 脱机烧录器(多路)",
|
||||
" 3 LUA小程序",
|
||||
" 4 数据监视器",
|
||||
" 5 系统设置",
|
||||
" 1 CMSIS-DAP仿真器",
|
||||
" 2 脱机烧录器(单路)",
|
||||
" 3 脱机烧录器(多路)",
|
||||
" 4 LUA小程序",
|
||||
" 5 数据监视器",
|
||||
" 6 系统设置",
|
||||
|
||||
/* 结束符号, 用于菜单函数自动识别菜单项个数 */
|
||||
"&"
|
||||
@ -36,7 +37,7 @@ MENU_T g_tMenu1;
|
||||
const uint8_t *g_MenuRec_Text[] =
|
||||
{
|
||||
"1 串口(TTL 485 232)",
|
||||
"2 CAN总线(预留)",
|
||||
"2 DS18B20温度表",
|
||||
|
||||
/* 结束符号, 用于菜单函数自动识别菜单项个数 */
|
||||
"&"
|
||||
@ -44,6 +45,8 @@ const uint8_t *g_MenuRec_Text[] =
|
||||
|
||||
MENU_T g_tMenuRec;
|
||||
|
||||
void JumpToDAPLink(void);
|
||||
|
||||
/*
|
||||
*********************************************************************************************************
|
||||
* 函 数 名: status_ExtendMenu1
|
||||
@ -109,27 +112,32 @@ void status_ExtendMenu1(void)
|
||||
|
||||
case KEY_LONG_DOWN_S: /* S键 上 */
|
||||
if (g_tMenu1.Cursor == 0)
|
||||
{
|
||||
/* 跳转到DAP固件 */
|
||||
JumpToDAPLink();
|
||||
}
|
||||
else if (g_tMenu1.Cursor == 1)
|
||||
{
|
||||
g_gMulSwd.MultiMode = 0;
|
||||
g_MainStatus = MS_PROG_WORK;
|
||||
}
|
||||
else if (g_tMenu1.Cursor == 1)
|
||||
else if (g_tMenu1.Cursor == 2)
|
||||
{
|
||||
g_gMulSwd.MultiMode = g_tParam.MultiProgMode;
|
||||
g_MainStatus = MS_PROG_WORK;
|
||||
}
|
||||
else if (g_tMenu1.Cursor == 2)
|
||||
else if (g_tMenu1.Cursor == 3)
|
||||
{
|
||||
g_MainStatus = MS_LUA_SELECT_FILE;
|
||||
}
|
||||
else if (g_tMenu1.Cursor == 3)
|
||||
else if (g_tMenu1.Cursor == 4)
|
||||
{
|
||||
g_MainStatus = MS_EXTEND_MENU_REC;
|
||||
}
|
||||
else if (g_tMenu1.Cursor == 4)
|
||||
else if (g_tMenu1.Cursor == 5)
|
||||
{
|
||||
g_MainStatus = MS_SYSTEM_SET;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case KEY_UP_C: /* C键 下 */
|
||||
@ -222,7 +230,7 @@ void status_ExtendMenuRec(void)
|
||||
}
|
||||
else if (g_tMenuRec.Cursor == 1)
|
||||
{
|
||||
g_MainStatus = MS_MONITOR_CAN;
|
||||
g_MainStatus = MS_DS18B20_METER;
|
||||
}
|
||||
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) *********************************/
|
||||
|
@ -13,8 +13,7 @@
|
||||
*
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
#include "bsp.h"
|
||||
#include "main.h"
|
||||
#include "includes.h"
|
||||
#include "usbd_user.h"
|
||||
|
||||
#define DATE_X 5
|
||||
|
@ -13,8 +13,7 @@
|
||||
*
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
#include "bsp.h"
|
||||
#include "main.h"
|
||||
#include "includes.h"
|
||||
#include "lcd_menu.h"
|
||||
#include "file_lib.h"
|
||||
#include "lua_if.h"
|
||||
|
@ -13,9 +13,7 @@
|
||||
*
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
#include "bsp.h"
|
||||
#include "main.h"
|
||||
#include "lcd_menu.h"
|
||||
#include "includes.h"
|
||||
|
||||
/*
|
||||
*********************************************************************************************************
|
||||
|
@ -13,8 +13,7 @@
|
||||
*
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
#include "bsp.h"
|
||||
#include "main.h"
|
||||
#include "includes.h"
|
||||
|
||||
static void DispPulse(void);
|
||||
|
||||
|
@ -13,14 +13,9 @@
|
||||
*
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
#include "bsp.h"
|
||||
#include "main.h"
|
||||
#include "file_lib.h"
|
||||
#include "lua_if.h"
|
||||
#include "prog_if.h"
|
||||
#include "lcd_menu.h"
|
||||
#include "includes.h"
|
||||
|
||||
#include "SW_DP_Multi.h"
|
||||
#include "modify_param.h"
|
||||
|
||||
/* 三个按钮 */
|
||||
#define BTN1_X (240 - BTN1_W - 5)
|
||||
@ -98,6 +93,7 @@ static void DispProgCounter(void);
|
||||
extern void sysTickInit(void);
|
||||
extern uint8_t swd_init_debug(void);
|
||||
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;
|
||||
fRefresh = 1;
|
||||
while (g_MainStatus == MS_PROG_WORK)
|
||||
@ -931,7 +939,7 @@ void status_ProgSetting(void)
|
||||
{
|
||||
//g_MainStatus = MS_PROG_MODIFY_PARAM);;
|
||||
|
||||
ModifyParam(MS_PROG_MODIFY_PARAM);
|
||||
ModifyParam(MODIFY_PARAM_PROG);
|
||||
LCD_DispMenu(&g_tMenuProg1);
|
||||
/* 通知lua程序,多路编程参数变化 */
|
||||
lua_do("MULTI_MODE = pg_read_c_var(\"MultiProgMode\")");
|
||||
|
@ -13,8 +13,7 @@
|
||||
*
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
#include "bsp.h"
|
||||
#include "main.h"
|
||||
#include "includes.h"
|
||||
|
||||
static void DispResistor(void);
|
||||
|
||||
|
@ -13,24 +13,17 @@
|
||||
*
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
#include "bsp.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"
|
||||
#include "includes.h"
|
||||
|
||||
const uint8_t *g_MenuSys_Text[] =
|
||||
{
|
||||
" 1 硬件信息",
|
||||
" 2 参数设置",
|
||||
" 1 基本参数",
|
||||
" 2 网络参数",
|
||||
" 3 ESP32固件升级",
|
||||
" 4 USB eMMC磁盘",
|
||||
" 5 数据维护",
|
||||
" 6 重启",
|
||||
" 6 硬件信息",
|
||||
" 7 重启",
|
||||
/* 结束符号, 用于菜单函数自动识别菜单项个数 */
|
||||
"&"
|
||||
};
|
||||
@ -109,15 +102,16 @@ void status_SystemSetMain(void)
|
||||
case KEY_LONG_DOWN_S: /* S键 上 */
|
||||
PlayKeyTone();
|
||||
s_enter_sub_menu = 1;
|
||||
|
||||
|
||||
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)
|
||||
{
|
||||
//g_MainStatus = MS_MODIFY_PARAM;
|
||||
ModifyParam(MS_SYSTEM_SET);
|
||||
ModifyParam(MODIFY_PARAM_NET);
|
||||
DispHeader2(90, "系统设置"); /* 需要清屏 */
|
||||
LCD_DispMenu(&g_tMenuSys);
|
||||
}
|
||||
@ -133,7 +127,11 @@ void status_SystemSetMain(void)
|
||||
{
|
||||
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;
|
||||
}
|
||||
@ -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
|
||||
|
@ -13,8 +13,7 @@
|
||||
*
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
#include "bsp.h"
|
||||
#include "main.h"
|
||||
#include "includes.h"
|
||||
|
||||
static void DispTemp(void);
|
||||
|
||||
|
@ -13,8 +13,7 @@
|
||||
*
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
#include "bsp.h"
|
||||
#include "main.h"
|
||||
#include "includes.h"
|
||||
|
||||
static void DispTVccVoltCurr(void);
|
||||
static void DispTVccSetting(uint16_t _volt, uint8_t _mode);
|
||||
|
@ -13,13 +13,8 @@
|
||||
*
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
#include "bsp.h"
|
||||
#include "main.h"
|
||||
#include "lcd_menu.h"
|
||||
#include "file_lib.h"
|
||||
#include "lua_if.h"
|
||||
#include "prog_if.h"
|
||||
#include "modify_param.h"
|
||||
#include "includes.h"
|
||||
|
||||
|
||||
/* 多行文本框 */
|
||||
#define TITLE_X 0
|
||||
@ -183,6 +178,10 @@ void UartReciveNew2(uint8_t _byte)
|
||||
|
||||
if (g_tParam.UartMonHex == 0) /* ASCII格式显示 */
|
||||
{
|
||||
if (_byte < ' ')
|
||||
{
|
||||
_byte = ' '; /* 不可见字符转换为空格 */
|
||||
}
|
||||
LCD_MemoAddChar(&g_RecMemo, _byte);
|
||||
}
|
||||
else /* HEX格式显示 */
|
||||
@ -396,7 +395,7 @@ void status_MonitorUart(void)
|
||||
else if (g_tMenuUart.Cursor == 3) /* 设置串口参数 */
|
||||
{
|
||||
LCD_SetEncode(ENCODE_UTF8);
|
||||
ModifyParam(MS_MONITOR_UART); /* 参数修改界面,阻塞 */
|
||||
ModifyParam(MODIFY_PARAM_UART_MON); /* 参数修改界面,阻塞 */
|
||||
LCD_SetEncode(ENCODE_GBK);
|
||||
fInit = 1;
|
||||
}
|
||||
|
@ -13,8 +13,7 @@
|
||||
*
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
#include "bsp.h"
|
||||
#include "main.h"
|
||||
#include "includes.h"
|
||||
|
||||
static void DispCH1CH2(void);
|
||||
static void AutoVoltRange(void);
|
||||
|
@ -14,10 +14,7 @@
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
|
||||
#include "bsp.h"
|
||||
#include "wifi_if.h"
|
||||
#include "param.h"
|
||||
#include "main.h"
|
||||
#include "includes.h"
|
||||
|
||||
uint8_t link_id = 0xFF; /* 当前的TCP连接id, 0-4有效。 FF表示无TCP连接 */
|
||||
uint8_t wifi_state = WIFI_STOP;
|
||||
|
@ -100,6 +100,20 @@ void bsp_Init(void)
|
||||
bsp_InitRNG(); /* 配置启用随机数模块 */
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
*********************************************************************************************************
|
||||
* 函 数 名: bsp_DeInit
|
||||
* 功能说明: 禁能所有的硬件设备
|
||||
* 形 参: 无
|
||||
* 返 回 值: 无
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
void bsp_DeInit(void)
|
||||
{
|
||||
bsp_DeInitUart();
|
||||
}
|
||||
|
||||
/*
|
||||
*********************************************************************************************************
|
||||
* 函 数 名: SystemClock_Config
|
||||
|
@ -99,6 +99,7 @@
|
||||
#include "bsp_ext_io.h"
|
||||
|
||||
#include "bsp_rng.h"
|
||||
#include "bsp_ds18b20.h"
|
||||
|
||||
|
||||
|
||||
@ -108,6 +109,7 @@
|
||||
|
||||
/* 提供给其他C文件调用的函数 */
|
||||
void bsp_Init(void);
|
||||
void bsp_DeInit(void);
|
||||
void bsp_Idle(void);
|
||||
|
||||
void bsp_GetCpuID(uint32_t *_id);
|
||||
|
@ -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);
|
||||
void RTC_ReadClock(void);
|
||||
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;
|
||||
|
||||
|
19
User/bsp/inc/bsp_ds18b20.h
Normal file
19
User/bsp/inc/bsp_ds18b20.h
Normal 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) *********************************/
|
@ -55,7 +55,8 @@ typedef enum
|
||||
|
||||
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;
|
||||
|
||||
void bsp_InitExtIO(void);
|
||||
|
@ -187,6 +187,7 @@ typedef struct
|
||||
}UART_T;
|
||||
|
||||
void bsp_InitUart(void);
|
||||
void bsp_DeInitUart(void);
|
||||
void comSendBuf(COM_PORT_E _ucPort, uint8_t *_ucaBuf, uint16_t _usLen);
|
||||
void comSendChar(COM_PORT_E _ucPort, uint8_t _ucByte);
|
||||
uint8_t comGetChar(COM_PORT_E _ucPort, uint8_t *_pByte);
|
||||
|
@ -633,10 +633,10 @@ void DSO_SetGain(uint8_t _ch, uint8_t _gain)
|
||||
{
|
||||
if (_gain == 0) {G1C_0(); G1B_0(); G1A_0();}
|
||||
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 == 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 == 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();}
|
||||
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 == 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 == 7) {G2C_1(); G2B_1(); G2A_1();}
|
||||
}
|
||||
|
@ -296,4 +296,31 @@ uint8_t RTC_CalcWeek(uint16_t _year, uint8_t _mon, uint8_t _day)
|
||||
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) *********************************/
|
||||
|
491
User/bsp/src/bsp_ds18b20.c
Normal file
491
User/bsp/src/bsp_ds18b20.c
Normal 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 (第2路MISO)
|
||||
D8 PE11 PD4 PI3 - DIR PG9 MISO_3 (第3路MISO)
|
||||
D9 PE12 PD5 - DIR PI12 MISO_4 (第4路MISO)
|
||||
*/
|
||||
|
||||
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
|
||||
* 功能说明: 读温度寄存器的值(原始数据). 循环读,返回上次结果.
|
||||
* 形 参: 无
|
||||
* 返 回 值: 0表示失败,1表示OK
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
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
|
||||
然后释放DQ,等待DQ被上拉电阻拉高,约 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) *********************************/
|
||||
|
@ -351,6 +351,12 @@ void EIO_D0_Config(EIO_SELECT_E _mode)
|
||||
GPIO_INIT_UART7(GPIOA, GPIO_PIN_15); /* 配置GPIO为UART7功能 */
|
||||
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
|
||||
{
|
||||
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_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
|
||||
{
|
||||
g_tVar.GpioMode[1] = 0;
|
||||
@ -420,8 +433,8 @@ void EIO_D1_Config(EIO_SELECT_E _mode)
|
||||
* 返 回 值: 无
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
#define GPIO_D2_DIR GPIOD
|
||||
#define PIN_D2_DIR GPIO_PIN_9
|
||||
#define GPIO_D2_DIR GPIOD
|
||||
#define PIN_D2_DIR GPIO_PIN_9
|
||||
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_INIT_INPUT(GPIOB, GPIO_PIN_7); /* 配置为GPIO 输入功能 */
|
||||
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
|
||||
{
|
||||
@ -512,7 +532,14 @@ void EIO_D3_Config(EIO_SELECT_E _mode)
|
||||
GPIO_INIT_INPUT(GPIOH, GPIO_PIN_11); /* 配置为GPIO 输入功能 */
|
||||
GPIO_INIT_AF_PP(GPIOE, GPIO_PIN_5); /* 配置为GPIO AF */
|
||||
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
|
||||
{
|
||||
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(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
|
||||
{
|
||||
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_INIT_INPUT(GPIOI, GPIO_PIN_5); /* 配置为GPIO 输入功能 */
|
||||
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
|
||||
{
|
||||
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(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
|
||||
{
|
||||
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_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
|
||||
{
|
||||
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_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
|
||||
{
|
||||
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_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
|
||||
{
|
||||
g_tVar.GpioMode[9] = 0;
|
||||
|
@ -252,6 +252,33 @@ void bsp_PutKey(uint8_t _KeyCode)
|
||||
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;
|
||||
|
||||
if (++s_tKey.Write >= KEY_FIFO_SIZE)
|
||||
|
@ -333,6 +333,7 @@ void ST7789_DrawScreen(void)
|
||||
}
|
||||
#else
|
||||
static int32_t s_time1 = 0;
|
||||
static uint8_t s_first_run = 0; /* 上电第1次运行,准备好数据后开背光,避免短暂花屏 */
|
||||
|
||||
if (s_DispRefresh == 0)
|
||||
{
|
||||
@ -343,7 +344,7 @@ void ST7789_DrawScreen(void)
|
||||
if (bsp_CheckRunTime(s_time1) < 50)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
s_DispRefresh = 0;
|
||||
|
||||
@ -360,6 +361,13 @@ void ST7789_DrawScreen(void)
|
||||
while (wTransferState == 0){}
|
||||
|
||||
s_time1 = bsp_GetRunTime();
|
||||
|
||||
if (s_first_run == 0)
|
||||
{
|
||||
s_first_run = 1;
|
||||
|
||||
LCD_SetBackLight(BRIGHT_DEFAULT); /* 打开背光 255 */
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -413,6 +413,40 @@ void bsp_SetTIMforInt(TIM_TypeDef* TIMx, uint32_t _ulFreq, uint8_t _PreemptionPr
|
||||
uint16_t usPrescaler;
|
||||
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时钟 */
|
||||
bsp_RCC_TIM_Enable(TIMx);
|
||||
|
||||
|
@ -330,7 +330,7 @@ void bsp_StartTimer(uint8_t _id, uint32_t _period)
|
||||
* 函 数 名: bsp_StartAutoTimer
|
||||
* 功能说明: 启动一个自动定时器,并设置定时周期。
|
||||
* 形 参: _id : 定时器ID,值域【0,TMR_COUNT-1】。用户必须自行维护定时器ID,以避免定时器ID冲突。
|
||||
* _period : 定时周期,单位10ms
|
||||
* _period : 定时周期,单位1ms
|
||||
* 返 回 值: 无
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
|
@ -238,6 +238,14 @@ void bsp_InitUart(void)
|
||||
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
|
||||
|
@ -51,21 +51,21 @@
|
||||
*/
|
||||
|
||||
/*
|
||||
无延迟最高速度时,烧写H7-TOOL程序
|
||||
正在校验...(FLM_CRC32)
|
||||
19968ms, 0.00%
|
||||
20894ms, 100.00%
|
||||
编程成功
|
||||
|
||||
--延迟 PIN_DELAY_SLOW(0)
|
||||
正在校验...(FLM_CRC32)
|
||||
20708ms, 0.00%
|
||||
21648ms, 100.00%
|
||||
|
||||
--延迟 PIN_DELAY_SLOW(1)
|
||||
正在校验...(FLM_CRC32)
|
||||
21417ms, 0.00%
|
||||
22376ms, 100.00%
|
||||
延迟0: 写16.7M, 读9M
|
||||
|
||||
延迟1: 写6.2M 读5.4M
|
||||
延迟2: 写5.7M 读5.0M
|
||||
延迟3: 写5.3M 读4.6M
|
||||
延迟4: 写4.2M 读4.3M
|
||||
延迟10: 写2.94M 读3.1M
|
||||
延迟20: 写2.1M 读2.0M
|
||||
延迟40: 写1.29M 读1.29M
|
||||
延迟100: 写 594K 读 594K
|
||||
|
||||
延迟200: 写 313K 读 313K
|
||||
延迟1000:写 65K 读 65K
|
||||
延迟2000:写 33.1K 读33.1K
|
||||
延迟5000:写 13.2K 读13.2K
|
||||
*/
|
||||
|
||||
//#define PIN_SWCLK_SET() PIN_SWCLK_TCK_SET();PIN_SWCLK_TCK_SET()
|
||||
@ -130,13 +130,13 @@
|
||||
if (val & 1) \
|
||||
{ \
|
||||
GPIOD->BSRR = GPIO_PIN_4 + (GPIO_PIN_3 << 16U); \
|
||||
val >>= 1; \
|
||||
val >>= 1; PIN_DELAY_S(); \
|
||||
PIN_SWCLK_SET(); PIN_DELAY_S(); \
|
||||
} \
|
||||
else \
|
||||
{ \
|
||||
GPIOD->BSRR = (GPIO_PIN_4 + GPIO_PIN_3) << 16U; \
|
||||
val >>= 1; \
|
||||
val >>= 1; 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 */
|
||||
/* armfly : 优化奇偶校验算法 */
|
||||
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--) {
|
||||
SW_READ_BIT_FAST(bit); /* Read RDATA[0:31] */
|
||||
val >>= 1;
|
||||
val |= bit << 31;
|
||||
}
|
||||
}
|
||||
parity = GetParity(val);
|
||||
#endif
|
||||
|
||||
parity = GetParity(val);
|
||||
|
||||
|
||||
|
||||
SW_READ_BIT_FAST(bit); /* Read Parity */
|
||||
|
@ -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.
|
||||
*/
|
||||
extern void bsp_InitSPI2_Fast(void);
|
||||
static __inline void DAP_SETUP(void)
|
||||
__inline void DAP_SETUP(void)
|
||||
{
|
||||
// /* Enable port clock */
|
||||
// __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_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
|
||||
bsp_InitSPI2_Fast();
|
||||
|
@ -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 "bsp.h"
|
||||
#include "param.h"
|
||||
@ -164,8 +182,8 @@ void LuaYeildHook(lua_State *_L, lua_Debug *ar)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (g_MainStatus == MS_PROG_WORK)
|
||||
else
|
||||
//if (g_MainStatus == MS_PROG_WORK) 在其他状态按C键退出
|
||||
{
|
||||
uint8_t ucKeyCode;
|
||||
|
||||
@ -1007,7 +1025,79 @@ uint32_t lua_GetVarUint32(const char *_VarName, uint32_t _Default)
|
||||
|
||||
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
|
||||
@ -1039,7 +1129,10 @@ static void lua_RegisterFunc(void)
|
||||
|
||||
lua_register(g_Lua, "get_rng", get_rng);
|
||||
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();
|
||||
|
@ -50,7 +50,7 @@ static int lua_PowerOnDac(lua_State* L)
|
||||
{
|
||||
WriteRegValue_06H(REG03_DAC_WAVE_TYPE, 0); /* 直流 */
|
||||
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_START, 0);
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -87,7 +87,7 @@ static int lua_WriteDac(lua_State* L)
|
||||
|
||||
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);
|
||||
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -132,7 +132,7 @@ static int lua_WriteCurr(lua_State* L)
|
||||
|
||||
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);
|
||||
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -176,7 +176,7 @@ static int lua_WriteTvccVolt(lua_State* L)
|
||||
|
||||
WriteRegValue_06H(REG03_OUT_TVCC_MV, value);
|
||||
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/***************************** 安富莱电子 www.armfly.com (END OF 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 "lualib.h"
|
||||
#include "time.h"
|
||||
#include "lua_if.h"
|
||||
#include "bsp.h"
|
||||
#include "elf_file.h"
|
||||
#include "file_lib.h"
|
||||
#include "prog_if.h"
|
||||
#include "target_reset.h"
|
||||
#include "target_config.h"
|
||||
#include "swd_host.h"
|
||||
@ -20,7 +33,7 @@
|
||||
#include "debug_cm.h"
|
||||
#include "n76e003_flash.h"
|
||||
#include "cx32_isp.h"
|
||||
|
||||
#include "w25q_flash.h"
|
||||
|
||||
/* 为了避免和DAP驱动中的函数混淆,本模块函数名前缀用 h7swd */
|
||||
|
||||
@ -240,9 +253,9 @@ static int h7swd_Init(lua_State* L)
|
||||
|
||||
N76E_EnterIAP(); /* 进入IAP状态 */
|
||||
}
|
||||
else
|
||||
else if (g_tProg.ChipType == CHIP_SPI_FLASH)
|
||||
{
|
||||
;
|
||||
W25Q_InitHard();
|
||||
}
|
||||
|
||||
return 0;
|
||||
@ -258,44 +271,70 @@ static int h7swd_Init(lua_State* L)
|
||||
*/
|
||||
static int h7swd_ReadID(lua_State* L)
|
||||
{
|
||||
uint32_t id;
|
||||
uint32_t id_buf[4];
|
||||
// uint32_t id;
|
||||
// uint32_t id_buf[4];
|
||||
|
||||
if (g_tProg.ChipType == CHIP_SWD_ARM)
|
||||
{
|
||||
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 if (g_tProg.ChipType == CHIP_SWIM_STM8)
|
||||
{
|
||||
id = 0x00000800; /* STM8没有ID, 填一个固定值 */
|
||||
lua_pushnumber(L, id); /* 成功,返回ID */
|
||||
}
|
||||
else
|
||||
{
|
||||
id = 0;
|
||||
lua_pushnumber(L, 0); /* 出错 */
|
||||
}
|
||||
// if (g_tProg.ChipType == CHIP_SWD_ARM)
|
||||
// {
|
||||
// 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 if (g_tProg.ChipType == CHIP_SWIM_STM8)
|
||||
// {
|
||||
// id = 0x00000800; /* STM8没有ID, 填一个固定值 */
|
||||
// lua_pushnumber(L, id); /* 成功,返回ID */
|
||||
// }
|
||||
// else if (g_tProg.ChipType == CHIP_SPI_FLASH)
|
||||
// {
|
||||
// W25Q_DetectIC(id_buf);
|
||||
// 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;
|
||||
}
|
||||
|
||||
@ -479,7 +518,42 @@ static int h7swd_ReadMemory(lua_State* L)
|
||||
|
||||
lua_pushlstring(L, (char *)s_lua_read_buf, num);
|
||||
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
|
||||
{
|
||||
lua_pushnumber(L, 0); /* 出错 */
|
||||
@ -1116,7 +1190,7 @@ static int h7_LoadAlgoFile(lua_State* L)
|
||||
* 返 回 值: 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);
|
||||
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)
|
||||
{
|
||||
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 */
|
||||
}
|
||||
@ -1226,6 +1300,17 @@ static int h7_ProgFile(lua_State* L)
|
||||
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
|
||||
{
|
||||
lua_pushnumber(L, 0); /* 出错 */
|
||||
@ -1374,7 +1459,7 @@ static int h7_reset_pin(lua_State* L)
|
||||
static int h7_DetectIC(lua_State* L)
|
||||
{
|
||||
uint32_t mode = 0;
|
||||
|
||||
|
||||
if (lua_type(L, 1) == LUA_TNUMBER) /* 判断第1个参数 */
|
||||
{
|
||||
mode = luaL_checknumber(L, 1); /* 1表示仅用于检测芯片插入状态, 无需检测3次 */
|
||||
@ -1469,7 +1554,28 @@ static int h7_DetectIC(lua_State* L)
|
||||
}
|
||||
lua_pushnumber(L, id); /* 成功,返回ID */
|
||||
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); /* 失败 */
|
||||
return 1;
|
||||
}
|
||||
@ -2021,6 +2127,17 @@ static int h7_EraseSector(lua_State* L)
|
||||
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
|
||||
{
|
||||
lua_pushnumber(L, 0); /* 出错 */
|
||||
|
@ -38,7 +38,7 @@
|
||||
#include "lwip_user.h"
|
||||
#include "net_udp.h"
|
||||
|
||||
static uint8_t s_init_lwip_ok = 0;
|
||||
static uint8_t s_lwip_status = 0;
|
||||
|
||||
struct netif gnetif;
|
||||
|
||||
@ -72,34 +72,6 @@ static void Netif_Config(void)
|
||||
#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
|
||||
@ -110,25 +82,48 @@ void lwip_start(void)
|
||||
*/
|
||||
void lwip_pro(void)
|
||||
{
|
||||
if (s_init_lwip_ok == 0)
|
||||
{
|
||||
return;
|
||||
switch (s_lwip_status)
|
||||
{
|
||||
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) *********************************/
|
||||
|
@ -63,7 +63,7 @@ AI : 示波器 CH1 均值, mV单位
|
||||
#define REG03_DEV_ID5 0x0005
|
||||
|
||||
#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_X31_16 0x0009 /* DI的实时状态(只读), */
|
||||
@ -83,38 +83,38 @@ AI : 示波器 CH1 均值, mV单位
|
||||
AN_USB_VOLT, /* USB供电电压检测 */
|
||||
#endif
|
||||
/* 校准后的模拟量 */
|
||||
#define REG03_AI_CH1 0x000C /* 4字节浮点数, 示波器CH1通道电压值均值,单位V */
|
||||
#define REG03_AI_CH2 0x000E /* 4字节浮点数, 示波器CH2通道电压值均值,单位V */
|
||||
#define REG03_AI_HIGH_SIDE_VOLT 0x0010 /* 4字节浮点数, 高端电流检测-电压值 均值,单位V */
|
||||
#define REG03_AI_HIGH_SIDE_CURR 0x0012 /* 4字节浮点数, 高端电流检测-电流值 均值, 单位A */
|
||||
#define REG03_AI_TVCC_VOLT 0x0014 /* 4字节浮点数, 目标板电压 均值, 单位V */
|
||||
#define REG03_AI_TVCC_CURR 0x0016 /* 4字节浮点数, 目标板电压 均值, 单位V */
|
||||
#define REG03_AI_NTC_RES 0x0018 /* NTC热敏电阻阻值检测, 单位欧姆 */
|
||||
#define REG03_AI_NTC_TEMP 0x001A /* 4字节浮点数 NTC温度(换算后) */
|
||||
#define REG03_AI_USB_5V 0x001C /* 4字节浮点数, USB 5V电压 均值, 单位V */
|
||||
#define REG03_AI_EXT_POWER 0x001E /* 4字节浮点数, 外部12V电源电压均值, 单位V */
|
||||
#define REG03_AI_CH1 0x000C /* 4字节浮点数, 示波器CH1通道电压值均值,单位V */
|
||||
#define REG03_AI_CH2 0x000E /* 4字节浮点数, 示波器CH2通道电压值均值,单位V */
|
||||
#define REG03_AI_HIGH_SIDE_VOLT 0x0010 /* 4字节浮点数, 高端电流检测-电压值 均值,单位V */
|
||||
#define REG03_AI_HIGH_SIDE_CURR 0x0012 /* 4字节浮点数, 高端电流检测-电流值 均值, 单位A */
|
||||
#define REG03_AI_TVCC_VOLT 0x0014 /* 4字节浮点数, 目标板电压 均值, 单位V */
|
||||
#define REG03_AI_TVCC_CURR 0x0016 /* 4字节浮点数, 目标板电压 均值, 单位V */
|
||||
#define REG03_AI_NTC_RES 0x0018 /* NTC热敏电阻阻值检测, 单位欧姆 */
|
||||
#define REG03_AI_NTC_TEMP 0x001A /* 4字节浮点数 NTC温度(换算后) */
|
||||
#define REG03_AI_USB_5V 0x001C /* 4字节浮点数, USB 5V电压 均值, 单位V */
|
||||
#define REG03_AI_EXT_POWER 0x001E /* 4字节浮点数, 外部12V电源电压均值, 单位V */
|
||||
|
||||
/* 空挡预留 */
|
||||
|
||||
#define REG03_ADC_CH1 0x0040 /* 4字节浮点数, 示波器CH1通道 adc 均值 */
|
||||
#define REG03_ADC_CH2 0x0042 /* 4字节浮点数, 示波器CH2通道 adc 均值 */
|
||||
#define REG03_ADC_HIGH_SIDE_VOLT 0x0044 /* 4字节浮点数, 高端电流检测-电压值 adc 均值 */
|
||||
#define REG03_ADC_HIGH_SIDE_CURR 0x0046 /* 4字节浮点数, 高端电流检测-电流值 adc 均值 */
|
||||
#define REG03_ADC_TVCC_VOLT 0x0048 /* 4字节浮点数, 目标板电压 adc 均值 */
|
||||
#define REG03_ADC_TVCC_CURR 0x004A /* 4字节浮点数, 目标板电压 adc 均值 */
|
||||
#define REG03_ADC_NTC_RES 0x004C /* NTC热敏电阻阻值检测 adc 均值*/
|
||||
#define REG03_ADC_USB_5V 0x004E /* 4字节浮点数, USB 5V电压 adc 均值 */
|
||||
#define REG03_ADC_EXT_POWER 0x0050 /* 4字节浮点数, 外部12V电源电压 adc 均值 */
|
||||
#define REG03_ADC_PF4 0x0052 /* 保留单元 */
|
||||
#define REG03_ADC_CH1 0x0040 /* 4字节浮点数, 示波器CH1通道 adc 均值 */
|
||||
#define REG03_ADC_CH2 0x0042 /* 4字节浮点数, 示波器CH2通道 adc 均值 */
|
||||
#define REG03_ADC_HIGH_SIDE_VOLT 0x0044 /* 4字节浮点数, 高端电流检测-电压值 adc 均值 */
|
||||
#define REG03_ADC_HIGH_SIDE_CURR 0x0046 /* 4字节浮点数, 高端电流检测-电流值 adc 均值 */
|
||||
#define REG03_ADC_TVCC_VOLT 0x0048 /* 4字节浮点数, 目标板电压 adc 均值 */
|
||||
#define REG03_ADC_TVCC_CURR 0x004A /* 4字节浮点数, 目标板电压 adc 均值 */
|
||||
#define REG03_ADC_NTC_RES 0x004C /* NTC热敏电阻阻值检测 adc 均值*/
|
||||
#define REG03_ADC_USB_5V 0x004E /* 4字节浮点数, USB 5V电压 adc 均值 */
|
||||
#define REG03_ADC_EXT_POWER 0x0050 /* 4字节浮点数, 外部12V电源电压 adc 均值 */
|
||||
#define REG03_ADC_PF4 0x0052 /* 保留单元 */
|
||||
|
||||
#define REG03_OUT_VOLT_DAC 0x0080 /* 2字节整数 设置输出电压的 DAC值 */
|
||||
#define REG03_OUT_VOLT_MV 0x0081 /* 2字节整数 设置输出电压的 mV值 */
|
||||
#define REG03_OUT_VOLT_DAC 0x0080 /* 2字节整数 设置输出电压的 DAC值 */
|
||||
#define REG03_OUT_VOLT_MV 0x0081 /* 2字节整数 设置输出电压的 mV值 */
|
||||
|
||||
#define REG03_OUT_CURR_DAC 0x0082 /* 2字节整数 设置输出电流的 DAC值 */
|
||||
#define REG03_OUT_CURR_UA 0x0083 /* 2字节整数 设置输出电流的 uA值 */
|
||||
#define REG03_OUT_CURR_DAC 0x0082 /* 2字节整数 设置输出电流的 DAC值 */
|
||||
#define REG03_OUT_CURR_UA 0x0083 /* 2字节整数 设置输出电流的 uA值 */
|
||||
|
||||
#define REG03_OUT_TVCC_DAC 0x0084 /* 2字节整数 设置TVCC电压的档位值(0-127) */
|
||||
#define REG03_OUT_TVCC_MV 0x0085 /* 2字节整数 mV值 1260 - 5000mV */
|
||||
#define REG03_OUT_TVCC_DAC 0x0084 /* 2字节整数 设置TVCC电压的档位值(0-127) */
|
||||
#define REG03_OUT_TVCC_MV 0x0085 /* 2字节整数 mV值 1260 - 5000mV */
|
||||
|
||||
/* 空挡预留 */
|
||||
|
||||
@ -124,127 +124,127 @@ AI : 示波器 CH1 均值, mV单位
|
||||
2:输出方波
|
||||
3:输出三角波
|
||||
*/
|
||||
#define REG03_DAC_WAVE_VOLT_RANGE 0x0100 /* 电压量程,保留不用。固定正负10V */
|
||||
#define REG03_DAC_WAVE_TYPE 0x0101 /* DAC波形类型 */
|
||||
#define REG03_DAC_WAVE_VOLT_MIN 0x0102 /* 波形最小电压,mV */
|
||||
#define REG03_DAC_WAVE_VOLT_MAX 0x0103 /* 波形最大电压,mV */
|
||||
#define REG03_DAC_WAVE_FREQ 0x0104 /* 32bit 波形频率,Hz */
|
||||
#define REG03_DAC_WAVE_FREQ_Low 0x0105 /* 32bit 波形频率,Hz */
|
||||
#define REG03_DAC_WAVE_DUTY 0x0106 /* 波形占空比 百分比 */
|
||||
#define REG03_DAC_WAVE_COUNT_SET 0x0107 /* 32bit 波形个数设置 高16bit */
|
||||
#define REG03_DAC_WAVE_COUNT_SET0 0x0108 /* 32bit 波形个数设置 低16bit */
|
||||
#define REG03_DAC_WAVE_START 0x0109 /* DAC波形启动停止控制 */
|
||||
#define REG03_DAC_WAVE_VOLT_RANGE 0x0100 /* 电压量程,保留不用。固定正负10V */
|
||||
#define REG03_DAC_WAVE_TYPE 0x0101 /* DAC波形类型 */
|
||||
#define REG03_DAC_WAVE_VOLT_MIN 0x0102 /* 波形最小电压,mV */
|
||||
#define REG03_DAC_WAVE_VOLT_MAX 0x0103 /* 波形最大电压,mV */
|
||||
#define REG03_DAC_WAVE_FREQ 0x0104 /* 32bit 波形频率,Hz */
|
||||
#define REG03_DAC_WAVE_FREQ_Low 0x0105 /* 32bit 波形频率,Hz */
|
||||
#define REG03_DAC_WAVE_DUTY 0x0106 /* 波形占空比 百分比 */
|
||||
#define REG03_DAC_WAVE_COUNT_SET 0x0107 /* 32bit 波形个数设置 高16bit */
|
||||
#define REG03_DAC_WAVE_COUNT_SET0 0x0108 /* 32bit 波形个数设置 低16bit */
|
||||
#define REG03_DAC_WAVE_START 0x0109 /* DAC波形启动停止控制 */
|
||||
|
||||
/* 空挡保留未用 */
|
||||
|
||||
#define REG03_D0_GPIO_MODE 0x0140 /* DO口的GPIO模式 - 0=输入,1=输出 2=其他特殊功能 */
|
||||
#define REG03_D1_GPIO_MODE 0x0141
|
||||
#define REG03_D2_GPIO_MODE 0x0142
|
||||
#define REG03_D3_GPIO_MODE 0x0143
|
||||
#define REG03_D4_GPIO_MODE 0x0144
|
||||
#define REG03_D5_GPIO_MODE 0x0145
|
||||
#define REG03_D6_GPIO_MODE 0x0146
|
||||
#define REG03_D7_GPIO_MODE 0x0147
|
||||
#define REG03_D8_GPIO_MODE 0x0148
|
||||
#define REG03_D9_GPIO_MODE 0x0149
|
||||
#define REG03_D0_GPIO_MODE 0x0140 /* DO口的GPIO模式 - 0=输入,1=输出 2=其他特殊功能 */
|
||||
#define REG03_D1_GPIO_MODE 0x0141
|
||||
#define REG03_D2_GPIO_MODE 0x0142
|
||||
#define REG03_D3_GPIO_MODE 0x0143
|
||||
#define REG03_D4_GPIO_MODE 0x0144
|
||||
#define REG03_D5_GPIO_MODE 0x0145
|
||||
#define REG03_D6_GPIO_MODE 0x0146
|
||||
#define REG03_D7_GPIO_MODE 0x0147
|
||||
#define REG03_D8_GPIO_MODE 0x0148
|
||||
#define REG03_D9_GPIO_MODE 0x0149
|
||||
|
||||
#define REG03_D10_GPIO_MODE 0x014A /* TTL-TX */
|
||||
#define REG03_D11_GPIO_MODE 0x014B /* TTL-RX */
|
||||
#define REG03_D12_GPIO_MODE 0x014C /* CAN-TX */
|
||||
#define REG03_D13_GPIO_MODE 0x014D /* CAN-RX */
|
||||
#define REG03_D10_GPIO_MODE 0x014A /* TTL-TX */
|
||||
#define REG03_D11_GPIO_MODE 0x014B /* TTL-RX */
|
||||
#define REG03_D12_GPIO_MODE 0x014C /* CAN-TX */
|
||||
#define REG03_D13_GPIO_MODE 0x014D /* CAN-RX */
|
||||
|
||||
/* 空挡保留未用 */
|
||||
|
||||
#define REG03_RTC_YEAR 0x0180 /* 设备时钟 */
|
||||
#define REG03_RTC_MON 0x0181
|
||||
#define REG03_RTC_DAY 0x0182
|
||||
#define REG03_RTC_HOUR 0x0183
|
||||
#define REG03_RTC_MIN 0x0184
|
||||
#define REG03_RTC_SEC 0x0185
|
||||
#define REG03_RTC_YEAR 0x0180 /* 设备时钟 */
|
||||
#define REG03_RTC_MON 0x0181
|
||||
#define REG03_RTC_DAY 0x0182
|
||||
#define REG03_RTC_HOUR 0x0183
|
||||
#define REG03_RTC_MIN 0x0184
|
||||
#define REG03_RTC_SEC 0x0185
|
||||
|
||||
#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_K 0x0186 /* NTC温度传感器温度修正公式 y = kx + b 之K值 浮点 缺省 = 1 */
|
||||
#define REG03_NTC_COEF_B 0x0187 /* NTC温度传感器温度修正公式 y = kx + b 之B值 浮点 缺省 = 0 */
|
||||
|
||||
/* ADC 示波器控制 */
|
||||
#define REG03_DSO_MEASURE_MODE 0x01FF /* 1表示电流检测模式 */
|
||||
#define REG03_CH1_DC 0x0200 /* CH1通道,AC/DC耦合切换 1表示DC */
|
||||
#define REG03_CH2_DC 0x0201 /* CH2通道,AC/DC耦合切换 */
|
||||
#define REG03_CH1_GAIN 0x0202 /* CH1通道,增益切换0-3 */
|
||||
#define REG03_CH2_GAIN 0x0203 /* CH2通道,增益切换0-3 */
|
||||
#define REG03_CH1_OFFSET 0x0204 /* CH1通道,直流偏值(0-2500mV 保留,不支持) */
|
||||
#define REG03_CH2_OFFSET 0x0205 /* CH2通道,直流偏值(0-2500mV 保留,不支持) */
|
||||
#define REG03_DSO_FREQ_ID 0x0206 /* 示波器采样频率档位 */
|
||||
#define DSO_FREQ_100 0
|
||||
#define DSO_FREQ_200 1
|
||||
#define DSO_FREQ_500 2
|
||||
#define DSO_FREQ_1K 3
|
||||
#define DSO_FREQ_2K 4
|
||||
#define DSO_FREQ_5K 5
|
||||
#define DSO_FREQ_10K 6
|
||||
#define DSO_FREQ_20K 7
|
||||
#define DSO_FREQ_50K 8
|
||||
#define DSO_FREQ_100K 9
|
||||
#define DSO_FREQ_200K 10
|
||||
#define DSO_FREQ_500K 11
|
||||
#define DSO_FREQ_1M 12
|
||||
#define DSO_FREQ_2M 13
|
||||
#define DSO_FREQ_5M 14
|
||||
#define DSO_FREQ_10M 15
|
||||
#define DSO_FREQ_20M 16
|
||||
#define REG03_DSO_MEASURE_MODE 0x01FF /* 1表示电流检测模式 */
|
||||
#define REG03_CH1_DC 0x0200 /* CH1通道,AC/DC耦合切换 1表示DC */
|
||||
#define REG03_CH2_DC 0x0201 /* CH2通道,AC/DC耦合切换 */
|
||||
#define REG03_CH1_GAIN 0x0202 /* CH1通道,增益切换0-7 */
|
||||
#define REG03_CH2_GAIN 0x0203 /* CH2通道,增益切换0-7 */
|
||||
#define REG03_CH1_OFFSET 0x0204 /* CH1通道,直流偏值(0-2500mV 保留,不支持) */
|
||||
#define REG03_CH2_OFFSET 0x0205 /* CH2通道,直流偏值(0-2500mV 保留,不支持) */
|
||||
#define REG03_DSO_FREQ_ID 0x0206 /* 示波器采样频率档位 */
|
||||
#define DSO_FREQ_100 0
|
||||
#define DSO_FREQ_200 1
|
||||
#define DSO_FREQ_500 2
|
||||
#define DSO_FREQ_1K 3
|
||||
#define DSO_FREQ_2K 4
|
||||
#define DSO_FREQ_5K 5
|
||||
#define DSO_FREQ_10K 6
|
||||
#define DSO_FREQ_20K 7
|
||||
#define DSO_FREQ_50K 8
|
||||
#define DSO_FREQ_100K 9
|
||||
#define DSO_FREQ_200K 10
|
||||
#define DSO_FREQ_500K 11
|
||||
#define DSO_FREQ_1M 12
|
||||
#define DSO_FREQ_2M 13
|
||||
#define DSO_FREQ_5M 14
|
||||
#define DSO_FREQ_10M 15
|
||||
#define DSO_FREQ_20M 16
|
||||
|
||||
#define REG03_DSO_SAMPLE_SIZE 0x0207 /* 采样深度档位 */
|
||||
#define DSO_SIZE_1K 0
|
||||
#define DSO_SIZE_2K 1
|
||||
#define DSO_SIZE_4K 2
|
||||
#define DSO_SIZE_8K 3
|
||||
#define DSO_SIZE_16K 4
|
||||
#define DSO_SIZE_32K 5
|
||||
// #define DSO_SIZE_64K 6 /* 后面暂时不支持 */
|
||||
// #define DSO_SIZE_128K 7
|
||||
// #define DSO_FREQ_512K 8
|
||||
#define DSO_SIZE_MAX DSO_SIZE_32K
|
||||
#define DSO_SIZE_1K 0
|
||||
#define DSO_SIZE_2K 1
|
||||
#define DSO_SIZE_4K 2
|
||||
#define DSO_SIZE_8K 3
|
||||
#define DSO_SIZE_16K 4
|
||||
#define DSO_SIZE_32K 5
|
||||
// #define DSO_SIZE_64K 6 /* 后面暂时不支持 */
|
||||
// #define DSO_SIZE_128K 7
|
||||
// #define DSO_FREQ_512K 8
|
||||
#define DSO_SIZE_MAX DSO_SIZE_32K
|
||||
|
||||
#define REG03_DSO_TRIG_LEVEL 0x0208 /* 触发电平,0-65535 */
|
||||
#define REG03_DSO_TRIG_POS 0x0209 /* 触发位置 0-100 百分比 */
|
||||
#define REG03_DSO_TRIG_MODE 0x020A /* 触发模式 0=自动 1=普通 2=单次 */
|
||||
#define REG03_DSO_TRIG_CHAN 0x020B /* 触发通道 0=CH1 1=CH2*/
|
||||
#define REG03_DSO_TRIG_EDGE 0x020C /* 触发边沿 0下降 1上升 */
|
||||
#define REG03_DSO_CHAN_EN 0x020D /* 通道使能控制 bit0 = CH1 bit1 = CH2 bit2 = CH2 - CH1 */
|
||||
#define REG03_DSO_RUN 0x020E /* 示波器采集控制,0:停止 1: 启动 */
|
||||
#define REG03_DSO_TRIG_LEVEL 0x0208 /* 触发电平,0-65535 */
|
||||
#define REG03_DSO_TRIG_POS 0x0209 /* 触发位置 0-100 百分比 */
|
||||
#define REG03_DSO_TRIG_MODE 0x020A /* 触发模式 0=自动 1=普通 2=单次 */
|
||||
#define REG03_DSO_TRIG_CHAN 0x020B /* 触发通道 0=CH1 1=CH2*/
|
||||
#define REG03_DSO_TRIG_EDGE 0x020C /* 触发边沿 0下降 1上升 */
|
||||
#define REG03_DSO_CHAN_EN 0x020D /* 通道使能控制 bit0 = CH1 bit1 = CH2 bit2 = CH2 - CH1 */
|
||||
#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_STATE 0x0301 /* LUA程序状态 */
|
||||
#define REG03_LUA_CMD 0x0300 /* LUA控制指令 */
|
||||
#define REG03_LUA_STATE 0x0301 /* LUA程序状态 */
|
||||
|
||||
#define REG03_WORK_MODE 0x1000 /* 终端工作模式。1 :常规工作模式。其他值:保留做其他应用 */
|
||||
#define REG03_RS485_ADDR 0x1001 /* 本机RS485 MODBUS地址(1-254)*/
|
||||
#define REG03_RS485_BAUD 0x1002 /* RS485波特率(0:1200 , 1:2400,2 : 4800,3 : 9600 , 4:19200 , 5:38400,6:57600,7:115200)*/
|
||||
#define REG03_RS485_PARITY 0x1003 /* RS485奇偶校验位(0:无奇偶校验, 1:奇校验,2:偶校验)*/
|
||||
#define REG03_WORK_MODE 0x1000 /* 终端工作模式。1 :常规工作模式。其他值:保留做其他应用 */
|
||||
#define REG03_RS485_ADDR 0x1001 /* 本机RS485 MODBUS地址(1-254)*/
|
||||
#define REG03_RS485_BAUD 0x1002 /* RS485波特率(0:1200 , 1:2400,2 : 4800,3 : 9600 , 4:19200 , 5:38400,6:57600,7:115200)*/
|
||||
#define REG03_RS485_PARITY 0x1003 /* RS485奇偶校验位(0:无奇偶校验, 1:奇校验,2:偶校验)*/
|
||||
|
||||
#define REG03_IPAddr_Format 0x1100 /*以太网IP地址格式。IPv4或IPv6 0 表示IPv4 1 表示IPv6*/
|
||||
#define REG03_DHCP 0x1101 /*以太网DHCP设置。0表示禁止,1表示启用。*/
|
||||
#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_GatewayAddr_H 0x1104 /*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_L 0x1107 /*IPv4子网掩码,4字节。缺省255.255.255.0*/
|
||||
#define REG03_TCP_PORT 0x1108 /*本机TCP服务端口号,缺省值30010*/
|
||||
#define REG03_MAC12 0x1109 /*MAC地址1,2字节*/
|
||||
#define REG03_MAC34 0x110A /*MAC地址3,4字节*/
|
||||
#define REG03_MAC56 0x110B /*MAC地址5,6字节*/
|
||||
#define REG03_IPAddr_Format 0x1100 /*以太网IP地址格式。IPv4或IPv6 0 表示IPv4 1 表示IPv6*/
|
||||
#define REG03_DHCP 0x1101 /*以太网DHCP设置。0表示禁止,1表示启用。*/
|
||||
#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_GatewayAddr_H 0x1104 /*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_L 0x1107 /*IPv4子网掩码,4字节。缺省255.255.255.0*/
|
||||
#define REG03_TCP_PORT 0x1108 /*本机TCP服务端口号,缺省值30010*/
|
||||
#define REG03_MAC12 0x1109 /*MAC地址1,2字节*/
|
||||
#define REG03_MAC34 0x110A /*MAC地址3,4字节*/
|
||||
#define REG03_MAC56 0x110B /*MAC地址5,6字节*/
|
||||
|
||||
/* 用于读取波形数据的寄存器入口 */
|
||||
#define REG03_CH1_WAVE_0 0x2000 /* CH1波形数据 入口寄存器。 特殊处理,1K整数字节读取 */
|
||||
#define REG03_CH1_WAVE_1 0x2001 /* CH1波形数据 第2段 1K字节 */
|
||||
#define REG03_CH1_WAVE_2 0x2002 /* CH1波形数据 第3段 1K字节 */
|
||||
#define REG03_CH1_WAVE_END 0x2FFF /* CH1波形数据 第4096段 1K字节 */
|
||||
#define REG03_CH1_WAVE_0 0x2000 /* CH1波形数据 入口寄存器。 特殊处理,1K整数字节读取 */
|
||||
#define REG03_CH1_WAVE_1 0x2001 /* CH1波形数据 第2段 1K字节 */
|
||||
#define REG03_CH1_WAVE_2 0x2002 /* CH1波形数据 第3段 1K字节 */
|
||||
#define REG03_CH1_WAVE_END 0x2FFF /* CH1波形数据 第4096段 1K字节 */
|
||||
|
||||
#define REG03_CH2_WAVE_0 0x4000 /* CH2波形数据 入口寄存器。 特殊处理,1K整数字节读取 */
|
||||
#define REG03_CH2_WAVE_END 0x4FFF /* CH2波形数据 入口寄存器。 特殊处理,1K整数字节读取 */
|
||||
#define REG03_CH2_WAVE_0 0x4000 /* 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_CH1_R1_X1 0xC000 /* CH1 X1档位 校准参数,X1 Y1 X2 Y2 均为浮点数. 每个浮点数占用2个寄存器 */
|
||||
#define REG03_CALIB_CH1_R1_Y1 0xC002
|
||||
#define REG03_CALIB_CH1_R1_X2 0xC004
|
||||
#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_R3_X1 0xC010 /* CH1 X4档位 校准参数,X1 Y1 X2 Y2 均为浮点数. 每个浮点数占用2个寄存器 */
|
||||
#define REG03_CALIB_CH1_R4_X1 0xC018 /* CH1 X8档位 校准参数 */
|
||||
#define REG03_CALIB_CH1_R5_X1 0xC020 /* CH1 X16档位 校准参数 */
|
||||
#define REG03_CALIB_CH1_R6_X1 0xC028 /* CH1 X32档位 校准参数 */
|
||||
#define REG03_CALIB_CH1_R7_X1 0xC030 /* CH1 X64档位 校准参数 */
|
||||
#define REG03_CALIB_CH1_R8_X1 0xC038 /* CH1 X128档位 校准参数 */
|
||||
#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_X2 0xC004
|
||||
#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_R3_X1 0xC010 /* CH1 X4档位 校准参数,X1 Y1 X2 Y2 均为浮点数. 每个浮点数占用2个寄存器 */
|
||||
#define REG03_CALIB_CH1_R4_X1 0xC018 /* CH1 X8档位 校准参数 */
|
||||
#define REG03_CALIB_CH1_R5_X1 0xC020 /* CH1 X16档位 校准参数 */
|
||||
#define REG03_CALIB_CH1_R6_X1 0xC028 /* CH1 X32档位 校准参数 */
|
||||
#define REG03_CALIB_CH1_R7_X1 0xC030 /* CH1 X64档位 校准参数 */
|
||||
#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_Y1 0xC042
|
||||
#define REG03_CALIB_CH2_R1_X2 0xC044
|
||||
#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_R3_X1 0xC050 /* CH2 X4档位 校准参数,X1 Y1 X2 Y2 均为浮点数. 每个浮点数占用2个寄存器 */
|
||||
#define REG03_CALIB_CH2_R4_X1 0xC058 /* CH2 X8档位 校准参数 */
|
||||
#define REG03_CALIB_CH2_R5_X1 0xC060 /* CH2 X16档位 校准参数 */
|
||||
#define REG03_CALIB_CH2_R6_X1 0xC068 /* CH2 X32档位 校准参数 */
|
||||
#define REG03_CALIB_CH2_R7_X1 0xC070 /* CH2 X64档位 校准参数 */
|
||||
#define REG03_CALIB_CH2_R8_X1 0xC078 /* CH2 X128档位 校准参数 */
|
||||
#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_X2 0xC044
|
||||
#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_R3_X1 0xC050 /* CH2 X4档位 校准参数,X1 Y1 X2 Y2 均为浮点数. 每个浮点数占用2个寄存器 */
|
||||
#define REG03_CALIB_CH2_R4_X1 0xC058 /* CH2 X8档位 校准参数 */
|
||||
#define REG03_CALIB_CH2_R5_X1 0xC060 /* CH2 X16档位 校准参数 */
|
||||
#define REG03_CALIB_CH2_R6_X1 0xC068 /* CH2 X32档位 校准参数 */
|
||||
#define REG03_CALIB_CH2_R7_X1 0xC070 /* CH2 X64档位 校准参数 */
|
||||
#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_Y1 0xC082
|
||||
@ -341,67 +341,67 @@ AI : 示波器 CH1 均值, mV单位
|
||||
#define REG03_CALIB_DAC_CURR_X4 0xC0D6
|
||||
#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_Y1 0xC0DA
|
||||
#define REG03_CALIB_NTC_RES_X2 0xC0DC
|
||||
#define REG03_CALIB_NTC_RES_Y2 0xC0DE
|
||||
#define REG03_CALIB_NTC_RES_X3 0xC0E0
|
||||
#define REG03_CALIB_NTC_RES_Y3 0xC0E2
|
||||
#define REG03_CALIB_NTC_RES_X4 0xC0E4
|
||||
#define REG03_CALIB_NTC_RES_Y4 0xC0E6
|
||||
#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_X2 0xC0DC
|
||||
#define REG03_CALIB_NTC_RES_Y2 0xC0DE
|
||||
#define REG03_CALIB_NTC_RES_X3 0xC0E0
|
||||
#define REG03_CALIB_NTC_RES_Y3 0xC0E2
|
||||
#define REG03_CALIB_NTC_RES_X4 0xC0E4
|
||||
#define REG03_CALIB_NTC_RES_Y4 0xC0E6
|
||||
|
||||
#define REG03_CALIB_PARAM_END REG03_CALIB_NTC_RES_Y4 + 1 /* 校准参数如最后1个寄存器 */
|
||||
|
||||
#define REG03_BOOT_VER 0xE000 /* BOOT 固件版本,0x0102 表示V1.02 */
|
||||
|
||||
/* 重映射部分寄存器,专用于UDP网路搜索 */
|
||||
#define REG03_NET_CPU_ID0 0xFF00
|
||||
#define REG03_NET_CPU_ID1 0xFF01
|
||||
#define REG03_NET_CPU_ID2 0xFF02
|
||||
#define REG03_NET_CPU_ID3 0xFF03
|
||||
#define REG03_NET_CPU_ID4 0xFF04
|
||||
#define REG03_NET_CPU_ID5 0xFF05
|
||||
#define REG03_NET_HARD_VER 0xFF06 /* 硬件型号(只读),内部型号代码,非型号全称,0xC200 表示TC200*/
|
||||
#define REG03_NET_SOFT_VER 0xFF07 /* 硬件版本(只读),如0x0100,表示H1.00 */
|
||||
#define REG03_NET_MAC12 0xFF08 /* MAC */
|
||||
#define REG03_NET_MAC34 0xFF09 /* MAC */
|
||||
#define REG03_NET_MAC56 0xFF0A /* MAC */
|
||||
#define REG03_NET_LOCAL_IP_H 0xFF0B /* 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_L 0xFF0E /* IPv4子网掩码,低2字节。 */
|
||||
#define REG03_NET_GATEWAY_H 0xFF0F /* IPv4网关地址,高2字节。 */
|
||||
#define REG03_NET_GATEWAY_L 0xFF10 /* IPv4网关地址,第2字节。 */
|
||||
#define REG03_NET_LOCAL_PORT 0xFF11 /* 本地端口 */
|
||||
#define REG03_NET_SYSTEM_IP_H 0xFF12 /* 管理系统IP地址高位 */
|
||||
#define REG03_NET_SYSTEM_IP_L 0xFF13 /* 管理系统IP地址低位 */
|
||||
#define REG03_NET_SYSTEM_PORT 0xFF14 /* 远程服务器端口 */
|
||||
#define REG03_NET_CPU_ID0 0xFF00
|
||||
#define REG03_NET_CPU_ID1 0xFF01
|
||||
#define REG03_NET_CPU_ID2 0xFF02
|
||||
#define REG03_NET_CPU_ID3 0xFF03
|
||||
#define REG03_NET_CPU_ID4 0xFF04
|
||||
#define REG03_NET_CPU_ID5 0xFF05
|
||||
#define REG03_NET_HARD_VER 0xFF06 /* 硬件型号(只读),内部型号代码,非型号全称,0xC200 表示TC200*/
|
||||
#define REG03_NET_SOFT_VER 0xFF07 /* 硬件版本(只读),如0x0100,表示H1.00 */
|
||||
#define REG03_NET_MAC12 0xFF08 /* MAC */
|
||||
#define REG03_NET_MAC34 0xFF09 /* MAC */
|
||||
#define REG03_NET_MAC56 0xFF0A /* MAC */
|
||||
#define REG03_NET_LOCAL_IP_H 0xFF0B /* 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_L 0xFF0E /* IPv4子网掩码,低2字节。 */
|
||||
#define REG03_NET_GATEWAY_H 0xFF0F /* IPv4网关地址,高2字节。 */
|
||||
#define REG03_NET_GATEWAY_L 0xFF10 /* IPv4网关地址,第2字节。 */
|
||||
#define REG03_NET_LOCAL_PORT 0xFF11 /* 本地端口 */
|
||||
#define REG03_NET_SYSTEM_IP_H 0xFF12 /* 管理系统IP地址高位 */
|
||||
#define REG03_NET_SYSTEM_IP_L 0xFF13 /* 管理系统IP地址低位 */
|
||||
#define REG03_NET_SYSTEM_PORT 0xFF14 /* 远程服务器端口 */
|
||||
|
||||
#define REG03_RESET_TO_BOOT 0xFF7F /* 特殊寄存器,复位进入BOOT */
|
||||
|
||||
/* BOOT 程序用的寄存器 */
|
||||
#define REG03_BOOT_CPU_ID0 0xFF80
|
||||
#define REG03_BOOT_CPU_ID1 0xFF81
|
||||
#define REG03_BOOT_CPU_ID2 0xFF82
|
||||
#define REG03_BOOT_CPU_ID3 0xFF83
|
||||
#define REG03_BOOT_CPU_ID4 0xFF84
|
||||
#define REG03_BOOT_CPU_ID5 0xFF85
|
||||
#define REG03_BOOT_HARD_VER 0xFF86 /* 硬件型号(只读),内部型号代码,非型号全称,0xC200 表示TC200*/
|
||||
#define REG03_BOOT_SOFT_VER 0xFF87 /* 硬件版本(只读),如0x0100,表示H1.00 */
|
||||
#define REG03_BOOT_CPU_ID0 0xFF80
|
||||
#define REG03_BOOT_CPU_ID1 0xFF81
|
||||
#define REG03_BOOT_CPU_ID2 0xFF82
|
||||
#define REG03_BOOT_CPU_ID3 0xFF83
|
||||
#define REG03_BOOT_CPU_ID4 0xFF84
|
||||
#define REG03_BOOT_CPU_ID5 0xFF85
|
||||
#define REG03_BOOT_HARD_VER 0xFF86 /* 硬件型号(只读),内部型号代码,非型号全称,0xC200 表示TC200*/
|
||||
#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_ADDR 0xFF89 /* APP程序地址 32位 */
|
||||
#define REG03_BOOT_PROG_SIZE 0xFF8B /* APP程序长度 32位 */
|
||||
#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_SIZE 0xFF8B /* APP程序长度 32位 */
|
||||
/* 系统控制参数
|
||||
1 - 通知开始升级,设备开始擦除flash. 根据前面2个寄存器决定擦除空间
|
||||
2 - 通知设备程序下载完毕
|
||||
3 - 通知系统复位
|
||||
*/
|
||||
#define REG03_BOOT_SYSTEM 0xFF8D
|
||||
#define REG03_BOOT_SYSTEM 0xFF8D
|
||||
|
||||
#define REG03_BOOT_STATUS 0xFFA0 /* 设备状态寄存器 0空闲,1表示正忙 */
|
||||
#define REG03_BOOT_CRC32_HIGH 0xFFA1 /* 程序区CRC32校验 - 未用 */
|
||||
#define REG03_BOOT_CRC32_LOW 0xFFA2 /* 程序区CRC32校验 - 未用 */
|
||||
#define REG03_BOOT_STATUS 0xFFA0 /* 设备状态寄存器 0空闲,1表示正忙 */
|
||||
#define REG03_BOOT_CRC32_HIGH 0xFFA1 /* 程序区CRC32校验 - 未用 */
|
||||
#define REG03_BOOT_CRC32_LOW 0xFFA2 /* 程序区CRC32校验 - 未用 */
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -42,40 +42,48 @@ uint8_t ReadRegValue_03H(uint16_t reg_addr, uint16_t *reg_value)
|
||||
{
|
||||
case REG03_NET_CPU_ID0: /* MCU序号(只读) */
|
||||
case REG03_DEV_ID0:
|
||||
case REG03_BOOT_CPU_ID0:
|
||||
value = g_tVar.CPU_Sn[0];
|
||||
break;
|
||||
|
||||
case REG03_NET_CPU_ID1:
|
||||
case REG03_DEV_ID1:
|
||||
case REG03_BOOT_CPU_ID1:
|
||||
value = g_tVar.CPU_Sn[0] >> 16;
|
||||
break;
|
||||
|
||||
case REG03_NET_CPU_ID2:
|
||||
case REG03_DEV_ID2:
|
||||
case REG03_BOOT_CPU_ID2:
|
||||
value = g_tVar.CPU_Sn[1];
|
||||
break;
|
||||
|
||||
case REG03_NET_CPU_ID3:
|
||||
case REG03_DEV_ID3:
|
||||
case REG03_BOOT_CPU_ID3:
|
||||
value = g_tVar.CPU_Sn[1] >> 16;
|
||||
break;
|
||||
|
||||
case REG03_NET_CPU_ID4:
|
||||
case REG03_DEV_ID4:
|
||||
case REG03_BOOT_CPU_ID4:
|
||||
value = g_tVar.CPU_Sn[2];
|
||||
break;
|
||||
|
||||
case REG03_NET_CPU_ID5:
|
||||
case REG03_DEV_ID5:
|
||||
case REG03_BOOT_CPU_ID5:
|
||||
value = g_tVar.CPU_Sn[2] >> 16;
|
||||
break;
|
||||
|
||||
case REG03_NET_HARD_VER:
|
||||
case REG03_HARD_MODEL:
|
||||
case REG03_BOOT_HARD_VER:
|
||||
value = HARD_MODEL;
|
||||
break;
|
||||
|
||||
case REG03_BOOT_VER:
|
||||
case REG03_BOOT_SOFT_VER:
|
||||
value = BOOT_VERSION;
|
||||
break;
|
||||
|
||||
|
@ -28,6 +28,7 @@
|
||||
#include "stm8_flash.h"
|
||||
#include "stm8_swim.h"
|
||||
#include "n76e003_flash.h"
|
||||
#include "w25q_flash.h"
|
||||
|
||||
/* 64H帧子功能码定义 */
|
||||
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);
|
||||
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
|
||||
{
|
||||
;
|
||||
g_tModS.TxBuf[g_tModS.TxCount++] = 0x01; /* 出错 */
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,10 +1,10 @@
|
||||
/*
|
||||
*********************************************************************************************************
|
||||
*
|
||||
* 模块名称 : N76E003芯片编程模块
|
||||
* 文件名称 : n76e_prog_file.c
|
||||
* 模块名称 : 通用芯片编程文件
|
||||
* 文件名称 : pg_prog_file.c
|
||||
* 版 本 : V1.0
|
||||
* 说 明 : 烧写文件到N76E003芯片
|
||||
* 说 明 : 烧写文件到芯片
|
||||
*
|
||||
* 修改记录 :
|
||||
* 版本号 日期 作者 说明
|
||||
@ -31,7 +31,7 @@ extern const program_target_t flash_algo;
|
||||
|
||||
/*
|
||||
*********************************************************************************************************
|
||||
* 函 数 名: PG_N76E_ProgFile
|
||||
* 函 数 名: PG_ProgFile
|
||||
* 功能说明: 开始编程flash。 由lua程序调用。阻塞运行,只到编程结束。
|
||||
* 形 参: _Path : 文件名
|
||||
* _FlashAddr : flash起始地址
|
||||
@ -42,7 +42,7 @@ extern const program_target_t flash_algo;
|
||||
* 返 回 值: 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)
|
||||
{
|
||||
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 fBlankChip = 0;
|
||||
// uint32_t BlockSize;
|
||||
uint32_t CheckLen; /* 实际扫描的空间大小 */
|
||||
uint32_t CheckLen; /* 实际扫描的空间大小 */
|
||||
uint8_t EmptyValue; /* 空片的值 */
|
||||
|
||||
/* 传入的文件名是相对路径 */
|
||||
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不查空
|
||||
@ -169,6 +183,9 @@ uint16_t PG_N76E_ProgFile(const char *_Path, uint32_t _FlashAddr, uint32_t _EndA
|
||||
{
|
||||
uint32_t addr;
|
||||
uint32_t endAddr;
|
||||
uint32_t SectorSize;
|
||||
|
||||
SectorSize = PG_GetSectorSize(_AlgoName, addr);
|
||||
|
||||
endAddr = _FlashAddr + FileLen;
|
||||
if (endAddr > _EndAddr)
|
||||
@ -196,12 +213,13 @@ uint16_t PG_N76E_ProgFile(const char *_Path, uint32_t _FlashAddr, uint32_t _EndA
|
||||
float percent;
|
||||
|
||||
percent = addr - _FlashAddr; /* 已擦除大小 */
|
||||
percent = percent / (endAddr - _FlashAddr);
|
||||
percent = 100 * percent / (endAddr - _FlashAddr);
|
||||
PG_PrintPercent(percent, addr); /* 显示100% */
|
||||
}
|
||||
|
||||
addr += PG_GetSectorSize(_AlgoName, addr);
|
||||
addr += SectorSize;
|
||||
}
|
||||
PG_PrintPercent(100.0, addr); /* 显示100% */
|
||||
}
|
||||
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的文件失败 */
|
||||
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;
|
||||
}
|
||||
@ -306,8 +324,8 @@ uint16_t PG_N76E_ProgFile(const char *_Path, uint32_t _FlashAddr, uint32_t _EndA
|
||||
FileOffset += PageSize;
|
||||
|
||||
|
||||
/* 进度指示 - 每2KB刷新一次 */
|
||||
if ((FileOffset % 2048) == 0 || (bytes < 2048 && (FileOffset % 512) == 0))
|
||||
/* 进度指示 - 每4KB刷新一次 */
|
||||
if ((FileOffset % 8192) == 0 || (bytes < 8192 && (FileOffset % 512) == 0))
|
||||
{
|
||||
float percent;
|
||||
|
||||
@ -393,12 +411,17 @@ uint16_t PG_N76E_ProgFile(const char *_Path, uint32_t _FlashAddr, uint32_t _EndA
|
||||
{
|
||||
PageSize = sizeof(FsReadBuf);
|
||||
}
|
||||
|
||||
|
||||
if (g_gMulSwd.MultiMode > 0) /* 多路模式 */
|
||||
{
|
||||
PageSize = PageSize / 4;
|
||||
}
|
||||
|
||||
if (PageSize >= DeviceSize)
|
||||
{
|
||||
PageSize = DeviceSize;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
for (; FileOffset < FileLen; )
|
||||
{
|
||||
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;
|
||||
|
@ -14,19 +14,17 @@
|
||||
*
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
#include "bsp.h"
|
||||
#include "param.h"
|
||||
#include "file_lib.h"
|
||||
#include "lua_if.h"
|
||||
#include "prog_if.h"
|
||||
|
||||
#include "includes.h"
|
||||
|
||||
#include "swd_host.h"
|
||||
#include "swd_flash.h"
|
||||
#include "elf_file.h"
|
||||
#include "main.h"
|
||||
#include "stm8_flash.h"
|
||||
#include "n76e003_flash.h"
|
||||
#include "SW_DP_Multi.h"
|
||||
#include "swd_host_multi.h"
|
||||
#include "w25q_flash.h"
|
||||
|
||||
extern const program_target_t flash_algo;
|
||||
|
||||
@ -216,6 +214,29 @@ void PG_ReloadLuaVar(void)
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
/*
|
||||
*********************************************************************************************************
|
||||
* 下面代码,用于通用芯片编程. 被 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)
|
||||
{
|
||||
sz = 128;
|
||||
}
|
||||
}
|
||||
else if (g_tProg.ChipType == CHIP_SPI_FLASH)
|
||||
{
|
||||
sz = lua_GetVarUint32("SECTOR_SIZE", 4*1024);
|
||||
}
|
||||
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)
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
@ -586,7 +633,11 @@ uint32_t PG_GetPageSize(const char *_Algo)
|
||||
else if (g_tProg.ChipType == CHIP_NUVOTON_8051)
|
||||
{
|
||||
sz = 32;
|
||||
}
|
||||
}
|
||||
else if (g_tProg.ChipType == CHIP_SPI_FLASH)
|
||||
{
|
||||
sz = lua_GetVarUint32("FLASH_PAGE_SIZE", 1024);;
|
||||
}
|
||||
return sz;
|
||||
}
|
||||
|
||||
@ -640,7 +691,10 @@ uint32_t PG_GetDeviceAddr(const char *_Algo)
|
||||
addr = 0;
|
||||
}
|
||||
}
|
||||
|
||||
else if (g_tProg.ChipType == CHIP_SPI_FLASH)
|
||||
{
|
||||
addr = lua_GetVarUint32("FLASH_ADDRESS", 0);
|
||||
}
|
||||
return addr;
|
||||
}
|
||||
|
||||
@ -694,7 +748,10 @@ uint32_t PG_GetDeviceSize(const char *_Algo)
|
||||
sz = 1024;
|
||||
}
|
||||
}
|
||||
|
||||
else if (g_tProg.ChipType == CHIP_SPI_FLASH)
|
||||
{
|
||||
sz = lua_GetVarUint32("FLASH_SIZE", 0);
|
||||
}
|
||||
return sz;
|
||||
}
|
||||
|
||||
@ -720,7 +777,10 @@ uint8_t PG_EraseChip(void)
|
||||
{
|
||||
N76E_EraseChip();
|
||||
}
|
||||
|
||||
else if (g_tProg.ChipType == CHIP_SPI_FLASH)
|
||||
{
|
||||
W25Q_EraseChip();
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
else if (g_tProg.ChipType == CHIP_SPI_FLASH)
|
||||
{
|
||||
re = W25Q_FLASH_ProgramBuf(_FlashAddr, _Buff, _Size);
|
||||
}
|
||||
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);
|
||||
}
|
||||
else if (g_tProg.ChipType == CHIP_SPI_FLASH)
|
||||
{
|
||||
re = W25Q_ReadBuf(_FlashAddr, _Buff, _Size);
|
||||
}
|
||||
|
||||
return re;
|
||||
}
|
||||
|
@ -67,6 +67,8 @@ typedef struct
|
||||
|
||||
uint8_t AbortOnError; /* 多路模式,0表示出错时继续烧录OK的芯片 1表示出错后立刻同时终止 */
|
||||
|
||||
uint8_t ChNum; /* 通道个数 */
|
||||
|
||||
}OFFLINE_PROG_T;
|
||||
|
||||
/* lua脚本fix_data_begin()返回一个table,用于通知C程序哪些内存地址需要填充数据 */
|
||||
|
1493
User/programmer/w25q_flash.c
Normal file
1493
User/programmer/w25q_flash.c
Normal file
File diff suppressed because it is too large
Load Diff
38
User/programmer/w25q_flash.h
Normal file
38
User/programmer/w25q_flash.h
Normal 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,双线MISO,2表示双线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
|
@ -38,6 +38,24 @@ void usbd_Init(void)
|
||||
//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
|
||||
|
@ -18,6 +18,7 @@
|
||||
#include "usbd_cdc_interface.h"
|
||||
|
||||
void usbd_Init(void);
|
||||
void usbd_UnInit(void);
|
||||
void usbd_OpenCDC(uint8_t _com);
|
||||
void usbd_OpenCDC2(uint8_t _com);
|
||||
void usbd_CloseCDC(void);
|
||||
|
@ -475,12 +475,6 @@ static void TIM_Config(void)
|
||||
/* ## Enable TIM peripherals Clock ####################################### */
|
||||
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 */
|
||||
TimHandle.Instance = TIMx;
|
||||
@ -507,6 +501,14 @@ static void TIM_Config(void)
|
||||
/* Starting Error */
|
||||
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);
|
||||
}
|
||||
|
||||
/*
|
||||
|
Loading…
x
Reference in New Issue
Block a user