本帖最后由 WCHTech2 于 2020-10-26 14:06 编辑
CH54X、CH55XUART0波特率设置说明 沁恒微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波特率的计算公式 | | | | | | | TH1 = 256 – Fsys / 32 / 波特率 | | | | TH1 = 256 – Fsys / 16 / 波特率 | | | | TH1 = 256 – Fsys / 4/ 32 / 波特率 | | | | TH1 = 256 – Fsys / 4/16 / 波特率 | | | | TH1 = 256 – Fsys /12 / 32 / 波特率 | | | | 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一定要去掉。
|