stm8s串口奇偶校验学习笔记
特別注意:stm8的數據長度定義。
以前用過stm32的串口,不過用的時候一般都是調用庫函數,設置波特率,8位數據位,無校驗,1位停止位。傳輸過程中也沒有遇到過太多的問題,最近用stm8s,需要用到奇偶校驗(至于什么是奇偶校驗,網上資料很多),用了之后發現還是有些地方多需要注意的,下面把遇到的問題記錄下來。
一、了解串口數據幀格式
二、了解stm8s的串口
??查看stm8s參考手冊:
可以看出,在STM8S中M位所定義是幀長度,而不是數據位的長度!也就是說M位所定位的長度為“數據位+奇偶校驗位”個數的總和。當數據位為8位時,不使用奇偶校驗的時候,M的長度為8位;而要使用奇偶校驗的時候,M的長度應該為9位!所以編寫程序的時候不能簡單的只改變校驗位的設置;
三、程序
void?UART1_init(void) {UART1_CR2?=?0;UART1_SR?=?0;??//UART1_CR1=0x00;?//編程UART_CR1的M位來定義字長???//設置M字長,8位數據位?無校驗//UART1_CR3=0;????//在UART_CR3中編程停止位的位數??//1位停止位//UART1_CR1=0x16;?//編程UART_CR1的M位來定義字長???//設置M字長,8位數據位??8O1?奇校驗?????????????????????UART1_CR1=0x14;?//編程UART_CR1的M位來定義字長???//設置M字長,8位數據位???8E1?偶校驗UART1_BRR2?=?0x02;?????????//?設置波特率9600UART1_BRR1?=?0x68;?????????//?16M/9600?=?0x0682???????UART1_CR2?=?0x2C;?//?允許接收中斷,允許接收,允許發送?????設置UART_CR2中的TEN位來使能發送}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串口奇偶校验学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CFG_GCR全局配置寄存器设置
- 下一篇: STM8学习笔记---串口uart1