打印
[应用方案]

使用新唐(Nuvoton) MCU 实现UART串口通信的简单应用

[复制链接]
101|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
万图|  楼主 | 2024-10-4 08:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近我在一个项目中使用了新唐(Nuvoton) 的MCU进行开发,碰到了需要用UART串口进行数据传输的场景,刚好借此机会整理了一下代码,希望对大家有帮助。这次选用的是新唐的M0系列MCU,操作简单,性价比高。
项目需求:通过UART与PC进行数据通信,将从PC接收到的指令回传给PC,并在调试串口上显示出来。
硬件环境:
  • 新唐Nuvoton NUC029系列MCU
  • USB转UART模块
  • PC端串口调试工具
软件环境:
  • Keil MDK
  • Nuvoton BSP(板级支持包)
代码实现步骤:
  • UART初始化
    首先,我们需要配置UART的波特率、数据位、停止位和校验位等参数。使用Keil中的BSP库可以简化这个过程。
    #include "NUC029xAN.h"

    void UART_Init(void)
    {
        // 配置UART时钟
        CLK_EnableModuleClock(UART0_MODULE);
        CLK_SetModuleClock(UART0_MODULE, CLK_CLKSEL1_UARTSEL_HXT, CLK_CLKDIV_UART(1));

        // 配置UART引脚
        SYS->GPB_MFP &= ~(SYS_GPB_MFP_PB0_Msk | SYS_GPB_MFP_PB1_Msk);
        SYS->GPB_MFP |= (SYS_GPB_MFP_PB0_RXD0 | SYS_GPB_MFP_PB1_TXD0);

        // 初始化UART,波特率设置为115200
        UART_Open(UART0, 115200);
    }

  • 发送数据函数
    为了让MCU向PC发送数据,我们可以编写一个简单的函数,用来传输字符或字符串。
    void UART_SendString(char *str)
    {
        while(*str)
        {
            UART_WRITE(UART0, *str++);
        }
    }
    接收数据并回显
    接下来我们通过中断方式接收从PC端发送过来的数据,并将其回显。
    void UART0_IRQHandler(void)
    {
        uint8_t u8InChar = 0xFF;

        if (UART_GET_INT_FLAG(UART0, UART_INTSTS_RDAINT_Msk))  // 检查是否有接收到数据
        {
            u8InChar = UART_READ(UART0);  // 读取接收到的数据
            UART_WRITE(UART0, u8InChar);  // 回显收到的数据
        }
    }
    主函数
    最后,将上面的初始化函数和中断使能放入主函数中。
    int main(void)
    {
        // 系统初始化
        SYS_UnlockReg();
        SYS_Init();
        UART_Init();
        SYS_LockReg();

        // 开启UART接收中断
        UART_EnableInt(UART0, UART_INTEN_RDAIEN_Msk);
        NVIC_EnableIRQ(UART0_IRQn);

        // 主循环
        while(1);
    }
    总结:这个简单的UART通信示例展示了如何使用新唐的MCU通过串口与PC进行交互。整个过程非常流畅,新唐的BSP库极大地简化了开发流程。希望对你们有所帮助,有任何问题欢迎讨论!

使用特权

评论回复
沙发
公羊子丹| | 2024-10-4 08:55 | 只看该作者
这个教程不错!我正好也在用新唐的MCU,串口通信一直搞不太懂,你的代码让我豁然开朗了。谢谢分享!

使用特权

评论回复
板凳
周半梅| | 2024-10-4 08:56 | 只看该作者
看起来挺简单的,之前总觉得UART配置挺麻烦的,原来用BSP库能省下不少功夫啊。马上试试!

使用特权

评论回复
地板
帛灿灿| | 2024-10-4 08:56 | 只看该作者
用新唐的MCU做项目还真是高效,我之前用其他品牌搞UART调试,折腾了好久。你这个例子刚好能帮我节省不少时间!

使用特权

评论回复
5
童雨竹| | 2024-10-4 08:56 | 只看该作者
楼主的代码看着很清楚明了,尤其是接收和回显那部分,之前一直不理解。终于搞懂了中断怎么用了!

使用特权

评论回复
6
Wordsworth| | 2024-10-4 08:57 | 只看该作者
我用的是NUC126,应该类似吧?代码稍微改改应该也能用上,回头试试看

使用特权

评论回复
7
Pulitzer| | 2024-10-4 08:57 | 只看该作者
这个UART通信例子很实用,我经常要用到串口调试,这个实现方式简单有效!赞!

使用特权

评论回复
8
Bblythe| | 2024-10-4 08:57 | 只看该作者
有一点没太明白,UART初始化那部分,波特率能改成别的吗?比如9600?会有什么影响吗?

使用特权

评论回复
9
Uriah| | 2024-10-4 08:58 | 只看该作者
楼主这个例子对我帮助太大了,之前用STM32搞过类似的通信,转到新唐平台后还是有点不适应,你这个教程给了我方向

使用特权

评论回复
10
Clyde011| | 2024-10-4 08:58 | 只看该作者
这个项目可以直接用在嵌入式开发板上吧?正好手头有块开发板,准备试试看。

使用特权

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

本版积分规则

28

主题

3623

帖子

0

粉丝