# lluminator **Repository Path**: summer-pocket-august/lluminator ## Basic Information - **Project Name**: lluminator - **Description**: 针对L型板卡程序修改,适配照射器程序 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-05-28 - **Last Updated**: 2026-03-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 激光照射器L形板卡2.0程序 ### 1. 介绍 照射器程序于大部分激光器逻辑不一样,出光是需要倒计时计时,冷却时间,而且出光是还需要通过串口去判断光芯是否连续不断的返回数据,只有种种条件符合的情况时,才会连续出光,否则会立刻进入倒计时冷却中 #### 2025.5.27 用于照射器 * 屏蔽 脉冲模式 * 开启`周期模式下`运行时间显示(绿色)和冷却时间(红色)显示 * 开启`上位机模式`给上位机发送`运行/冷却`时间 * 脉冲5us , 最大运行时间180S, 周期范围 40ms - 120ms * TIM16中断里进入周期模式后对LCD一直刷新的问题 * 周期模式下 ,当冷却时间归零后刷新0的问题 * 修改冷却时间为红色字体 * 限制发送冷却/运行时间 只在程控模式下发送数据 * 增加对于照射器出光后 , 若照射器发送 `关闭`激光数据 , 板卡停止出脉冲 , 并根据当前运行的时间计算冷却时间,并开始冷却 * 冷却时间修改为运行时间 * 3/4 * 修改伪随机数据长度为2K * 通过上位机串口修改 , fsmc中对于频率的修正 * 持续通过光芯串口收到出光指令`0x55 , 0x30 , 0x0f , 0xe5`才可以持续出脉冲 , 否则 自动关闭脉冲 * 通过光芯串口收到关光指令`0x55 , 0x00 , 0x02 , 0x00 , 0x00 , 0x57`后关光 **以下内容是修改长度2K的代码** main.c ``` // 伪随机编码的数据数组,其中第一个数组元素存放的是伪随机位数,其余空间存放的是减去基频的数值 //unsigned short int u16_RandomData[1024]; uint16_t u16_RandomData[2048] = {0x00}; // 伪随机编码的数据数组,其中第一个数组元素存放的是伪随机位数,其余空间存放的是减去基频的数值 //V3.01 改伪随机长度,原代码:uint16_t u16_RandomData[1024]; ``` ui.c ``` // for(i=0; i<512; i++) for(i = 0 ; i < 1024 ; i++) //V3.01 改伪随机长度,原代码:for(i=0; i<512; i++) { //*(p_u32+i) = u32_FlashBuff[512*(CodeNumber-1)+i]; *(p_u32 + i) = u32_FlashBuff[1024*(CodeNumber - 1) + i]; //V3.01 改伪随机长度,原代码:*(p_u32+i) = u32_FlashBuff[512*(CodeNumber-1)+i]; } ``` RandomCode.C ``` //if((u16_RandomData[7] > 0) && (u16_RandomData[7] < 1017)) //数据有效范围1~1016 if((u16_RandomData[7] > 0) && (u16_RandomData[7] < 2041))//V3.01 改伪随机长度,原代码:if((u16_RandomData[7] > 0) && (u16_RandomData[7] < 1017)) { for(i=1; i 120000)) { ReturnValue = false; i = u16_RandomData[0] + 10; } } } //Format_Conversion.TC_u32[0] = u32_FlashBuff[512*Address]; //Format_Conversion.TC_u32[1] = u32_FlashBuff[512*Address+1]; Format_Conversion.TC_u32[0] = u32_FlashBuff[1024 * Address]; //V3.01 改伪随机长度,原代码: Format_Conversion.TC_u32[0] = u32_FlashBuff[512*Address]; Format_Conversion.TC_u32[1] = u32_FlashBuff[1024 * Address + 1]; //V3.01 改伪随机长度,原代码: Format_Conversion.TC_u32[1] = u32_FlashBuff[512*Address+1]; //p=(uint16_t *)&u32_FlashBuff[512*Address+3]; //V3.01 改伪随机长度,原代码:p=(uint16_t *)&u32_FlashBuff[512*Address+3]; p = (uint16_t *)&u32_FlashBuff[1024 * Address + 3]; //if ((Number < 1) && (Number > 1016)) if ((Number < 1) && (Number > 2041)) //V3.01 改伪随机长度,原代码:if ((Number < 1) && (Number > 1016)) { CheckValue = false; // 正常的编码长度是2到1016 } ``` bsp_ui_showp_foundation.c ``` Menu_2_x(true, 2); //Menu_2_x(true, 3);//?V3.01 改伪随机长度 ``` bsp_key.c ``` case 0: Menu_2_x(false , 1); Menu_2_x(true , 2); //? 修改伪随机数据为2组 V3.01 改伪随机长度 , 由4组*1K改为2组*2K //Menu_2_x(true , 3); //Menu_2_x(true , 4); break; case 1: Menu_2_x(true , 1); Menu_2_x(false , 2); ``` bsp.c ``` //if(u16_RandomData[7] > 0 && u16_RandomData[7] < 1017) if((u16_RandomData[7] > 0) && (u16_RandomData[7] < 2041)) //数据有效范围1~2041 //V3.01 改伪随机长度,原代码:if((u16_RandomData[7] > 0) && (u16_RandomData[7] < 1017)) //数据有效范围1~1016 /*2组设置为武汉高德红外,4组设定为通用版本*/ if((SaveCH >0) && (SaveCH <3)) //V3.01 改伪随机长度,原代码:if((SaveCH >0) && (SaveCH <5)) //for(i = 0; i < 512; i++) for(i=0; i<1024; i++) //V3.01 改伪随机长度,原代码:for(i=0; i<512; i++) for(i=0; i<1024; i++) //V3.01 改伪随机长度,原代码:for(i=0; i<512; i++) { //u32_FlashBuff[512*(SaveCH-1)+i] = *(p_u32+i); u32_FlashBuff[1024*(SaveCH-1)+i] = *(p_u32+i); //V3.01 改伪随机长度,原代码:u32_FlashBuff[512*(SaveCH-1)+i] = *(p_u32+i); } UART_Answer_LightData(USART1 , &retdata); //V3.01 改伪随机长度,存储应答,原代码:UART_Answer_NoData(USART1); /*伪随机编码删除*/ case 0x24: if(RemoteDataPacket.RX_BUF[0] == 4) { uint8_t SaveCH = RemoteDataPacket.RX_BUF[3]; //if((SaveCH >0) && (SaveCH <5)) if((SaveCH >0) && (SaveCH <3)) //V3.01 改伪随机长度,原代码:if((SaveCH >0) && (SaveCH <5)) { for(i=0; i<8; i++) { u16_RandomData[i] = 0x0; } p_u32 = (uint32_t *)&u16_RandomData; //for(i=0; i<512; i++) for(i = 0 ; i < 1024 ; i++) //V3.01 改伪随机长度,原代码:for(i=0; i<512; i++) { //u32_FlashBuff[512*(SaveCH-1)+i] = *(p_u32+i); u32_FlashBuff[1024 * (SaveCH - 1) + i] = *(p_u32 + i); //V3.01 改伪随机长度,原代码:u32_FlashBuff[512*(SaveCH-1)+i] = *(p_u32+i); } STMFLASH_Write(FLASH_USER_START_ADDR, u32_FlashBuff, 2048*4); //UART_Answer_NoData(USART1); retdata.Mode = 0xA4; UART_Answer_LightData(USART1 , &retdata); //V3.01 改伪随机长度,删除应答,原代码:UART_Answer_NoData(USART1); } } break; case 0xA3://V3.01 改伪随机长度,伪随机存储成功 UART_SendInbuff(RemoteDataPacket.TX_BUF , cmode); UART_SendInbuff(RemoteDataPacket.TX_BUF , 0x00); UART_SendInbuff(RemoteDataPacket.TX_BUF , 0x00); UART_SendInbuff(RemoteDataPacket.TX_BUF , 0x00); UART_SendInbuff(RemoteDataPacket.TX_BUF , 0x00); break; case 0xA4://V3.01 改伪随机长度,伪随机删除成功 UART_SendInbuff(RemoteDataPacket.TX_BUF , cmode); UART_SendInbuff(RemoteDataPacket.TX_BUF , 0x00); UART_SendInbuff(RemoteDataPacket.TX_BUF , 0x00); UART_SendInbuff(RemoteDataPacket.TX_BUF , 0x00); UART_SendInbuff(RemoteDataPacket.TX_BUF , 0x00); break; ``` #### 2026.1.19 用于照射器 #todo 照射器逻辑出光逻辑需要更新,,当STM32收到,第一包 #todo 1. 照射器出光前需要发送“外时统照射”指令,数据为“55 30 02 00 03 64” #todo 2. 照射器出光是会连续不断地发送 “55, 30 ,0F ,E5, XX” #todo 3. 照射器停止出光会发送唯一的一包数据为 “55,00,02,00,00,57 ” #todo 4. 需要STM32根据“55, 30 ,0F ,E5, XX”来进行判断是否出光中,需要根据“55,00,02,00,00,57 ”来进行判断是否关光/手动主动关闭 #### 2026.3.9 照射器程序增加 内外同步切换功能