CC3200串口设置一般有以下步骤
1、引脚映射
2、串口时钟使能
3、波特率及其参数设置
4、FIFO设置
5、中断设置
6、中断函数编写
7、发送数据和接收数据
1.引脚映射
PinTypeUART(ulPin, ulPinMode);
Parameters:
unsigned long ulPin
设置Pin端口,Pin_XX
unsigned long ulPinMode
设置端口的模式,Pin_Mode_X,X可取0-15,分别对应不同的模式可在driverlib中的pin_h查看。
如:
PinTypeUART(PIN_55, PIN_MODE_3);
2.串口时钟使能
PRCMPeripheralClkEnable(ulPeripheral, ulClkFlags);
Parameters:
unsignedlong ulPeripheral
一个外设的端口号,取值可在driverlib中的prcm_h中查看。
unsignedlong ulClkFlags
可以或逻辑取值两种,PRCM_RUN_MODE_CLK和PRCM_SLP_MODE_CLK,前一种启用时钟,后一种关闭时钟。
如:
PRCMPeripheralClkEnable(PRCM_UARTA0,PRCM_RUN_MODE_CLK);
3.波特率及参数设置
UARTConfigSetExpClk(ulBase, ulUARTCLK, ulBaud, ulConfig);
Parameters:
unsigned long ulBase
UART端口的基地址。通常取值为即为ulBase,0号串口。
unsigned long ulUARTCLK
UART的时钟速率。通常使用函数PRCMPeripheralClockGet(PRCM_UARTA0)来获得
unsigned long ulBaud
波特率,即为,115200
unsigned long ulConfig
(UART_CONFIG_WLEN_X |UART_CONFIG_STOP_X|UART_CONFIG_PAR_X)
由三个或逻辑组成分别为数据位(X可取8,7,6,5,指几位数据),停止位(X可取ONE,TWO,即可设置一或两位停止位)和校验位(可取NONE,EVEN,ODD,ZERO,即没有校验位,偶校验,奇校验和零点校验)
如:
UARTConfigSetExpClk(
UARTA0_BASE,
PRCMPeripheralClockGet(PRCM_UARTA0),
115200,
(UART_CONFIG_WLEN_8|UART_CONFIG_STOP_ONE|UART_CONFIG_PAR_NONE)
);
4.FIFO设置
使能串口0的FIFO功能,当设置接收触发中断后,每接收到一个字符就触发一个中断。
UARTFIFODisable(ulBase);
Parameters:
unsigned long ulBase
设置FIFO的触发阀值,CC3200的FIFO是16个8bit的寄存器,当设置接收触发中断,UART_FIFO_RX1_8设置的阀值是2字节,当接收到2个以上的字节就会触发中断。
UARTFIFOLevelSet(ulBase, ulTxLevel, ulRxLevel);
Parameters:
unsigned long ulBase
基地址0号串口
unsigned long ulTxLevel
发送FIFO中断级别,UART_FIFO_TXX_8,X的位置可取1,2,4,6,7,五个级别。
unsigned long ulRxLevel
接收FIFO中断级别,UART_FIFO_TXX_8,X的位置可取1,2,4,6,7,五个级别。
如:
UARTFIFOLevelSet(UARTA0_BASE,UART_FIFO_TX1_8,UART_FIFO_RX1_8);
5.中断设置
注册一个中断函数
UARTIntRegister(ulBase, *pfnHandler);
Parameters:
unsigned long ulBase
基地址0号串口
void(*) void pfnHandler
中断回调函数,其函数声明为uartvoid uart_handle(void)
6.中断函数编写
首先获取串口中断状态寄存器的值
UARTIntStatus(ulBase, bMasked);
Parameters:
unsigned long ulBase
基地址0号串口
tBoolean bMasked
获取经过屏蔽的中断状态寄存器,一般取true
如:
UARTIntStatus(UARTA0_BASE,true);
然后查看接收的FIFO有无数据
UARTCharsAvail(UARTA0_BASE);
最后清除中断标志位,必须在中断处理程序中调用此函数,以便在退出时立即阻止该中断再次被识别。
UARTIntClear(UARTA0_BASE,UART_INT_RX);
7.收发数据
获取数据, 该函数从指定端口的接收FIFO中获取一个字符。如果没有可用字符,则该函数将一直等待直到返回一个字符为止。
UARTCharGet(ulBase);
Parameters:
unsigned long ulBase
基地址0号串口
如:
UARTCharGet(UARTA0_BASE);
发送数据,该函数将字符ucdata为指定端口发送FIFO。如果在传输FIFO中没有可用空间,则该函数等待返回之前有可用空间。
UARTCharPut(ulBase, ucData);
Parameters:
unsigned long ulBase
基地址0号串口
unsigned char ucData
要发送的字符数据
如:
UARTCharPut(UARTA0_BASE,'a');
发送一个字母a
下面举个例子:
voiduart_handle(void) {
int i,k,j;
#if 1
//获取经过屏蔽的中断状态
i = UARTIntStatus(UARTA0_BASE,true);
//接收中断
if(i&UART_INT_RX){
//判断FIFO有没有数据
while(UARTCharsAvail(UARTA0_BASE)){
//获取接收的数据,并直接再发送
UARTCharPut(UARTA0_BASE,UARTCharGet(UARTA0_BASE));
}
//清除中断标志位
UARTIntClear(UARTA0_BASE,UART_INT_RX);
}
}
void uart0_Init(void) {
// 使能时钟
PRCMPeripheralClkEnable(PRCM_UARTA0,PRCM_RUN_MODE_CLK);
//引脚映射
PinTypeUART(PIN_55,PIN_MODE_3);
PinTypeUART(PIN_57,PIN_MODE_3);
//波特率及其参数设置 UARTConfigSetExpClk(UARTA0_BASE,PRCMPeripheralClockGet(PRCM_UARTA0), UART_BAUD_RATE,(UART_CONFIG_WLEN_8|UART_CONFIG_STOP_ONE|
UART_CONFIG_PAR_NONE));
//设置中断回调函数
UARTIntRegister(UARTA0_BASE,uart_handle);
//设置接收中断
UARTIntEnable(UARTA0_BASE,UART_INT_RX);
//失能fifo
UARTFIFODisable(UARTA0_BASE);
//设置FIFO的阀值 //UARTFIFOLevelSet(UARTA0_BASE,UART_FIFO_TX1_8,UART_FIFO_RX1_8);
//发送一个a
UARTCharPut(UARTA0_BASE,'a');
}
void main(){
char cString[MAX_STRING_LENGTH+1];
char cCharacter;
int iStringLength =0;
// Initailizing theboard
BoardInit();
uart0_Init();
while(1){};
}