打印
[N32G45x]

国民技术N32G457REL7-UART的使用

[复制链接]
142|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
1.认识串口
        串口通信是一种常见的设备通信协议,广泛应用于计算机与外部设备之间的数据交互。串口通信按位(bit)发送和接收字节,尽管比特字节的串行通信速度较慢,但串口可以在使用一根线发送数据的同时用另一根线接收数据。

        且串口是串行全双工的通信协议。

2.N32G457REL7-时钟树
        以下内容是N32G457REL7的串口所在时钟树的分布图:



3.N32G457REL7-串口引脚重映射详情图
        国民技术的串口具有复用和引脚重映射功能,具体解释如下:

        3.1串口1引脚分布图与引脚重映射图



3.2串口2引脚分布图与引脚重映射图



3.3串口3引脚分布图与引脚重映射图



3.4串口4,5,6引脚分布图与引脚重映射图








        根据自己对串口引脚的选用不同可以选择复用串口的不同引脚。

4.国民技术串口的软件配置
        这里为了更容易大家理解,这里博主选择展示两个配置方法。

        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默认引脚的配置。

        4.2串口4复用引脚的配置
        若要想要使用PA13和PA14作为串口的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.总结
        国民技术的串口配置与STM32的串口配置几乎相同,配置流程如下:

        1.开启串口的时钟

        2.选择串口使用的引脚

        3.配置对应的引脚功能

        4.初始化串口的基本参数

        5.根据需求使能对应的串口中断

        6.使能串口

        7.编写中断服务函数
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/wxy888888/article/details/146841043

使用特权

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

本版积分规则

51

主题

150

帖子

0

粉丝