STM8--UART2

发布者:ArtisticSoul最新更新时间:2020-09-14 来源: eefocus关键字:STM8  UART2  起始位 手机看文章 扫描二维码
随时随地手机看文章

UART以一个起始位开始通信,起始方法是由TX引脚输出低电平。跟着起始位之后是要发送的8位或者9位数据,如果有奇偶校验则数据后面是奇偶校验的数据信息,最后是停止位,停止位可以设置为1,2,1.5个。


发送配置及单字节通信过程:

寄存器介绍:

控制寄存器 1(UART_CR1):

 控制寄存器 2(UART_CR2):

 

 

 

 

 

 控制寄存器 3(UART_CR3):

 

 

 波特比率寄存器 1(UART_BRR1):

 

 

 波特比率寄存器 2 (UART_B):

 

 

 状态寄存器(UART_SR):

 

 

 

 数据寄存器(UART_DR):

 

 使用流程:

1:设置数据长度,奇偶效验,停止位,中断使用等,操作寄存器为CR1,CR2,CR3,下面是我的串口配置代码。

/*urat2初始化*/

void uart2_init()

{

  UART2_CR1=0X14;//8数据,1奇偶效验,1停止,开启接收中断

  UART2_CR2=0X2c;

  UART2_CR3=0X00;

  UART2_BRR2=0X03;//波特率配置--9600

  UART2_BRR1=0X68;

}


2:发送数据:代码如下,很简单,就往寄存器里面写入数据即可。


        UART2_CR2&=0Xf7;

        UART2_DR=uart_put;//串口发送

        UART2_CR2|=0X08;

          while((UART2_SR&0X80)==0);//等待发送完成

3:接受输出:我使用了接收中断,所以在中断处理函数里面接收数据


#pragma vector=UART2_R_RXNE_vector


__interrupt void UART2_IRQHandler (void)


{

  while((UART2_SR&0X20)==0);//等待接收完成

      uart_get=UART2_DR;//读取接受值,同时会清零标志位

}


注意:


1:在STM8S中M位所定义是帧长度,而不是数据位的长度!也就是说M位所定位的长度为“数据位+奇偶校验位”个数的总和。当数据位为8位时,不使用奇偶校验的时候,M的长度为8位;而要使用奇偶校验的时候,M的长度应该为9位!所以编写程序的时候不能简单的只改变校验位的设置;


2:看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的那些数据才能被正确收到。


3:在使用串口调试工具时,要注意有些串口工具的奇偶校验位不起作用,测试sscom42的校验位可以使用!


关键字:STM8  UART2  起始位 引用地址:STM8--UART2

上一篇:stm8笔记1-搭建工程+孤独的小灯闪烁
下一篇:stm8笔记3-ad连续采样

推荐阅读最新更新时间:2024-11-13 10:09

LoRa终端的MCU STM8编程需要知道的那些事情
由于我们选用的LoRa终端模组ASR6505集成的MCU是STM8L, 因此有必要对其有一些基本的认识,以便于接下的编程和代码的理解。 目录: 1. 什么是STM8 MCU 2. STM8与STM32的主要区别 3. STM的主要功能特性 4. STM8内部的功能模块 5. STM8的内存地址映射 6. STM8的中断向量表 1. 什么是STM8 MCU STM8系列是意法半导体公司(ST)生产的8位的单片机。该型号单片机分为STM8A、STM8S、STM8L三个系列。 STM8A:汽车级应用、STM8S:标准系列、STM8L:超低功耗MCU。 内核 :ST自研的高级STM8内核,具有3级流水线的 哈佛结构 指令集:
[单片机]
LoRa终端的MCU <font color='red'>STM8</font>编程需要知道的那些事情
STM8 ADC转换模式-------连续扫描模式
STM8单片机ADC支持5种转换模式:单次模式,连续模式,带缓存的连续模式,单次扫描模式,连续扫描模式。 连续扫描模式 该模式和单次扫描模式相近,只是每一次在最后通道转换完成时,一次新的从通道0到通道n扫描转换会自动开始。如果某个数据缓存寄存器在被读走之前被覆盖,OVR标志将置1。 连续扫描模式是在当SCAN位和CONT位已被置时,通过置位ADON位来启动的。 在转换序列正在进行过程中不要清零SCAN位。 连续扫描模式可以通过清零ADON位来立即停止。另外一种选择就是当转换过程中清除CONT位那么转换会在下一次的最后一个通道转换完成时停止。 注意:在扫描模式中,不要使用
[单片机]
STM8单片机的中断控制和中断功能
内部中断:一般是由硬件错误或者运算过程中出错引起的,一般是不可避免的; 外部中断:是处理器的外设发出的中断请求,如定时器中断,UART 接收中断,外部中断一般都可以通过中断控制器进行屏蔽; 1.ITC 功能概述: ……所有 IO 引脚都具有外部中断能力,每个端口都有独立的中断向量以及独立的标志;外设中断能力; ……软件中断能力(TRAP) ……具有灵活的优先级和中断等级管理,支持可嵌套和同级中断管理: ——多达 4 个软件可编程的嵌套等级;——最多有 32 个中断向量,其入口地址由硬件固定;——2 个不可避免的中断:RESET,TRAP;——1 个不可避免的最高优先级硬件中断 TL1; 2. 中断的主要功能 1.
[单片机]
STM8 时钟切换
HSE、HSI、LSI 都可以作为系统主时钟源,STM8 单片机复位以后默认 HSI 的 8 分频作为系统主时钟,其原因是 HSI 稳定时间短,而其 8 分频又可以保证系统在较差的 VDD 条件下安全启动。在系统运行的过程中可以切换系统的主时钟源。系统时钟源的切换有 2 种方式:自动切换、手动切换。 自动切换可以使用最少的指令来完成主时钟源的切换,用户程序可以处理其他事物而不用关心确切的切换时间;手动切换在硬件准备好之后不立即切换,允许用户精确的控制切换发生的时间。 自动切换的步骤为: 1.设置切换控制寄存器 CLK_SWCR 中的 SWEN 位,使能时钟切换。 2.设置主时钟切换寄存器 CLK_SWR,选择目标时钟源
[单片机]
<font color='red'>STM8</font> 时钟切换
STM8的GPIO驱动
芯片的外设一般按照这么几个流程来进行,GPIO,外部中断,定时器,串口,ADC,IIC,SPI,下面我就按照各个模式来写 首先是GPIO,STM8的GPIO拥有复用功能,这句话告诉我们必然需要配置IO的复用功能才能使用,看这张表 DDR决定输入输出方向,CR1 CR2决定输入输出模式,上拉,下拉,推挽,开漏等 主要依靠这几个寄存器 还有一个控制寄存器2,懒得传了 按照这张表,输出写输出寄存器,输入读输入寄存器,就能完成GPIO的操作了 以下是操作代码 #include key.h u8 keyValue = 0; #define KEY1_IN (GPIOD- IDR&0X
[单片机]
<font color='red'>STM8</font>的GPIO驱动
基于STM8的DHT11温湿度传感器的驱动代码设计
最近希望恢复性学习一下STM8的相关知识,于是我选择了从头开始写温湿度传感器DHT11驱动代码的方式。其中遇到一些问题,也有一些收获,希望会帮助到遇到类似问题的朋友,也希望不足之处得到大家的指导 首先介绍一下DHT11的必要知识 一 复位时序 以及 数据时序 下面是数据时序 此外,根据数据手册得知,一次通信需要的时间是3毫秒左右,这很重要,在后面的BUG分析环节会说到 二 贴上关键代码以及分析 //复位DHT11 void DHT11_RST() { TIM4_CR1 = 0x00; //关闭定时器 TIM4_CNTR = 0;
[单片机]
基于<font color='red'>STM8</font>的DHT11温湿度传感器的驱动代码设计
STM8固件库+IAR 之--CLK
STM8的时钟控制十分强大,用户可独立地管理各个时钟源,并将它们分配到CPU或各个外设。主时钟和CPU时钟均带有预分频器。具有安全可靠的无故障时钟切换机制,可在程序运行中将主时钟从一个时钟源切换到另一个时钟源。本程序是更改内部2M或者外部8M晶振,让led2闪灯,通过不同初始化,能观察出led的快慢,上代码: #include stm8s.h /*========内部高速时钟初始化========*/ void init_hsiclk(void) { CLK_DeInit(); //寄存器复位 CLK_HSICmd(ENABLE); //内部高速时钟使能 CLK_HSIPrescalerConfig(CLK_PRES
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
更多往期活动

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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