打印
[N32G430]

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

[复制链接]
48|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
帛灿灿|  楼主 | 2024-10-11 09:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

国民技术的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 | 只看该作者
串口通信是个好东西,特别是在开发时用来调试很方便。

使用特权

评论回复
5
万图| | 2024-10-11 09:23 | 只看该作者
刚好我有个项目需要用到串口,正好可以参考这个例子。

使用特权

评论回复
6
Wordsworth| | 2024-10-11 09:24 | 只看该作者
串口波特率115200是比较常见的,我也经常用这个波特率。

使用特权

评论回复
7
Bblythe| | 2024-10-11 09:24 | 只看该作者
有没有更复杂的应用,比如通过串口控制设备动作的例子?

使用特权

评论回复
8
Pulitzer| | 2024-10-11 09:24 | 只看该作者
每次通过串口调试,看到数据成功发送回来,感觉很有成就感。

使用特权

评论回复
9
Uriah| | 2024-10-11 09:25 | 只看该作者
国民技术这款MCU有点意思,打算试试看它的其他外设功能。

使用特权

评论回复
10
Clyde011| | 2024-10-11 09:25 | 只看该作者
代码写得挺清楚的,特别是串口初始化那部分,学习到了。

使用特权

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

本版积分规则

30

主题

3703

帖子

0

粉丝