做自己的网站难不难,微信h5商城网站开发,wordpress 主题 结构,wordpress 读取pdf目录 一、实现测距二、添加TIM3控制LED根据距离以不同频率闪烁三、观察时序Modebus协议12路超声波雷达设计方案1. 系统架构设计2. 硬件设计3. 软件设计4. 通信协议设计5. 用户接口6. 安全和冗余7. 测试和验证8. 电源和物理封装9. 文档和支持 一、实现测距 
配置时钟  配置定时器… 目录 一、实现测距二、添加TIM3控制LED根据距离以不同频率闪烁三、观察时序Modebus协议12路超声波雷达设计方案1. 系统架构设计2. 硬件设计3. 软件设计4. 通信协议设计5. 用户接口6. 安全和冗余7. 测试和验证8. 电源和物理封装9. 文档和支持   一、实现测距 
配置时钟  配置定时器   
GPIO口  
配置串口   
#include SR04.huint32_t measure_Buf[3]  {0};   //存放定时器计数值的数组
uint8_t  measure_Cnt  0;    //状态标志位
uint32_t high_time;   //超声波模块返回的高电平时间
float distant;      //测量距离//读取距离
void SR04_GetData(void)
{
switch (measure_Cnt){case 0:TRIG_H;delay_us(30);TRIG_L;measure_Cnt;__HAL_TIM_SET_CAPTUREPOLARITY(htim2, TIM_CHANNEL_1, TIM_INPUTCHANNELPOLARITY_RISING);HAL_TIM_IC_Start_IT(htim2, TIM_CHANNEL_1);	//启动输入捕获       或者: __HAL_TIM_ENABLE(htim5);                                                                                    		break;case 3:high_time  measure_Buf[1]- measure_Buf[0];    //高电平时间printf(\r\n----高电平时间-%d-us----\r\n,high_time);							distant(high_time*0.034)/2;  //单位cmprintf(\r\n-检测距离为-%.2f-cm-\r\n,distant);          measure_Cnt  0;  //清空标志位TIM2-CNT0;     //清空计时器计数break;}
}//us延时函数void delay_us(uint32_t us)//主频72M
{uint32_t delay  (HAL_RCC_GetHCLKFreq() / 4000000 * us);while (delay--){;}
}//中断回调函数
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)//
{if(TIM2  htim-Instance)// 判断触发的中断的定时器为TIM2{switch(measure_Cnt){case 1:measure_Buf[0]  HAL_TIM_ReadCapturedValue(htim2,TIM_CHANNEL_1);//获取当前的捕获值.__HAL_TIM_SET_CAPTUREPOLARITY(htim2,TIM_CHANNEL_1,TIM_ICPOLARITY_FALLING);  //设置为下降沿捕获measure_Cnt;                                            break;              case 2:measure_Buf[1]  HAL_TIM_ReadCapturedValue(htim2,TIM_CHANNEL_1);//获取当前的捕获值.HAL_TIM_IC_Stop_IT(htim2,TIM_CHANNEL_1); //停止捕获   或者: __HAL_TIM_DISABLE(htim5);measure_Cnt;  }}} 
二、添加TIM3控制LED根据距离以不同频率闪烁 这里我只设置了两个速度小于10cm时0.2间隔闪烁大于10cm时0.5s间隔闪烁 主要代码实现 头文件 
#ifndef __SR04_H
#define __SR04_H
#include main.h
#include tim.h
#include stdio.h#define TRIG_H  HAL_GPIO_WritePin(Trig_GPIO_Port,Trig_Pin,GPIO_PIN_SET)
#define TRIG_L  HAL_GPIO_WritePin(Trig_GPIO_Port,Trig_Pin,GPIO_PIN_RESET)extern float distant;      //测量距离void delay_us(uint32_t us);
void SR04_GetData(void);#endif 
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{if(htim-Instance  TIM3){// 切换LED状态HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);}}int main(void)
{/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_TIM2_Init();MX_USART1_UART_Init();MX_TIM3_Init();/* USER CODE BEGIN 2 */__HAL_TIM_CLEAR_IT(htim3, TIM_IT_UPDATE);HAL_TIM_Base_Start_IT(htim3);	/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){//printf(\r\n----高电平时间--us----\r\n);							SR04_GetData();if (distant  10.0f) {// distant小于5设置定时器周期为0.2秒__HAL_TIM_SET_AUTORELOAD(htim3, 25000 - 1);//(uint32_t)(SystemCoreClock / 2) / 1000); // 假设系统时钟为SystemCoreClock} else {// distant大于等于5设置定时器周期为0.5秒__HAL_TIM_SET_AUTORELOAD(htim3, 50000-1);}// 重新启动定时器HAL_TIM_Base_Start_IT(htim3);HAL_Delay(1500);/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */
} 
三、观察时序 延时30us左右和代码中匹配  
Modebus协议 
Modbus协议是一种串行通信协议最初由Modicon公司现在的施耐德电气Schneider Electric在1979年发表用于可编程逻辑控制器PLC之间的通信。它已经成为工业领域通信协议的业界标准并且是工业电子设备之间常用的连接方式。Modbus协议的主要特点包括公开发表、无版权要求、易于部署和维护以及对供应商来说修改移动本地的比特或字节没有很多限制。 
Modbus协议允许多个设备大约240个连接在同一个网络上进行通信例如一个测量温度和湿度的设备并将结果发送给计算机。在数据采集与监视控制系统SCADA中Modbus通常用来连接监控计算机和远程终端控制系统RTU。Modbus协议存在用于串口、以太网以及其他支持互联网协议的网络的版本。大多数Modbus设备通信通过串口EIA-485物理层进行。 
Modbus协议有两种主要的串行通信变体Modbus RTU和Modbus ASCII。Modbus RTU采用二进制表示数据而Modbus ASCII则是人类可读的、冗长的表示方式。RTU格式的命令/数据带有循环冗余校验CRC的校验和而ASCII格式采用纵向冗余校验的校验和。Modbus Plus是Modbus的一个扩展版本但是它是Modicon专有的和Modbus不同。 
Modbus协议采用master/slave架构其中一个节点是master节点其他节点是slave节点每个slave设备都有一个唯一的地址。在串行和Modbus Plus网络中只有被指定为主节点的节点可以启动命令在以太网上任何一个设备都能发送Modbus命令但通常也只有一个主节点设备启动指令。 
Modbus命令包含了执行操作的设备的Modbus地址所有设备都会收到命令但只有指定地址的设备会执行及回应指令。Modbus命令还包括检查码以确保命令在传输过程中没有被破坏。基本的ModBus命令可以指令一个RTU改变寄存器的值、控制或读取I/O端口以及指挥设备回送其寄存器中的数据。 
Modbus协议是应用层报文传输协议定义了一个与物理层无关的协议数据单元PDUPDU由功能码和数据域组成功能码为1字节数据域长度不固定。Modbus RTU协议允许PLC和计算机之间通过串行线路交换信息并在建筑管理系统BMS和工业自动化系统中得到广泛应用。Modbus TCP是设计用于通过TCP/IP堆栈传输Modbus帧的协议通常通过以太网物理层传输。Modbus最初作为串行层传输数据的应用级协议现在也可以通过TCP/IP和UDP实现。 
12路超声波雷达设计方案 
设计一款12路车载超声波雷达系统使用STM32F103微控制器和HC-SR04超声波传感器模块同时提供RS485和Modbus协议的接口需要考虑以下几个关键方面 
1. 系统架构设计 
主控制器选择STM32F103系列微控制器作为主控单元因为它具有足够的GPIO、定时器和通信接口。传感器模块每个HC-SR04模块负责一个方向的测距共需要12个。 
2. 硬件设计 
GPIO配置为每个HC-SR04配置一对GPIO用于TRIG和ECHO信号。定时器使用STM32的定时器来精确测量HC-SR04的回波时间。RS485通信使用STM32的USART接口配置为RS485以实现数据的串行通信。Modbus协议栈集成Modbus协议栈来处理Modbus RTU或TCP通信。电源管理确保系统有稳定的电源供应并考虑电源防反接和过压保护。物理布局合理布局12个传感器确保覆盖车辆周围所有必要的监测区域。 
3. 软件设计 
驱动程序编写HC-SR04超声波传感器的驱动程序实现距离测量。Modbus协议实现实现Modbus RTU协议处理功能码响应数据读取和写入请求。RS485通信实现RS485通信接口确保数据传输的可靠性。任务调度设计任务调度程序合理分配CPU时间给各个传感器的测量任务。数据融合设计算法对12路传感器数据进行融合处理提供更准确的车辆周围环境信息。 
4. 通信协议设计 
Modbus功能码定义Modbus功能码实现对每个传感器的独立控制和数据读取。数据帧格式设计Modbus数据帧格式包括设备地址、功能码、数据寄存器地址、数据长度和校验等。 
5. 用户接口 
配置界面提供一种方式如串口命令行、图形界面等来配置设备参数例如传感器校准、Modbus地址等。 
6. 安全和冗余 
故障检测实现故障检测机制当某个传感器失效时能够及时报警。数据校验确保所有通信数据都有校验机制如CRC校验。 
7. 测试和验证 
单元测试对每个模块进行单元测试确保其功能正确。集成测试进行系统集成测试确保所有模块协同工作正常。环境测试在实际车辆上进行测试验证系统在不同环境下的性能。 
8. 电源和物理封装 
电源设计设计合适的电源方案包括电源转换和稳压。封装设计设计适合车载环境的封装确保系统的稳定性和耐用性。 
9. 文档和支持 
用户手册提供详细的用户手册包括安装、配置和故障排除指南。开发文档为二次开发提供API文档和开发指南。 
这个设计方案提供了一个基本的框架具体实现时还需要根据实际需求和环境进行调整和优化。