m ) ) // 定义获取结构成员相对偏移地址的宏 #ifndef max #define max( a, b ) ( ( ( a ) > ( b ) ) ? ( a ) : ( b ) ) // 较大值 #endif #ifndef min #define min( a, b ) ( ( ( a ) < ( b ) ) ? ( a ) : ( b ) ) // 较小值 #endif #define MAX_ISPDEV_NUM 16 //MCU类型 #define MCU_CH55X 0 #define MCU_CH56X 1 #define MCU_CH54X 2 #define MCU_CH57X 3 #define MCU_CH32F1X 4 #define MCU_CH32V1X 5 #define MCU_CH58X 6 #define MCU_CH32V3X 7 #define MCU_CH32F2X 8 #define MCU_CH32V2X 9 typedef VOID ( CALLBACK * mPCH55X_USB_NOTIFY_ROUTINE ) ( // 设备事件通知回调程序 ULONG iEventStatus, // 设备事件和当前状态(在下行定义): 0=设备拔出事件, 3=设备插入事件 ULONG DevIndexArray, //插入或移除的设备序号 ULONG DevCnt); //当前设备总数 #define InforType_Succ 0 #define InforType_Err 1 #define InforType_Hit 2 typedef VOID ( CALLBACK * mOutputPrint ) ( // 应用层信息输出函数 UCHAR InforType,WCHAR *DataStr); typedef VOID ( CALLBACK * mAppendPrint ) ( // 应用层信息追加输出函数 ULONG LineNo,WCHAR *DataStr); typedef VOID ( CALLBACK * mPCH55X_USB_NOTIFY_ROUTINE ) ( // 设备事件通知回调程序 ULONG iEventStatus, // 设备事件和当前状态(在下行定义): 0=设备拔出事件, 3=设备插入事件 ULONG DevIndexArray, //插入或移除的设备序号 ULONG DevCnt); //当前设备总数 #pragma pack(1) //强制将下面#pragma pack(1) ...#pragma pack之间的结构定义为1字节对齐,传送scsi命令要8字节对齐(默认8字节). typedef struct _CHIP_INFOEX { TCHAR ChipName[16]; UINT FlashMaxSize; UINT EepromMaxSize; BOOL IsNetworkDownloadAvailable; BOOL IsUsbDownloadAvailable; BOOL IsSerialDownloadAvailable; UCHAR DeviceType; LIST_ENTRY listEntry; UCHAR ChipId; USHORT EepromStartAddr; TCHAR Introduction[256]; TCHAR IntroductionEn[256]; }CHIP_INFOEX, *PCHIP_INFOEX; //ISP下载设备结构信息 typedef struct _ISP55XDEVICEINFOR { ULONG Index; //枚举后的设备序号 UCHAR McuType; //芯片型号 BOOL IsSupportUID; //MCU是否支持获取UID,较早版本不支持UID获取 UCHAR IspVer[4]; //ISP版本 UCHAR IspMcuUID[8]; //MCU唯一ID CHAR PortName[32]; //串口设备名,只有串口下载时才有值 BOOL DevIsOnline; //设备是否连接上该串口,只在串口下载时有用 BOOL IsCoolBoot; //是否是上电进行BOOT。如果不是,则不能修改配置位 UCHAR MacAddr[6]; BOOL IsPreBTV230; }Isp55xDevInforS,PIsp55xDevInforS; //ISP下载设备设置 typedef struct _CH55xISPSETTING { ULONG IspInter face; //下载接口类型 0:USB,1:串口 2:网口 UCHAR IspMcuType; //芯片型号,芯片型号的最后两位,如CH563,则写0x63 UCHAR IspMcuSeries; //芯片系列 0:CH55X;1:CH56X BOOL IsEnableLongRest; //使能上电复位期间的额外延时复位 BOOL IsXtOscStrong; //启用晶体振荡器增强对外驱动能力,CH554不支持 BOOL IsEnableResetPin; //指定手工复位输入引脚,CH554使用RST引脚,其他型号指定P5.7 BOOL IsEnableP0PullUp; //使能系统复位期间P0端口的内部上拉电阻,CH554不支持 BOOL IsMcuResetAfterIsp; //下载完成后是否复位直接运行目标程序(只支持网络模式) BOOL IsEnableCfgBuf64K; BOOL EnableIce; //CH55X,CH32FX复用为串口一键下载功能 BOOL EnableBootLoader; BOOL IsSetNetDevMac; UCHAR NetDevMacAddr[6]; //CH58X时,第一字节用来记录写保护块数 BOOL IsCodeProtect; //启用代码保护 BOOL IsFirstRunIAP; //上电后运行IAP BOOL IsEnableIAP; //是否启用IAP ULONG IAPStartAddr; //IAP起始地址 CHAR UserFileName[MAX_PATH]; //用户文件名 CHAR IapFileName[MAX_PATH]; //IAP文件名 CHAR DataFileName[MAX_PATH]; //Dataflash文件名 BOOL IsNoKeyDnAtSer; //界面,开启串口免铵键下载 UCHAR BootPinNum; //ISP下载配置脚 BOOL IsClearDataFlash; //清空DataFlash 转换成易语言 BOOL IsEnableUsbPnpNotify; //是否启用USB插拔通知 BOOL IsEraseAllCFlash; BOOL IsEraseAllDFlash; mPCH55X_USB_NOTIFY_ROUTINE UsbPnpNotifyRoutine; //插拔通知回调函数 ULONG LocalIP; //本地ISP IP地址 ULONG GatewayIP; ULONG MaskIP; BOOL IsSetDevIP; ULONG dwDevIP; mOutputPrint AppOutput; //应用程序信息打印函数 mAppendPrint AppAppendOutput; //应用程序信息追加打印函数 BOOL UILangIsCH; //中英文 UCHAR LV_RST_VOL; //门限电压 BOOL IsSimulat; //两线仿真调试接口使能 BOOL IsBootLoader; //引导程序使能 BOOL IsPorCtr; BOOL IsUsbdPu; BOOL IsUsbdMode; BOOL IsStandbyRst; BOOL IsStopRst; BOOL IsIwdgSw; UCHAR WPR_DATA[8]; BOOL IsEnLockup; BOOL IsEnOutReset; BOOL IsEnDebug; UCHAR UserMem; //CH543作为LDO输出电压参数 UCHAR Baud[4]; }CH55xIspOptionS,PCH55xIspOptionS; #pragma pack() #define CH375_DEVICE_ARRIVAL 3 // 设备插入事件,已经插入 #define CH375_DEVICE_REMOVE 0 // 设备拔出事件,已经拔出 //CH55X ISP函数 / USB下载可以实现插入后自动下载和一次多个设备下载 USB下载使用步骤: 1.设置ISP下载设置,设置下载接口,芯片型号,必须在所有操作前设置 WCH55x_SetIspOption,设置ISP下载设置 需要在插入时自动下载,需提前设置:CH55xIspOptionS->IsEnableUsbPnpNotify 2.通过USB搜索ISP下载设备,返回枚举的设备数,将返回的IspDevInfor设备数组信息保存 WCH55x_EnumDevices 3.将目标文件数据写入到mcu flash内,需指定设备序号 WCH55x_FlashProgram 串口下载,可以实现插入某个串口后自动下载 串口下载使用步骤 1.WCH55x_SetIspOption 设置ISP下载设置,设置下载接口,芯片型号,必须在所有操作前设置 2.WCH55x_EnumDevices IspOption->IspInterface = 1:串口下载方式时,此函数将执行枚举电脑上所有的串口,返回枚举的串口数,将返回的IspDevInfor设备数组信息保存 3.WCH55x_GetIspDeviceInfor 下载前必须调用WCH55x_GetIspDeviceInfor函数去获取指定设备的信息,是否在线,芯片UID等。因为串口不支持即插即用,只能手工获取。 IspDevInfor->DevIsOnline=TRUE,表示已检测到设备已连接至该接口 4.将目标文件数据写入到mcu flash内,需指定设备序号 WCH55x_FlashProgram / //IspOption->IspInterface = 0:USB下载方式时,此函数将执行通过USB搜索ISP下载设备,返回枚举的设备数 //IspOption->IspInterface = 1:串口下载方式时,此函数将执行枚举电脑上所有的串口,返回枚举的串口数 //获取指定序号设备信息 BOOL WINAPI WCH55x_GetIspDeviceInfor(ULONG iIndex, //指定序号设备信息 PIsp55xDevInforS IspDevInfor);//设备信息 //设置ISP下载设置Ex BOOL WINAPI WCH55x_SetIspOption(CH55xIspOptionS *IspOption);//ISP选项 //获取ISP下载设置 BOOL WINAPI WCH55x_GetIspOption(CH55xIspOptionS *IspOption); //ISP选项 //USB接口写EEPROM数据 BOOL WCH55x_WriteDataFlash(ULONG iIndex, //设备序号 ULONG StartAddr, //起始地址 ULONG *oWriteLen, //写入长度 PUCHAR DataBuf, //数据缓冲区 BOOL bIsErase); //USB接口读EEPROM数据 BOOL WCH55x_ReadDataFlash(ULONG iIndex, //设备序号 ULONG StartAddr, //起始地址 ULONG *oReadLen, //写入长度 PUCHAR DataBuf); //数据缓冲区) BOOL WINAPI WCH55xIsp_ReadConfig(ULONG DevI, PUCHAR IapCfgVal, //4字节 PUCHAR IspCfgVal, //4字节 PUCHAR CFlashCfgVal, //4字节 PULONG BootVer, PUCHAR UUID); //取消操作 VOID WCH55x_StopOp(); //通过USB搜索ISP下载设备,返回枚举的设备数。旧版BTV230,只支持一个设备枚举 ULONG WINAPI WCH55x_EnumDevices(Isp55xDevInforS *IspDevInfor, //IspDevInfor:设备信息数组 UCHAR MaxDevCnt, //最大扫描设备数" /> m ) ) // 定义获取结构成员相对偏移地址的宏 #ifndef max #define max( a, b ) ( ( ( a ) > ( b ) ) ? ( a ) : ( b ) ) // 较大值 #endif #ifndef min #define min( a, b ) ( ( ( a ) < ( b ) ) ? ( a ) : ( b ) ) // 较小值 #endif #define MAX_ISPDEV_NUM 16 //MCU类型 #define MCU_CH55X 0 #define MCU_CH56X 1 #define MCU_CH54X 2 #define MCU_CH57X 3 #define MCU_CH32F1X 4 #define MCU_CH32V1X 5 #define MCU_CH58X 6 #define MCU_CH32V3X 7 #define MCU_CH32F2X 8 #define MCU_CH32V2X 9 typedef VOID ( CALLBACK * mPCH55X_USB_NOTIFY_ROUTINE ) ( // 设备事件通知回调程序 ULONG iEventStatus, // 设备事件和当前状态(在下行定义): 0=设备拔出事件, 3=设备插入事件 ULONG DevIndexArray, //插入或移除的设备序号 ULONG DevCnt); //当前设备总数 #define InforType_Succ 0 #define InforType_Err 1 #define InforType_Hit 2 typedef VOID ( CALLBACK * mOutputPrint ) ( // 应用层信息输出函数 UCHAR InforType,WCHAR *DataStr); typedef VOID ( CALLBACK * mAppendPrint ) ( // 应用层信息追加输出函数 ULONG LineNo,WCHAR *DataStr); typedef VOID ( CALLBACK * mPCH55X_USB_NOTIFY_ROUTINE ) ( // 设备事件通知回调程序 ULONG iEventStatus, // 设备事件和当前状态(在下行定义): 0=设备拔出事件, 3=设备插入事件 ULONG DevIndexArray, //插入或移除的设备序号 ULONG DevCnt); //当前设备总数 #pragma pack(1) //强制将下面#pragma pack(1) ...#pragma pack之间的结构定义为1字节对齐,传送scsi命令要8字节对齐(默认8字节). typedef struct _CHIP_INFOEX { TCHAR ChipName[16]; UINT FlashMaxSize; UINT EepromMaxSize; BOOL IsNetworkDownloadAvailable; BOOL IsUsbDownloadAvailable; BOOL IsSerialDownloadAvailable; UCHAR DeviceType; LIST_ENTRY listEntry; UCHAR ChipId; USHORT EepromStartAddr; TCHAR Introduction[256]; TCHAR IntroductionEn[256]; }CHIP_INFOEX, *PCHIP_INFOEX; //ISP下载设备结构信息 typedef struct _ISP55XDEVICEINFOR { ULONG Index; //枚举后的设备序号 UCHAR McuType; //芯片型号 BOOL IsSupportUID; //MCU是否支持获取UID,较早版本不支持UID获取 UCHAR IspVer[4]; //ISP版本 UCHAR IspMcuUID[8]; //MCU唯一ID CHAR PortName[32]; //串口设备名,只有串口下载时才有值 BOOL DevIsOnline; //设备是否连接上该串口,只在串口下载时有用 BOOL IsCoolBoot; //是否是上电进行BOOT。如果不是,则不能修改配置位 UCHAR MacAddr[6]; BOOL IsPreBTV230; }Isp55xDevInforS,PIsp55xDevInforS; //ISP下载设备设置 typedef struct _CH55xISPSETTING { ULONG IspInter face; //下载接口类型 0:USB,1:串口 2:网口 UCHAR IspMcuType; //芯片型号,芯片型号的最后两位,如CH563,则写0x63 UCHAR IspMcuSeries; //芯片系列 0:CH55X;1:CH56X BOOL IsEnableLongRest; //使能上电复位期间的额外延时复位 BOOL IsXtOscStrong; //启用晶体振荡器增强对外驱动能力,CH554不支持 BOOL IsEnableResetPin; //指定手工复位输入引脚,CH554使用RST引脚,其他型号指定P5.7 BOOL IsEnableP0PullUp; //使能系统复位期间P0端口的内部上拉电阻,CH554不支持 BOOL IsMcuResetAfterIsp; //下载完成后是否复位直接运行目标程序(只支持网络模式) BOOL IsEnableCfgBuf64K; BOOL EnableIce; //CH55X,CH32FX复用为串口一键下载功能 BOOL EnableBootLoader; BOOL IsSetNetDevMac; UCHAR NetDevMacAddr[6]; //CH58X时,第一字节用来记录写保护块数 BOOL IsCodeProtect; //启用代码保护 BOOL IsFirstRunIAP; //上电后运行IAP BOOL IsEnableIAP; //是否启用IAP ULONG IAPStartAddr; //IAP起始地址 CHAR UserFileName[MAX_PATH]; //用户文件名 CHAR IapFileName[MAX_PATH]; //IAP文件名 CHAR DataFileName[MAX_PATH]; //Dataflash文件名 BOOL IsNoKeyDnAtSer; //界面,开启串口免铵键下载 UCHAR BootPinNum; //ISP下载配置脚 BOOL IsClearDataFlash; //清空DataFlash 转换成易语言 BOOL IsEnableUsbPnpNotify; //是否启用USB插拔通知 BOOL IsEraseAllCFlash; BOOL IsEraseAllDFlash; mPCH55X_USB_NOTIFY_ROUTINE UsbPnpNotifyRoutine; //插拔通知回调函数 ULONG LocalIP; //本地ISP IP地址 ULONG GatewayIP; ULONG MaskIP; BOOL IsSetDevIP; ULONG dwDevIP; mOutputPrint AppOutput; //应用程序信息打印函数 mAppendPrint AppAppendOutput; //应用程序信息追加打印函数 BOOL UILangIsCH; //中英文 UCHAR LV_RST_VOL; //门限电压 BOOL IsSimulat; //两线仿真调试接口使能 BOOL IsBootLoader; //引导程序使能 BOOL IsPorCtr; BOOL IsUsbdPu; BOOL IsUsbdMode; BOOL IsStandbyRst; BOOL IsStopRst; BOOL IsIwdgSw; UCHAR WPR_DATA[8]; BOOL IsEnLockup; BOOL IsEnOutReset; BOOL IsEnDebug; UCHAR UserMem; //CH543作为LDO输出电压参数 UCHAR Baud[4]; }CH55xIspOptionS,PCH55xIspOptionS; #pragma pack() #define CH375_DEVICE_ARRIVAL 3 // 设备插入事件,已经插入 #define CH375_DEVICE_REMOVE 0 // 设备拔出事件,已经拔出 //CH55X ISP函数 / USB下载可以实现插入后自动下载和一次多个设备下载 USB下载使用步骤: 1.设置ISP下载设置,设置下载接口,芯片型号,必须在所有操作前设置 WCH55x_SetIspOption,设置ISP下载设置 需要在插入时自动下载,需提前设置:CH55xIspOptionS->IsEnableUsbPnpNotify 2.通过USB搜索ISP下载设备,返回枚举的设备数,将返回的IspDevInfor设备数组信息保存 WCH55x_EnumDevices 3.将目标文件数据写入到mcu flash内,需指定设备序号 WCH55x_FlashProgram 串口下载,可以实现插入某个串口后自动下载 串口下载使用步骤 1.WCH55x_SetIspOption 设置ISP下载设置,设置下载接口,芯片型号,必须在所有操作前设置 2.WCH55x_EnumDevices IspOption->IspInterface = 1:串口下载方式时,此函数将执行枚举电脑上所有的串口,返回枚举的串口数,将返回的IspDevInfor设备数组信息保存 3.WCH55x_GetIspDeviceInfor 下载前必须调用WCH55x_GetIspDeviceInfor函数去获取指定设备的信息,是否在线,芯片UID等。因为串口不支持即插即用,只能手工获取。 IspDevInfor->DevIsOnline=TRUE,表示已检测到设备已连接至该接口 4.将目标文件数据写入到mcu flash内,需指定设备序号 WCH55x_FlashProgram / //IspOption->IspInterface = 0:USB下载方式时,此函数将执行通过USB搜索ISP下载设备,返回枚举的设备数 //IspOption->IspInterface = 1:串口下载方式时,此函数将执行枚举电脑上所有的串口,返回枚举的串口数 //获取指定序号设备信息 BOOL WINAPI WCH55x_GetIspDeviceInfor(ULONG iIndex, //指定序号设备信息 PIsp55xDevInforS IspDevInfor);//设备信息 //设置ISP下载设置Ex BOOL WINAPI WCH55x_SetIspOption(CH55xIspOptionS *IspOption);//ISP选项 //获取ISP下载设置 BOOL WINAPI WCH55x_GetIspOption(CH55xIspOptionS *IspOption); //ISP选项 //USB接口写EEPROM数据 BOOL WCH55x_WriteDataFlash(ULONG iIndex, //设备序号 ULONG StartAddr, //起始地址 ULONG *oWriteLen, //写入长度 PUCHAR DataBuf, //数据缓冲区 BOOL bIsErase); //USB接口读EEPROM数据 BOOL WCH55x_ReadDataFlash(ULONG iIndex, //设备序号 ULONG StartAddr, //起始地址 ULONG *oReadLen, //写入长度 PUCHAR DataBuf); //数据缓冲区) BOOL WINAPI WCH55xIsp_ReadConfig(ULONG DevI, PUCHAR IapCfgVal, //4字节 PUCHAR IspCfgVal, //4字节 PUCHAR CFlashCfgVal, //4字节 PULONG BootVer, PUCHAR UUID); //取消操作 VOID WCH55x_StopOp(); //通过USB搜索ISP下载设备,返回枚举的设备数。旧版BTV230,只支持一个设备枚举 ULONG WINAPI WCH55x_EnumDevices(Isp55xDevInforS *IspDevInfor, //IspDevInfor:设备信息数组 UCHAR MaxDevCnt, //最大扫描设备数"> m ) ) // 定义获取结构成员相对偏移地址的宏 #ifndef max #define max( a, b ) ( ( ( a ) > ( b ) ) ? ( a ) : ( b ) ) // 较大值 #endif #ifndef min #define min( a, b ) ( ( ( a ) < ( b ) ) ? ( a ) : ( b ) ) // 较小值 #endif #define MAX_ISPDEV_NUM 16 //MCU类型 #define MCU_CH55X 0 #define MCU_CH56X 1 #define MCU_CH54X 2 #define MCU_CH57X 3 #define MCU_CH32F1X 4 #define MCU_CH32V1X 5 #define MCU_CH58X 6 #define MCU_CH32V3X 7 #define MCU_CH32F2X 8 #define MCU_CH32V2X 9 typedef VOID ( CALLBACK * mPCH55X_USB_NOTIFY_ROUTINE ) ( // 设备事件通知回调程序 ULONG iEventStatus, // 设备事件和当前状态(在下行定义): 0=设备拔出事件, 3=设备插入事件 ULONG DevIndexArray, //插入或移除的设备序号 ULONG DevCnt); //当前设备总数 #define InforType_Succ 0 #define InforType_Err 1 #define InforType_Hit 2 typedef VOID ( CALLBACK * mOutputPrint ) ( // 应用层信息输出函数 UCHAR InforType,WCHAR *DataStr); typedef VOID ( CALLBACK * mAppendPrint ) ( // 应用层信息追加输出函数 ULONG LineNo,WCHAR *DataStr); typedef VOID ( CALLBACK * mPCH55X_USB_NOTIFY_ROUTINE ) ( // 设备事件通知回调程序 ULONG iEventStatus, // 设备事件和当前状态(在下行定义): 0=设备拔出事件, 3=设备插入事件 ULONG DevIndexArray, //插入或移除的设备序号 ULONG DevCnt); //当前设备总数 #pragma pack(1) //强制将下面#pragma pack(1) ...#pragma pack之间的结构定义为1字节对齐,传送scsi命令要8字节对齐(默认8字节). typedef struct _CHIP_INFOEX { TCHAR ChipName[16]; UINT FlashMaxSize; UINT EepromMaxSize; BOOL IsNetworkDownloadAvailable; BOOL IsUsbDownloadAvailable; BOOL IsSerialDownloadAvailable; UCHAR DeviceType; LIST_ENTRY listEntry; UCHAR ChipId; USHORT EepromStartAddr; TCHAR Introduction[256]; TCHAR IntroductionEn[256]; }CHIP_INFOEX, *PCHIP_INFOEX; //ISP下载设备结构信息 typedef struct _ISP55XDEVICEINFOR { ULONG Index; //枚举后的设备序号 UCHAR McuType; //芯片型号 BOOL IsSupportUID; //MCU是否支持获取UID,较早版本不支持UID获取 UCHAR IspVer[4]; //ISP版本 UCHAR IspMcuUID[8]; //MCU唯一ID CHAR PortName[32]; //串口设备名,只有串口下载时才有值 BOOL DevIsOnline; //设备是否连接上该串口,只在串口下载时有用 BOOL IsCoolBoot; //是否是上电进行BOOT。如果不是,则不能修改配置位 UCHAR MacAddr[6]; BOOL IsPreBTV230; }Isp55xDevInforS,PIsp55xDevInforS; //ISP下载设备设置 typedef struct _CH55xISPSETTING { ULONG IspInter face; //下载接口类型 0:USB,1:串口 2:网口 UCHAR IspMcuType; //芯片型号,芯片型号的最后两位,如CH563,则写0x63 UCHAR IspMcuSeries; //芯片系列 0:CH55X;1:CH56X BOOL IsEnableLongRest; //使能上电复位期间的额外延时复位 BOOL IsXtOscStrong; //启用晶体振荡器增强对外驱动能力,CH554不支持 BOOL IsEnableResetPin; //指定手工复位输入引脚,CH554使用RST引脚,其他型号指定P5.7 BOOL IsEnableP0PullUp; //使能系统复位期间P0端口的内部上拉电阻,CH554不支持 BOOL IsMcuResetAfterIsp; //下载完成后是否复位直接运行目标程序(只支持网络模式) BOOL IsEnableCfgBuf64K; BOOL EnableIce; //CH55X,CH32FX复用为串口一键下载功能 BOOL EnableBootLoader; BOOL IsSetNetDevMac; UCHAR NetDevMacAddr[6]; //CH58X时,第一字节用来记录写保护块数 BOOL IsCodeProtect; //启用代码保护 BOOL IsFirstRunIAP; //上电后运行IAP BOOL IsEnableIAP; //是否启用IAP ULONG IAPStartAddr; //IAP起始地址 CHAR UserFileName[MAX_PATH]; //用户文件名 CHAR IapFileName[MAX_PATH]; //IAP文件名 CHAR DataFileName[MAX_PATH]; //Dataflash文件名 BOOL IsNoKeyDnAtSer; //界面,开启串口免铵键下载 UCHAR BootPinNum; //ISP下载配置脚 BOOL IsClearDataFlash; //清空DataFlash 转换成易语言 BOOL IsEnableUsbPnpNotify; //是否启用USB插拔通知 BOOL IsEraseAllCFlash; BOOL IsEraseAllDFlash; mPCH55X_USB_NOTIFY_ROUTINE UsbPnpNotifyRoutine; //插拔通知回调函数 ULONG LocalIP; //本地ISP IP地址 ULONG GatewayIP; ULONG MaskIP; BOOL IsSetDevIP; ULONG dwDevIP; mOutputPrint AppOutput; //应用程序信息打印函数 mAppendPrint AppAppendOutput; //应用程序信息追加打印函数 BOOL UILangIsCH; //中英文 UCHAR LV_RST_VOL; //门限电压 BOOL IsSimulat; //两线仿真调试接口使能 BOOL IsBootLoader; //引导程序使能 BOOL IsPorCtr; BOOL IsUsbdPu; BOOL IsUsbdMode; BOOL IsStandbyRst; BOOL IsStopRst; BOOL IsIwdgSw; UCHAR WPR_DATA[8]; BOOL IsEnLockup; BOOL IsEnOutReset; BOOL IsEnDebug; UCHAR UserMem; //CH543作为LDO输出电压参数 UCHAR Baud[4]; }CH55xIspOptionS,PCH55xIspOptionS; #pragma pack() #define CH375_DEVICE_ARRIVAL 3 // 设备插入事件,已经插入 #define CH375_DEVICE_REMOVE 0 // 设备拔出事件,已经拔出 //CH55X ISP函数 / USB下载可以实现插入后自动下载和一次多个设备下载 USB下载使用步骤: 1.设置ISP下载设置,设置下载接口,芯片型号,必须在所有操作前设置 WCH55x_SetIspOption,设置ISP下载设置 需要在插入时自动下载,需提前设置:CH55xIspOptionS->IsEnableUsbPnpNotify 2.通过USB搜索ISP下载设备,返回枚举的设备数,将返回的IspDevInfor设备数组信息保存 WCH55x_EnumDevices 3.将目标文件数据写入到mcu flash内,需指定设备序号 WCH55x_FlashProgram 串口下载,可以实现插入某个串口后自动下载 串口下载使用步骤 1.WCH55x_SetIspOption 设置ISP下载设置,设置下载接口,芯片型号,必须在所有操作前设置 2.WCH55x_EnumDevices IspOption->IspInterface = 1:串口下载方式时,此函数将执行枚举电脑上所有的串口,返回枚举的串口数,将返回的IspDevInfor设备数组信息保存 3.WCH55x_GetIspDeviceInfor 下载前必须调用WCH55x_GetIspDeviceInfor函数去获取指定设备的信息,是否在线,芯片UID等。因为串口不支持即插即用,只能手工获取。 IspDevInfor->DevIsOnline=TRUE,表示已检测到设备已连接至该接口 4.将目标文件数据写入到mcu flash内,需指定设备序号 WCH55x_FlashProgram / //IspOption->IspInterface = 0:USB下载方式时,此函数将执行通过USB搜索ISP下载设备,返回枚举的设备数 //IspOption->IspInterface = 1:串口下载方式时,此函数将执行枚举电脑上所有的串口,返回枚举的串口数 //获取指定序号设备信息 BOOL WINAPI WCH55x_GetIspDeviceInfor(ULONG iIndex, //指定序号设备信息 PIsp55xDevInforS IspDevInfor);//设备信息 //设置ISP下载设置Ex BOOL WINAPI WCH55x_SetIspOption(CH55xIspOptionS *IspOption);//ISP选项 //获取ISP下载设置 BOOL WINAPI WCH55x_GetIspOption(CH55xIspOptionS *IspOption); //ISP选项 //USB接口写EEPROM数据 BOOL WCH55x_WriteDataFlash(ULONG iIndex, //设备序号 ULONG StartAddr, //起始地址 ULONG *oWriteLen, //写入长度 PUCHAR DataBuf, //数据缓冲区 BOOL bIsErase); //USB接口读EEPROM数据 BOOL WCH55x_ReadDataFlash(ULONG iIndex, //设备序号 ULONG StartAddr, //起始地址 ULONG *oReadLen, //写入长度 PUCHAR DataBuf); //数据缓冲区) BOOL WINAPI WCH55xIsp_ReadConfig(ULONG DevI, PUCHAR IapCfgVal, //4字节 PUCHAR IspCfgVal, //4字节 PUCHAR CFlashCfgVal, //4字节 PULONG BootVer, PUCHAR UUID); //取消操作 VOID WCH55x_StopOp(); //通过USB搜索ISP下载设备,返回枚举的设备数。旧版BTV230,只支持一个设备枚举 ULONG WINAPI WCH55x_EnumDevices(Isp55xDevInforS *IspDevInfor, //IspDevInfor:设备信息数组 UCHAR MaxDevCnt, //最大扫描设备数" />

C++转易语言几个dll调用,有几个自定义数据类型

¥ 需报价

¥ 需报价 匠迹众包 Technology & Programming China
1 days ago

Description

// 2016.12
//
//** Copyright (C) WCH 2002-2016
//
Web: http://WCH.CN **
//

//** DLL for WCH MCU ISP
//
C, VC6.0 **
//****************************************
//
// WCH MCU ISP API V1.0
// 江苏沁恒股份有限公司 作者: TECH30 2016.12
// 运行环境: Windows Windows 2000 and later
// support chip: CH55X
//

#ifndef _WCH55XISP_DLL_H
#define _WCH55XISP_DLL_H

#ifdef __cplusplus
extern "C" {
#endif


#define mOFFSET( s, m ) ( (ULONG) & ( ( ( s * ) 0 ) -> m ) ) // 定义获取结构成员相对偏移地址的宏

#ifndef max
#define max( a, b ) ( ( ( a ) > ( b ) ) ? ( a ) : ( b ) ) // 较大值
#endif

#ifndef min
#define min( a, b ) ( ( ( a ) < ( b ) ) ? ( a ) : ( b ) ) // 较小值
#endif

#define MAX_ISPDEV_NUM 16

//MCU类型
#define MCU_CH55X 0
#define MCU_CH56X 1
#define MCU_CH54X 2
#define MCU_CH57X 3
#define MCU_CH32F1X 4
#define MCU_CH32V1X 5
#define MCU_CH58X 6
#define MCU_CH32V3X 7
#define MCU_CH32F2X 8
#define MCU_CH32V2X 9

typedef VOID ( CALLBACK * mPCH55X_USB_NOTIFY_ROUTINE ) ( // 设备事件通知回调程序
ULONG iEventStatus, // 设备事件和当前状态(在下行定义): 0=设备拔出事件, 3=设备插入事件
ULONG DevIndexArray, //插入或移除的设备序号
ULONG DevCnt); //当前设备总数

#define InforType_Succ 0
#define InforType_Err 1
#define InforType_Hit 2
typedef VOID ( CALLBACK * mOutputPrint ) ( // 应用层信息输出函数
UCHAR InforType,WCHAR *DataStr);


typedef VOID ( CALLBACK * mAppendPrint ) ( // 应用层信息追加输出函数
ULONG LineNo,WCHAR *DataStr);

typedef VOID ( CALLBACK * mPCH55X_USB_NOTIFY_ROUTINE ) ( // 设备事件通知回调程序
ULONG iEventStatus, // 设备事件和当前状态(在下行定义): 0=设备拔出事件, 3=设备插入事件
ULONG DevIndexArray, //插入或移除的设备序号
ULONG DevCnt); //当前设备总数



#pragma pack(1) //强制将下面#pragma pack(1) ...#pragma pack之间的结构定义为1字节对齐,传送scsi命令要8字节对齐(默认8字节).

typedef struct _CHIP_INFOEX {
TCHAR ChipName[16];
UINT FlashMaxSize;
UINT EepromMaxSize;
BOOL IsNetworkDownloadAvailable;
BOOL IsUsbDownloadAvailable;
BOOL IsSerialDownloadAvailable;
UCHAR DeviceType;
LIST_ENTRY listEntry;
UCHAR ChipId;
USHORT EepromStartAddr;
TCHAR Introduction[256];
TCHAR IntroductionEn[256];
}CHIP_INFOEX, *PCHIP_INFOEX;

//ISP下载设备结构信息
typedef struct _ISP55XDEVICEINFOR
{
ULONG Index; //枚举后的设备序号
UCHAR McuType; //芯片型号
BOOL IsSupportUID; //MCU是否支持获取UID,较早版本不支持UID获取
UCHAR IspVer[4]; //ISP版本
UCHAR IspMcuUID[8]; //MCU唯一ID
CHAR PortName[32]; //串口设备名,只有串口下载时才有值
BOOL DevIsOnline; //设备是否连接上该串口,只在串口下载时有用
BOOL IsCoolBoot; //是否是上电进行BOOT。如果不是,则不能修改配置位
UCHAR MacAddr[6];
BOOL IsPreBTV230;
}Isp55xDevInforS,PIsp55xDevInforS;


//ISP下载设备设置
typedef struct _CH55xISPSETTING
{
ULONG IspInter face; //下载接口类型 0:USB,1:串口 2:网口
UCHAR IspMcuType; //芯片型号,芯片型号的最后两位,如CH563,则写0x63
UCHAR IspMcuSeries; //芯片系列 0:CH55X;1:CH56X

BOOL IsEnableLongRest; //使能上电复位期间的额外延时复位
BOOL IsXtOscStrong; //启用晶体振荡器增强对外驱动能力,CH554不支持
BOOL IsEnableResetPin; //指定手工复位输入引脚,CH554使用RST引脚,其他型号指定P5.7
BOOL IsEnableP0PullUp; //使能系统复位期间P0端口的内部上拉电阻,CH554不支持
BOOL IsMcuResetAfterIsp; //下载完成后是否复位直接运行目标程序(只支持网络模式)
BOOL IsEnableCfgBuf64K;
BOOL EnableIce; //CH55X,CH32FX复用为串口一键下载功能
BOOL EnableBootLoader;
BOOL IsSetNetDevMac;
UCHAR NetDevMacAddr[6]; //CH58X时,第一字节用来记录写保护块数
BOOL IsCodeProtect; //启用代码保护
BOOL IsFirstRunIAP; //上电后运行IAP
BOOL IsEnableIAP; //是否启用IAP
ULONG IAPStartAddr; //IAP起始地址
CHAR UserFileName[MAX_PATH]; //用户文件名
CHAR IapFileName[MAX_PATH]; //IAP文件名
CHAR DataFileName[MAX_PATH]; //Dataflash文件名

BOOL IsNoKeyDnAtSer; //界面,开启串口免铵键下载
UCHAR BootPinNum; //ISP下载配置脚
BOOL IsClearDataFlash; //清空DataFlash
转换成易语言
BOOL IsEnableUsbPnpNotify; //是否启用USB插拔通知
BOOL IsEraseAllCFlash;
BOOL IsEraseAllDFlash;
mPCH55X_USB_NOTIFY_ROUTINE UsbPnpNotifyRoutine; //插拔通知回调函数

ULONG LocalIP; //本地ISP IP地址
ULONG GatewayIP;
ULONG MaskIP;
BOOL IsSetDevIP;
ULONG dwDevIP;

mOutputPrint AppOutput; //应用程序信息打印函数
mAppendPrint AppAppendOutput; //应用程序信息追加打印函数

BOOL UILangIsCH; //中英文
UCHAR LV_RST_VOL; //门限电压
BOOL IsSimulat; //两线仿真调试接口使能
BOOL IsBootLoader; //引导程序使能
BOOL IsPorCtr;
BOOL IsUsbdPu;
BOOL IsUsbdMode;
BOOL IsStandbyRst;
BOOL IsStopRst;
BOOL IsIwdgSw;
UCHAR WPR_DATA[8];

BOOL IsEnLockup;
BOOL IsEnOutReset;
BOOL IsEnDebug;
UCHAR UserMem; //CH543作为LDO输出电压参数
UCHAR Baud[4];
}CH55xIspOptionS,PCH55xIspOptionS;


#pragma pack()

#define CH375_DEVICE_ARRIVAL 3 // 设备插入事件,已经插入
#define CH375_DEVICE_REMOVE 0 // 设备拔出事件,已经拔出


//CH55X ISP函数

/

USB下载可以实现插入后自动下载和一次多个设备下载
USB下载使用步骤:
1.设置ISP下载设置,设置下载接口,芯片型号,必须在所有操作前设置
WCH55x_SetIspOption,设置ISP下载设置
需要在插入时自动下载,需提前设置:CH55xIspOptionS->IsEnableUsbPnpNotify
2.通过USB搜索ISP下载设备,返回枚举的设备数,将返回的IspDevInfor设备数组信息保存
WCH55x_EnumDevices
3.将目标文件数据写入到mcu flash内,需指定设备序号
WCH55x_FlashProgram


串口下载,可以实现插入某个串口后自动下载
串口下载使用步骤
1.WCH55x_SetIspOption
设置ISP下载设置,设置下载接口,芯片型号,必须在所有操作前设置

2.WCH55x_EnumDevices
IspOption->IspInterface = 1:串口下载方式时,此函数将执行枚举电脑上所有的串口,返回枚举的串口数,将返回的IspDevInfor设备数组信息保存

3.WCH55x_GetIspDeviceInfor
下载前必须调用WCH55x_GetIspDeviceInfor函数去获取指定设备的信息,是否在线,芯片UID等。因为串口不支持即插即用,只能手工获取。
IspDevInfor->DevIsOnline=TRUE,表示已检测到设备已连接至该接口

4.将目标文件数据写入到mcu flash内,需指定设备序号
WCH55x_FlashProgram
/

//IspOption->IspInterface = 0:USB下载方式时,此函数将执行通过USB搜索ISP下载设备,返回枚举的设备数
//IspOption->IspInterface = 1:串口下载方式时,此函数将执行枚举电脑上所有的串口,返回枚举的串口数
//获取指定序号设备信息
BOOL WINAPI WCH55x_GetIspDeviceInfor(ULONG iIndex, //指定序号设备信息
PIsp55xDevInforS IspDevInfor);//设备信息
//设置ISP下载设置Ex
BOOL WINAPI WCH55x_SetIspOption(CH55xIspOptionS *IspOption);//ISP选项

//获取ISP下载设置
BOOL WINAPI WCH55x_GetIspOption(CH55xIspOptionS *IspOption); //ISP选项

//USB接口写EEPROM数据
BOOL WCH55x_WriteDataFlash(ULONG iIndex, //设备序号
ULONG StartAddr, //起始地址
ULONG *oWriteLen, //写入长度
PUCHAR DataBuf, //数据缓冲区
BOOL bIsErase);

//USB接口读EEPROM数据
BOOL WCH55x_ReadDataFlash(ULONG iIndex, //设备序号
ULONG StartAddr, //起始地址
ULONG *oReadLen, //写入长度
PUCHAR DataBuf); //数据缓冲区)

BOOL WINAPI WCH55xIsp_ReadConfig(ULONG DevI,
PUCHAR IapCfgVal, //4字节
PUCHAR IspCfgVal, //4字节
PUCHAR CFlashCfgVal, //4字节
PULONG BootVer,
PUCHAR UUID);
//取消操作
VOID WCH55x_StopOp();

//通过USB搜索ISP下载设备,返回枚举的设备数。旧版BTV230,只支持一个设备枚举
ULONG WINAPI WCH55x_EnumDevices(Isp55xDevInforS *IspDevInfor, //IspDevInfor:设备信息数组
UCHAR MaxDevCnt, //最大扫描设备数

关注公众号,不定期副业成功案例分享
Follow WeChat

Success story sharing

Want to stay one step ahead of the latest teleworks?

Subscribe Now

Similar Teleworks