|
本帖最后由 xiaolong_ba 于 2016-6-30 12:51 编辑
一、前言
我们平时在写代码,特别是用到UART时,希望可以动态更改波特率,这样可以更方便地适应各种环境。现在我们就来看看如何在CYPRESS的BLE中实现动态更改波特率。
二、PSOC Creator配置界面的设置
时钟的配置
UART配置
三、关键代码的实现
1、宏定义
#define UART_BUFFER_SIZE (512u)//这里我设置缓冲区大小是512Bytes
uint8 bufferRx[UART_BUFFER_SIZE + 1u]; /* RX software buffer requires one extra entry for correct operation in UART mode */
uint8 bufferTx[UART_BUFFER_SIZE]; /* 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
***************************************************************************//**
*
* 设置串口配置
* \param DIVIDER_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(波特率)即可实现。 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!
|