# UWB_STM32_BASE_STATION **Repository Path**: HaveALitttleSao/uwb_stm32_base_station ## Basic Information - **Project Name**: UWB_STM32_BASE_STATION - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2021-08-16 - **Last Updated**: 2022-11-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README /*开发前必看*/ /*开发前必看*/ /*开发前必看*/ 重要的事情说三遍!!! git协同开发基本操作。 ——step1:每次提交新版本之前先查看 git status,观察仓库中的修改信息 git status ——step2:将自己想要提交的修改通过git add xxx.xx xxx.xx 添加进来 git add xxx.xx xx.xx 注:xxx.xx和xx.xx为要提交的修改,不同文件中间用空格隔开。 ——step3:添加完想要提交的修改后,将不想提交的修改恢复。可以直接用git restore . git restore . 注:最后的 “.”表示将所有剩余的修改恢复。 同样也可以先将不要的提交restore,然后用add .提交剩余想要的修改。根据实际情况灵活使用 ——step4:将所有添加的修改提交到本地仓库 git commit -m "type:content" 注:type有四种,表示本次提交的类型。content是对本次提交的简单叙述,用中文简洁表述即可 type的类型: feat:添加了功能模块 fix:修复原有的某个bug或者问题 perf:提高了原有模块的性能或者实现了某项优化 dele:删除了某个模块或某项内容 ——step5:将远程仓的版本兼容合并到本地仓。 git pull --rebase origin master 注:origin是远程仓的名字,通常是origin,根据实际情况修改 master是远程仓的分支,通常是master,根据实际情况修改 注:下拉后若没有出现冲突即不出现 (master/REBASE(X/X)),则直接跳到第6步 若出现了冲突,则X代表的是冲突的文件数量。此时输入git status即可看到冲突的具体文件。 打开这几个文件,查找冲突位置,即以下标志位置 >>>>>>>>>>>>>>>>>>>HEAD /*这部分是你修改后的内容*/ >>>>>>>>>>>>>>>END >>>>>>>>>>>>>>>>>>>>xxxxxxxxxxxxxx /*这部分是你小伙伴修改后的内容*/ >>>>>>>>>>>>>>>END 通过和小伙伴的沟通决定最终的版本的内容后,将这些提示内容删除,即 >>>>>>>>>>>>>>>>>>>HEAD >>>>>>>>>>>>>>>>>>>>xxxxxxxxxxxxxx >>>>>>>>>>>>>>>END 在把所有冲突文件处理完成后。回到git bash中,进入第六步 ——step6:完成git rebase git rebase --continue 注:此时输入git log 会发现你已经将远程仓的版本合并到你的仓库里并且你刚才的提交是最新的版本。这个时候你就可以进入第七步最后一步 ——step7:推送到远程仓 git push origin master 此时基本没有问题可以完成整个协同开发的推送工作。 如果发现rebase异常也可以考虑终止掉rebase git rebase --abort 这样操作后会恢复到你下拉兼容远程仓之前的版本。 /****************程序编写规范****************/ 1、变量命名:用下划线小写的方式 user_variable 2、函数命名:用下划线大写的方式 User_Function(),其中参数命名同变量命名规定一致。 注:在遇到需要长函数命名时可以适当采取大驼峰命名方式缩短长度。例如,UserLongTerm_Function(),原则上是词性连贯,通俗易懂 3、宏定义命名:用下划线全大写的方式 USER_DEFINE 4、自定义结构体/枚举命名方式:用大驼峰+_TypeDef的格式,例如 UserDefineStruct_TypeDef 5、函数指针命名方式,用大驼峰+_Fn的格式,例如 UserFunctionPtr_Fn 6、命名原则要采用英语释义,不可用拼音,防止产生误解。采用缩写时原则上需要进行注释解释并用通用的缩写方式,例如control-ctrl 7、编写程序时多写清晰的注释,设计接口函数时反馈结果,传入参数多采用指针或引用的方式。动态开辟内存必须在结束前释放。 /****************程序编写规范****************/ /****************定位帧格式****************/ UWB帧格式 | control frame | sequence number | destination id | destination address | source address | payload | | 0x8144 | 1byte | 2bytes | 2bytes | 2bytes | 119bytes | payload内容格式 | type | length | content | | 1bytes | 1bytes | length bytes | enum { MEASURE_PROCESS_FRAME = 0x0, /*the frame which contain the x y position*/ MEASURE_RESULT_FRAME = 0x1, /*the frame which contain the timestamp and x y position*/ SEARCH_DEVICE_FRAME = 0x2, RESPONSE_DEVICE_FRAME = 0x3, TWINKLE_LIGHT_CMD = 0x4, ACK = 0x5, PING = 0x6, SET_POSITION = 0x7 }; type的具体值,需所有单位统一 重要的事情说三遍,x_pos 和 y_pos 的单位是cm 重要的事情说三遍,x_pos 和 y_pos 的单位是cm 重要的事情说三遍,x_pos 和 y_pos 的单位是cm 重要的事情说三遍,x_pos 和 y_pos 的单位是cm 1.测距过程中的帧 type = MEASURE_PROCESS_FRAME, length = 4, content: | x_pos(uint16_t) | y_pos(uint16_t) | 2.测距完成的帧 type = MEASURE_RESULT_FRAME, length = 19, content: | resp_rx_ts(5bytes) | resp_tx_ts(5bytes) | final_tx_ts(5bytes) | x_pos(uint16_t) | y_pos(uint16_t) | 3.设备搜索的帧 (destination id = 0xffff,destination address = 0xffff)广播包 type = SEARCH_DEVICE_FRAME, length = 0; content:NONE; 4.响应设备搜索的包 (destination id = 接收到上一帧的源地址,destination address = 接收到上一帧的源地址),即终端基站的地址 type = RESPONSE_DEVICE_FRAME, length = 6 + tag_cnt*6; content: | x_pos(uint16_t) | y_pos(uint16_t) | tag_cnt (uint16_t ) | tag1_address(uint16_t) | tag1_xpos(uint16_t) | tag1_ypos(uint16_t) | .... | tagn_ypos(uint16_t) | 5.闪灯命令包 type = TWINKLE_LIGHT_CMD length = 3, content:destination_address(uint16_t) | is_tag_flag(uint8_t) | 6.ACK包 type = ACK, length = 3, content: ack_type(uint8_t) 7.ping包 type = PING, length = 0, content:NONE 8.设置基站坐标信息包 type = SET_POSITION length = 4 content:x_pos(uint16_t) | y_pos(uint16_t) /****************定位帧格式****************/ /****************串口通信格式****************/ 1.上位机-->终端基站:设备搜索包 {长度,aa,bb} 2.终端基站-->上位机:设备搜索包回应包 {本帧数据的长度;基站数量;(第一个基站的信息)|(第二个基站的信息)|;标签数量;(第一个标签的信息)|(第二个标签的信息)|} 说明:基站和标签的信息包括 地址、信道 、坐标、LED闪烁情况;{}大括号是帧头帧尾 例子:{20;3;(83,7,43,562,0)|(263,4,123,464,1)|(674,1,523,311,1)|;1;(123,2,342,465,0)|} 3.终端基站-->上位机:其他设备响应包 [类型,地址,x坐标,y坐标,LED情况] 说明:[]为帧头和帧尾 例子: [0,0x0022,642,213,0] //第一个0代表基站,倒数第二位的0代表LED灭 [1,0x00c5,261,663,1] //第一个1代表基站,倒数第二位的1代表LED灭 4.基站坐标设置 {长度,地址,x,y} 例子: {21,02a2,00123,00234} 21代表数据长度 02a2代表要设置的基站地址0x02a2 00123代表设置的x坐标 不够5个补5个 00234代表设置的y坐标 不够5个补5个 /****************串口通信格式****************/