[应用方案] 基于新唐NUC029系列MCU的UART串口通信应用代码分享

[复制链接]
1943|9
 楼主| 帛灿灿 发表于 2024-10-5 08:10 | 显示全部楼层 |阅读模式

在最近的一个项目中,我使用了新唐的NUC029系列MCU来实现UART串口通信。这款MCU性能稳定,功能丰富,非常适合工业控制和消费电子类的项目。我将简单分享一下如何使用新唐MCU进行串口通信,供大家参考。

硬件环境
  • MCU型号:NUC029FAE
  • 通信接口:UART
  • 开发工具:Keil uVision
  • 调试工具:Nu-Link调试器

代码实现
在这段代码中,我配置了UART0作为串口通信接口,通过中断方式接收和发送数据。具体实现如下:
  1. #include "NUC029xAN.h"
  2. #include <stdio.h>

  3. // 初始化系统时钟
  4. void SYS_Init(void)
  5. {
  6.     // 设置HXT为12MHz,PLL倍频到50MHz
  7.     CLK_EnableXtalRC(CLK_PWRCTL_HXTEN_Msk);
  8.     CLK_WaitClockReady(CLK_STATUS_HXTSTB_Msk);
  9.     CLK_SetCoreClock(50000000);

  10.     // 配置UART0时钟源
  11.     CLK_EnableModuleClock(UART0_MODULE);
  12.     CLK_SetModuleClock(UART0_MODULE, CLK_CLKSEL1_UARTSEL_HXT, CLK_CLKDIV0_UART(1));

  13.     // 设置UART0相关引脚
  14.     SYS->GPB_MFPL &= ~(SYS_GPB_MFPL_PB0MFP_Msk | SYS_GPB_MFPL_PB1MFP_Msk);
  15.     SYS->GPB_MFPL |= SYS_GPB_MFPL_PB0MFP_UART0_RXD | SYS_GPB_MFPL_PB1MFP_UART0_TXD;
  16. }

  17. // 初始化UART0
  18. void UART0_Init(void)
  19. {
  20.     // 重置UART0模块
  21.     SYS_ResetModule(UART0_RST);

  22.     // 设置UART0波特率为115200
  23.     UART_Open(UART0, 115200);

  24.     // 启用UART中断
  25.     UART_EnableInt(UART0, UART_INTEN_RDAIEN_Msk);
  26.     NVIC_EnableIRQ(UART0_IRQn);
  27. }

  28. // UART0中断处理函数
  29. void UART0_IRQHandler(void)
  30. {
  31.     uint8_t received_data;

  32.     // 如果接收到数据
  33.     if (UART_IS_RX_READY(UART0))
  34.     {
  35.         received_data = UART_READ(UART0);  // 读取接收数据
  36.         printf("Received: %c\n", received_data);  // 打印接收到的数据

  37.         // 可以根据接收的数据执行相应的处理
  38.         // 比如回发或存储
  39.         UART_WRITE(UART0, received_data);  // 回发数据
  40.     }
  41. }

  42. int main(void)
  43. {
  44.     // 初始化系统和UART
  45.     SYS_UnlockReg();
  46.     SYS_Init();
  47.     SYS_LockReg();
  48.     UART0_Init();

  49.     // 打印启动信息
  50.     printf("UART0 Initialized. Waiting for data...\n");

  51.     // 主循环
  52.     while (1);
  53. }

代码解析
  • 时钟设置:我将MCU的时钟频率设置为50MHz,同时使能了UART0的时钟源。
  • UART0初始化:波特率设置为115200,并启用了接收中断。
  • 中断处理:在UART0_IRQHandler中,如果UART接收到数据,会通过UART_READ读取数据,并使用UART_WRITE将数据回发。
  • 调试输出:通过printf函数输出调试信息,方便查看接收到的数据。

应用场景
该代码可以用于实现简单的串口通信,比如在终端上发送和接收指令,还可以扩展用于串口调试、与其他MCU或模块进行串口通信等。新唐的NUC029系列MCU自带多个UART接口,能够支持更多的外设通信需求。

如果你也在使用新唐的MCU,希望这段代码能对你有所帮助。有什么问题或需要交流的,欢迎大家在评论区留言!



公羊子丹 发表于 2024-10-5 08:11 | 显示全部楼层
这代码写得真清楚,正好我也在用新唐的NUC029系列,赶紧试试!
周半梅 发表于 2024-10-5 08:11 | 显示全部楼层
哈哈,终于找到一份靠谱的UART通信代码了,太感谢了!
童雨竹 发表于 2024-10-5 08:12 | 显示全部楼层
你这个配置时钟的部分很详细,学到了,我之前总搞不清楚这块。
万图 发表于 2024-10-5 08:12 | 显示全部楼层
新唐的MCU真挺好用的,我也在用NUC029,不过串口通信还没调通,试试你这段代码看看。
Wordsworth 发表于 2024-10-5 08:12 | 显示全部楼层
想问下UART中断回调里还能加别的功能吗?比如直接控制GPIO啥的?
Bblythe 发表于 2024-10-5 08:13 | 显示全部楼层
没想到新唐的MCU还有这么多隐藏的功能,回头我也折腾一下!
Pulitzer 发表于 2024-10-5 08:13 | 显示全部楼层
这个代码直接拿来用就行吗?还需要做其他配置不?
Uriah 发表于 2024-10-5 08:13 | 显示全部楼层
很实用的例子!可以扩展一下做个简单的串口调试工具了。
Clyde011 发表于 2024-10-5 08:13 | 显示全部楼层
终于找到一份完整的代码了,之前看文档看的头晕,这个清晰多了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

169

主题

6229

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部