打印
[ARM7]

【自选开发板活动】imxRT1021-你好,LPUART

[复制链接]
1046|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 yangjiaxu 于 2022-9-28 23:03 编辑
#申请原创#  
大家好,我是豆包,上一帖主要讲了开发板的RTC外设部分的使用,本期我们来熟悉一下imxRT1021的串口通信功能。串口通信,相信大家都比较了解,它以通信速率快,全双工通信,因此,深受工程师们的喜爱。
串口根据通信方式可分为LPUART,USART和UART;
LPUART全称之为Low PowerUniversal Asynchronous Receiver Transmitter的缩写,即低功耗异步收发器,它可以灵活地与外部设备进行全双工数据交换。
USART全称之为Universal synchronousasynchronous receiver transmitter,是通用同步异步接收器发送器;
UART全称之为UniversalAsynchronous Receiver/Transmitter,被称为通用异步收发传输器,其是在USART基础上裁剪掉了同步通信功能,只支持异步通信。简单区分同步和异步就是看通信时需不需要对外提供时钟输出,我们正常使用的大多数是采用的异步通信,因其不需要时钟同步,而且波特率可设置,因此应用十分广泛。
本次实验采用的是imxRT1021的串口1-LPUART,主要使用其实现简单的串口收发功能。接下来就需要程序编写了。
首先配置一下中断优先级分组,该操作主要是配置MCU的优先级分配。
/**

* [url=home.php?mod=space&uid=247401]@brief[/url]  设置中断优先级分组

* @param  PriorityGroup:中断优先级分组

* @retval 无

*/

void Set_NVIC_PriorityGroup(PriorityGroup_Type PriorityGroup)

{

    NVIC_SetPriorityGrouping((uint32_t)PriorityGroup); //设置中断优先级分组

}

接下来是对串口IO的初始化:
/**

* [url=home.php?mod=space&uid=247401]@brief[/url]  初始化uart,并开启了收发功能

* @param  无

* @retval 无

*/

void UART_Config(void)

{

    UART_IOMUXC_MUX_Config();//配置IO

    UART_IOMUXC_PAD_Config();//配置IO的复用功能

    UART_ModeConfig();//串口初始化参数配置

}
/**

* [url=home.php?mod=space&uid=247401]@brief[/url]  初始化uart配置参数

* @param  无

* @retval 无

*/

void UART_ModeConfig(void)

{

    /*定义串口配置参数结构体变量,用于保存串口的配置信息*/

    lpuart_config_t config;



    /*调用固件库函数得到默认的串口配置参数,在默认的配置参数基础上修改*/

    LPUART_GetDefaultConfig(&config);

    config.baudRate_Bps = DEBUG_UART_BAUDRATE;  //波特率

    config.enableRx = DEBUG_UART_ENABLE_RESIVE; //是否允许接收数据

    config.enableTx = DEBUG_UART_ENABLE_SEND;   //是否允许发送数据



    /*调用固件库函数,将修改好的配置信息写入到串口的配置寄存器中*/

    LPUART_Init(DEBUG_UARTx, &config, BOARD_DEBUG_UART_CLK_FREQ);





    /*允许接收中断*/

    LPUART_EnableInterrupts(DEBUG_UARTx, kLPUART_RxDataRegFullInterruptEnable);



    /*设置中断优先级,*/

    set_IRQn_Priority(DEBUG_UART_IRQ, Group4_PreemptPriority_6, Group4_SubPriority_0);

    /*使能中断*/

    EnableIRQ(DEBUG_UART_IRQ);



    //LPUART_EnableRx(DEBUG_USARTx, true);

    //LPUART_EnableTx(DEBUG_USARTx, false);

}

配置完成之后就可以使用串口功能了,可以使用Uart_SendString实现串口数据的发送,使用中断服务函数实现串口的接收。
/******************串口接收中断服务函数********************/

void DEBUG_UART_IRQHandler(void)

{

    uint8_t ucTemp;



    /*串口接收到数据*/

    if ((kLPUART_RxDataRegFullFlag)&LPUART_GetStatusFlags(DEBUG_UARTx))

    {

        /*读取数据*/

        ucTemp = LPUART_ReadByte(DEBUG_UARTx);



        /*将读取到的数据发送出去*/

        Uart_SendByte(DEBUG_UARTx, ucTemp);

    }

}

至此,串口收发实验的程序代码基本就完成了,接下来可以使用编译器,将编译好的程序代码下载到imxRT1021的硬件之中。
如图所示。

通过图示可以看到,串口波特率采用115200,同时可以正常的收发数据,也就是说,程序可以将imxRT1021的串口1驱动起来了。正常来说,如果有通信协议的话,可以在中断服务或者是将数据都收完成,然后进行数据处理,从而实现一个串口通信的项目。我这个仅仅是串口通信的冰川一角,其实通信还有DMA,不定长接收和环形队列等等,这些都是项目中会常用到的,但我在这次的程序中没有体现,可想而知,接下来工程师的路还很长,其实生活亦是如此,借用一句“离骚”中的一句名言:“路漫漫其修远兮,吾将上下而求索”,加油  ~_~

  

使用特权

评论回复

相关帖子

沙发
wld立冬的夏| | 2022-10-10 11:01 | 只看该作者
这个自选开发板是什么活动?

使用特权

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

本版积分规则

认证:嵌入式技术专家
简介:擅长电路设计、物联网产品开发、射频产品开发,喜欢打篮球,技术交流,欢迎各位来聊~

650

主题

2702

帖子

6

粉丝