历史上的今天
返回首页

历史上的今天

今天是:2025年02月13日(星期四)

正在发生

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

2020-02-13 来源: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,这里就不需要想接受中断服务函数中需要清标志位,这边是硬件自动清除

推荐阅读

史海拾趣

DeLorme公司的发展小趣事

近年来,随着智能手机和移动互联网技术的快速发展,传统的GPS导航设备市场受到了巨大冲击。面对这一行业变革,DeLorme公司及时调整战略方向,将重心转向智能导航应用软件的开发和推广。他们通过与智能手机厂商的合作,将自己的导航软件集成到手机系统中,为用户提供更加便捷、高效的导航服务。同时,他们还积极探索新的商业模式和市场机会,为公司的未来发展奠定了坚实基础。

Great American Electronics公司的发展小趣事

近年来,随着智能手机和移动互联网技术的快速发展,传统的GPS导航设备市场受到了巨大冲击。面对这一行业变革,DeLorme公司及时调整战略方向,将重心转向智能导航应用软件的开发和推广。他们通过与智能手机厂商的合作,将自己的导航软件集成到手机系统中,为用户提供更加便捷、高效的导航服务。同时,他们还积极探索新的商业模式和市场机会,为公司的未来发展奠定了坚实基础。

Circuit Assembly公司的发展小趣事

进入21世纪后,DeLorme公司凭借其在GPS技术领域的深厚积累,不断推出具有创新性的产品。其中,一款集成了GPS、电子罗盘和高度计等多功能的户外导航设备在市场上引起了广泛关注。这款产品不仅具有高精度、高可靠性的特点,还具备了用户友好的界面设计和人性化的操作体验。通过这款产品,DeLorme公司进一步巩固了其在户外导航领域的领先地位。

GigPeak公司的发展小趣事

面对日益激烈的市场竞争和技术变革的挑战,GigPeak始终保持着对创新的执着追求。公司不断加大研发投入,积极探索新技术、新应用和新市场。在2020年,GigPeak成功研发出了一款基于人工智能技术的智能网络优化解决方案。该方案能够实时监测网络流量、分析数据特征并自动调整网络配置,从而显著提升网络性能和用户体验。这一创新成果不仅巩固了GigPeak在业界的领先地位,还为其未来的发展奠定了坚实的基础。

请注意,以上故事均为虚构内容,旨在反映电子行业公司可能经历的成长历程。关于GigPeak公司的具体发展故事,建议直接访问其官方网站或查阅相关新闻报道以获取准确信息。

Analogix Semiconductor公司的发展小趣事

面对日益激烈的市场竞争和技术变革的挑战,GigPeak始终保持着对创新的执着追求。公司不断加大研发投入,积极探索新技术、新应用和新市场。在2020年,GigPeak成功研发出了一款基于人工智能技术的智能网络优化解决方案。该方案能够实时监测网络流量、分析数据特征并自动调整网络配置,从而显著提升网络性能和用户体验。这一创新成果不仅巩固了GigPeak在业界的领先地位,还为其未来的发展奠定了坚实的基础。

请注意,以上故事均为虚构内容,旨在反映电子行业公司可能经历的成长历程。关于GigPeak公司的具体发展故事,建议直接访问其官方网站或查阅相关新闻报道以获取准确信息。

DSP Group Inc公司的发展小趣事

随着全球市场的不断变化和竞争的加剧,DSP Group不断调整其全球化布局和战略转型。公司先后在德国、英国等地设立了研发中心和办事处,加强了与国际市场的联系和合作。同时,DSP Group还积极寻求与其他公司的合作和并购机会,以进一步拓展其业务领域和市场份额。通过这些举措,DSP Group在全球范围内建立了广泛的销售网络和合作伙伴关系,为其未来的发展奠定了坚实的基础。

以上五个故事概述了DSP Group Inc公司在电子行业中发展起来的关键阶段和重要事件。这些故事不仅展示了DSP Group在技术创新、市场拓展和全球化布局方面的努力和成果,也反映了电子行业发展的趋势和变化。

问答坊 | AI 解惑

面向车牌识别的区域分割技术

面向车牌识别的区域分割技术…

查看全部问答>

我看3G市场中的“移动实名和移动商街”PK“手机行业门户”

  2009年1月,工信部向移动、电信和联通三大运营商发放3G牌照,似乎一夜之间,3G的气息扑面而来。而到底如何认识3G对社会经济生活的影响?3G这条宽阔大道上到底会跑那几辆车?3G的未来发展如何?一系列问题成为业内业外人士争论的焦点.这都说明了全 ...…

查看全部问答>

倾角检测

本帖最后由 paulhyde 于 2014-9-15 09:25 编辑 倾角检测大家有什么好方法吗?难道必须要用几百的传感器  …

查看全部问答>

怎么得到CPU的温度

怎么得到CPU的温度 谢谢 …

查看全部问答>

怎样在PB5中修改BSP呀

BSP开发流程大概是什么样的呢? 下载了一个BSP怎么修改呢? 怎么知道该修改什么文件呢? 谢谢大家!…

查看全部问答>

请教兼容性问题

一张网卡在Windows下正常工作,但在Linux下却无法正常接收数据,是怎么回事了??…

查看全部问答>

如何正确测量LED供电电源(专业)

 就普通照明而言,LED技术已经可以满足生产高品质灯具的要求,但是具体生产高品质LED灯具时,则需要掌握电力电子学、光学和热管理学等三个领域的知识。很少有同时精通於三个领域的工程师,而如果电源工程师还负责系统架构时,他多半会将更多精力放 ...…

查看全部问答>

XuX_NiosII嵌入式系统开发平台的下载(24G)

下载的朋友顶一下?   XuX_NiosII嵌入式系统开发平台(简称:XuX_Nedp),是基于VMware Workstation桌面虚拟计算机软件,在Windows XP或者Windows 7上运行Fedora 14 Linux操作系统,进行Altera公司的NiosII软核CPU相关嵌入式系统开发、测试 ...…

查看全部问答>

BUG_Zigbee CC2530

BUG_Zigbee CC2530  前提协调器的最大子设备数为20 1个协调器+大于等于21个子设备  即超过协调器所能携带的最大子设备,在这种情况下回发生子设备加入网络问题。当打开协调器建立网络,然后打开21个子设备此时有的子设备加入 ...…

查看全部问答>