特别注意: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串口奇偶校验学习笔记相关推荐

  1. 合泰HT32 淘晶驰TJC--T0串口屏学习笔记

    串口屏开发环境搭建 串口屏的优点就不用多说了,用过的老师傅都说好! 开发专用上位机软件下载:传送门主要用来设计屏幕界面的,简单方便. 1.软件安装好后点击新建工程 2.选择你需要存放的目录,输入文件名 ...

  2. 合泰HT32--淘晶驰TJC--T0串口屏学习笔记(二)

    前言 经过上一次的串口屏学习,实现了单个页面的控件操作显示,但依旧还存在着许多需要解决的问题和优化的地方. 这次呢,主要实现串口屏多页面显示,及对应UI组件的控制. 上一篇串口屏链接:合泰HT32 & ...

  3. C#串口通信学习笔记

    因为参加一个小项目,需要对继电器进行串口控制,所以这两天学习了基本的串口编程.同事那边有JAVA的串口通信包,不过是从网上下载的,比较零乱,难以准确掌握串口通信的流程和内含.因此,个人通过学习网上大牛 ...

  4. STM32F767串口通信学习笔记

    STM32F767的串口使用,需要先开启串口时钟,再设置对应的IO模式,然后配置一下波特率,数据位长度,奇偶校验位信息就可以使用了. 基础知识  STM32F767IGT6 最多可提供 8 路串口,支 ...

  5. 合泰HT32F52352串口通信学习笔记

    HT32F52352芯片资料 作为一个开发者,学会找 / 看芯片资料很重要!找资料最好的方法就是直接在官网找. 比如想找ht32f52352芯片的资料可以直接在合泰的官网下载.https://www. ...

  6. linux下串口通信详解,Linux操作系统下的串口通信学习笔记

    http://www.diybl.com/ 2008-7-5 网络 点击: [ 评论 ] - - 文章搜索:     [点击打包该文章] [本站开通在线QQ讨论群] CBAUDEX (不属于POSIX ...

  7. JAVA串口开发学习笔记1

    1.下载java Communications api开发包.  2.将win32com.dll拷贝入C:\j2sdk1.4.2_04\bin 3.将comm.jar拷贝入C:\j2sdk1.4.2_ ...

  8. IMX6ULL学习笔记(20)——UART串口使用

    一.UART简介 i.MX6U 芯片具有多达 8 个 UART 外设用于串口通讯,UART 是在 USART 基础上裁剪掉了同步通信功能,只支持异步通信.简单区分同步和异步就是看通信时需不需要对外提供 ...

  9. C# 学习笔记(15)自己的串口助手----波形显示

    C# 学习笔记(15)自己的串口助手----波形显示 chart控件 chart控件共有5大集合,最重要的两个集合就是绘图空间和线 坐标系 坐标系的设置在绘图空间集合内 设置坐标系样式 框选放大功能 ...

最新文章

  1. spring--(14)利用注解建立bean与bean之间的关系
  2. android 源码各版本下载 原生纯净版
  3. 数据库死锁_死锁荔枝_解决方法
  4. 安卓--selector简单使用
  5. Java实训项目2:GUI学生信息管理系统 - 系统概述
  6. esb接口测试_接口测试用例.docx
  7. 为什么一般hashtable的桶数会取一个素数
  8. 服务器电源维修哪里便宜,服务器电源维修
  9. Etherpad配置及管理功能
  10. matlab simulink 过程控制,[转载]MATLAB/Simulink与过程控制系统
  11. html英文期刊参考文献,外文期刊参考文献标准格式
  12. Spring之Bean作用域
  13. Capte4 布朗运动和伊藤公式
  14. (三)五款常用的java开发工具(快来看看吧)
  15. iOS 15 更新,图标改版
  16. 传奇私服服务端制作详细教程
  17. Android 实现扫描二维码功能
  18. Python学习手册之控制结构(二)
  19. 【练习】获取新浪搜索中的热搜榜的标题
  20. 【杂】孔明锁6根解法 九连环的拆卸方法及还原

热门文章

  1. 不改表结构如何动态扩展字段
  2. springboot整合flowable
  3. Unix目录结构的来历
  4. JPA 一对一设置无效,连表查询的时候另外一个实体类的对象值为空
  5. linux 当前活动用户,如何在Linux上自动记录所有用户的终端会话活动
  6. java实现责任链模式_我的Java设计模式-责任链模式
  7. java2d游戏代码_Java 2D游戏图形
  8. 今年美国数据中心投资规模超182亿美元 超前三年总和
  9. 独立按键控制数码管c语言,各位大佬,独立按键控制数码管为什么按下的时候要加一呢?...
  10. ML之FE:基于BigMartSales数据集利用Featuretools工具实现自动特征工程之详细攻略daiding