例程下載: 資料包括程序、相關說明資料以及軟件使用截圖
百度雲盤:https://pan.baidu.com/s/1slN8rIt 密碼:u6m1
360雲盤:https://yunpan.cn/OcPiRp3wEcA92u密碼 cfb6
(硬石YS-F1Pro開發板HAL庫例程持續更新\6. 軟件設計之Modbus(HAL庫版本)\YSF1_HAL_freemodbus_001. freemodbus移植) /** ****************************************************************************** * 硬石YS-F1Pro開發板例程功能說明 * * 例程名稱: YSF1_HAL_freemodbus_001. freemodbus移植 * ****************************************************************************** * 說明: * 本例程配套硬石stm32開發板YS-F1Pro使用。 * * 淘寶: * 論壇:硬石電子社區 * 版權歸硬石嵌入式開發團隊所有,請勿商用。 ****************************************************************************** */
【1】例程簡介 它是一個針對嵌入式應用的一個免費(自由)的通用MODBUS協議的移植。Modbus是一個工業 制造環境中應用的一個通用協議。Modbus通信協議棧包括兩層:Modbus應用層協議,該層定義 了數據模式和功能;另外一層是網絡層。
【2】跳線帽情況 ******* 為保證例程正常運行,必須插入以下跳線帽 ********** 絲印編號 IO端口 目標功能引腳 出廠默認設置 JP1 PA10 TXD(CH340G) 已接入 JP2 PA9 RXD(CH340G) 已接入 CN6 PB10 TX(SP485E) 未接入 CN6 PB11 RX(SP485E) 未接入 【3】操作及現象 使用兩根導線連接兩個開發板上的CN7接收端子,對應連接“A -- A”和“B -- B”,使用開發板配 套的MINI USB線連接到開發板標示“調試串口”字樣的MIMI USB接口(需要安裝驅動),在電腦端打 開串口調試助手工具,設置參數為115200 8-N-1。下載完程序之后,在串口調試助手窗口可接收到信 息。 /******************* (C) COPYRIGHT 2015-2020 硬石嵌入式開發團隊 *****END OF FILE****/
main.c文件內容
- /**
- ******************************************************************************
- * 文件名程: main.c
- * 作 者: 硬石嵌入式開發團隊
- * 版 本: V1.0
- * 編寫日期: 2015-10-04
- * 功 能: RS485雙機通信--從機設備實現
- ******************************************************************************
- * 說明:
- * 本例程配套硬石stm32開發板YS-F1Pro使用。
- *
- * 淘寶:
- * 論壇:http://www.ing10bbs.com
- * 版權歸硬石嵌入式開發團隊所有,請勿商用。
- ******************************************************************************
- */
- /* 包含頭文件 ----------------------------------------------------------------*/
- #include "stm32f1xx_hal.h"
- #include "usart/bsp_debug_usart.h"
- #include "RS485/bsp_usartx_RS485.h"
- #include "mb.h"
- #include "mbport.h"
- /* 私有類型定義 --------------------------------------------------------------*/
- /* 私有宏定義 ----------------------------------------------------------------*/
- #define REG_INPUT_START 0
- #define REG_INPUT_NREGS 4
- /* 私有變量 ------------------------------------------------------------------*/
- static USHORT usRegInputStart = REG_INPUT_START;
- static USHORT usRegInputBuf[REG_INPUT_NREGS];
- /**
- * 函數功能: 主函數.
- * 輸入參數: 無
- * 返 回 值: 無
- * 說 明: 無
- */
- int main(void)
- {
- /* 復位所有外設,初始化Flash接口和系統滴答定時器 */
- HAL_Init();
- /* 配置系統時鍾 */
- SystemClock_Config();
- /* 初始化串口並配置串口中斷優先級 */
- MX_DEBUG_USART_Init();
- printf("freemodbus 移植測試\n");
- RS485_USARTx_Init();
-
- eMBInit(MB_RTU, 0x01, 3, 9600, MB_PAR_NONE);
- /* Enable the Modbus Protocol Stack. */
- eMBEnable();
- /* 無限循環 */
- while (1)
- {
- (void)eMBPoll();
- }
- }
- eMBErrorCode eMBRegInputCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs )
- {
- eMBErrorCode eStatus = MB_ENOERR;
- int iRegIndex;
-
- printf("eMBRegInputCB\n");
- // 用作例子
- usRegInputBuf[0] = 0x11;
- usRegInputBuf[1] = 0x22;
- usRegInputBuf[2] = 0x33;
- usRegInputBuf[3] = 0x44;
- // 例子結束
-
- if((usAddress>=REG_INPUT_START)&&(usAddress+usNRegs<=REG_INPUT_START+REG_INPUT_NREGS))
- {
- iRegIndex=(int)(usAddress-usRegInputStart);
- while( usNRegs > 0 )
- {
- *pucRegBuffer++ = (unsigned char)(usRegInputBuf[iRegIndex]>>8);
- *pucRegBuffer++ = (unsigned char)(usRegInputBuf[iRegIndex]&0xFF);
- iRegIndex++;
- usNRegs--;
- }
- }
- else
- {
- eStatus = MB_ENOREG;
- }
- return eStatus;
- }
- eMBErrorCode eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs,eMBRegisterMode eMode )
- {
- printf("eMBRegHoldingCB\n");
- return MB_ENOREG;
- }
- eMBErrorCode eMBRegCoilsCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNCoils,eMBRegisterMode eMode )
- {
- printf("eMBRegCoilsCB\n");
- return MB_ENOREG;
- }
- eMBErrorCode eMBRegDiscreteCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNDiscrete )
- {
- printf("eMBRegDiscreteCB\n");
- return MB_ENOREG;
- }
- /******************* (C) COPYRIGHT 2015-2020 硬石嵌入式開發團隊 *****END OF FILE****/
復制代碼
|