stm8s串口奇偶校验学习笔记

发布者:skyhcg最新更新时间:2017-10-24 来源: eefocus关键字:stm8s  串口  奇偶校验 手机看文章 扫描二维码
随时随地手机看文章

以前用过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;         // 设置波特率9600
    UART1_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  串口  奇偶校验 引用地址:stm8s串口奇偶校验学习笔记

上一篇:Keil中调试时Watch窗口变量不实时显示
下一篇:单片机程序下载方式ISP、IAP

推荐阅读最新更新时间:2024-03-16 15:41

STM32串口用中断还是用轮询
1.从轮询到中断 很多同学都不喜欢用中断,而偏爱用轮询的操作方式。 这是不是和我们的天性有关呢?每个人都喜欢一切尽在掌握中,肯定都不喜欢被打断。我们常常都有这样的经验:正在跟别人说一件事,然后突然有个电话打进来,Call打完后突然记不起来刚才讲到哪了!这种糟糕的体验对我们影响是如此深刻,以至于我们认定机器可能也是这样吧,频繁的中断会不会把事情搞乱呢?好在机器虽然大部分时间都比人笨一些,但在处理这种问题上却能做到一丝不苟。机器在中断来的时候总会老老实实地先把当前正在做的记录下来,然后转去处理中断事件,中断处理完后分毫不差地恢复原来的工作。 仔细想一想,我们是不是也可以在接电话前先用个小本儿记录一下正在讲的事情呢?我们为什么没有这么做
[单片机]
台达PLC+精研变频器串口485通讯详解
台达PLC和精研变频器通过串口进行485通讯,主从站控制详解#plc #电工 #自动化 #制造业 #电气
[嵌入式]
台达PLC+精研变频器<font color='red'>串口</font>485通讯详解
STM32学习:串口通讯
前言 本次通过CubeMx+proteus进行stm32串口仿真 具体功能: 1、开机后,向串口1发送“Welcome” 2、串口1接收字节指令“0xa1 ,打开LED1,回传“LED1 OPEN!” 3、串口1接收字节指令“0xa2 ,关闭LED1,回传“LED1 Close!” 4、在串口发送过程中,打开LED2作为发送数据指示灯 一、相关知识点 二、电路搭建与硬件配置 1、proteus电路搭建 1、COMPIM元件 作用:把仿真电路中的数字量映射到计算机的物理端口 接法:将stm32的TX与COMPIM的TX相连,RX与RX相连,而不是像实物那样交叉相连(RX连TX,TX连RX)。 2、VIRTUAL
[单片机]
STM32学习:<font color='red'>串口</font>通讯
STM8S-独立看门狗的应用
在编写程序时有时会出现死机或程序跑飞的情况,这时对系统有一定的影响,怎样让程序可以自行重启呢,STM8S中的看门狗就是实现这一功能的,用看门狗检测程序的执行,在看门狗的复位时间内进行喂狗,如果程序在某个地方出现问题,那么就不能及时的进行喂狗,这时系统就会重新启动,达到检测的目的。通过观察小灯的闪烁快慢可以看出系统是否复位。 程序如下: //软件环境:IAR FOR STM8 V1.0 //作者:Nicole //功能:STM8的独立看门狗应用 //日期:2010.11.04 #include iostm8s105c6.h #include stdio.h unsigned int i; //时钟配置 void CLK_C
[单片机]
STM32F10x 学习笔记之USART实现串口通讯
STM32F10x 系列单片机中都包含了USART 模块,所谓USART,就是通用同步异步收发器。通用同步异步收发器(USART)提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的外部设备之间进行全双工数据交换。它支持同步单向通信和半双工单线通信,也支持LIN(局部互连网),智能卡协议和IrDA(红外数据组织)SIR ENDEC规范,以及调制解调器(CTS/RTS)操作。它还允许多处理器通信。 从前面的介绍可知USART模块功能非常的强大。这里我只简单讲讲如何用USART模块来实现标准EIA-232 串口通讯。 用过单片机的人肯定都接触过串口,设置串口无非就是设置波特率、数据位、停止位、奇偶校验位。发送接收也就三种
[单片机]
STM32F10x 学习笔记之USART实现<font color='red'>串口</font>通讯
基于Linux的串口服务器设计
随着互联网的迅猛发展,在使用计算机进行网络互联的同时,各种家电设备、仪器仪表以及工业生产中的数据采集和控制设备也在逐步地走向网络化,以便共享网络资源。所以,在电子设备日趋网络化的今天,利用串口服务器来实现网络通信具有十分重要的意义。利用基于TCP/IP的串口数据流传输的实现来控制管理设备,无需投资大量的人力、物力即可完成对传统设备的管理、更换或者升级。 串口服务器的功能 串口服务器是一种通信协议转换器,它设有两类通信端口:一类是标准的RS232/422/485格式的串行端口,远程的RTU(远程终端设备)监控模块通过串行控制总线接入串口服务器的此类端口;另一类是以太网口,通过网线将串口服务器接入局域网的交换机等设备中。 串
[工业控制]
基于Linux的<font color='red'>串口</font>服务器设计
STM8S自学笔记-001 STM8简介
概述 STM8单片机的开发商是意法半导体(ST),于2009年推出。它具有3级流水线架构、性价比高、开发方便的等优点。根据应用场合的不同,分为三个系列:STM8S,STM8L和STM8A。   个人认为,STM8S的开发非常类似于STM32F,因而学好STM8S单片机非常有助于学习STM32。所以,先从STM8S入手,一点一点拨开它的“心”。   ST单片机的开发有两种方法:用库函数和用寄存器。   寄存器开发是最底层的,类似于51,优点是速度快,代码简洁,但难以阅读和理解。库函数是ST官方将某一功能所需的寄存器整合到一起后,提供给开发人员可直接使用的(含参)函数,而且库函数开发的阅读性非常好。所以,后面的程序实例以库函数
[单片机]
正点原子关于STM8S精确延时函数
已经写完了STM8S的系统文件(同stm32一样,包括sys.c,delay.c和uart.c三个文件) 这里先分享delay.c和delay.h. 本来想仿效STM32用一个定时器来做,无奈STM8S提供的是一个8位定时器,真是食之无味了... 算来算去,用这个8位的定时器横竖都不好做延时,用16位的定时器嘛又怕浪费.真不知道st的人怎么想的. 这个8位的基本定时器,连ucosii的滴答时钟都不好提供...(24Mhz下,最大只能1.3ms左右中断一次,16Mhz则是2ms左右) 难不成多次中断,触发一次任务切换? 所以,表示蛋疼的很,无奈只能想用汇编的方式来实现精确延时了. 研究了几天,终于小有成就.汇编写了一个us级
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved