历史上的今天
返回首页

历史上的今天

今天是:2024年09月28日(星期六)

2021年09月28日 | stm8s实现串口中断接,中断发功能

2021-09-28 来源: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);

  }

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

}

#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;       //关闭发送中断

    }

  }

}


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


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

推荐阅读

史海拾趣

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

为了进一步提升竞争力,APMI开始实施国际化发展战略。公司积极开拓海外市场,与国际知名电子制造商建立合作关系。同时,APMI还加强了与国际同行的技术交流与合作,吸收借鉴先进的管理经验和技术成果。通过国际化发展,APMI不仅拓宽了市场渠道,还提升了公司的国际影响力。

Data Delay Devices公司的发展小趣事

DDD公司成立于1964年,当时正值电子行业的蓬勃发展期。创始人看到了延迟线技术在计算机和电信领域中的巨大潜力,决定投身其中。然而,初期的市场并不如预期般顺利,公司面临着资金短缺、技术难题和市场竞争等多重压力。但DDD公司的创始人凭借对技术的热情和坚定的信念,带领团队不断研发新产品,优化生产工艺,逐渐在市场中树立了自己的品牌形象。

FORMOSA公司的发展小趣事

在台湾,一家名为“FORMOSA电子元件制造厂”的公司,起初是一家小型电阻器生产商,专注于为本地电子制造商提供基础元件。随着个人电脑和消费电子市场的蓬勃发展,该公司敏锐地捕捉到市场需求,开始投资研发高精度、低成本的电子元件。通过不断的技术创新和质量控制,FORMOSA电子元件逐渐在国际市场上获得认可,成为多家知名电子产品制造商的供应商。公司还积极拓展海外市场,在欧洲和北美设立分支机构,进一步巩固了其在全球电子元件市场的地位。

FILTRONIC公司的发展小趣事

在快速发展的同时,FILTRONIC始终将品质管理和客户服务放在首位。公司建立了完善的质量管理体系和客户服务体系,从原材料采购、生产制造到产品检测、售后服务等各个环节都严格把关。同时,FILTRONIC还积极倾听客户需求,不断优化产品和服务,以满足客户不断变化的需求。这些努力使得FILTRONIC在客户中树立了良好的口碑和品牌形象。

AVG [AVG Semiconductors(HITEK)]公司的发展小趣事

随着全球对可持续发展的关注度不断提高,AVG也积极响应这一趋势,将可持续发展理念融入公司的战略和运营中。公司注重环保和节能减排,采用环保材料和生产工艺,减少对环境的影响;同时,AVG还积极参与社会公益事业,为社会做出贡献。这些举措不仅提升了AVG的社会形象,也为公司的长远发展奠定了坚实的基础。

这些故事只是AVG Semiconductors(HITEK)在电子行业发展中众多精彩瞬间的一部分。通过技术创新、市场扩张、合作伙伴关系的建立以及应对挑战和危机的能力,AVG不断壮大自身实力,为电子行业的发展做出了重要贡献。未来,AVG将继续秉持创新精神和社会责任感,在电子行业中书写更加辉煌的篇章。

爱浦电子(AIPULNION)公司的发展小趣事

为了更好地服务客户,爱浦电子不断完善服务体系,提升服务水平。公司建立了全国性的服务网点,覆盖30多个城市,能够为客户提供及时、专业的技术支持和售后服务。此外,爱浦电子还根据客户需求,提供个性化定制服务,满足不同行业对模块电源的多样化需求。这些举措赢得了客户的广泛赞誉和信任,进一步巩固了公司在市场上的地位。

问答坊 | AI 解惑

5v稳压电路

现在想做一个输入是12-18V,输出是5的稳压电路 要求用MOS管,有什么好的电路吗 请大家不吝赐教啊…

查看全部问答>

手机SIM卡常识(转)

手机是什么?几乎所有人都知道答案:就是那特烧钱、特不保值的玩意!SIM卡是什么?估计许多人无法给出一个比较完整的答案,只知道是一张小小的卡片!但是您也许不知道手机离开了这张小小的SIM卡是几乎做不了工作的,除了在特殊情况下用户可以通过不 ...…

查看全部问答>

关于单片如何声音控制实现单步走?

各位大侠,我是刚学单片机的C语言。请问一下,我用单片机控制LED,如何通过声音控制实现一步一步走呢? 我是用LM358双运放组成的电路,只要有声音,就能实现P3.1口下降沿。 我想让,有声音就跳:声音--R--声音---G---声音----B P1.0    ...…

查看全部问答>

一个团队,你觉得主力做的不好,自己做的更好,你怎么办?

  本信息来自合作QQ群:电子工程师技术交流(12425841) 群主在坛子ID:Kata   如果你们是一个团队的 而你自觉别人做的不好 而你可以做的更好 而他们确是主力 你该怎么办呢?   我现在还只是一个学生 不过看着这些事情自己很郁 ...…

查看全部问答>

【SynPlify技术问题】Internal Error

各位大虾:我有一个工程用ise9.2综合时能通过,可是用synplify9.62综合时报告:Internal Error ,xcmap.c:42938。我查了很多资料都没搞定,麻烦各位帮忙分析下,不胜感激!!!…

查看全部问答>

学ARM9好还是ARM11好?

请教前辈:我想学嵌入式,是不是有必要买一块开发板?哪个开发板便宜又适合学习?…

查看全部问答>

msp430f149用P4.1发脉冲,抖动严重,为什么?

用TimerB0中断,让P4.1发脉冲,TBCCR0到大约30时,用示波器观察P4.1的脉冲波形,抖动严重,为什么? void Init_TimerB(void) { TBCTL = TBSSEL1 + TBCLR + TBIE; // 时钟源SMCLK, TBCCTL0 = CCIE; // C ...…

查看全部问答>

LM3S系列芯片的SPI通信

请教一下, SSIConfigSetExpClk(SSI_BASE,                                &nb ...…

查看全部问答>

武汉正维电子技术有限公司招聘 高级FPGA开发工程师

武汉正维电子技术有限公司招聘时限: 2013.07.10~2013.07.31 公司简介: 武汉正维电子技术有限公司是一家专注于射频技术、移动通信技术的研究和产品开发、生产、销售及通信工程服务的高新技术企业,公司位于武汉市洪山区关东科技园电子港2号楼 ...…

查看全部问答>