stm8s串列埠奇偶校驗學習筆記

2021-08-21 04:32:19 字數 1024 閱讀 2832

特別注意:stm8的資料長度定義。

以前用過stm32的串列埠,不過用的時候一般都是呼叫庫函式,設定波特率,8位資料位,無校驗,1位停止位。傳輸過程中也沒有遇到過太多的問題,最近用stm8s,需要用到奇偶校驗(至於什麼是奇偶校驗,網上資料很多),用了之後發現還是有些地方多需要注意的,下面把遇到的問題記錄下來。

一、了解串列埠資料幀格式

二、了解stm8s的串列埠

可以看出,在stm8s中m位所定義是幀長度,而不是資料位的長度!也就是說m位所定位的長度為「資料位+奇偶校驗位」個數的總和。當資料位為8位時,不使用奇偶校驗的時候,m的長度為8位;而要使用奇偶校驗的時候,m的長度應該為9位!所以編寫程式的時候不能簡單的只改變校驗位的設定;

三、程式

void uart1_init(void)

1234567891011121314151617

注意事項:看stm8s的參考手冊,我們發現在狀態暫存器uart_sr中的bit0為pe,此標誌位指示奇偶校驗錯誤:pe=0,沒有校驗錯誤;pe=1,校驗錯誤。pe標誌位是在什麼情況下被清除的,我們在參考手冊可以看到:要清除pe標誌位,軟體要按以下操作順序進行執行:先讀取uart_sr,再讀取uart_dr。程需要對pe進行檢測,然後再判斷是否要接收,因為不管傳送方是什麼校驗方式或者無校驗,微控制器串列埠都是會接收到資料。 

比如我在傳送過程中遇到這樣的問題: 

傳送方:9600,n,8,1 (發出的資料位數為8)傳送乙個位元組 0xc5 1100 0101 

收方:9600,o,8,1 

接收方pe位為0,可以接到0xc5;此時傳送方的停止位被接收方當作校驗位,由於是奇校驗,而此時的校驗位為1,所以只有含有偶數個1的那些資料才能被正確收到。

在使用串列埠除錯工具時,要注意有些串列埠工具的奇偶校驗位不起作用,測試sscom42的校驗位可以使用!

STM8S 串列埠應用 UART2 STM8S105

少說話。多做事,下面是我驗證過沒有問題的串列埠傳送接受資料 使用mcu stm8s105c6 uart2 初始化時呼叫 gpio deinit gpiod configure pd5 6 gpio init gpiod,gpio pin 5,gpio mode in pu no it 傳送資料io ...

STM8s 串列埠接收不定長資料

usart rtx typedef usart1 rtx void uart1 initial void interrupt handler tim4 upd ovf irqhandler,23 gpio writereverse gpioc,gpio pin 4 tim4 clearitpendi...

STM32串列埠9位資料,無奇偶校驗

stm32和stm8的串列埠貌似都可以一次傳送9位資料,最近才注意到這個,在此記錄。一般不帶奇偶校驗位的串列埠資料 起始位 1 資料位 8 停止位 1 帶奇偶校驗位的串列埠資料 起始位 1 資料位 8 校驗位 1 停止位 1 如果資料位為9位,即 起始位 1 資料位 9 停止位 1 9位資料stm8...