STM8s串口2异步基本收发使用说明

发布者:JoyousJourney最新更新时间:2020-01-07 来源: eefocus关键字:STM8s  串口2  异步基本收发 手机看文章 扫描二维码
随时随地手机看文章

学到定时器部分时,想要将调试信息输出,故先把串口基本功能学了,才能方便后面的调试。


使用某宝上买的STM8S最小系统板,外部晶振为8MHz的。HSI的误差对串口波特率影响比较大,这里使用外部晶振。


开发板芯片是105K4的,只有UART2,这里把UART2的整体框图放在下面,蓝色矩形框是串口异步基本收发所用到的寄存器,可以看到,所要用到的寄存器很少。

在这里插入图片描述在这里插入图片描述

这里先说下如何计算波特率以及误差多少:

官方手册已经给出:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这里我使用的波特率为9600bps,然后主时钟为8M,这样分频因子为8M/9600约等于833=0x341,计算的波特率为8M/833=9603.8,误差为(9603.8-9600)/9600*100%约等于0.04%。


如何配置串口呢,看官方手册说明:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

发送与接收帧结构相同,波特率一样,唯一不同的是一个是发送,一个是接收,这里我们设置帧格式为,9位数据,偶校验(注意:9位数据中校验位占了最后一位),1位停止位。波特率为9600,由上面计算出来为0x341,所以 UART2_BRR2=0x01,UART2_BRR1=0x34;


下面发一行字符串到串口显示:


Send_String("Are you ok?");


串口打印输出

在这里插入图片描述

下面从串口调试器发送字符到STM8,stm8将字符加一返回,看下图:

在这里插入图片描述

串口代码部分:


/* 函数名:Uart2_Init

 * 参数:无

 * 功能:UART2串口波特率初始化

 * 返回:无

 */

void Uart2_Init(void){//串口2初始化

  

  UART2_CR1_M=1;//设置字长为9个数据位

  UART2_CR3_STOP=0x00;//1个停止位

  UART2_BRR2=0x01;//配置波特率为9600,误差0.04%

  UART2_BRR1=0x34;


 

  UART2_CR1_PS=0;//偶校验

  UART2_CR1_PIEN=1;//奇偶校验控制使能 

  

  // UART2_CR2_TIEN=1;//发送中断使能

  UART2_CR2_TEN=1;//发送使能

  

  UART2_CR2_RIEN=1;//接收中断使能

  UART2_CR2_REN=1;//接收使能

  Send_String("串口2初始化完成rn");

    

  

}

/* 函数名:Send_String

 * 参数:*string - 字符串首地址

 * 功能:UART2输出字符串

 * 返回:无

 */

void Send_String(char * string){//发送字符串

  while(*string!=''){


    if(UART2_SR_TXE){//等待数据移到移位寄存器 

      UART2_DR=*string;    

      string++;

    }

       

  }

  

}


/* 函数名:Send_O

 * 参数: hex - 8位数据

 * 功能:输出3位的十进制数据格式

 * 返回:无

 */

void Send_O(unsigned char hex){//发送8位16进制数据

  unsigned char i=3;

  while(i){

    if(UART2_SR_TXE){

      

      switch (i){ 

        

        case 3:

        

          UART2_DR=(hex/100)+'0';

          i--;

          break;

     

        case 2:

          UART2_DR=(hex%100/10)+'0';

          i--;

          break;

     

        case 1:  

          UART2_DR=(hex%10)+'0'; 

          i--;

          break;

        default : break;

      }

    }


  }

       

}


#pragma vector=22//UART2发送中断

  __interrupt void UART2_RX_IRQHandler(void){

    


}


#pragma vector=23//UART2接收中断

  __interrupt void UART2_TX_IRQHandler(void){

    

    if(UART2_SR_RXNE) {

      UART2_DR=UART2_DR+1;

      UART2_SR_RXNE=0;

    }


}


关键字:STM8s  串口2  异步基本收发 引用地址:STM8s串口2异步基本收发使用说明

上一篇:关于STM8S的UART2串口的学习记录以及使用经验
下一篇:STM8学习笔记---uart1串口中断

推荐阅读最新更新时间:2024-11-10 03:23

stm8s iar printf打印信息
串口通信正常 我在程序中 #include stdio.h int fputc(int ch, FILE *f)//STM8S105,printf函数重定向 { while (!(UART2- SR&0x80)); UART2- DR=ch; return ch; } 同时需要修改IAR的Projec t- Options - General Options - Library Configuration中的Library 项由 Normal 改为 Full 。 打印信息仍然没有出来 程序一看 打印出来数据明显有问题呀 现在由整好了 问题 1 最终查询出是程序没有真正的下载进去
[单片机]
<font color='red'>stm8s</font> iar printf打印信息
STM8S定时器基本中断定时
STM8S的定时器分三类; 高级定时器TIM1 通用定时器TIM2,TIM3,TIM5 基本定时器TIM4,TIM6 其中除TIM4和TIM6是8位定时器外,其他的定时器都是16位计数的。 每个定时器都具有自动重装载功能 每个定时器的时钟都可以由系统时钟独立分频而来,其中高级定时器TIM1可以选择65536种分频,分频系数为1-65536.通用定时器可以选择16种分频,基本定时器只能选择8种分频。 除了TIM1可以选择计数方向外,其他的定时器都是向下计数的,而技术手册上说的向上计数是错误的。 基本中断定时用到的寄存器; 一、自动装载寄存器高位(TIMx_ARRH) 和 自动装载寄存器低位(TIMx_
[单片机]
STM8S---电源功耗管理之停机模式(halt)实现
主要内容简介 影响功耗的主要因素 电源系统 时钟管理 运行模式和低功耗模式 运行模式 等待模式 活跃停机模式 停机模式 功耗与唤醒事件的测量与结果 功耗管理要点 要点摘要   停机模式(Halt):此模式下单片机的功耗最低,振荡器,CPU和外设的时钟都被关闭,主电压调压器断电。可用复位或外部中断唤醒,唤醒后之前运行的寄存器数据等都保持不变,且从HALT处继续执行程序。 停机模式下的功耗测量结果(MVR关LPVR开):12 运行模式下的功耗测量结果(从RAM运行,不是从Flash开始):12 停机模式下的唤醒时间测量结果:12 测试程序 /* Function: 电源管理:停机(Ha
[单片机]
STM32实战 2.矩阵键盘通过串口3输出
#include KEY44.h #include sys.h #include delay.h #include usart.h u8 key_num = 0; int main(void) { uart_init(115200); delay_init(); KEY44_Init(); while(1) { key_num = key44_Scan(); if(key_num != 0) { printf( KEY is %drn ,key_num); } } } #include KEY44.h #include sys.h #include delay.h vo
[单片机]
stc12c5a60s2独立波特率器-串口
//11.0592M #include reg51.h char flag; sfr AUXR= 0x8E;//辅助寄存器第4位是独立波特率运行控制位,第0位是0则串口1用定时器1作波特率发生器,是1则用独立波特率发生器做 sfr BRT = 0x9C;//独立波特率发生器寄存器,装初值.0xfd是9600; sbit kg=P1^4; unsigned char temp; void main() { kg=0; AUXR=0x11;//独立波特率发生运行,使用独立波特率为串口1的波特率发生器 BRT=0xFD;//重载值11059200,12T重装值是0xfd; SM0=0; SM1=1; REN=1; flag=0; whi
[单片机]
stm8s gpio端口配置
  简介   STM8的通用输入/输出口用于芯片和外部进行数据传输。一个IO端口可以包括多达8个引脚,每个引脚可以被独立编程作为数字输入或者数字输出口。另外部分口还可能会有如模拟输入,外部中断,片上外设的输入/输出等复用功能。但是在同一时刻仅有一个复用功能可以映射到引脚上。   复用功能的映射是通过选项字节控制的。请参考数据手册关于选项字节的描述。每个端口都分配有一个输出数据寄存器,一个输入引脚寄存器,一个数据方向寄存器,一个选择寄存器,和一个配置寄存器。一个I/O口工作在输入还是输出是取决于该口的数据方向寄存器的状态。  STM8S的GPIO主要功能   ● 端口的各个位可以被单独配置   ● 可选择的输入模式:浮动输
[单片机]
<font color='red'>stm8s</font> gpio端口配置
KMPROG v2 串口通讯方式
主控MCU暂定STC12C5A60S2(手上有不好不用)。 这个协议参考了STC的下载协议。流程如下: 上位机不停以最低波特率发送7F.让单片机接收到后,校正自己的波特率发生器。 然后单片机回应给上位机单片机的波特率发生器值,让上位机计算出频率。 然后上位机计算出单片机最高可用波特率。发送给下位机,并让下位机切换波特率。下位机切换后发送ACK帧,如果上位机没有收到或者帧错误(单片机超时)。重新校准时钟,并用最低波特率发送切换帧,但是降低一格波特率。若降到最低则上位机提示误码率太高。等到这个握手帧成功后,进入通讯模式。 上位机如果需要编程器保持活跃的方法,就是周期性(20S)的发送NOP帧(写操作,读操作除外,如果这两个操作上
[单片机]
stm8s 串口通讯源码程序(8位数据,奇校验,2个停止位)
串口初始化第一步,配置波特率,波特率是和时钟相关的,因此首先要配置时钟,时钟的配置参见上一篇博客。stm8s主时钟设置 如果在串口初始化中,如果串口时钟没有打开,请在主时钟配置中打开串口时钟。 配置波特率,stm8s的波特率,时钟,波特率寄存器值的计算相比avr和51又是巨大的进步,stm8s算波特率寄存器值只要Fmaster/波特率就可以了,不需要加加减减。 但是在写入寄存器时需要注意。 一,先写BBR2,再写BBR1。 二,BBR2写的是高四位和低四位,BBR1是中间八位,例如,Fmaster = 8 mhz,波特率1200,求得BBR寄存器值为8000000/1200 = 0x1A0A,那么写入寄存器的值
[单片机]
<font color='red'>stm8s</font> <font color='red'>串口</font>通讯源码程序(8位数据,奇校验,<font color='red'>2</font>个停止位)
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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