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