历史上的今天
今天是: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调试过程中,有时候某些语句打不上断点。
分析:之前有看过优化之类的文章,感觉跟优化有关,一试果真是的。
解决:因为在程序配置中优化程度过高,改成无优化,调试过程中就能顺利的打上断点了。
史海拾趣
|
当我在对一个电路进行仿真时总是出现这些错误,但我又不知道什么意思,请各位高手指点一下。 非常感谢! C3 Error: Pin order data (PINS=1:[]) not in READ ONLY field 4. Pins sorted by pin-name. C3 Error ...… 查看全部问答> |
|
从无铅、RoHS到无卤素,再到PoHS,业界对环保材料的“门槛”越设越高,未来的绿色之路将走向何处?今年10月15-16日高交会电子展期间,品牌研讨会\"IPCWorks Asia\"将再次在深圳举办,本届会议的主题是\"无铅/无卤素制造\",届时众多业内无卤技术专 ...… 查看全部问答> |
|
SqlCE PULL正常 SubmitSql也是正常的. 但是在 PUSH时出错. 请会的指点一下. 程序如下: string _strRemoteConnect = \"provider=sqloledb;data source=192.168.1.99;Initial Catalog=zls;User ID=sa;\"; SqlCeRe ...… 查看全部问答> |
|
_delay_ms()这个延时到底有多准啊? 如果用计数器TNCT0计数,TNCT0的初始值为55,跳到255后溢出中断, 选择8分频的时钟源,F_CPU= 16M,10ms的时间TNCT0的溢出次数应该是100次 即TNCT0跳了100*(255-55)= 20000次。 问: _ ...… 查看全部问答> |
|
要求输出电流高的的开关电路,集电极输入vcc为6.5v,按键基极输入5.22v。求高手详解一下电路,q1为ss8050,q2为2SC2500,我觉得这个电路构不成开关电路,我的理由是6.5>5.22是反偏,集电极反偏,发射极正便,求高手解决小弟的问题。更加纳闷的是 ...… 查看全部问答> |
|
本帖最后由 dontium 于 2015-1-23 12:43 编辑 ECG 机的基本功能包括 ECG 波形显示(通过 LCD 显示屏或印刷纸媒质显示)、心跳律动指示以及通过按钮控制的简单用户界面。越来越多的 ECG 产品要求具备更多的功能,例如通过便携式媒体存储电子病历、 ...… 查看全部问答> |
|
芯片适用,nRF24L01无线数据传输电路,nRF24L01引脚说明及封装图。 资源连接: https://download.eeworld.com.cn/detail/lbk747/948… 查看全部问答> |




