UART 波特率取决于驱动 SCB 的时钟和时钟分频值 (clkDivider),其计算方式如公式1: clkDivider=HFCLK/(过采样X目标波特率) | 公式1 |
接下来将演示如何在程序运行时修改 UART 波特率,并通过计算和应用时钟分频值实现115200 bps 的目标波特率。 - 在 PSoC™ Creator 工程的top design (*.cysch) 文件中添加 UART 组件。
- 如 Figure 1 所示,启用时钟 (Clock_1):
Figure1 *.cysch 组件 - 参照 Figure 2,对 UART 组件配置做出如下修改:
Figure2 UART 组件配置 - HFCLK (高速时钟): 24 MHz
- 过采样: 13
- 目标波特率: 115200 bps
- 根据公式 1 计算时钟分频值,此处分频值计算结果为16。
- 在 API 中使用计算结果减一的数值(本例中为16-1)配置时钟,如main.c文件的代码片段所示:
Clock_1_SetFractionalDividerRegister(15,0); //UART 波特率 115200 16-1 Code Listing 1 | /* 运行 SCB (UART 模式) */ Clock_1_Stop(); if(uartboaudrate115200) { Clock_1_SetFractionalDividerRegister(15,0); //UART 波特率 115200 16-1 } else { if(uartboaudrate9600) { Clock_1_SetFractionalDividerRegister(199,0); //UART 波特率 9600 200-1 } } Clock_1_Start(); UART_Start(); while(1) { UART_UartPutString("此为 SCB_UartComm 自定义波特率例程\r\n"); UART_UartPutString("\r\n"); CyDelay(500); }
|
Figure 3 为测试结果:
Figure3 测试结果 参考资料: |