回答

收藏

[评测分享] 【NXP OKdo E1双核Cortex M33开发板】-4-USART 2以中断方式通讯讲解

#板卡评测 #板卡评测 2349 人阅读 | 0 人回复 | 2020-12-01

  在上一篇帖子中,笔者规划的是用OK DoE1板子上的2路串口来进行数据的收发交互。碰巧笔者最近也各种忙,但笔者从未放弃过自己的想法,忙里偷闲,偶尔得空,笔者也会去看看小伙伴们的技术分享、学学经验;同时笔者也尝试了NXP官方LPC55S69 SDK的关于串口的例程;几乎所有的例程中都是用到的调试串口即 UART0 来做演示,笔者所有UART0的例程也都跑通了。
那么问题来了:UART1、UART2 可以用吗?怎么用?
答案: UART1 不可用,因为RX TX接口没引出来;
    UART2 可用, RX PIO 1.24 ,TX PIO 0.27;
    UART3 不可用,因为TX接口没引出来;
    UART4 不可用,因为RX接口没引出来;
    UART5 不可用,因为RX TX接口没引出来;
    UART6 不可用,因为RX TX接口没引出来;
    UART7 不可用,因为RX TX接口没引出来;

   NXP官方LPC55S69SDK中,串口提供了三种通讯方式:DMA、轮询、中断。
  笔者测试了这三种,发现使用DMA方式,当缓存buffer中的数据上一个操作没有处理完,会留在下一个操作中。这种方式可以避免数据的丢失。笔者比较喜欢采用中断方式的进行通讯,现跟大家分享一下我是如何用中断方式编写USART2的串口收发例程:

步骤1:建工程;
首先时用MCUXpressoIDE导入SDK example,导入driver_examples->usart->usart_interrupt例程;

步骤2:配时钟;
接着打开“配置工具”--->“时钟”—>“时钟显示图”,修改功能组为BOARD_BootClockPLL150M的时钟配置情况:
如上图所示,笔者把系统时钟配置为150Mhz,把FXCOMCLK2.clock配置为12Mhz.

步骤3:配置I/O引脚;

如图配置USART2的RXD\TXD引脚:PIO 1_24、PIO 0_27;

步骤4:配置USART2 串口相关参数;
  1. usart_config_t      UART2Config;
  2. USART_GetDefaultConfig(&UART2Config);
  3. UART2Config.baudRate_Bps = 9600U;
  4. UART2Config.enableTx = true;
  5. UART2Config.enableRx = true;
  6. USART_Init(USART2, &UART2Config, 12000000);
复制代码
步骤5:使能相关的中断资源;
  1. /* 使能串口接收中断函数-Enable RX interrupt. */
  2. USART_EnableInterrupts(USART2,kUSART_RxLevelInterruptEnable|kUSART_RxErrorInterruptEnable);//使能串口2中断
  3. EnableIRQ(FLEXCOMM2_IRQn);//使能FLEXCOMM2中断服务
复制代码
步骤6:编写中断处理函数USART2_IRQHandler()
  1. void USART2_IRQHandler(void)
  2. {
  3.   uint8_t data;
  4.   /* If new data arrived.*/
  5. if ((kUSART_RxFifoNotEmptyFlag | kUSART_RxError) & USART_GetStatusFlags(USART2))
  6.     {
  7.   data = USART_ReadByte(USART2);
  8. /* If ring buffer is not full, add data to ring buffer. */
  9.             if (((rxIndex + 1) % RING_BUFFER_SIZE) != txIndex)
  10.             {
  11.   RingBuffer[rxIndex] = data;
  12.   rxIndex++;
  13.   rxIndex %= RING_BUFFER_SIZE;
  14.             }
  15.         }
  16.         SDK_ISR_EXIT_BARRIER;
  17. }
复制代码
步骤7:业务函数的编写;
  1. while (1)
  2.     {
  3.   while ((kUSART_TxFifoNotFullFlag & USART_GetStatusFlags(USART2)) && (rxIndex != txIndex))
  4. {
  5.    USART_WriteByte(USART2,RingBuffer[txIndex]);
  6.    txIndex++;
  7.    txIndex %= RING_BUFFER_SIZE;
  8. }
  9. }
复制代码
   至此,完成了以中断方式进行USART2串口收发数据的例程介绍。该例程显示的效果是把串口2 RX引脚接收到的数据直接通过串口2 TX引脚发送出来,波特率设为9600。
传一张实物接线图:
最后,随附件附上工程全部源码,希望对小伙伴们有所帮助。




lpcxpresso55s69_usart2_interrupt.rar

3.94 MB, 下载次数: 1

分享到:
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条