建设银行招聘网站甘肃分行,关于协会网站建设的几点思考,网站商城建设合同范本,厦门杏林建设企业网站一、前言 本项目采用淘宝购买的STM32G031开发板#xff0c;板上预留了oled和LORA模块的IO#xff0c;一次性买了四套#xff0c;资料虽然质量不高#xff0c;但是覆盖面挺广#xff0c;有一定的学习价值。 实验目的是需要三个从机实现时间轴的一致#xff0c;考虑到现有环…一、前言 本项目采用淘宝购买的STM32G031开发板板上预留了oled和LORA模块的IO一次性买了四套资料虽然质量不高但是覆盖面挺广有一定的学习价值。 实验目的是需要三个从机实现时间轴的一致考虑到现有环境下的各种干扰希望做到1ms以内的误差。采用一个主机来完成对所有从机的时间校对减小上位机的任务同时也更符合后期调试的需要。 二、实现细节
1、定时器配置 每个单片机的时间轴采用定时器计数的方式来作为本地的时间轴。因为需要尽可能的提高精度所以采用了频率最高的TIM1做基准时钟128MHz采用计数周期最大的TIM2做计数时钟32bit。采用定时器级联的方式也就是手册中的TIM1作为TIM2的预分频最高可以实现约610.839小时的计数。 主从模式的配置需要注意几个点
首先是TIM1 作为基准时钟正常配置为周期计数即可如果需要PWM或者别的功能每个通道也都可以正常使用。 然后是计数配置这里设置向上计数装载值64000不分频开启自动装载其余部分默认即可。 TRGO部分开启第一个设置为更新时间触发就是满一个周期TIM2计数加1。
TRGO没有使用随意。 然后是TIM2 从模式选择外部时钟Trigger Source的选择具体要查看数据手册这里放一张截图 在数据手册定时器寄存器讲解部分可以找到这个图需要选择对应的通道这里选择IRT0。 计数配置如下 TRGO部分用不到关闭即可。 本实验将两个定时器的满装载值定为64000和172,800,000TIM1一个周期0.5msTIM2一个周期24小时。 2、LORA配置 lora模块采用的是Ebyte的E22-400T22D配置方面不做介绍可以使用上位机配置也可以根据官方的数据手册配置模块的寄存器。 本实验采用的配置为
主机地址为0xFFFF实现广播和监听
从机地址0x03~0x05
网络地址0x17
波特率115200配置寄存器时只能使用9600
透传模式
空中速率19.2k
频率信道60
以上配置仅作参考读者需要根据实际需要进行调整。 注意M0和M1配置引脚的使用lora芯片内部默认上拉传输模式时两个引脚都需要接地。 实验采用单片机通过串口配置lora所以贴出指令
//主lora模块地址固定为0x01其余保持默认值。C0起始地址长度参数
//网络地址Cmd_Set_board[5]和信道控制Cmd_Set_board[8]可自行指定
const uint8_t Cmd_Set_master_board[12]{0xC0, 0x00, 0x09, 0xff, 0xff, 0x17, 0xe5, 0x00, 0x50, 0x00, 0x00, 0x00}; 3、时间同步 同步方式采用最简单的双向交互具体流程如下
1主机发送时间同步请求并记录当前时间
2从机收到后立即做出应答
3主机收到应答计算发送时间与当前时间的误差将偏移后的时间发送至从机。 发送时间的方式是直接将两个定时器的计数值作为数据通过lora发送通过一些固定位来作为标志位来辨别是哪一帧数据哪一个从机的数据是否是有效数据。 本实验方法较为简单有很多可以优化的流程另外时间偏移的计算也可以放到从机。
具体实现细节读者可以自行设计本实验的方法最后会贴出代码作为参考也希望各位读者给出修改意见提高同步精度。 4、oled刷新 由于之前的单片机项目屏幕刷新几乎不会做太多文章。由于时间精度的需要采用延时的方法已将无法达到要求。 尝试过放在定时器溢出中断来做刷新可是刷新还是比较耗时影响定时器效率于是采用标志位的方式把oled刷新放到主函数但是这样代码难免会有所冗余。 最后是采用读取定时器计数值的方式每隔50ms刷新一次这样也能保持时间同步之后的刷新一致。 三、实验结果 测试方式根据本地时间轴每隔50ms开关一次引脚测量所有开发板的引脚波形最后实测能够达到主从1ms误差从设备0.5ms左右。 四、最后 实验将主从模块一起开发通过main.h文件的开关切换主从代码。 实验中有很多细节没有提到描述也比较简单应该是我太懒了哈哈哈哈各个模块之间耦合比较多没有办法拆开一个个细说还请读者在源码中查看。 代码根据CubeMX生成添加了delay延时和uart驱动可以作为STM32G031的例程模板来开发代码风格是学习的正点原子应该适合大家的阅读习惯。 更新 代码将TIM2部分换成了变量计数好像精度提高了还有细节部分的更改以下是gitee链接
stm32: 一些stm32模块使用经验记录 - Gitee.comhttps://gitee.com/lrf1125962926/stm32/tree/Time_Sync/