LPC1768之串口UART0
时间:11-21
来源:互联网
点击:
串口操作,首先是功率,时钟控制打开。
然后是管脚选择,设置为串口模式。
然后设定串口传输数据格式。
波特率设置,(主意有小数位和没小数位时候不一样,有小数位需要设置divADDL和MULVAL)。
然后锁存波特率。
设定控制UARTn RX和TX FIFO的操作。
最后打开系统中UART0的中断,使能接收中断。
详见代码,代码中有详细注释。
- #include
- #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); //发送数据 } - }
LPC1768串口UART 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)