打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
STM8S103xx串口一直中断

    前段时间做了一个项目,有部分功能是接收串口命令,根据命令保存一些系统数据(用STM8S内自带的EEPROM)。项目完成之初用串口调试工具发单条命令可以正常接收保存,但用一个上位机软件连续发命令(约20ms)时单片机死机了。IDE用的是IAR,虽说可以直接在线调试,但这个IDE不能在运行时设置断点,所以找了好久一直没有查到程序停在了哪里,直接代码单步执行跑得有点奇怪,但进出中断也正常。后来改用汇编界面单步,发现程序都是在进栈出栈这些指令才怀疑是不是有一直进出中断,而进出中断肯定是中断标志置位了。找出STM8S规定书仔细一查才发现STM8S的UART还有个“过载错误”,要命的是此“过载错误”是产生中断的,以前用的51没发现有过载错误这一说,AVR有,但不产生中断。呵呵,知道原因了问题当然好解决。下面我最新的一个处理UART中断的方法,给新手参考参考,我想用到其它MCU也是一样的道理;如果是老手路手请多指点以完善UART的接收。

#pragma vector = UART1_R_RXNE_vector // 20
__interrupt void ISR_UART1_RECEIVE(void)
{  
    BYTE tempDa;
   
    if (UART1_SR_OR_LHE)
    {
        // 发生过载错误,顺序读UART1_SR, UART1_DR来清UART1_SR_OR_LHE位
        tempDa = UART1_SR;
        tempDa = UART1_DR;      

  // 做一些错误处理

    }
    else
    {
        tempDa = UART1_DR; // 之所以用临时变量是因为UART1_DR随时会变
        
        switch (RecvStatus)
        {
            case XXXX:                

      break;

        }
    }
}

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
莴牛实验室 » STM32芯片的USART(串口)的RXNE不能置位或无法置位的原因。
IAR+STM8 UART串口发送与中断接收
STM32 HAL串口DMA发送一直失败
[STM32CubeMX]OS环境下安装STM32CubeMX+简单串口例程
STM8S和STM8L调试串口中断的注意点
stm32串口重定向printf
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服