《CC2530串口驱动.docx》由会员分享,可在线阅读,更多相关《CC2530串口驱动.docx(17页珍藏版)》请在第一文库网上搜索。
1、CC2530串口驱动无论学习哪款MUC串口对于我们进行实验调试都是非常方便实用的,可以把程序中涉及的某些中间量或者其他程序状态信息打印出来显示在电脑上进行调试,许多MUC和PC机通信都是通过串口来进行的。CC2530有两个USB转串口,分别是USARTO和USART1。USARTO和USART1是串行通信接口,它们能够分别运行于异步幽1模式或者同步SP1模式。两个USART具体同样的功能,可以设置在单独的I/O引脚。*文件名:Uart.c*功能:CC2530串口相关函数*详细:串口相关函数串口最大晅为系统时钟的1/16inc1udesystem,h”ftinc1udeuart.h相关UART状
2、态结构typedefstruct(u8BuffFu11;接收BUff满u8*RxBuff;接收BUff指针u16RxBuffSize;接收缓冲区大小,一帧数据大小u16UartRxCnt;接收数据计数器UartRxTypeDef;staticUartRXJTypeDefUART_RX2;staticconstu8BAUD_M11=59,59,59,216,59,216,59,216,59,216,216;32MHZ系统时钟对应的分频器小数部分staticconstu8BAUD_E11=6,7,8,8,9,9,10,10,11,U,12;32MHZ系统时钟对应的分频器指数部分* 函数:voidU
3、ART_Init(UART_CHch,USART_BAUDBaud,Functiona1StateRxIntEn)* 功能:串口初始化* 参数:ch:通道选择,UARTCHO,UARTCH1Baud:波特率控制,见USART_BAUDRxIntEnrENAB1E:使能串口接收中断* 返回:无* 依赖:底层宏定义* 说明:一个起始位,8个数据位,一个停止位,无奇偶校验需要开启全局中断voidUARTJnit(UARTCHch,USART.BAUDBaud,Functiona1StateRxIntEn)switch(ch)caseURTCHO:UOCSR=BIT7BIT6;UART模式,使能接收U
4、oUCR=B1T1;无流控,无奇偶校验,8bit,1个停止位,停止位高电平,起始低电平UOGCR二BAUD_EBaud;波特率分频器指数部分UOBAUD=BAUDJIBaud;波特率分频器小数部分POSE1I=BIT2+BIT3;/PO.3TXD,PO.2RXDIEN2&二(13);关闭发送中断URXOIF=0;清除串口接收中断标志UTXOIF=0;清除串口发送中断标志URXOIE二(RxIntEn=ENAB1E)?1:0;使能串口接收中断break;caseUART_CH1:(U1CSR=BIT7+BIT6;UART模式,使能接收U1UCR二B1T1;无流控,无奇偶校验,8bit,1个停止位
5、,停止位高电平,起始低电平U1GCR=BAUD_EBaud;波特率分频器指数部分U1BAUD=BAUDJfBaud;波特率分频器小数部分P1SE1I=BIT4+BIT5;/PO.5TXD,PO.4RXDURX1IF=0;清除串口接收中断标志UTX1IF=0;清除串口发送中断标志URX1IE=(RxIntEn=ENAB1E)?1:0;使能串口接收中断break;defau1t:return;UART_SetRxBuff(ch,NU11,O);初始化串口缓冲区无效)* 函数:voidUART_SendByte(UART_CHch,u8data)* 功能:UART字节发送函数* 参数:ch:通道选择
6、,UART_CHO,UART_CH1data:需要发送的数据* 返回:无* 依赖:底层宏定义* 说明:无voidUART_SendByte(UART_CHch,u8data)(switch(ch)(caseUART_CH0:(UODBUF二data;发送字节数据whi1e(!(UOCSR&BITD);等待发送数据寄今番为空UOCSR&=BIT1;break;caseUARTCHI:U1DBUF二data;发送字节数据whi1e(!(U1CSR&BIT!);等待发送数据寄存器为空U1CSR&二BIT1;break;*函数:defau1t:break;voidUART2_SendData(u8*p
7、buff,u161en)*功能:串口发送任意长度数据*参数:ch:通道选择,UARTCHO,UARTCH1pbuff:数据缓冲区指针,1en:数据长度*返回:无*依赖:底层宏定义*说明:无voidUART-SendData(UART_CHch,u8*pbuff,u161en)u16i;switch(ch)(caseUARTCHO:(for(i=0;i1en;i+)UODBUF=pbuffi;发送字节数据whi1e(!(UOCSR&BITD);等待发送数据寄存器为空UOCSR&=BIT1;)break;caseUART_CH1:for(i=0;i1en;i+)(U1DBUF=pbuffi;发送字
8、节数据whi1e(!(U1CSR&BITD);等待发送数据寄存器为空U1CSR&二BIT1;break;defau1t:break;* 函数:voidUART2_SendString(UART_CHch,constchar函数:voidUART_RxEnab1e(UART_CHch,Functiona1StateEnab1e)*功能:UART接收使能*参数:ch:通道选择,UARTCHO,UARTCH1pStr)* 功能:UART发送字符串* 参数:ch:通道选择,UARTCHO,UARTCH1pStr:字符串指针* 返回:无* 依赖:底层宏定义* 说明:遇到0后停止发送voidUART_Se
9、ndString(UART_CHch,constchar*pStr)whi1e(*pStr!=i0f)(UART_SendByte(ch,*pStr+);)Enab1erENAB1E:使能接收,DISAB1E:取消接收* 返回:无* 依赖:底层宏定义* 说明:无voidUART_RxEnab1e(UART_CHch,Functiona1StateEnab1e)switch(ch)(caseUARTCHO:UOCSR二(Enab1e=ENAB1E)?(UOCSRBIT6):(UOCSR&(B6);使能接收break;caseUARTCHI:U1CSR=(Enab1e=ENAB1E)?(U1CSR
10、BIT6):(U1CSR&(BIT6);使能接收break;defau1t:break;)/UARTO中断服务程序* Pragmavector=URXO_VECTORinterruptvoidUART0_IRQHandIer(void)if(UARTRX1.RxBuffSize0)UARTRX0if(UARTRX.RxBuffUARTRX0.UartRxCnt+=UODBUF;0.UartRxCnt=UARTRX0.RxBuffSize)UART_RX0.UartRxCnt=0;UARTRX0.BuffFu11=1;e1seURXOIF0;清除串口接收中断标志/UART1中断服务程序#Prag
11、maVeCtor=URX1VECTORinterruptvoidUART1_IRQHand1er(void)if(UART_RX1.RxBuffSize0)UART_RX1.RxBuffUART_RX1.UartRxCnt+=U1DBUF;if(UART_RX1.UartRxCnt=UART_RX1.RXBUffSiZe)UARTRX1.UartRxCnt=O;UART_RX1.BuffFu11=1;)e1seURX1IF=0;清除串口接收中断标志)* 函数:boo1UART_GetNewData(UART_CHch,u8*pData)* 功能:获取串口新数据* 参数:ch:通道选择,UART
12、_CHO,UART_CH1PData:数据缓冲区指针* 返回:TRUE:有新数据,FA1SE:无新数据* 依赖:底层宏定义* 说明:用于非中断模式下获取串口新数据boo1UART.GetNewData(UART_CHch,u8*pData)switch(ch)caseUART_CHO:(if(UOCSR&BIT2)*pData=UODBUF;returnTRUE;returnFA1SE;break;caseUART_CH1:if(U1CSR&BIT2)(*pData=U1DBUF;returnTRUE;)returnFA1SE;break;defau1t:returnFA1SE;* 函数:bo
13、o1UART_GetRxBuffFu1!F1ag(UART_CHch)* 功能:获取串口接收缓冲区满标志* 参数:ch:通道选择,UARTCHO,UARTCH1* 返回:TRUE:满,FA1SE:没有满* 依赖:底层宏定义* 说明:用于判断接收缓冲区是否满,会清除标志boo1UART-GetRxBuffFu1IF1ag(UART_CHch)if(URTRXch.BuffFu1D缓冲区已满UART_RXch.BuffFu11=0;/清除满标志returnTRUE;)returnFA1SE;)*函数:voidUART_SetRxBuff(UART_CHch,u8功能:设置串口接收缓冲区pRxBuf
14、f,u16BuffSize)*参数:ch:通道选择,UART_CHO,UART_CH1pRxBuff:缓冲区指针,BuffSize:缓冲区大小* 返回:无* 依赖:底层宏定义* 说明:用于中断接收voidUART.SetRxBuff(UART_CHch,u8*pRxBuff,u16BuffSize)UART_RXch.RxBuffSize=BuffSize;设置缓冲区大小URTRXch.RxBuff=pRxBuff;设置缓冲区指针UART_RXch.UartRxCnt=0;计数器清零)* 函数:u16UART_GetRxCnt(UART_CHch)* 功能:获取串口接收数据计数器* 参数:ch:通道选择,UART_CHO,UART_CH1* 返回:接收到的数据数量* 依赖:底层宏定义* 说明:无u16UARTGetRxCnt(UARTC