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串口奇偶校验学习笔记相关推荐
- 合泰HT32 淘晶驰TJC--T0串口屏学习笔记
串口屏开发环境搭建 串口屏的优点就不用多说了,用过的老师傅都说好! 开发专用上位机软件下载:传送门主要用来设计屏幕界面的,简单方便. 1.软件安装好后点击新建工程 2.选择你需要存放的目录,输入文件名 ...
- 合泰HT32--淘晶驰TJC--T0串口屏学习笔记(二)
前言 经过上一次的串口屏学习,实现了单个页面的控件操作显示,但依旧还存在着许多需要解决的问题和优化的地方. 这次呢,主要实现串口屏多页面显示,及对应UI组件的控制. 上一篇串口屏链接:合泰HT32 & ...
- C#串口通信学习笔记
因为参加一个小项目,需要对继电器进行串口控制,所以这两天学习了基本的串口编程.同事那边有JAVA的串口通信包,不过是从网上下载的,比较零乱,难以准确掌握串口通信的流程和内含.因此,个人通过学习网上大牛 ...
- STM32F767串口通信学习笔记
STM32F767的串口使用,需要先开启串口时钟,再设置对应的IO模式,然后配置一下波特率,数据位长度,奇偶校验位信息就可以使用了. 基础知识 STM32F767IGT6 最多可提供 8 路串口,支 ...
- 合泰HT32F52352串口通信学习笔记
HT32F52352芯片资料 作为一个开发者,学会找 / 看芯片资料很重要!找资料最好的方法就是直接在官网找. 比如想找ht32f52352芯片的资料可以直接在合泰的官网下载.https://www. ...
- linux下串口通信详解,Linux操作系统下的串口通信学习笔记
http://www.diybl.com/ 2008-7-5 网络 点击: [ 评论 ] - - 文章搜索: [点击打包该文章] [本站开通在线QQ讨论群] CBAUDEX (不属于POSIX ...
- JAVA串口开发学习笔记1
1.下载java Communications api开发包. 2.将win32com.dll拷贝入C:\j2sdk1.4.2_04\bin 3.将comm.jar拷贝入C:\j2sdk1.4.2_ ...
- IMX6ULL学习笔记(20)——UART串口使用
一.UART简介 i.MX6U 芯片具有多达 8 个 UART 外设用于串口通讯,UART 是在 USART 基础上裁剪掉了同步通信功能,只支持异步通信.简单区分同步和异步就是看通信时需不需要对外提供 ...
- C# 学习笔记(15)自己的串口助手----波形显示
C# 学习笔记(15)自己的串口助手----波形显示 chart控件 chart控件共有5大集合,最重要的两个集合就是绘图空间和线 坐标系 坐标系的设置在绘图空间集合内 设置坐标系样式 框选放大功能 ...
最新文章
- spring--(14)利用注解建立bean与bean之间的关系
- android 源码各版本下载 原生纯净版
- 数据库死锁_死锁荔枝_解决方法
- 安卓--selector简单使用
- Java实训项目2:GUI学生信息管理系统 - 系统概述
- esb接口测试_接口测试用例.docx
- 为什么一般hashtable的桶数会取一个素数
- 服务器电源维修哪里便宜,服务器电源维修
- Etherpad配置及管理功能
- matlab simulink 过程控制,[转载]MATLAB/Simulink与过程控制系统
- html英文期刊参考文献,外文期刊参考文献标准格式
- Spring之Bean作用域
- Capte4 布朗运动和伊藤公式
- (三)五款常用的java开发工具(快来看看吧)
- iOS 15 更新,图标改版
- 传奇私服服务端制作详细教程
- Android 实现扫描二维码功能
- Python学习手册之控制结构(二)
- 【练习】获取新浪搜索中的热搜榜的标题
- 【杂】孔明锁6根解法 九连环的拆卸方法及还原
热门文章
- 不改表结构如何动态扩展字段
- springboot整合flowable
- Unix目录结构的来历
- JPA 一对一设置无效,连表查询的时候另外一个实体类的对象值为空
- linux 当前活动用户,如何在Linux上自动记录所有用户的终端会话活动
- java实现责任链模式_我的Java设计模式-责任链模式
- java2d游戏代码_Java 2D游戏图形
- 今年美国数据中心投资规模超182亿美元 超前三年总和
- 独立按键控制数码管c语言,各位大佬,独立按键控制数码管为什么按下的时候要加一呢?...
- ML之FE:基于BigMartSales数据集利用Featuretools工具实现自动特征工程之详细攻略daiding