在最近的一个项目中,我使用了新唐的NUC029系列MCU来实现UART串口通信。这款MCU性能稳定,功能丰富,非常适合工业控制和消费电子类的项目。我将简单分享一下如何使用新唐MCU进行串口通信,供大家参考。 
 
硬件环境- MCU型号:NUC029FAE
 - 通信接口:UART
 - 开发工具:Keil uVision
 - 调试工具:Nu-Link调试器
 
 
  
代码实现 
在这段代码中,我配置了UART0作为串口通信接口,通过中断方式接收和发送数据。具体实现如下: 
- #include "NUC029xAN.h"
 
 - #include <stdio.h>
 
  
- // 初始化系统时钟
 
 - void SYS_Init(void)
 
 - {
 
 -     // 设置HXT为12MHz,PLL倍频到50MHz
 
 -     CLK_EnableXtalRC(CLK_PWRCTL_HXTEN_Msk);
 
 -     CLK_WaitClockReady(CLK_STATUS_HXTSTB_Msk);
 
 -     CLK_SetCoreClock(50000000);
 
  
-     // 配置UART0时钟源
 
 -     CLK_EnableModuleClock(UART0_MODULE);
 
 -     CLK_SetModuleClock(UART0_MODULE, CLK_CLKSEL1_UARTSEL_HXT, CLK_CLKDIV0_UART(1));
 
  
-     // 设置UART0相关引脚
 
 -     SYS->GPB_MFPL &= ~(SYS_GPB_MFPL_PB0MFP_Msk | SYS_GPB_MFPL_PB1MFP_Msk);
 
 -     SYS->GPB_MFPL |= SYS_GPB_MFPL_PB0MFP_UART0_RXD | SYS_GPB_MFPL_PB1MFP_UART0_TXD;
 
 - }
 
  
- // 初始化UART0
 
 - void UART0_Init(void)
 
 - {
 
 -     // 重置UART0模块
 
 -     SYS_ResetModule(UART0_RST);
 
  
-     // 设置UART0波特率为115200
 
 -     UART_Open(UART0, 115200);
 
  
-     // 启用UART中断
 
 -     UART_EnableInt(UART0, UART_INTEN_RDAIEN_Msk);
 
 -     NVIC_EnableIRQ(UART0_IRQn);
 
 - }
 
  
- // UART0中断处理函数
 
 - void UART0_IRQHandler(void)
 
 - {
 
 -     uint8_t received_data;
 
  
-     // 如果接收到数据
 
 -     if (UART_IS_RX_READY(UART0))
 
 -     {
 
 -         received_data = UART_READ(UART0);  // 读取接收数据
 
 -         printf("Received: %c\n", received_data);  // 打印接收到的数据
 
  
-         // 可以根据接收的数据执行相应的处理
 
 -         // 比如回发或存储
 
 -         UART_WRITE(UART0, received_data);  // 回发数据
 
 -     }
 
 - }
 
  
- int main(void)
 
 - {
 
 -     // 初始化系统和UART
 
 -     SYS_UnlockReg();
 
 -     SYS_Init();
 
 -     SYS_LockReg();
 
 -     UART0_Init();
 
  
-     // 打印启动信息
 
 -     printf("UART0 Initialized. Waiting for data...\n");
 
  
-     // 主循环
 
 -     while (1);
 
 - }
 
 
  
代码解析- 时钟设置:我将MCU的时钟频率设置为50MHz,同时使能了UART0的时钟源。
 - UART0初始化:波特率设置为115200,并启用了接收中断。
 - 中断处理:在UART0_IRQHandler中,如果UART接收到数据,会通过UART_READ读取数据,并使用UART_WRITE将数据回发。
 - 调试输出:通过printf函数输出调试信息,方便查看接收到的数据。
 
 
  
应用场景 
该代码可以用于实现简单的串口通信,比如在终端上发送和接收指令,还可以扩展用于串口调试、与其他MCU或模块进行串口通信等。新唐的NUC029系列MCU自带多个UART接口,能够支持更多的外设通信需求。 
 
如果你也在使用新唐的MCU,希望这段代码能对你有所帮助。有什么问题或需要交流的,欢迎大家在评论区留言! 
 
 
 
  |