STM8S单片机串口调试

发布者:剑戟辉煌最新更新时间:2020-02-24 来源: eefocus关键字:STM8S  单片机  串口调试 手机看文章 扫描二维码
随时随地手机看文章

    最近在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调试过程中,有时候某些语句打不上断点。


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


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

关键字:STM8S  单片机  串口调试 引用地址:STM8S单片机串口调试

上一篇:STM 8 AD 转换问题
下一篇:STM8S003F使用I/O口模拟串口(一)发送数据

推荐阅读最新更新时间:2024-11-13 10:47

单片机、ARM、DSP、FPGA的技术特点和区别
单片机作为最典型的嵌入式处理器,它的成功应用推动了嵌入式系统的发展。 单片机以体积小、功能强、可靠性好、性能价格比高等特点,已成为实现工业生产技术进步和开发机电一体化和智能化测控产品的重要手段。图2所示为单片机。 图1 单片机 图2 ARM处理器 ARM(Advanced RISC Machines)是微处理器行业的一家知名企业,设计了大量高性能、廉价、耗能低的RISC处理器、相关技术及软件。 ARM架构是面向低预算市场设计的第一款RISC微处理器,基本是32位单片机的行业标准,它提供一系列内核、体系扩展、微处理器和系统芯片方案,四个功能模块可供生产厂商根据不同用户的要求
[单片机]
<font color='red'>单片机</font>、ARM、DSP、FPGA的技术特点和区别
51单片机外部中断触发方式
51单片机的外部中断有两种触发方式可选:电平触发和边沿触发。选择电平触发时,单片机在每个机器周期检查中断源口线,检测到低电平,即置位中断请求标志,向CPU请求中断。选择边沿触发方式时,单片机在上一个机器周期检测到中断源口线为高电平,下一个机器周期检测到低电平,即置位中断标志,请求中断。 这个原理很好理解。但应用时需要特别注意的几点: 1) 电平触发方式时,中断标志寄存器不锁存中断请求信号。也就是说,单片机把每个机器周期的S5P2采样到的外部中断源口线的电平逻辑直接赋值到中断标志寄存器。标志寄存器对于请求信号来说是透明的。这样当中断请求被阻塞而没有得到及时响应时,将被丢失。换句话说,要使电平触发的中断被CPU响应并执行,必须保证外部中
[单片机]
你不知道的单片机编程器分类
G840联机/脱机烧写编程器 1、40针准全驱动,进口优质锁紧座。满足绝大多数IC烧录的脚位需求,充分提供了未来升级的基础条件。 2、用户享受终身升级支持。纯软件升级,只要从网上下载最新版本软件,就可完成升级。您的编程器将永远是最新的。 3、提供联机操作模式和脱机操作模式,既适用于开发、试验、教学,又适用于小批量量产,无须总是开电脑。 4、触摸键控制,你可以不用点击鼠标,使操作更为方便。触摸键经久耐用,永不损毁。 5、针脚接触检测准确无误。遇接触不良或插放错误,及时中止操作进程。 6、操作结果三重指示:软件界面显示、指示灯显示、可选择的蜂鸣指示。 7、双重电源模式。专用外部稳压电源供电方式,进一步确保稳定工作。有效避免部分电脑
[单片机]
你不知道的<font color='red'>单片机</font>编程器分类
9-基于51单片机的智能火灾报警系统
具体实现功能 系统由51单片机+MQ-2烟雾传感+ADC0832模数转换芯片+DS18B20温度传感器+数码管显示+按键模块+声光报警模块构成。 具体功能: 1、实时监测及显示温度值和烟雾浓度; 2、可通过三个按键设置烟雾报警值和温度报警值; 3、可实现手动紧急报警和手动取消报警功能; 4、温度超过阈值时,蜂鸣器响黄灯闪烁;烟雾超过阈值时,蜂鸣器响,红灯灯闪烁; 5、测距范围:烟物浓度:0——9等级;温度范围:0——99度。 设计背景 智能火灾报警器系统的发展变化很快,新技术的发展进一步拓展了火灾报警系统的应用领域,为一些报警系统无法胜任的环境提供了有效的手段。我国的火灾报警从无到有,从有到现在的智能。
[单片机]
9-基于51<font color='red'>单片机</font>的智能火灾报警系统
单片机在家用多功能电热水器中的应用
随着人民生活水平的不断提高,高性能热水器的需求量不断上升。根据市场调查,目前市场上有两种电热水器,即连续水流式和贮水式。前者的特点是加热速度快、体积小,但需要的功率大。当前市场上贮水式电热水器大多为机械式,存在温度控制简单、精度低、加热时间长、可靠性差等缺点。本文针对贮水式电热水器的上述情况,设计了一种以单片机为核心的多功能家用电热水器,下面介绍其控制器系统的设计。 1 多功能家用电热水器的功能特点 该电热水器能够设定水温并数字显示水温,显示范围0℃~99℃。具有漏电保护功能,当出现漏电现象时,能够自动切断电源。系统掉电能够保护设定数据。出现传感器故障时,可迅速切断电源并报警提示。 2 系统总体设计 根据要实现的功能特点,本系统选
[单片机]
PIC18F8490单片机可用于连接LCD段驱动器的设计
4×4小键盘的典型数字接口使用8个数字I/O引脚。但使用8个引脚作为数字I/O会占用可用于连接LCD的段驱动器引脚的数量。 通过使用2个数字I/O引脚和2个模拟输入引脚,可以向PIC单片机添加一个4×4小键盘,而无需牺牲它的任何LCD段驱动器引脚。 下图中显示了小键盘连接示意图。示例中使用的是PIC18F8490,但该技术可以用于任意LCDPIC MCU。 图中使用的两个数字I/O引脚是RBO和RB5,也可以使用任意两个其他的数字I/O引脚。所使用的两个模拟引脚是ANO和AN1。 要读取小键盘,请遵循以下步骤: 1.首先,将RBO设计为输出高电平,将RB5设为输入(呈高阻抗)。 2.执行两次连续的A/D转换,先转
[单片机]
PIC18F8490<font color='red'>单片机</font>可用于连接LCD段驱动器的设计
51单片机完成时钟形式显示
题目要求: 用四个数码管完成时钟形式显示。 如显示1 2. 0 0 然后一个按键控制暂停并闪烁,另一个按键控制分钟加1 要求:当第一个按键不按下时,第二个按键无法完成加1动作。 仿真图,如下: 按键K1控制暂停闪烁,开始,K2加1 这里需要说明一下,因为没有教到时钟,时钟部分,将在下一个微博实现,其实很简单,用时钟中断即可完成,那样的时钟比较准确。 写代码之前,要仔细看仿真的接口问题,这样才能写好代码,代码如下: #include reg51.h /* 按下key1 暂停并闪烁,再按一下 继续, key2按下加1,但是key2必须在key1按下后操作*/ unsigned char c ={0XC0,
[单片机]
51<font color='red'>单片机</font>完成时钟形式显示
GD32 MCU如何将烧录口配置为GPIO使用?
如果大家在进行GD32 MCU开发时发现GPIO引脚使用不足,可以尝试将烧录口配置为GPIO使用,这样就可以多出几个引脚使用,但使用的时候如何配置以及有哪些注意事项,本视频将会为大家进行解答。 GD32 MCU存在两种GPIO备用功能的配置,一种是采用成组重映射REMAP的模式,比如GD32F10X/20x/30x/e10x/E50X等系列,一种是采用AFIO模式,比如GD32F1X0/3X0/4XX/E230等。 成组reamp重映射的模式需要将一组的GPIO进行重映射,如下图GD32F30X IIC0的重映射配置,PB6和PB8需要组合使用,PB7和PB9需要组合使用,而PB6和PB9就不可以组合使用。 AFIO
[单片机]
GD32 <font color='red'>MCU</font>如何将烧录口配置为GPIO使用?
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved