cortex mo lpc1114 uart串口中断收发数据
扫描二维码
随时随地手机看文章
中断方式串口接收数据
新建一个工程,结构如下图所示:
在main.c文件中,输入以下代码:
#include “lpc11xx.h”
#include “uart.h”
uint8_t rec_buf;
void UART_IRQHandler(void)
{
uint32_t IRQ_ID; // 定义读取中断ID号变量
uint8_t rec_buf; // 定义接收数据变量数组
IRQ_ID = LPC_UART->IIR; // 读中断ID号
IRQ_ID =((IRQ_ID>>1)&0x7);// 检测bit3:bit1
if(IRQ_ID == 0x02 ) // 检测是不是接收数据引起的中断
{
rec_buf = LPC_UART->RBR;
UART_send_byte(rec_buf); // 把接收到的字节发回串口
}
}
int main()
{
UART_init(115200); // 把串口波特率配置为9600
LPC_UART->IER = 0x01; // 开启接收中断
NVIC_EnableIRQ(UART_IRQn); // 开串口中断
while(1)
{
;
}
}
与上一节相比,在main函数中,增加了第19、20行,负责开启串口接收中断。
第19行,给中断允许寄存器IER bit0写1,开启接收中断。
第4~15行是中断服务函数。
第8行,读取中断识别寄存器IIR的值。
第9行,获取IIR寄存器bit1~bit3的值,先右移一位,再把bit4以上的值清0,得到bit1~bit3的值。
第10行,检测是否是接收到数据引起的中断。
打开串口调试助手,波特率调成9600,用串口调试助手给单片机发送数据,单片机将会把接收到的数据发送回串口调试助手。