在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);
}
}
|