BC0005-CSR uEnergy例子讲解之UART操作

本文档主要讲解SDK中uart例子,首先找到SDK中的uartio工程:

打开后,我们先看开发工具界面左侧的文件:

Byte_queue.c—主要处理一些数据buffer,纯C语音代码,与UART操作无直接关系,本文不做过多说明;

Main.c—主函数;

Uartio.c—包含UART操作函数。

首先,我们打开main.c文件,第一个函数void AppPowerOnReset(void),函数体为空,跟我们之前讲到的一样,一般此函数都为空;

第二个函数:

其中SleepModeChage将sleep_mode设置为never,如果芯片进入sleep,则可能会丢失部分UART收到的数据,所以,将其设置为永不休眠;当然,这样会导致芯片功耗上升,在一些低功耗应用场合,我们可以通过其他手段来即保证平时的低功耗,又保证能正确接受到数据,比如可以增加唤醒IO。

接下去的函数Start(),直接配置UART并结束AppInit函数。

Start()函数在uartio.c文件中,为了方便说明,这里把说明写在代码中:

void Start(sleep_state last_sleep_state)

{

//初始化UART,第一个和第二个参数是设置callback函数的,函数名称可以自己定义,每当收到或发送对应数量字节后会调用此callback函数;

//rx_buff、tx_buff为存放数据的缓存,RX_BUFF_SIZE、TX_BUFF_SIZE为buff长度

// uart_data_unpacked为数据不打包,一般都设置为此方式。

    UartInit(uartRxDataCallback,

             uartTxDataCallback,

             rx_buffer, RX_BUFFER_SIZE,

             tx_buffer, TX_BUFFER_SIZE,

             uart_data_unpacked);

       //使能Uart

    UartEnable(TRUE);

       //设置UART收到1byte就自动触发Callback函数

    UartRead(1, 0);

//发送Clear screen命令,此命令为PC软件端,对于CSR1010来说只是一个普通的字符,具体可以查看vt100ClearScreen函数是怎么写的

    vt100ClearScreen();

    //同样,此函数也只是打印一个sleep状态信息,对于芯片来说就是一个字符串

    printSleepState(last_sleep_state);

    const uint8 message[] = “\r\nType something: “;

    //将发送数据添加到队列中

    BQForceQueueBytes(message, sizeof(message)/sizeof(uint8));

    //此函数将Quenue中的数据拿出来放到Uart缓存中发送

    sendPendingData();

}

上面提到的sendPendingData函数中,有一个函数我们需要看一下:

UartWrite很好理解,就是将要发送的数据写入底层,写入正确返回TRUE。

在UART操作中,另外两个重要的函数如下:

uartRxDataCallback和uartTxDataCallback函数就是前面我们设置的Callback函数,关于在整个代码中的作用,代码的注释写非常清楚了,用户可以在这两个函数中增加自己的代码。

另外,关于UART的API函数,可以查看API的说明文档:

其中UartConfig可以设置UART的速率,以及一些其他参数,比如奇偶校验,停止位等等。。。

好了,代码分析就到这,当然,整个工程中还有很多写的不错的地方,特别是Byte_queue.c,用户有空可以研究一下此代码。

留下评论

邮箱地址不会被公开。 必填项已用*标注