資源簡介
在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
- 上一篇:輪廓提?。ㄖ行淖R別算法
- 下一篇:qt TCP多客戶端通信
評論
共有 條評論