KL25Z使用MBed串口发送中断的问题

作者: shaoziyang
上传时间为: 2015-06-11 01:14 PM

在Mbed中,使用串口发送中断时,Freescale的MCU与其它MCU有些不同,串口发送中断不能总是开着,这样程序会不断进入中断服务程序,从而陷入死循环,不能正常运行。

例如,这样的用法程序是无法执行的,LED也不会闪(但是这个程序在ST的MCU上是可以正常运行的):

#include "mbed.h"

DigitalOut myled(LED1);
Serial uart(USBTX, USBRX);

void TXD_isr()
{
    myled = !myled;
}

int main()
{
    uart.attach(&TXD_isr, Serial::TxIrq);
    while(1) {
        uart.putc('>');
        wait(1.0);
    }
}

正确的用法如下,串口每秒发送一个字节,同时LED也会闪一次:

#include "mbed.h"

DigitalOut myled(LED1);
Serial uart(USBTX, USBRX);

void TXD_isr()
{
    uart.attach(0, Serial::TxIrq);   // disable txd isr
    myled = !myled;
}

int main()
{
    while(1) {
        uart.putc('>');
        uart.attach(&TXD_isr, Serial::TxIrq);
        wait(1.0);
    }
}
全部评论 ()

创建讨论帖子

登录 后参与评论
系统提示