?背景?
【modbus學習筆記】Modbus協議解析_modus協議中0.001如何解析-CSDN博客
?【Modbus學習筆記】stm32實現Modbus(從機)并移植_stm32 modbus數據處理-CSDN博客
繼上篇成功移植modbus從機例程之后,我要嘗試移植主機的程序。經提醒,可用野火的modbus代碼。
參考教程:
Modbus參考例程 — 野火產品資料下載中心 文檔https://doc.embedfire.com/products/link/zh/latest/package/modbus.html
支持板子:
例程介紹:
https://doc.embedfire.com/module/module_tutorial/zh/latest/Module_Manual/extend_class/modbus.html#
?其他教程(博主暫時沒看):
up主X西魚X的所有視頻,如:
【FreeRTOS+freemodbus(無BGM)】 https://www.bilibili.com/video/BV1LRUSYFET3/?share_source=copy_web&vd_source=0d3e505cd639f5fd61042ee6c87b2fd6
移植過程
配置
【例程配置】
引腳分配
? ? PA2 ? ? ------> USART2_TX
? ? PA3 ? ? ------> USART2_RX
? ?用定時器4
【我的工程】
引腳分配
? ? PA2 ? ? ------> USART2_TX
? ? PA3 ? ? ------> USART2_RX?
? ? PA1 ? ? ------> CON(485方向控制引腳)
? ?用定時器6
步驟
1. 在cubemx中配置通信引腳,定時器,打開中斷。
2. 將例程中的文件加入自己的,要對照工程加。
3. 運行,出現報錯后修改,以下是我運行過程中修改的地方,按記憶記錄,不一定完全。
改一:
mx生成的MX_USART2_UART_Init()里面沒有未知參數,要改。
改二:
USART2在cubemx配置的是同步,生成代碼后,去這個配置文件中把#define HAL_USART_MODULE_ENABLED ?的注釋解開,用到了這個庫的函數
改三:
因為void USART2_IRQHandler(void)在stm32f1xx_it和portserial_m都有,我選擇把stm32f1xx_it里面的注釋掉。
?改四:
我的定時器和例程用的不同,他用的4,我用的6,并且mx自動幫我配置了,所以要把porttimer_m里面的void TIM4_IRQHandler(void)注釋掉
?改五:
在mx生成的usart.h中添加引腳定義,另外我用到了485,需要打開485注釋,并且修改引腳,注意引腳方向。
改六:
?main.c文件中也要記得改。
運行結果
將程序下載到芯片后,打開modbus slave軟件連接。modbus上位機使用方法參考:Modbus測試工具ModbusPoll與Modbus Slave使用方法_modbuspoll中文版-CSDN博客
連接后,現象如圖。
點擊Display->Communication,可以看到通訊內容。