学习笔记--stm8之二 uart 串口

发布者:LovingLife2023最新更新时间:2020-08-19 来源: eefocus关键字:stm8  uart  串口 手机看文章 扫描二维码
随时随地手机看文章

ST

3合一开发板stm8学习之 uart

作者:萧星

程序功能:

接受超级终端输入的值 并显示出来


还得说点上次的 时钟的问题,因为后面可能很少看到配置时钟的部分 所以有必要澄清一下初始化时的状态------1.内部高速rc振荡器提供时钟源

16m


2.时钟分频为8


3.供cpu的时钟是his/8


Ok,现在大家对芯片默认状态有了一点了解,下面开始串口的研究。



Stm8的串口:主要功能:


1:支持异步传输所以成为UART

2


2:lin模式 主从


3 红外编码模式


4 智能卡模拟功能

   以上功能并不是所有串口都支持,stm8最多的是3个串口

也不多说 串口应该是大家很熟悉的一种接口,怎么配置 要配置什么 也都很清楚 我就简单说一下配置的地方:


1 数据位


2停止位


3波特率


4使能发送或者接受模块(要中断功能的使能中断|)

这样uart就配置好了 可以发送和接收数据了

说几个主要标志位:

发送端:TXE

硬件置一  说明数据从寄存器移到了 移位寄存器 传输开始了,下一个数据可以写入寄存器了,此时如果使能相应中断 中断将会产生


TC


数据传输完成置位 在停止位i从移位寄存器发送完后tc置位


TXE和TC有什么区别?后面我说了一下自己的想法


        接受部分:RXNE置一 接收端移位寄存器的值放到了寄存器中,接收完成可以读取接受的数据。相应中断标志位置位时产生中断。RXNE必须在下一个数据接收完成前清零,读接受寄存器和软件直接写0都可以清除该位。

其他扩展功能 请参考stm8 手册



Ok 现在通过程序 我们来看一下串口的通信配置过程:


配置串口


    LINUART_CR1  = 0x00;CR1配置了很多的东西,数据位 校验位 校验中断等  这里配置为8为数据位 无校验 无校验中断


    LINUART_CR3  = 0x00;   配置了 停止位 数据相位和极性(同步模式下,用来同步的)但是此处禁止了同步功能  配置为一个停止位


    LINUART_BRR2 = 0x0B;   


    LINUART_BRR1 = 0x08;   这两个寄存器是配置串口波特率  总共是16位 :BRR1是16位中的中间8位,BBR2低4位是16位中的低四位,高4位是16位的高四位


                            这里我们配置为115200  即 16m/115200==139==0x008B


    LINUART_CR2  = 0x0C; CR2用来配置接受使能和中断使能的寄存器,这里配置为接受发送使能




Ok  到此配置完成




  发送接受程序:


     while(1)


    {


      


      printf("nLINUART Example lease press 1 key from keyboar


         下面 会给出内部程序




      for (i=0;i<10000;i++);//一段延时


      while (!(LINUART_SR & 0x20));//等到接受寄存器 不为空 SR中的RXEN位




   


      RxBuffer  = LINUART_DR;  //读取接受的值 同时清除RXEN位


      printf("Key Pressed = %c.n",RxBuffer);//打印输入的值


    }




Ok  看一下 printf的 函数:


  char putchar (char c)


{


    if (c == 'n')


    {


     


      while (!(LINUART_SR & 0x40)); 等到发送完成再发送


      LINUART_DR = ('r');


      /* Wait transmission is completed */


      while (!(LINUART_SR & 0x40));


    }




   


    while (!(LINUART_SR & 0x80));  等到数据移到移位寄存器


    LINUART_DR = (c);


    /* Wait transmission is completed */


    while (!(LINUART_SR & 0x80));




    return (c);


}


关于 TC和RXEN感觉使用上没什么区别。唯一的区别就是每个字符的发送间隔不一样了。不知道理解对不对 这个向高手请教。


关键字:stm8  uart  串口 引用地址:学习笔记--stm8之二 uart 串口

上一篇:STM8单片机的中断控制和中断功能
下一篇:3合一套件 stm8 学习笔记之css

推荐阅读最新更新时间:2024-11-02 00:44

c51:串口中断方式接收、方式字符串
/* 程序设计功能: 1.f=12MHZ,baud=1200 2.串口中断方式:发送字符串存放tran_buf 中,接收字符串存放rec_buf 中。 3.函数首先发送字符串 abc . 4.接收到的字符串存放rec_buf 中,接收字符串完成后,再发送出去。 */ #include reg52.h #include string.h #define uchar unsigned char //发送字符串缓存 uchar tran_buf ; //接收字符串缓存 uchar rec_buf ; uchar tnum=0; uchar rnum=0; //串口初始化 void
[单片机]
51单片机UART通信发送接收数字字母中文,控制LED亮灭
1、发送什么就接收什么 /* 工程创建MCU选取,Atmel 89C55 单片机:STC12C5A60S2 晶振:12M 功能:串口的应用 波特率:4800 8 无 1 无 */ #include REG51.h // 可以使用通用的头文件 //串口中断初始化程序 void UART_init(void){ EA=1; //打开总中断【定时器,ADC,串口,比较,计数,外部】等中断类型 ES=1;//允许串口的中断 TMOD=0x20; // 定时器1 T/C1工作方式,用来产生串口工作频率 SCON=0x50; // 串口工作方式1 TH1=0xF3; // 定时器初始值高8位的设置,查表得频率 TL1=0xF3; //
[单片机]
51单片机<font color='red'>UART</font>通信发送接收数字字母中文,控制LED亮灭
51单片机串口通讯结合点阵显示的实例
通过电脑使用虚拟串口软件发送特定命令,然后在点阵上进行显示,后期可配合蓝牙串口模块实现短距离控制显示效果,有哪位朋友想给女朋友做生日礼物的可以参考 单片机源程序如下: //单片机P1口和P2口接点阵的阴极,而PO口接点阵的阳极,实现行扫描显示汉子 #include tab.h //uchar temp ={0}; //定义数据接收缓冲区10个字节 uchar tt=7; void main() { T0init(); portinit(); uartinit(); while(1) //等待中断 { if(RI)
[单片机]
51单片机<font color='red'>串口</font>通讯结合点阵显示的实例
关于AVR ATmega8 串口数据协议传输的奇偶校验码的一点想法
在我们本科甚至在刚刚参加工作的时候(例如博主),写串口通信基本都是一位开始一位结束八位数据位没有奇偶校验位,那么这样的好处是方便,的确很方便,但是对于数据传输的隐蔽性和封装的保护就没有那么好的效果了。今天博主初步的探究下在程序中加入奇偶校验位的使用和通信方式。 对于一帧数据的传输,如果以我博客第4张的说法,就是一帧数据有4位有效数据位,剩下的两位用来奇偶校验(因为使用16位编码),将高八位存储在第五位。低八位存储在第六位。 这个校验的基本方式和想法是,在各种主流的单片机都有一个奇偶校验的函数表,通过该表可以很简单的调用使用奇偶校验功能并且将校验码进行赋值给最后两位,那么校验对比的过程就是,PC机发送一个帧的数据,格式是四位有效数据
[单片机]
基于S3C2440的UART传输小结
这里简单地介绍一下通过寄存器来控制S3C2440的UART传输。 查看S3C2440的芯片手册可以发现UART有着发送和接收的缓存区,在缓存区有数据后其便一个字节一个字节地将数据传输到对应端口处。 这里介绍其中使用到的几个寄存器。 ULCONx:用于设置数据的数据位、校验位、停止位之类的信息。 UCONx:设置查询方式以及UART的时钟源。 UFCONx:是否使用FIFO之类的方式。 UMCONx:是否使用流控 UBRDIVx:设置UART的波特率, 一般有两类:一种是标准的串口波特,为921600的约数,如300、600、1200、2400、4800、9600、19200、38400、43000、
[单片机]
基于S3C2440的<font color='red'>UART</font>传输小结
AVR_M8单片机串口控制应用程序
#include iom8v.h #include macros.h #include Io_define.h unsigned char RX_data ={0}; //串口接收的数据 unsigned char keyb_state=0; unsigned char keyc_state=0; unsigned char RX_counter=0; //串口接收到的字节数计数器 void UART_init (void); void putchar (unsigned char c); void puts (unsigned char *s
[单片机]
MSP432开发板串口调试
拿到MSP432P401R评估板v1.0(这个请注意一下,目前在德州仪器官网上找到的硬件原理图是v2.0,v1.0的串口所在的引脚是RXD,TXD引脚),先将串口调试好,便于下一步工作的展开。首先,查看TI提供的代码例子,这个例子就在TI的MSPWare代码包内。注释如下: //****************************************************************************** // MSP432P401 Demo - eUSCI_A0 UART echo at 9600 baud using BRCLK = 12MHz // // Description:
[单片机]
串口软件发送数据到单片机
/*接收*/ #include reg52.h void InitUART(void) { TMOD = 0x20; SCON = 0x50; // TH1 = 0xF3; TL1 = TH1; PCON = 0x80; EA = 1; ES = 1; TR1 = 1; } void SendOneData() { } void main(void) { P2=0xff;//全部熄灭 InitUART(); while(1); } void UARTInterrupt(void) interrupt 4 { unsigned char returnData; returnData=SB
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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