串口操作,首先是功率,时钟操控翻开。
然后是管脚挑选,设置为串口形式。
然后设定串口传输数据格式。
波特率设置,(主见有小数位和没小数位时分不一样,有小数位需求设置DIVADDL和MULVAL)。
然后锁存波特率。
设定操控UARTn RX和TX FIFO的操作。
最终翻开体系中UART0的中止,使能接纳中止。
详见代码,代码中有具体注释。
- #include<LPC17XX.h>
- #define
FOSC 12000000 - #define
FCCLK (FOSC * 8) - #define
FCCO (FCCLK * 3) - #define
FPCLK (FCCLK / 4) - int
Uart0RecvBuf; // UART0 RX DATA - void
Uart0Init(uint32_t bps) - {
LPC_SC->PCONP |= (1<<3); //翻开UART0功率、时钟操控位 LPC_PINCON->PINSEL0 = 0X00000050; //P0.2 P0.3设置为串口 LPC_UART0->LCR = 0x83; //设置串口数据格式,8位字符长度,1个中止位,无校验, //使能拜访除数锁存器 ,设定波特率 LPC_UART0->DLM = ((FPCLK/16)/bps) / 256; //除数高八位 , 没有小数状况 LPC_UART0->DLL = ((FPCLK/16)/bps) % 256; //除数第八位 LPC_UART0->LCR = 0x03; //制止拜访除数锁存器,确定波特率 LPC_UART0->FCR = 0x07; //操控UARTn RX和TX FIFO的操作。接纳数据一个字节触发中止 NVIC_EnableIRQ(UART0_IRQn); LPC_UART0->IER = 0x01; //使能接纳中止 - }
- int
Uart0RecvByte(void) //查询法 - {
//当UnRBR包括未读字符时,UnLSR[0]就会被置位;当UARTn RBR FIFO为空时,UnLSR[0]就会被清零 //0 – UnRBR为空 //1 – UnRBR包括有用数据 while(!((LPC_UART0->LSR) & 0x01)); //等候判别LSR[0]是否是1,1时表明RBR中接纳到数据 return(LPC_UART0->RBR); //读取接纳数据 - }
- int
Uart0SendByte(int buf) - {
//当检测到UARTn THR已空时,THRE就会立即被设置。写UnTHR会清零THRE //0 – UnTHR包括有用字符 //1 – UnTHR为空 while(!((LPC_UART0->LSR) & 0x01)); //等候判别LSR[5](即THRE)是否是1,1时表明THR中为空 LPC_UART0->THR = buf; //发送数据 return 0; - }
- void
UART0_IRQHandler(void) - {
Uart0RecvBuf = LPC_UART0->RBR; //读取接纳数据 Uart0SendByte(Uart0RecvBuf); //发送接纳到的数据 - }
- int
main(void) - {
int temp; SystemInit(); Uart0Init(115200); while(1) { // temp = Uart0RecvByte(); //查询接纳数据 // Uart0SendByte(temp); //发送数据 } - }