历史上的今天
返回首页

历史上的今天

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

正在发生

2020年02月24日 | STM8S单片机串口调试

2020-02-24 来源:eefocus

    最近在STM8S单片机上调试遇到些问题,共享出来!


    问题:STM8S在用IAR编译器调试过程中,中途暂停下,发现程序不能正常运行了,一直死在串口接收中断函数中。


    分析:怀疑是串口接收中断函数未清标志位,但函数确实有相应的清中断语句,语句如下:   


uint8_t tmp;

UART3_ClearFlag(UART1_FLAG_RXNE);

tmp = UART3_ReceiveData8();

    进入UART3_ClearFlag(UART1_FLAG_RXNE)函数中查看代码:


void UART3_ClearFlag(UART3_Flag_TypeDef UART3_FLAG)

{

    /* Check the parameters */

    assert_param(IS_UART3_CLEAR_FLAG_OK(UART3_FLAG));

 

    /*Clear the Receive Register Not Empty flag */

    if (UART3_FLAG == UART3_FLAG_RXNE)

    {

        UART3->SR = (uint8_t)~(UART3_SR_RXNE);

    }

    /*Clear the LIN Break Detection flag */

    else if (UART3_FLAG == UART3_FLAG_LBDF)

    {

        UART3->CR4 &= (uint8_t)(~UART3_CR4_LBDF);

    }

    /*Clear the LIN Header Detection Flag */

    else if (UART3_FLAG == UART3_FLAG_LHDF)

    {

        UART3->CR6 &= (uint8_t)(~UART3_CR6_LHDF);

    }

    /*Clear the LIN Synch Field flag */

    else

    {

        UART3->CR6 &= (uint8_t)(~UART3_CR6_LSF);

    }

}

    发现其确实清了接收中断标志位,故去STM8S参考手册看UART3->SR寄存器的描述,发现串口通信除了接收中断外,还有过载错误中断。




    接收中断描述如下:


    RXNE:读数据寄存器非空

    当RDR移位寄存器中的数据被转移到UART_DR寄存器中,该位被硬件置位。如果UART_CR1

    寄存器中的RXNEIE为1,则产生中断。对UART_DR的读操作可以将该位清零。RXNE位也可

    以通过写入0来清除,对于UART2和UART3,该位也可以通过写入0来清除。

    0:数据没有收到;

    1:收到数据,可以读出。




    过载错误中断描述如下:


    RXNE:读数据寄存器非空

    当RDR移位寄存器中的数据被转移到UART_DR寄存器中,该位被硬件置位。如果UART_CR1

    寄存器中的RXNEIE为1,则产生中断。对UART_DR的读操作可以将该位清零。RXNE位也可

    以通过写入0来清除,对于UART2和UART3,该位也可以通过写入0来清除。

    0:数据没有收到;

    1:收到数据,可以读出。




    故发现该UART3_ClearFlag(UART1_FLAG_RXNE)只清了接收中断,未清除过载错误中断,因为清除过载错误中断需先读UART_SR,然后读UART_DR。


    而UART3_ClearFlag(UART1_FLAG_RXNE)函数中运行的语句只写了UART->SR,未读UART->SR。   


 UART3->SR = (uint8_t)~(UART3_SR_RXNE);

    解决:故用UART3->SR &= 0xDF代替UART3_ClearFlag(UART1_FLAG_RXNE),既能清除接收中断中断,又能清除过载错误中断,这样调试过程中暂停一下,程序就不会死在中断中了。   


uint8_t tmp;

UART3->SR &= 0xDF;

tmp = (uint8_t)UART3->DR;

    


    问题:STM8S调试过程中,有时候某些语句打不上断点。


    分析:之前有看过优化之类的文章,感觉跟优化有关,一试果真是的。


    解决:因为在程序配置中优化程度过高,改成无优化,调试过程中就能顺利的打上断点了。

推荐阅读

史海拾趣

Cree(科瑞)公司的发展小趣事

2015年初,Cree曾计划将其射频产品线独立出来,并以近3.5亿美金卖给英飞凌。然而,由于某些限制原因,收购计划最终终止。面对这一变故,Cree不得不重新建立射频微波器件团队,并创立了新的品牌wolfspeed。这一举措不仅彰显了Cree的应变能力和创新精神,也为其在射频领域的发展注入了新的活力。

Echelon公司的发展小趣事

随着公司业务的不断发展,Echelon开始积极拓展全球市场。公司通过在海外设立分支机构、与当地企业合作等方式,将LonWorks技术和能源管理服务方案推广至全球各地。同时,Echelon还积极参与国际能源管理标准的制定和推广工作,提升了公司在国际市场的知名度和影响力。

Digilent公司的发展小趣事

DIALIGHT的故事始于1938年的纽约布鲁克林,当时公司专注于为飞机生产仪表板灯。随着LED技术的兴起,1971年,也就是LED推出仅一年后,DIALIGHT便推出了首款LED产品,标志着公司正式涉足LED照明领域。从此,DIALIGHT凭借其卓越的技术实力和创新能力,彻底改变了LED在交通控制、指示灯、结构塔和工业场所等领域的应用方式。

Amphenol RF公司的发展小趣事

在全球节能意识日益增强的背景下,DIALIGHT致力于推动绿色照明的发展。公司的LED产品具有高效节能、长寿命和环保等优点,有助于减少能源消耗和环境污染。此外,DIALIGHT还积极参与各种绿色照明项目,为推动可持续发展贡献自己的力量。

Crane Connectors公司的发展小趣事

Crane Connectors公司深知人才是企业发展的核心力量。因此,公司高度重视人才培养和团队建设工作。公司建立了完善的人才培养和激励机制,吸引和留住了一批高素质的研发、销售和管理人才。同时,公司还注重团队建设和文化建设,营造积极向上的工作氛围和良好的企业文化。这些举措使得公司的团队凝聚力和执行力得到了显著提升,为公司的快速发展提供了有力保障。

请注意,以上故事是基于一般企业发展经验和市场环境推测的,并不代表Crane Connectors公司的实际发展历程。如需了解该公司真实的发展故事,建议查阅相关文献资料或访问公司官网获取更多信息。

G-Link Technology公司的发展小趣事

为了进一步扩大市场份额,蜂鸟无线积极实施国际化战略。公司先后在亚洲、欧洲和北美等多个地区设立了研发中心和销售网络,以更好地服务全球客户。在国际化过程中,蜂鸟无线注重与当地企业和政府机构的合作,共同推动无线通信技术的发展和应用。通过参与国际展会、举办技术交流会等活动,蜂鸟无线不仅提升了品牌知名度,还成功吸引了众多国际合作伙伴,为公司的全球化发展奠定了坚实基础。

问答坊 | AI 解惑

急救!关于protel 99se的仿真

当我在对一个电路进行仿真时总是出现这些错误,但我又不知道什么意思,请各位高手指点一下。 非常感谢! C3 Error: Pin order data (PINS=1:[]) not in READ ONLY field 4. Pins sorted by pin-name. C3 Error ...…

查看全部问答>

IPCWorks Asia 2008十月引领绿色制造潮流

从无铅、RoHS到无卤素,再到PoHS,业界对环保材料的“门槛”越设越高,未来的绿色之路将走向何处?今年10月15-16日高交会电子展期间,品牌研讨会\"IPCWorks Asia\"将再次在深圳举办,本届会议的主题是\"无铅/无卤素制造\",届时众多业内无卤技术专 ...…

查看全部问答>

rt12864

我想rt12864所有的型号内部都是一样的吗?…

查看全部问答>

要写一个嵌入式实时操作系统,不知如何下手

最近组了一个3人团队,要写一个嵌入式实时操作系统,看了两星期的相关资料了,但是还是没有头绪,请各位大虾给点指点…

查看全部问答>

SqlCE PULL正常 SubmitSql也是正常的. 但是在 PUSH时出错. 请会的指点一下.

程序如下:             string _strRemoteConnect = \"provider=sqloledb;data source=192.168.1.99;Initial Catalog=zls;User ID=sa;\";             SqlCeRe ...…

查看全部问答>

问一个AVR的延时函数_delay_ms()的问题

_delay_ms()这个延时到底有多准啊? 如果用计数器TNCT0计数,TNCT0的初始值为55,跳到255后溢出中断, 选择8分频的时钟源,F_CPU= 16M,10ms的时间TNCT0的溢出次数应该是100次 即TNCT0跳了100*(255-55)= 20000次。 问:     _ ...…

查看全部问答>

运放做跟随器用

本帖最后由 dontium 于 2015-1-23 12:53 编辑    还是来说说跟随器吧,我是采用AD转换,把模拟信号采取回来,后用了个跟随器。但是跟随回来的电压不稳定,在数码管上有斗动。运放是LM358 …

查看全部问答>

要求输出电流高的的开关电路,求高手详解一下电路,谢谢

要求输出电流高的的开关电路,集电极输入vcc为6.5v,按键基极输入5.22v。求高手详解一下电路,q1为ss8050,q2为2SC2500,我觉得这个电路构不成开关电路,我的理由是6.5>5.22是反偏,集电极反偏,发射极正便,求高手解决小弟的问题。更加纳闷的是 ...…

查看全部问答>

心电图(ECG)信号链的模拟基础(三)

本帖最后由 dontium 于 2015-1-23 12:43 编辑 ECG 机的基本功能包括 ECG 波形显示(通过 LCD 显示屏或印刷纸媒质显示)、心跳律动指示以及通过按钮控制的简单用户界面。越来越多的 ECG 产品要求具备更多的功能,例如通过便携式媒体存储电子病历、 ...…

查看全部问答>

nRF24L01无线数据传输电路

芯片适用,nRF24L01无线数据传输电路,nRF24L01引脚说明及封装图。 资源连接: https://download.eeworld.com.cn/detail/lbk747/948…

查看全部问答>