资源简介
在STM32 开发平台中对Modbus RTU协议在串口中的代码实现,包含主站接收协议,从站接收协议,从站各功能码应答协议。
代码片段和文件信息
#include “includes.h“ //ucos 使用
#include “hal_usart.h“
#include “hal_sys.h“
#include “hal_delay.h“
#include “stdarg.h“
#include “stdio.h“
#include “string.h“
#include “Protocol.h“
#include “SlaveRTU.h“
#include “MasterRTU.h“
#include “OLED0_96.h“
/*****************************************************************************
包含的函数:
1、void USARTx_BufferType_RestMark(USARTx_BufferType *USART_Bufferu8 mode); 初始化结构体 中接收 发送参数
2、void USARTx_StructInit(USART_TypeDef *USARTx); 初始化结构体中 波特率 及接收发送函数
3、void USARTx_Init_Config(USART_TypeDef *USARTx); 初始化串口
4、void USARTx_Protocol_Send(USART_TypeDef *USARTxUSARTx_BufferType * USARTx_Buffer); 串口数据发送
5、void USART_Printf(USART_TypeDef *USARTxchar *fmt...); 打印函数
6、void USART1_IRQHandler(void)
7、void USART2_IRQHandler(void)
8、void USART3_IRQHandler(void) 中断服务函数
9、void USARTx_Data_Processing(USART_TypeDef *USARTxUSARTx_BufferType * USARTx_Buffer); 数据处理函数
*****************************************************************************/
#if (USART1_ENABLE == 1)
USARTx_BufferType USART1_Buffer;
#endif
#if (USART2_ENABLE == 1)
USARTx_BufferType USART2_Buffer;
#endif
#if (USART3_ENABLE == 1)
USARTx_BufferType USART3_Buffer;
#endif
/**
* @brief 清除 结构体的接收/发送缓存及接收/发送标志
* @param[in] USART_Buffer 接收发送数据结构体
* @param[in] mode: 初始化模式 |0x01 初始化接收缓存区
* |0x02 初始化发送缓存区
* |0x04 初始化接收长度
* |0x08 初始化发送长度
* @retval
*/
void USARTx_BufferType_RestMark(USARTx_BufferType *USARTx_Bufferu8 mode)
{
if(mode &0x01 )
{
memset(USARTx_Buffer->recvbuff0MODBUS_BUFF_LEN);
}
if(mode &0x02)
{
memset(USARTx_Buffer->sendbuff0MODBUS_BUFF_LEN);
}
if(mode &0x04)
{
USARTx_Buffer->Rcv_Cmpl = FALSE;
USARTx_Buffer->recv_size = 0;
}
if(mode&0x08)
{
USARTx_Buffer->send_size = 0;
}
USARTx_Buffer->recv_state = RECEIVE_1BIT;
}
/**
* @brief 串口初始化配置
* @param
* @retval
* 函数使用说明:
* 1、在初始化串口时 先对该函数的USART1/2/3 按照需求分别进行修改波特率参数及数据解析协议函数
*/
void USARTx_StructInit(USART_TypeDef *USARTx)
{
if(USARTx==USART1)
{
#if (USART1_ENABLE ==1)
USART1_Buffer.ByteTmp = 0;
USART1_Buffer.Rcv_Cmpl = FALSE;
USART1_Buffer.recv_size = 0;
USART1_Buffer.send_size = 0;
USART1_Buffer.ParamInit.Baud = 9600;
USART1_Buffer.ParamInit.DataBit = USART_WordLength_8b;
USART1_Buffer.ParamInit.Parity = USART_Parity_No;
USART1_Buffer.ParamInit.StopBit = USART_StopBits_1;
USART1_Buffer.USART_Timer = (u32)(20000/ USART1_Buffer.ParamInit.Baud) +1;
/************* 发送 接收 数据处理 函数重新映射到结构体 ******************/
USART1_Buffer.Protocol_Receive = &(SlaveRTU_Protocol_Receive);
// USART1_Buffer.Protocol_Send = &(UOCS_Protocol_Send);
USART1_Buffer.Data_Processing = &(SlaveRTU_Data_Processing);
#endif
}
else if(USARTx == USART2)
{
#if (USART2_ENABLE == 1)
USART2_Buffer.ByteTmp = 0;
USART2_Buffer.Rcv_Cmpl = FALSE;
USART2_Buffer.recv_size = 0;
USART2_Buffer.
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2018-03-30 14:41 STM32串口各协议实现\
文件 16181 2018-03-22 17:34 STM32串口各协议实现\HAL_USART.c
文件 3928 2018-03-26 15:54 STM32串口各协议实现\HAL_USART.h
文件 9681 2018-03-22 17:33 STM32串口各协议实现\MasterRTU.c
文件 1361 2018-03-22 17:33 STM32串口各协议实现\MasterRTU.h
文件 3949 2018-03-22 17:16 STM32串口各协议实现\Modbus.h
文件 3825 2018-03-09 17:27 STM32串口各协议实现\O2SlaveRTU.c
文件 664 2018-03-09 17:25 STM32串口各协议实现\O2SlaveRTU.h
文件 14335 2018-03-22 17:33 STM32串口各协议实现\Protocol.c
文件 1441 2018-03-22 17:33 STM32串口各协议实现\Protocol.h
文件 21785 2018-03-28 17:37 STM32串口各协议实现\SlaveRTU.c
文件 1635 2018-03-28 17:37 STM32串口各协议实现\SlaveRTU.h
- 上一篇:轮廓提取(中心识别算法
- 下一篇:qt TCP多客户端通信
相关资源
- Modbus TCP/IP协议说明书
- QCOMV16 串口助手
- 声源定位程序
- labview modbus
- STM32-无刷直流电机控制器程序
- DSP28335中的SCI串口应用
- Altium designer STM32元件库
- SPWM波产生STM32F103 DMA
- STM32F103测频率
- STM32F103+DAC8552
- STM32 4*4按键
- STM32全系列芯片封装库,最齐全封装库
- 51单片机串口通信程序 含详细
- STM32F407最小系统板(SWD口)
- modbus 从站调试软件
- STM32F103C8T6 LCD12864 串行通信
- STM32驱动ht1621b显示LCD
- STM32 F4系列所有原理图及PCB封装库
- 特权sdram串口测试
- Modbus Poll
- mscomm串口通讯
- cubeMX视频教程stm32hal库函数cubemx实战讲
- SM_ARMV4I_V2.1.zip
- 串口和网口数据相互转发
- rs232串口通信编程大全
- SPWM逆变器stm32例程及电路图仿真.zip
- VxWorks下串口通信程序
- MPU6050(STM32 DMP).rar
- cc3200 tcp 串口透传
- 串口模拟器
评论
共有 条评论