[PSOC™] 修改 PSoC™ Creator 中的PSoC™ 4 UART 波特率

[复制链接]
 楼主| IFX_Lingling 发表于 2023-10-8 10:16 | 显示全部楼层 |阅读模式
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 测试结果
参考资料:
tpgf 发表于 2024-5-7 16:37 | 显示全部楼层
可以在运行的过程中动态的修改波特率而不会导致通讯失败吗
观海 发表于 2024-5-7 17:15 | 显示全部楼层
在修改完成之后 大概需要等待多长时间才可以再次可靠通讯呢
八层楼 发表于 2024-5-7 18:04 | 显示全部楼层
一个芯片能使用多大的波特率 直接和时钟以及分频器决定
晓伍 发表于 2024-5-7 18:36 | 显示全部楼层
串口通讯每帧数据之间的最小时间间隔是由什么来决定的呢
磨砂 发表于 2024-5-7 19:08 | 显示全部楼层
如果双方都可以自定义波特率 那么可以都定义一个非常规数据的传输速率吗
木木guainv 发表于 2024-5-7 19:40 | 显示全部楼层
不同速度的波特率的容差是一样的吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:
简介:关于英飞凌——我们致力于打造一个更加便利、安全和环保的世界,在赢得自身成功发展的同时,积极践行企业社会责任。

120

主题

208

帖子

6

粉丝
认证:
简介:关于英飞凌——我们致力于打造一个更加便利、安全和环保的世界,在赢得自身成功发展的同时,积极践行企业社会责任。

120

主题

208

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部