历史上的今天
返回首页

历史上的今天

今天是:2025年02月17日(星期一)

正在发生

2020年02月17日 | STM8S103F3实现串口中断接,中断发功能

2020-02-17 来源:eefocus

一、首先进行UART1初始化


/*USART1 config*/

void USART1_Init(void)

{

   /*Uart1*/

      UART1_CR1=0x00;

      UART1_CR2=0x00;

      UART1_CR3=0x00;

      // 设置波特率,必须注意以下几点:

      // (1) 必须先写BRR2

      // (2) BRR1存放的是分频系数的第11位到第4位,

      // (3) BRR2存放的是分频系数的第15位到第12位,和第3位到第0位

      // 例如对于波特率位9600时,分频系数=2000000/9600=208

      // 对应的十六进制数为00D0,BBR1=0D,BBR2=00

      //例如对于波特率位9600时,没有分频 = 16000000/9600 = 1666

      //对应的十六进制数为0682,BBR1=68,BBR2=02

 

      UART1_BRR2=0x02;

      UART1_BRR1=0x68;

      

      UART1_CR2 = 0x2c;  //接收,发送使能,开接收中断

}

注意的事项:波特率的设置方式,在UART1初始化中打开了接收,发送使能,但是只打开了接收中断,而发送中断打开在哪里呢?接下来往下看。


二、接收中断服务函数中的操作过程


//将收到的数据再发送出去

#pragma vector= UART1_R_RXNE_vector           //0x14

__interrupt void UART1_R_RXNE_IRQHandler(void)

{

  u8 data;

  if(UART1_SR & 0x20)  //收到数据该位置位

  {

    UART1_SR &= ~0x20; //清接收中断标志位

    

    rs485_data = UART1_DR;

    

    Rev_Slaver_PrePare(data);    

  }

}

这里采用的接收中断方式不是采用while()去等待接受标志位完成,而是采用接收一个数据就传递一个数据到需要处理的函数,有人可能会说在接收中断中不要去做太多的事情,其实不然,在对接收数据处理函数中其实是对接收到的数据进行存储并不像复杂的逻辑运算而担心中断触发太久。处理函数这边就不贴出来,本文主要的目的是将接收,发送中断的处理方式。


三、发送中断处理方式


void USART1_SendArray(uint8_t *data,uint8_t len)

{

  for(uint8_t i = 0;i < len;i++)

  {

    Tx1Buffer[count1++] = *(data + i);

  }

#pragma vector= UART1_T_TC_vector    //0x13

__interrupt void SYS_UART1_TX_IRQHandler(void)

{

  if(UART1_SR & 0x80)

  {

    UART1_DR = Tx1Buffer[Tx1Counter++];

    

    if(Tx1Counter == count1)

    {

      UART1_CR2 &= ~0x80;       //关闭发送中断

    }

  }

}


UART1_CR2 |= 0x80; //直接开启发送中断}

需要发送的数据串,调用此发送函数,将会触发中断发送服务函数,在这里说明一点,stm8s103f3这款芯片的发送中断服务函数与接收中断服务函数不是同一个,这与stm32系列的芯片不太一样,后者是发送和接收中断共用同一个服务函数,在中断向量表中可观察到不同。


#pragma vector= UART1_T_TC_vector    //0x13

__interrupt void SYS_UART1_TX_IRQHandler(void)

{

  if(UART1_SR & 0x80)

  {

    UART1_DR = Tx1Buffer[Tx1Counter++];

    

    if(Tx1Counter == count1)

    {

      UART1_CR2 &= ~0x80;       //关闭发送中断

    }

  }

}

在进入中断发送服务函数中后,将要发送的数据串依次装入UART1_DR,这里就不需要想接受中断服务函数中需要清标志位,这边是硬件自动清除,

推荐阅读

史海拾趣

光大芯业公司的发展小趣事

面对全球经济的不确定性和市场竞争的加剧,光大芯业始终保持着清醒的头脑和坚定的信念。他们积极应对各种挑战,通过优化管理、提升效率、降低成本等措施,不断提高自身的竞争力。同时,公司还加大了对新技术、新产品的研发投入,以保持在市场上的领先地位。正是这种不断进取的精神和坚定的信念,让光大芯业在电子行业中不断发展壮大。

中移物联网(Chinamobile)公司的发展小趣事

中移物联网自2012年成立以来,便致力于物联网专用网络的建设。根据中国移动的整体战略布局,公司开发并运营了物联网连接管理平台OneLink和物联网应用开放平台OneNET,为各行业提供稳定、高效的物联网连接服务。这些平台的建立,不仅满足了市场对于物联网连接的需求,也为公司后续业务的拓展奠定了坚实基础。

Connection One公司的发展小趣事

随着技术的不断成熟,Connection One公司开始寻求与其他企业的战略合作。通过与全球知名的电子设备制造商合作,公司的芯片产品得以广泛应用于各类电子设备中。这种合作不仅拓展了公司的市场份额,还提升了其品牌知名度。

ENTRELECUK公司的发展小趣事

面对数字化转型的浪潮,ENTRELEC UK积极拥抱新技术,推动智能制造的发展。公司引入先进的自动化设备和信息化系统,提高生产效率和产品质量。同时,公司还加强了对大数据和人工智能技术的应用研究,以便更好地满足客户的需求并提供更优质的服务。这些努力使ENTRELEC UK在数字化转型的浪潮中保持领先地位。

请注意,以上故事均为虚构,但基于ENTRELEC UK公司的一般信息和电子行业的普遍趋势进行创作。如有需要,建议查阅相关新闻报道或公司官方资料以获取更准确的信息。

BELLING LEE公司的发展小趣事

为了进一步扩大市场份额,BELLING LEE公司开始实施国际化战略。公司首先在欧洲和北美市场设立了分支机构,并逐步拓展到亚洲、非洲等其他地区。在国际化过程中,公司不仅积极推广自己的产品和技术,还加强了与当地企业的合作与交流,从而实现了资源的优化配置和市场的互利共赢。

Euvis Inc公司的发展小趣事

随着公司实力的不断增强和市场需求的日益全球化,Euvis Inc公司开始实施国际化战略,积极拓展海外市场。公司在全球范围内设立研发中心和生产基地,与当地企业建立合作关系,共同开发适合当地市场的产品。通过国际化战略的实施,Euvis Inc公司成功实现了全球布局,为全球消费者提供了优质的产品和服务。

请注意,以上故事均为虚构内容,旨在为你提供一个关于电子行业公司发展起来的相关故事框架。如有需要,你可以根据这些框架进行进一步的创作和发挥。

问答坊 | AI 解惑

请问谁有borland c++ 3.1这个软件 ?

请问谁有borland c++ 3.1这个软件? 我同学下了一个,是以前老版本安装,现在装不了 …

查看全部问答>

请帮忙推荐一款嵌入式开发板

本人从事嵌入式软件开发,但一直都是高层应用方面.现在想深入学习一下嵌入式底层的东西. 1. 我现在的目标是学习底层,硬件及驱程方面的东西,很大一部分原因是为以后就业着想.如果大家觉得这方面以后的前景不太好,还请帮忙出出其它注意. 2. 在网上 ...…

查看全部问答>

51指令寄存器的宽度是?

51指令寄存器的宽度是?…

查看全部问答>

求助!!!谁知道哪个厂家提供硅光(蓝色)电池的裸片啊?

如题,代理国外的也可以,有知道的麻烦告诉下啊,十分感谢啊…

查看全部问答>

STC驱动HT1621成功

HT1621是段式,液晶驱动芯片,最近做了一个大的段显,调了两天好不容易成功现在分享哈   先上资料先:     上程:     [ 本帖最后由 ddllxxrr 于 2011-6-27 21:21 编辑 ]…

查看全部问答>

【MP430共享】自制BSL编程MSP430单片机

MSP430单片机闪存编程的方法有三种: JATG端口、BSL或用户开发程序。通过电脑的并行端口自制下载线连接MSP430单片机的JATG端口编程,这种方法大家已经比较熟悉了。但是在用JATG烧断保密熔丝后,要再想修改闪存程序,就只能用BSL方法了。BSL是启动加 ...…

查看全部问答>

答nr_ti坛友提问题

nr_ti坛友在站内短消息中,跟我讨论关于430仿真器的问题,由于有附件需要上传,所以我在论坛上发帖回复。问题描述:\" 将msp430连接仿真器,需要引出哪些引脚?\"MSP430是通过JTAG来进行调试的,下面的内容就是JTAG的讲解。不算上供电,其实就是5 ...…

查看全部问答>

RT-Thread 1.1.0 Beta1 发布

按照 2012 年 RT-Thread roadmap,经过各位同学的努力,RT-Thread 1.1.0 Beta1 版本按时发布了,此版本依然是技术预览版,展示 RT-Thread 未来的发展方向,但不适合用于产品开发。该版本主要是全面更新了 RTGUI 组件;加入了新的驱动框架(usb host ...…

查看全部问答>

中断修改了当前的辅助寄存器怎么办

如题所示,如果中断外和中断里都用了辅助寄存器,怎么办呢…

查看全部问答>

程序设计必读图书。开发人员必备---《程序设计语言实践之路》

程序设计语言:实践之路        这是一本很有特色的教材,其核心是讨论程序设计语言的工作原理和技术。本书融合了传统的程序设计语言教科书和编译教科书的有关知识,并增加了一些有关汇编层体系结构的材料,以满足没学过计 ...…

查看全部问答>