打印
[单片机芯片]

MCU应用笔记(二)UART0 波特率设置说明

[复制链接]
1507|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
WCHTech2|  楼主 | 2019-10-21 13:18 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 WCHTech2 于 2020-10-26 14:06 编辑

CH54XCH55XUART0波特率设置说明
       沁恒微8位单片机系列如CH549、CH554、CH559等一般都默认UART0做打印调试接口,如果工程中使用了标准库函数printf打印调试,那么进行数据接收时建议也使用getchar这个标准库函数,不建议使用SBUF自建函数接收。
       因为沁恒微的单片机芯片都支持USB功能,需要提供48MHz的USB时钟,所以分频后系统时钟都是整数。同时UART0时钟是由T1或T2产生,所以根据波特率和系统时钟计算出初值赋给定时器时导致个别波特率的计算误差较大,无法使用,如果计算的误差在2%范围内都可以进行稳定的传输。(误差是由计算值四舍五入产生)。具体支持的波特率请参考附件1(CH5XX波特率.xlsx)
       本文将通过具体的例程讲解CH54X、CH55X系列单片机 UART0的波特率设置方法,用户可以根据该说明结合对应型号的单片机数据手册以及例程对UART0 进行初始化。

具体步骤如下:
一、当波特率由定时器T1产生时,其计算公式如表1。
表1:由T1产生UART0波特率的计算公式
bTMR_CLK
bT1_CLK
SMOD
描述
1
1
0
TH1 = 256 – Fsys / 32 / 波特率
1
1
1
TH1 = 256 – Fsys / 16 / 波特率
0
1
0
TH1 = 256 – Fsys / 4/ 32 / 波特率
0
1
1
TH1 = 256 – Fsys / 4/16 / 波特率
X
0
0
TH1 = 256 – Fsys /12 / 32 / 波特率
X
0
1
TH1 = 256 – Fsys /12 / 16 / 波特率

第一步:根据需要的波特率,参考附件一可用的公式,选取相应的计算公式。以主频12M,波特率9600bps为例,可由公式TH1 = 256 – 12000000/ 32 / 9600或公式TH1 = 256 – 12000000/ 16 / 9600计算得到。
第二步:根据所选的计算公式,初始化UART0。
(1)当选择TH1 = 256 – 12000000/ 32 / 9600计算公式时,设置bTMR_CLK =1,bT1_CLK =1,SMOD =0,具体代码如下,详细的可参考对应芯片的例程。
(2)当选择TH1 = 256 – 12000000/ 16 / 9600计算公式时,设置bTMR_CLK =1,bT1_CLK =1,SMOD =1,具体代码如下,详细的可参考对应芯片的例程。

二、当波特率由定时器T2产生时,其计算公式如表2。
表2:由T2产生UART0波特率的计算公式
bTMR_CLK
bT2_CLK
描述
1
1
RCAP2=65536 – Fsys / 16 / 波特率
0
1
RCAP2=65536 – Fsys / 2/ 16 / 波特率
X
0
RCAP2=65536 – Fsys / 4/ 16 / 波特率
第一步:根据需要的波特率,参考表2,选取相应的计算公式。以主频12M,波特率9600bps为例,可由公式RCAP2=65536 – 12000000/ 16 / 9600计算得到。
第二步:根据所选的计算公式,初始化UART0。

注:当UART0不做printf调试打印使用,而是做普通的通信串口时,UART0 mInitSTDIO( ) 初始化中的TI=1一定要去掉。


使用特权

评论回复
沙发
copower| | 2020-8-10 18:27 | 只看该作者
感谢官方教学

使用特权

评论回复
板凳
imdx| | 2020-10-25 17:59 | 只看该作者
这个例子波特率是9600,试试115200这个更常用的波特率?

使用特权

评论回复
地板
WCHTech2|  楼主 | 2020-10-26 09:53 | 只看该作者
imdx 发表于 2020-10-25 17:59
这个例子波特率是9600,试试115200这个更常用的波特率?

可以参考附件

使用特权

评论回复
5
imdx| | 2020-10-26 13:20 | 只看该作者
本帖最后由 imdx 于 2020-10-26 13:22 编辑

附件输入115200波特率结果是错误的

使用特权

评论回复
6
WCHTech2|  楼主 | 2020-10-26 14:07 | 只看该作者
imdx 发表于 2020-10-26 13:20
附件输入115200波特率结果是错误的

建议使用5V供电,选择24M主频

使用特权

评论回复
7
imdx| | 2020-10-26 14:25 | 只看该作者
WCHTech2 发表于 2020-10-26 14:07
建议使用5V供电,选择24M主频

硬件限制了要用3.3V电平,5V供电的设备越来越少了。51单片机可能还有5V,别的ARM/FPGA/DSP都是3.3V了。
btw. 3.3V直接主频24M,结果是什么?无法运行?还是可以运行,温度范围变窄?

使用特权

评论回复
8
WCHTech2|  楼主 | 2020-10-26 18:47 | 只看该作者
imdx 发表于 2020-10-26 14:25
硬件限制了要用3.3V电平,5V供电的设备越来越少了。51单片机可能还有5V,别的ARM/FPGA/DSP都是3.3V了。
b ...

这个是设计的原因,CH554/2/1 3.3V最高支持16M,也可以选择CH54X系列的MCU如CH549/8等,3.3V时主频最高到24M

使用特权

评论回复
9
imdx| | 2020-10-26 21:31 | 只看该作者
WCHTech2 发表于 2020-10-26 18:47
这个是设计的原因,CH554/2/1 3.3V最高支持16M,也可以选择CH54X系列的MCU如CH549/8等,3.3V时主频最高到 ...

CH548/549相同价位上,有32位带USB的ARM可选了,主频远高于24M
CH55x的价值在于它的价位上带USB的MCU没有对手,即使FLASH寿命只有200次也不影响。

使用特权

评论回复
10
WCHTech2|  楼主 | 2020-10-27 10:34 | 只看该作者
imdx 发表于 2020-10-26 21:31
CH548/549相同价位上,有32位带USB的ARM可选了,主频远高于24M
CH55x的价值在于它的价位上带USB的MCU没有 ...

您好,这边可以推荐您使用CH546这颗芯片:http://www.wch.cn/products/CH546.html 。3.3V下主频最高50M,115200波特率可以实现。批量价格在2元以内,和CH552相差不多,具体价格可以咨询销售:025-52638388.

使用特权

评论回复
11
zeshoufx| | 2020-10-27 17:27 | 只看该作者
谢谢分享【UART0 波特率设置说明】

使用特权

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

本版积分规则

89

主题

1145

帖子

8

粉丝