打印
[PSoC™]

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

[复制链接]
645|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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 | 只看该作者
一个芯片能使用多大的波特率 直接和时钟以及分频器决定

使用特权

评论回复
5
晓伍| | 2024-5-7 18:36 | 只看该作者
串口通讯每帧数据之间的最小时间间隔是由什么来决定的呢

使用特权

评论回复
6
磨砂| | 2024-5-7 19:08 | 只看该作者
如果双方都可以自定义波特率 那么可以都定义一个非常规数据的传输速率吗

使用特权

评论回复
7
木木guainv| | 2024-5-7 19:40 | 只看该作者
不同速度的波特率的容差是一样的吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

105

主题

189

帖子

5

粉丝