资源简介

在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

评论

共有 条评论