xiaolong_ba 发表于 2016-6-30 12:51:12

CYPRESS BLE学习心得(三):如何在CYPRESS BLE中动态更改波特率

本帖最后由 xiaolong_ba 于 2016-6-30 12:51 编辑

一、前言   

    我们平时在写代码,特别是用到UART时,希望可以动态更改波特率,这样可以更方便地适应各种环境。现在我们就来看看如何在CYPRESS的BLE中实现动态更改波特率。

二、PSOC Creator配置界面的设置

时钟的配置

UART配置

三、关键代码的实现

1、宏定义   
#define UART_BUFFER_SIZE    (512u)//这里我设置缓冲区大小是512Bytes
uint8 bufferRx;   /* RX software buffer requires one extra entry for correct operation in UART mode */
uint8 bufferTx;         /* TX software buffer 发送缓冲区可以不用这么大,一般8字节就够用了*/
/***************************************
* 串口波特率设置
* Div SCBCLK=48MHz/BAUD_RATE*OVERSAMPLE-1
* 其中注释的是CYPRESS不支持的波特率
***************************************/
#define BAUD_1200         (2499u)   
#define BAUD_2400         (1249u)
#define BAUD_4800         (624u)
#define BAUD_9600         (312u)
//#define BAUD_14400          (207u)
#define BAUD_19200          (155u)
//#define BAUD_28800          (103u)
#define BAUD_38400          (77u)
#define BAUD_57600          (51u)
//#define BAUD_64000          (46u)
//#define BAUD_76800          (38u)
#define BAUD_115200         (25u)   /* UART: 115200 kbps with OVS = 16. Required SCBCLK = 1.846 MHz, Div = 26 */

2、UART参选数的初始化配置

3、开启UART

其中的DIVIDER_CLOCK就是波特率参数,具体的值如上面的宏定义所示
/******************************************************************************
* Function Name: SetUartConfiguration
***************************************************************************//**
*
*设置串口配置
* \paramDIVIDER_CLOCK:配置波特率的时钟分频,不同的频率分频系统不同。
* \return
*   CYRET_SUCCESS    //Successful
*   CYRET_BAD_PARAM//Uknowns operation mode - no actions
******************************************************************************/
void SetUartConfiguration(uint32_t DIVIDER_CLOCK)
{
//    cystatus status = CYRET_SUCCESS;
    UART_Stop();                  /* Disable component before configuration change */
    /* Change clock divider */
    UART_CLOCK_Stop();
    UART_CLOCK_SetFractionalDividerRegister(DIVIDER_CLOCK, 0u);
    UART_CLOCK_Start();
    /* Configure to UART operation */
    UART_UartInit(&configUart);         
    UART_Start();                     /* Enable component after configuration change */   
}

四、总结
    如果想要动态地更改波特率,只需要调用SetUartConfiguration(波特率)即可实现。

eliterxzgxu 发表于 2016-6-30 15:51:21

感谢楼主分享

xiaolong_ba 发表于 2016-6-30 17:10:32

eliterxzgxu 发表于 2016-6-30 15:51
感谢楼主分享

{:lol:} 有啥不对的,欢迎指出。

zxq1990 发表于 2016-7-1 10:15:42

CYPRESS 的 BLE好用吗?具体什么型号?我也想玩一玩

xiaolong_ba 发表于 2016-7-1 10:37:42

本帖最后由 xiaolong_ba 于 2016-7-1 10:39 编辑

zxq1990 发表于 2016-7-1 10:15
CYPRESS 的 BLE好用吗?具体什么型号?我也想玩一玩

好不好用,这个智者见智,仁者见仁的,如果你是代表公司的话,可能以公司的名义跟代理商申请一套开发套件,但是要与具体的项目来申请,正常情况下是很好申请的。当然啦,如果不是的话可以去淘宝找找有人卖的,或者加CYPRESS群或论坛里问问有没有转卖。
页: [1]
查看完整版本: CYPRESS BLE学习心得(三):如何在CYPRESS BLE中动态更改波特率