历史上的今天
返回首页

历史上的今天

今天是:2025年01月07日(星期二)

正在发生

2020年01月07日 | STM8s串口2异步基本收发使用说明

2020-01-07 来源:eefocus

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


使用某宝上买的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;

    }


}


推荐阅读

史海拾趣

CINTERION公司的发展小趣事

随着汽车行业的快速发展和智能化趋势的加强,CINTERION针对汽车市场推出了专用级M2M模块。其中,AC75i和AC65i作为第六代汽车级模块,以其高度的集成性、稳定性和安全性受到了市场的广泛认可。这些模块的推出,不仅满足了汽车行业对无线通信技术的需求,也进一步巩固了CINTERION在汽车M2M市场的领先地位。

Altitude Technology公司的发展小趣事

在电子行业中,创新是企业永恒的主题。Altitude Technology始终坚持以创新驱动发展,不断推出新产品、新技术。公司建立了一支高效的研发团队,不断跟踪行业最新动态和技术趋势,确保公司在技术创新方面始终走在前列。正是这种持续创新的精神,使得Altitude Technology在电子行业中保持了长久的竞争力。


以上五个故事均基于虚构的Altitude Technology公司进行创作,旨在展示一个电子行业企业在不同发展阶段可能遇到的挑战和机遇,以及如何通过技术创新、市场拓展和合作共赢等方式实现持续发展。请注意,这些故事并非基于真实事件,因此可能与实际情况存在出入。

ECS公司的发展小趣事

为了进一步扩大市场份额,ECS公司开始积极拓展全球市场。他们与全球各地的云服务提供商建立了紧密的合作关系,共同为客户提供更加全面、便捷的服务。同时,ECS公司还积极参加国际云计算展会和论坛,与国际同行交流经验和技术,不断提升自身的竞争力。通过这些努力,ECS公司的品牌知名度和市场份额得到了显著提升。

Alpha-Micro Electronics公司的发展小趣事

ECS公司始终坚持以客户为中心的服务理念。他们深入了解客户的需求和痛点,为客户量身定制解决方案。例如,针对某些行业对数据安全性的特殊要求,ECS公司推出了专用的安全加密方案;针对一些大型企业对于大规模计算资源的需求,ECS公司提供了定制化的高性能计算服务。这些定制化服务不仅满足了客户的特殊需求,还增强了客户对ECS公司的信任和忠诚度。

American Power Management Inc公司的发展小趣事

在电子行业的初期,APMI以一家小型创业公司的身份出现,专注于电源管理技术的研发。当时,市场上的电源管理产品普遍存在效率低下、体积庞大的问题。APMI的研发团队通过深入研究,成功开发出了一款高效、紧凑的电源管理芯片,这一创新为电子产品的小型化和节能化奠定了基础。随着技术的不断完善和推广,APMI逐渐在电源管理领域崭露头角,吸引了众多合作伙伴和投资者的关注。

Deltron / DEM Manufacturing公司的发展小趣事

Deltron Emcon,即现在的DEM Manufacturing,起源于四家英国制造企业的合并。这些企业分别是成立于1946年的Deltron Components,专业音频连接器和压铸盒制造商Roxburgh EMC(成立于1969年),EMC滤波器和组件的制造商Media Products(成立于1990年),以及广播跳线产品制造商BES Electronics(成立于1982年)。这些公司在各自的领域内都有着丰富的经验和卓越的技术,合并后,DEM Manufacturing凭借这些优势,在电子行业中迅速崭露头角。

问答坊 | AI 解惑

【颜工专栏】怎样用PT4115来设计LED照明灯具的驱动电源(一)

颜重光 简介: 现任华润矽威科技(上海)有限公司市场部经理/高工,上海市传感技术学会理事、副秘书长。曾在上海贝岭股份有限公司任市场与技术支持部经理/高工、IPCore—APSemi任FAE经理/高工、香港棋港电子有限公司任首席产品发展经理/高工、美 ...…

查看全部问答>

重新发帖 MSP430用I2C方式读写EEPROM的问题。

现在我把代码贴一下。代码不知道哪里有问题。现在问题是写不进去。I2CReceiveACK函数中SDA_IN一直为1 ,也就是SDA线P3.1一直为高,所以一直停在那里。 //使用MSP430F2618 完成该功能,P3.2 作为SCL,P3.1 作为SDA EEPROM型号为24LC64 #define SDA ...…

查看全部问答>

有谁弄过arm装双系统

有谁弄过,给个思路,要实现应用程序切换双系统 …

查看全部问答>

一道嵌入式试题求解!!

某地铁利用嵌入式控制十字转门,投入2个代币,转门开启。要求: a:画出该系统的FSMD状态图; b:将该FSMD分为FSM和数据路径; c:利用真值表导出FSM的逻辑,并使用卡诺图简化逻辑; d:给出FSM和数据路径连接图;…

查看全部问答>

急!单片机RS232收不到数据!!

我用PIC18F248做CPU想与PC机实现RS232通讯,现在PIC18F248发出去的数据是对的, 但是收不到PC机发过来的数据! 我用了MAX232A做PC机与PIC18F248的接口,现在MAX232A不管是否接收PC机RS232的数据 都只发给PIC18F248一个连续的5V电平,我也用示波器看了 ...…

查看全部问答>

【关于mps430晶振】

    我用的是msp430f2274,芯片上只有xin,xout引脚,请问xin,xout是不是只能接32khz晶振, 如果我接一个40khz晶振能工作吗,还有我在晶振上接了两个15pf的电容协助40khz晶振起震, 问题是现在40khz晶振不工作,也不知道问题出在那里, ...…

查看全部问答>

国内某知名企业招聘

招聘有java、c开发经验 包括软、硬件开发和测试, 要求本科05年(包含05年)前毕业,硕士06年前毕业都可 --若本科较强的话06年毕业的也可以考虑 工作地在西安 如果有意向,可发送简历到qihongjie@gmail.com 相信你会有很好的发展机会的 ^_^ ...…

查看全部问答>

再谈入门级电源IC,TL494实现推挽驱动完美版。

因为某些原因,现在压力比较大,希望哥哥们多多顶贴,多多支持,多多讨论。早日得到解脱!偶喜欢逆变,现在非常发烧,做过不少版本的DC-DC DRIVER,总觉得不够满意,趁工作之余,翻查资料,总结前辈经验,班门弄斧的整了一款DC驱动板,使用入门级电 ...…

查看全部问答>

【晒经典】分享《自制44种电子电路》

本帖最后由 dontium 于 2015-1-23 13:18 编辑 最近看了网友上传的《自制44种电子电路》,觉得此文档不错,然后查些资料总结了一下,特此以帖子的形式外加自己说明分享给大家!!   1.TDA2030功放电路   TDA2030是德律风根生产的音频 ...…

查看全部问答>