国民技术的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之间的数据通信。串口通信是嵌入式开发中的基础功能,掌握它可以为后续项目的扩展打下良好的基础。
|