帛灿灿 发表于 2024-10-11 09:22

基于国民技术N32G430R8T7 MCU的串口通信应用


国民技术的N32G430R8T7是一款基于ARM Cortex-M4内核的32位微控制器,支持丰富的外设功能,广泛应用于物联网、工业自动化、智能家居等领域。本文将介绍如何基于N32G430R8T7实现串口通信,通过UART外设与PC进行数据交换。串口通信是嵌入式开发中非常常见的应用,能够帮助开发者在调试阶段快速获取设备状态信息。

应用场景在嵌入式系统中,串口通信常用于设备间的数据传输或与PC通信。通过串口,嵌入式系统可以将采集的数据或设备状态实时发送给上位机,也可以通过串口接收上位机发送的命令。
本次示例将在N32G430R8T7上实现通过UART串口发送和接收数据,利用PC上的串口工具与MCU通信,观察数据收发情况。

硬件设计硬件上,我们使用N32G430R8T7的UART1接口与PC相连,通过USB转TTL模块将MCU的TX、RX引脚连接到PC的USB接口。

代码实现以下是基于N32G430R8T7的串口通信代码,实现MCU向PC发送数据以及接收PC发送的数据。
#include "n32g430.h"
#include "usart.h"
#include "gpio.h"
#include "rcc.h"
#include "nvic.h"

// 定义串口波特率
#define UART_BAUDRATE 115200

// 初始化函数声明
void SystemClock_Config(void);
void UART_Init(void);
void UART_SendString(char* str);

int main(void) {
    // 系统时钟初始化
    SystemClock_Config();
    // 串口初始化
    UART_Init();
   
    // 向PC发送字符串
    UART_SendString("Hello, PC! UART communication is working.\r\n");
   
    // 主循环
    while (1) {
      // 检查是否有数据接收
      if (USART_GetFlagStatus(USART1, USART_FLAG_RXNE)) {
            // 读取接收到的数据
            uint8_t data = USART_ReceiveData(USART1);
            // 将接收到的数据发送回PC
            USART_SendData(USART1, data);
            // 等待发送完成
            while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
      }
    }
}

// 系统时钟配置
void SystemClock_Config(void) {
    // 配置系统时钟为72MHz
    RCC_APB2PeriphClockCmd(RCC_APB2ENR_AFIOEN, ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2ENR_USART1EN | RCC_APB2ENR_IOPAEN, ENABLE);
}

// 串口初始化配置
void UART_Init(void) {
    GPIO_InitTypeDef GPIO_InitStruct;
    USART_InitTypeDef USART_InitStruct;
   
    // 配置PA9为USART1 TX (传输)
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStruct);
   
    // 配置PA10为USART1 RX (接收)
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIOA, &GPIO_InitStruct);
   
    // USART配置
    USART_InitStruct.USART_BaudRate = UART_BAUDRATE;
    USART_InitStruct.USART_WordLength = USART_WordLength_8b;
    USART_InitStruct.USART_StopBits = USART_StopBits_1;
    USART_InitStruct.USART_Parity = USART_Parity_No;
    USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
    USART_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
   
    // 初始化USART1
    USART_Init(USART1, &USART_InitStruct);
   
    // 使能USART1
    USART_Cmd(USART1, ENABLE);
}

// 串口发送字符串
void UART_SendString(char* str) {
    while (*str) {
      USART_SendData(USART1, *str++);
      // 等待发送完成
      while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
    }
}

代码解析
[*]系统时钟配置:在SystemClock_Config函数中,配置了系统时钟并使能USART1所需的外设时钟。时钟频率设置为72MHz,确保串口通信稳定进行。

[*]串口初始化:UART_Init函数中,配置了UART的TX引脚为PA9,RX引脚为PA10,波特率设置为115200。USART模式设置为8位数据位、1个停止位、无校验位,支持发送和接收功能。

[*]串口发送数据:通过UART_SendString函数,MCU可以发送字符串至PC。该函数逐个发送字符并等待发送完成。

[*]数据接收与回显:在主循环中,MCU检测是否有接收数据。当数据到达时,MCU读取数据并立即将其发送回PC,实现简单的回显功能。这种方式常用于测试通信是否正常。


代码运行结果将N32G430R8T7通过USB转TTL模块与PC连接,使用串口调试工具(如SecureCRT、PuTTY或XCom)设置波特率为115200。当代码运行后,MCU会向PC发送“Hello, PC! UART communication is working.”消息,并且当PC端发送任意数据时,MCU会回显相同的数据。

扩展应用本例展示了如何利用N32G430R8T7的UART外设进行简单的串口通信。在实际项目中,串口通信可以扩展用于数据采集系统、无线模块(如GPRS、Wi-Fi、蓝牙)通信等。通过串口接收外部设备的数据指令,或向上位机报告设备状态,能够实现更复杂的应用场景。

总结本文详细介绍了国民技术N32G430R8T7 MCU的串口通信应用,通过实际代码实现MCU与PC之间的数据通信。串口通信是嵌入式开发中的基础功能,掌握它可以为后续项目的扩展打下良好的基础。

公羊子丹 发表于 2024-10-11 09:22

看了这篇文章,感觉串口调试真的很实用,项目开发少不了。

周半梅 发表于 2024-10-11 09:23

N32G430这款芯片性价比挺高的,用来做物联网项目也不错。

童雨竹 发表于 2024-10-11 09:23

串口通信是个好东西,特别是在开发时用来调试很方便。

万图 发表于 2024-10-11 09:23

刚好我有个项目需要用到串口,正好可以参考这个例子。

Wordsworth 发表于 2024-10-11 09:24

串口波特率115200是比较常见的,我也经常用这个波特率。

Bblythe 发表于 2024-10-11 09:24

有没有更复杂的应用,比如通过串口控制设备动作的例子?

Pulitzer 发表于 2024-10-11 09:24

每次通过串口调试,看到数据成功发送回来,感觉很有成就感。

Uriah 发表于 2024-10-11 09:25

国民技术这款MCU有点意思,打算试试看它的其他外设功能。

Clyde011 发表于 2024-10-11 09:25

代码写得挺清楚的,特别是串口初始化那部分,学习到了。

suncat0504 发表于 2024-10-29 15:42

自从串口设备被弄出来以后,就一直是最有力的调试工具。无论半导体技术怎么发展,都没有被淘汰。

suncat0504 发表于 2024-10-29 15:43

基本上所有单片机都配有串口设备,算得上是标配了吧。

地瓜patch 发表于 2024-10-29 18:22

这个片子几个串口啊

申小林一号 发表于 2024-10-30 20:48

串口是基础
页: [1]
查看完整版本: 基于国民技术N32G430R8T7 MCU的串口通信应用