打印
[DemoCode下载]

ML51的串口1例程修改建议

[复制链接]
604|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
643757107|  楼主 | 2019-8-31 22:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/*---------------------------------------------------------------------------------------------------------*/
/*                                                                                                         */
/* Copyright(c) 2019 Nuvoton Technology Corp. All rights reserved.                                         */
/*                                                                                                         */
/*---------------------------------------------------------------------------------------------------------*/

//***********************************************************************************************************
//  Website: http://www.nuvoton.com
//  E-Mail : MicroC-8bit@nuvoton.com
//***********************************************************************************************************

#include "ML51.h"

/**
* [url=home.php?mod=space&uid=247401]@brief[/url]       UART1 use as printf.
* @param       None
* [url=home.php?mod=space&uid=266161]@return[/url]      None
* [url=home.php?mod=space&uid=1543424]@Details[/url]     None
*/


void main (void)
{

/**
For UART1 P2.3 as TXD1 / P2.3 as RXD1 GPIO setting
* include gpio.c in Common Setting for UART0
*/
    MFP_P23_UART1_TXD;                              // UART0 TXD use P0.5
    P23_QUASI_MODE;                                 // set P0.5 and P0.6 as Quasi mode for UART0 trasnfer
/**
For UART1 initial setting
* include uart.c in Common Setting for UART0
*/
    UART_Open(24000000,UART1,115200);              // Open UART0 use timer1 as baudrate generate and baud rate = 115200en(24000000,UART0_Timer1,115200);        // Open UART0 use timer1 as baudrate generate and baud rate = 115200
    set_S1CON_TI_1;                                // printf must first set TI_1 =1;
   
/**
  UART1 loop test
  UART1 TXD1 send data received by RXD1 pin. Connect TXD1 pin and RXD1 pin check result.
*/
    while(1)
    {
      printf ("\n hello world! " );
      Timer2_Delay(24000000,128,1000,1000);        //Means timer base 24MHz, divider 128, delay time 100 ms (100000us)
    }
}
上面是官方的例子,在启用串口1作为printf的时候,使用了set_S1CON_TI_1; // printf must first set TI_1 =1;
非常难易理解,而在串口0的例子中没这么用,串口0的例子使用的是
ENABLE_UART0_PRINTF
于是查找头文件发现了问题。头文件中是有一条
ENABLE_UART1_PRINTF
的,然后使用宏替换的set_S1CON_TI_1
所以这里写例程序的程序员故意挖坑了。

使用特权

评论回复
沙发
643757107|  楼主 | 2019-8-31 22:29 | 只看该作者
所以这个例子应该是
/*---------------------------------------------------------------------------------------------------------*/
/*                                                                                                         */
/* Copyright(c) 2019 Nuvoton Technology Corp. All rights reserved.                                         */
/*                                                                                                         */
/*---------------------------------------------------------------------------------------------------------*/

//***********************************************************************************************************
//  Website: http://www.nuvoton.com
//  E-Mail : MicroC-8bit@nuvoton.com
//***********************************************************************************************************

#include "ML51.h"

/**
* @brief       UART1 use as printf.
* @param       None
* @return      None
* @details     None
*/


void main (void)
{

/**
For UART1 P2.3 as TXD1 / P2.3 as RXD1 GPIO setting
* include gpio.c in Common Setting for UART0
*/
    MFP_P23_UART1_TXD;                              // UART0 TXD use P0.5
    P23_QUASI_MODE;                                 // set P0.5 and P0.6 as Quasi mode for UART0 trasnfer
/**
For UART1 initial setting
* include uart.c in Common Setting for UART0
*/
    UART_Open(24000000,UART1,115200);              // Open UART0 use timer1 as baudrate generate and baud rate = 115200en(24000000,UART0_Timer1,115200);        // Open UART0 use timer1 as baudrate generate and baud rate = 115200
    ENABLE_UART1_PRINTF;                                // printf must first set TI_1 =1;
   
/**
  UART1 loop test
  UART1 TXD1 send data received by RXD1 pin. Connect TXD1 pin and RXD1 pin check result.
*/
    while(1)
    {
      printf ("\n hello world! " );
      Timer2_Delay(24000000,128,1000,1000);        //Means timer base 24MHz, divider 128, delay time 100 ms (100000us)
    }
}


使用特权

评论回复
板凳
643757107|  楼主 | 2019-8-31 22:29 | 只看该作者
这么一修改就看着容易懂多了,不用再可以去研究具体寄存器怎么配。

使用特权

评论回复
地板
643757107|  楼主 | 2019-8-31 22:29 | 只看该作者
我认为C语言都应该如此,看起来更优雅。

使用特权

评论回复
5
734774645| | 2019-8-31 23:02 | 只看该作者
建议很好,我也去看看有没有什么发现。

使用特权

评论回复
6
643757107|  楼主 | 2019-9-4 21:29 | 只看该作者
我就觉得吧,例子应该非常容易懂。

使用特权

评论回复
7
huahuagg| | 2019-9-5 15:07 | 只看该作者
建议不错,希望下次更新能修正。

使用特权

评论回复
8
21mengnan| | 2019-9-8 22:15 | 只看该作者
优秀啊,多谢分享经验。

使用特权

评论回复
9
598330983| | 2019-9-8 22:16 | 只看该作者
确实不错,设计库函数时候都想到了,做例子时候竟然故意漏掉了?

使用特权

评论回复
10
antusheng| | 2019-9-8 22:16 | 只看该作者
这个方法不错,就算是不统一的配置方式,也可以用这个方式统一起来。

使用特权

评论回复
11
wahahaheihei| | 2019-9-8 23:59 | 只看该作者
统一的配置方法比较好。

使用特权

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

本版积分规则

200

主题

3709

帖子

11

粉丝