产品知识

当前位置:主页 > 新闻资讯 > 产品知识 >

国民技术N32G457RELY——UART应用

时间:2025-08-08 来源:未知
摘要:该篇文章主要介绍有关国民技术N32G457REL7的7路UART资源,涵盖全双工通信协议实现、时钟树优化路径、引脚重映射机制及工业级配置方案,助力开发者规避常见设计陷阱。 首先我们来了...

  该篇文章主要介绍有关国民技术N32G457REL7的7路UART资源,涵盖全双工通信协议实现、时钟树优化路径、引脚重映射机制及工业级配置方案,助力开发者规避常见设计陷阱。
 
  首先我们来了解一下什么是串口。
 
  单片机的串口通信是一种常见的设备通信协议,广泛应用于计算机与外部设备之间的数据交互。串口通信按位(bit)发送和接收字节,尽管比特字节的串行通信速度较慢,但串口可以在使用一根线发送数据的同时用另一根线接收数据。且串口是串行全双工的通信协议。
 
  2.国民技术N32G457REL7-时钟树
 
  下图是国民技术N32G457REL7的串口所在时钟树的分布:
  3.国民技术N32G457REL7芯片-串口引脚重映射详情图
 
  国民技术的芯片串口具有复用和引脚重映射功能,具体解释如下:
 
  3.1串口1引脚分布图与引脚重映射图
  3.2串口2引脚分布图与引脚重映射图
  3.3串口3引脚分布图与引脚重映射图
  3.4串口4,5,6引脚分布图与引脚重映射图

  4.国民技术N32G457REL7串口的软件配置
 
  为了方便大家理解,这里选取2种方式展示
 
  4.1串口默认引脚的功能配置
 
  此处以串口4的配置为例:
//这些是代码中使用到的宏
 
#define USART4_GPIO       GPIOC
#define USART4_CLK        RCC_APB1_PERIPH_UART4
#define USART4_GPIO_CLK   RCC_APB2_PERIPH_GPIOC
#define USART4_RxPin      GPIO_PIN_11
#define USART4_TxPin      GPIO_PIN_10
#define USART4_APBxClkCmd RCC_EnableAPB1PeriphClk
#define USART4_IRQn       UART4_IRQn
#define USART4_IRQHandler UART4_IRQHandler
 
/*
    此函数开启了串口4的时钟和引脚对应端口的时钟
*/
void RCC_Configuration_UART4(void)
{
    RCC_EnableAPB1PeriphClk(RCC_APB1_PERIPH_UART4, ENABLE);
    RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOC, ENABLE);
}
 
/*
    这个函数是配置了串口使用的引脚
*/
void GPIO_Configuration_UART4(void)
{
    GPIO_InitType GPIO_InitStructure;
 
    GPIO_InitStruct(&GPIO_InitStructure);
    GPIO_InitStructure.Pin = USART4_TxPin;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//工作模式为复用推挽输出
    GPIO_InitPeripheral(USART4_GPIO, &GPIO_InitStructure);
 
    GPIO_InitStruct(&GPIO_InitStructure);
    GPIO_InitStructure.Pin = USART4_RxPin;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
    GPIO_InitPeripheral(USART4_GPIO, &GPIO_InitStructure);
}
 
/*
    这个函数是串口4的中断配置
*/
void NVIC_Configuration_USART4(void)
{
    NVIC_InitType NVIC_InitStructure;
 
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
 
    NVIC_InitStructure.NVIC_IRQChannel = USART4_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
 
    USART_ConfigInt(UART4, USART_INT_RXDNE, ENABLE);
    USART_ConfigInt(UART4, USART_INT_RXDNE, ENABLE);
}
 
/*
    这个函数的初始化了串口所需要使用到的引脚和串口配置
    其中这里并没有开启串口的中断相关的服务,若有需要可自行开启
*/
void UART4_configure(u32 bound)
{
    RCC_Configuration_UART4();
    GPIO_Configuration_UART4();
    NVIC_Configuration_USART4();
    USART_InitType USART_InitStructure;
 
    USART_InitStructure.BaudRate = bound;
    USART_InitStructure.WordLength = USART_WL_8B;
    USART_InitStructure.StopBits = USART_STPB_1;
    USART_InitStructure.Parity = USART_PE_NO;
    USART_InitStructure.HardwareFlowControl = USART_HFCTRL_NONE;
    USART_InitStructure.Mode = USART_MODE_RX | USART_MODE_TX;
 
    USART_Init(UART4, &USART_InitStructure);
 
    USART_Enable(UART4, ENABLE);
}
 
 
void UART4_IRQHandler(void) // bw16
{
    if (USART_GetIntStatus(UART4, USART_INT_RXDNE) != RESET)
    {
        //此处是串口4对应的接收中断的数据处理,可根据自身续期进行编写
    }
 
    if (USART_GetIntStatus(UART4, USART_INT_IDLEF) != RESET)
    {
        //这里是串口空闲中断的数据处理地方
    }
 
}
  4.2串口4复用引脚的配置
 
  若想要使用PA13和PA14作为N32G457REL7串口的TX和RX,则需要开启对应的引脚复用功能,具体配置如下:
  下图是关于串口4复用功能引脚的相关配置
  以下代码内容相较于默认串口的功能配置的区别在代码中会体现出来,并且在代码结束的内容结尾也会详细地介绍。
//这些是代码中使用到的宏
 
#define USART4_GPIO       GPIOA
#define USART4_CLK        RCC_APB1_PERIPH_UART4
#define USART4_GPIO_CLK   RCC_APB2_PERIPH_GPIOA
#define USART4_RxPin      GPIO_PIN_14
#define USART4_TxPin      GPIO_PIN_13
#define USART4_APBxClkCmd RCC_EnableAPB1PeriphClk
#define USART4_IRQn       UART4_IRQn
#define USART4_IRQHandler UART4_IRQHandler
 
/*
    此函数开启了串口4的时钟和引脚对应端口的时钟
    并且开启了IO口引脚的复用时钟
*/
void RCC_Configuration_UART4(void)
{
    RCC_EnableAPB1PeriphClk(RCC_APB1_PERIPH_UART4, ENABLE);
    RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOA | RCC_APB2_PERIPH_AFIO, ENABLE);
    GPIO_ConfigPinRemap(GPIO_RMP2_UART4, ENABLE);//这里是选择串口4的引脚复用,根据上图所示需要选择映射的第二组引脚
}
 
/*
    这个函数是配置了串口使用的引脚
*/
void GPIO_Configuration_UART4(void)
{
    GPIO_InitType GPIO_InitStructure;
 
    GPIO_InitStruct(&GPIO_InitStructure);
    GPIO_InitStructure.Pin = USART4_TxPin;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//工作模式为复用推挽输出
    GPIO_InitPeripheral(USART4_GPIO, &GPIO_InitStructure);
 
    GPIO_InitStruct(&GPIO_InitStructure);
    GPIO_InitStructure.Pin = USART4_RxPin;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
    GPIO_InitPeripheral(USART4_GPIO, &GPIO_InitStructure);
}
 
/*
    这个函数是串口4的中断配置
*/
void NVIC_Configuration_USART4(void)
{
    NVIC_InitType NVIC_InitStructure;
 
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
 
    NVIC_InitStructure.NVIC_IRQChannel = USART4_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
 
    USART_ConfigInt(UART4, USART_INT_RXDNE, ENABLE);
    USART_ConfigInt(UART4, USART_INT_RXDNE, ENABLE);
}
 
/*
    这个函数的初始化了串口所需要使用到的引脚和串口配置
    其中这里并没有开启串口的中断相关的服务,若有需要可自行开启
*/
void UART4_configure(u32 bound)
{
    RCC_Configuration_UART4();
    GPIO_Configuration_UART4();
    NVIC_Configuration_USART4();
    USART_InitType USART_InitStructure;
 
    USART_InitStructure.BaudRate = bound;
    USART_InitStructure.WordLength = USART_WL_8B;
    USART_InitStructure.StopBits = USART_STPB_1;
    USART_InitStructure.Parity = USART_PE_NO;
    USART_InitStructure.HardwareFlowControl = USART_HFCTRL_NONE;
    USART_InitStructure.Mode = USART_MODE_RX | USART_MODE_TX;
 
    USART_Init(UART4, &USART_InitStructure);
 
    USART_Enable(UART4, ENABLE);
}
 
 
void UART4_IRQHandler(void) // bw16
{
    if (USART_GetIntStatus(UART4, USART_INT_RXDNE) != RESET)
    {
        //此处是串口4对应的接收中断的数据处理,可根据自身续期进行编写
    }
 
    if (USART_GetIntStatus(UART4, USART_INT_IDLEF) != RESET)
    {
        //这里是串口空闲中断的数据处理地方
    }
 
}
  上述代码主要修改的地方:
 
  1.修改了串口4的io口配置
  2.开启了串口4的复用时钟并重映射了串口4的引脚
  3.其它配置均未改动
 
  5.总结
 
  国民技术N32G457REL7的串口配置和STM32单片机的串口配置几乎一致,具体配置流程如下:
 
  开启串口的时钟→选择串口使用的引脚→配置对应的引脚功能→初始化串口的基本参数→根据需求使能对应的串口中断→使能串口→编写中断服务函数
 
  如需了解国民技术N32G457REL7的相关资料,可以联系国民技术代理商海凌微销售-江小姐,电话:18126156267。

联系我们
Contact
联系我们
我们很想听到您的声音

热线电话:18126156267

客服QQ:1084456689

Email:sales@hisemic.com

公司地址:深圳市宝安区永福路和盛工业区D1栋5层