1. 程式人生 > >移植Modbus到STM32F103(4):串列埠資料長度和校驗的支援

移植Modbus到STM32F103(4):串列埠資料長度和校驗的支援

浪費了“黃金五年”的Java程式設計師,還有救嗎? >>>   

移植Modbus到STM32F103(2):移植FreeModbus到usart3並執行示例程式碼裡,為了方便,沒有移植資料位和校驗位。這兩個其實是很容易移植的。

先說資料位,官方宣稱STM32F103支援8位和9位資料位,但因為其把校驗位也算為資料位,所以其實能支援的是帶校驗位的7位、8位資料位和不帶校驗位的8位、9位資料位。所以只要在串列埠初始化中做如下判斷即可:

    if ( ( ucDataBits == 7 ) && ( eParity != MB_PAR_NONE ) )
    {
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;
        is_7databits = 1;
    }
    else if ( ( ucDataBits == 8 ) && ( eParity == MB_PAR_NONE ) )
    {
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;
        is_7databits = 0;
    }
    else if ( ( ucDataBits == 8 ) && ( eParity != MB_PAR_NONE ) )
    {
        USART_InitStructure.USART_WordLength = USART_WordLength_9b;
        is_7databits = 0;
    }

這裡多了一個靜態全域性變數is_7databits,原因是STM32F103的串列埠工作在帶校驗位的7位資料位時,DR暫存器的最高位也會被讀入,這樣可能會造成資料錯誤。所以要把讀取串列埠的程式碼也修改一下:

static is_7databits  = 0;

BOOL
xMBPortSerialGetByte( CHAR * pucByte )
{
    /* Return the byte in the UARTs receive buffer. This function is called
     * by the protocol stack after pxMBFrameCBByteReceived( ) has been called.
     */
    char temp;
    temp = USART_ReceiveData(USART3);
    *pucByte = is_7databits ? ( temp & 0x7F ) : temp ;
    return TRUE;
}

校驗位更簡單,只要用一個帶引數的巨集即可:

/* ----------------------- Modbus parity to stm32 parity --------------------*/
#define usartParity(eParity) ( ( eParity == MB_PAR_NONE ) ? USART_Parity_No : ( ( eParity == MB_PAR_EVEN ) ? USART_Parity_Even : USART_Parity_Odd ) )

修改demo.c、mbascii.c和mbrtu.c,然後用Modbus Poll驗證一下,應該沒問題了。

相關推薦

移植Modbus到STM32F1034串列資料長度支援

浪費了“黃金五年”的Java程式設計師,還有救嗎? >>>   

軟體安裝集合linux訪問telnetnc安裝使用

一、實現功能 兩個linux常用的埠資料傳送軟體的安裝和配置 二、安裝和配置 1.telnet (1)安裝 yum -y install telnet (2)使用 telnet ibeifeng.com 44444 2.nc (1)安裝 yum inst

Mybatis學習4Mybatis及PageHelper外掛easyUI實現分頁

前言 很多專案中需要將資料庫中的所有資料分頁展示出來,這樣的技術有很多。今天我們來介紹如何使用Mybatis及其PageHelper外掛和前端easyUI實現資料庫資訊分頁展示。 正文 一,easyUI 其實我對前端js一點都不瞭解,但是為了做專案硬

spring boot學習06Redis 實現資料快取 Session 共享

前言 前面我們學習了redis的基本使用,我們知道redis最常用的應用場景,就是資料快取和session共享,Spring Boot 針對這兩個場景都做了一些優化,讓我們在實際專案中使用非常的方便。 資料快取 使用 Redis 做為資料快取

TI OMAPL138E Linux移植 (Davinci) 資源獲取+從串列啟動UBoot+從網路啟動Linux與檔案系統

Date: 2018-02-08【1、從實際硬體上獲取主晶片型號為TI的OMAPL138E 】,所屬系列為OMAPL1,編譯預設配置為davinci或者da850。《以下內容失效》《《《2、登陸TI官方WiKi網站wiki.ti.com,在網頁下方找到General Info

資料結構4連結串列的原理實現

上、簡單的單端連結串列 完整程式碼向下拉 連結串列是一種常用的資料結構,在插入和移除操作中有著優秀的表現,同為資料結構的陣列哭暈,其實陣列的訪問效率比連結串列高多了有木有。 我們先看一下連結串列的樣子 有同學可能要說了,這不就是我們生活中的交通工具——火車,沒錯連結串列的結構和下圖簡直就是一個模子刻出來的

Swift學習筆記4字符串

min mes 不同的 常用方法 dice 內存空間 全部 there logs 目錄: 初始化 常用方法或屬性 字符串索引 初始化 創建一個空字符串作為初始值: var emptyString = "" // 空字

十四Hibernate中的多表操作4單向一對一

odin utf-8 lds () clas string 方式 rdb style 案例一: 註解方式實現一對一 UserBean.java package bean; import java.io.Serializable; import javax.pers

Akka4 Routers - 智能任務分配

相同 pac 線程 文件內容 fun bool fib can ceil Actor模式最大的優點就是每個Actor都是一個獨立的任務運算器。這種模式讓我們很方便地把一項大型的任務分割成若幹細小任務然後分配給不同的Actor去完成。優點是在設計時可以專註實現每個Ac

springBoot4日誌配置-logback

springboot 日誌配置-logback和log4j2 一、簡介支持日誌框架:Java Util Logging, Log4J2 and Logback,默認是使用logbacklogback配置方式spring boot默認會加載classpath:logback-spring.xml或者cl

使用bottle進行web開發4HTTPError

instead bject hat red uil tle ott class not from bottle import error @error(404) def error404(error): return ‘Nothing here, sorry‘

Java學習4統計一個文件中的英文,中文,數字,其他字符以及字符總數

port let args str reader 文件路徑 要求 cnblogs pub 要求:統計一個文件中的英文,中文,數字,其他字符以及字符總數(此隨筆以txt文件為例) import java.io.BufferedReader; import java.io.F

python基礎4條件語句與循環語句

語句 單分支 繼續 目的 輸入 代碼 原則 src 分享 今天我們看看條件語句與循環語句。 預習: 1、使用while循環輸出1 2 3 4 5 6 8 9 10 2、求1-100的所有數的和 3、輸出 1-100 內的所有奇數 4、輸出 1-100 內的所有偶數 5、求1

轉每天一個linux命令4mkdir命令

指定位置 cnblogs 同名 parent --help pos uri 不存在 必須 linux mkdir 命令用來創建指定的名稱的目錄,要求創建目錄的用戶在當前目錄中具有寫權限,並且指定的目錄名不能是當前目錄中已有的目錄。 1.命令格式: mkdir [選

軟工作業4用戶體驗分析——以 “師路南通網站” 為例

學員 androi blog 賬號 移動 用戶登錄 自動 二維 資源獲取 用戶體驗分析:以 “師路南通網站” 為例 一、目標 (1)針對師路南通,開展UX分 PS:對比另外2個學習網站(學生安

設計模式六大原則4接口隔離原則

說明 兩個 復雜 試圖 所有 類圖 系統 客戶端 face 定義:客戶端不應該依賴它不需要的接口;一個類對另一個類的依賴應該建立在最小的接口上。 問題由來:類A通過接口I依賴類B,類C通過接口I依賴類D,如果接口I對於類A和類B來說不是最小接口,則類B和類D必須去實現他

.Net Core建站4FTP發布項目及連接服務器數據庫

release -h 繼續 body 網站名 targe 防火墻 down 生成 總感覺,今天(2018-1-14)下午寫不完這篇,雖然蠻簡單,只是點點點,,, 主要是記錄兩個, 1.連接服務器的數據庫 2.項目FTP發布到服務器 使用數據庫:SQL Serv

Linux自學筆記4Linux獲取幫助的命令詳解

Linux獲取幫助的命令詳解 man linux命令幫助的獲取 外部命令:都有一個可執行程序,位於文件系統都目錄下; echo (COMMAND) 內部命令: help COMMAND 外部命令幫助:(1)幫助手冊 COMMAND --help # COMMAND -

《Linux學習並不難》Linux字符界面4重啟Linux系統之reboot命令

Linux 重啟 3.4 《Linux學習並不難》Linux字符界面(4):重啟Linux系統之reboot命令reboot的工作過程與halt相似,不過reboot是引發計算機重啟﹐而halt是引發計算機關閉。它的選項與halt相似。命令語法:reboot [選項] 命令中各選項的含義如

《Linux學習並不難》文件/目錄管理4cd命令更改工作目錄路徑

Linux cd 7.4 《Linux學習並不難》文件/目錄管理(4):cd命令更改工作目錄路徑使用cd命令可以更改用戶的工作目錄路徑。工作目錄路徑可以使用絕對路徑名或相對路徑名,絕對路徑從/(根)開始,然後循序到所需的目錄下,相對路徑從當前目錄開始。命令語法:cd [選項] [目錄]命令中各選項的