查看: 3542|回复: 0

[分享] LPC55S69之串口

[复制链接]
  • TA的每日心情
    开心
    2025-7-10 13:07
  • 签到天数: 43 天

    连续签到: 1 天

    [LV.5]常住居民I

    56

    主题

    546

    帖子

    0

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    1524

    热心会员

    最后登录
    2025-7-10
    发表于 2020-4-3 11:20:13 | 显示全部楼层 |阅读模式
    LPC55S69之串口



    串口用例子就可以了。

    一、引脚。
    1.png

    二、代码。
    1. <font size="3" face="微软雅黑">
    2. #include "board.h"
    3. #include "fsl_usart.h"
    4. #include "pin_mux.h"
    5. #include <stdbool.h>

    6. #define DEMO_USART USART0
    7. #define DEMO_USART_CLK_SRC kCLOCK_Flexcomm0
    8. #define DEMO_USART_CLK_FREQ CLOCK_GetFlexCommClkFreq(0U)
    9. #define DEMO_USART_IRQHandler FLEXCOMM0_IRQHandler
    10. #define DEMO_USART_IRQn FLEXCOMM0_IRQn
    11. #define DEMO_RING_BUFFER_SIZE 16

    12. uint8_t g_tipString[] =
    13.     "Usart functional API interrupt example\r\nBoard receives characters then sends them out\r\nNow please input:\r\n";
    14. uint8_t demoRingBuffer[DEMO_RING_BUFFER_SIZE];
    15. volatile uint16_t txIndex; /* Index of the data to send out. */
    16. volatile uint16_t rxIndex; /* Index of the memory to save new arrived data. */

    17. void DEMO_USART_IRQHandler(void) {
    18.     uint8_t data;
    19.     if ((kUSART_RxFifoNotEmptyFlag | kUSART_RxError) & USART_GetStatusFlags(DEMO_USART)) {
    20.         data = USART_ReadByte(DEMO_USART);
    21.         if (((rxIndex + 1) % DEMO_RING_BUFFER_SIZE) != txIndex) {
    22.             demoRingBuffer[rxIndex] = data;
    23.             rxIndex++;
    24.             rxIndex %= DEMO_RING_BUFFER_SIZE;
    25.         }
    26.     }
    27. }

    28. int main(void) {
    29.     usart_config_t config;

    30.     CLOCK_AttachClk(BOARD_DEBUG_UART_CLK_ATTACH);
    31.     BOARD_InitPins();
    32.     BOARD_BootClockPLL150M();
    33.     BOARD_InitDebugConsole();

    34.     USART_GetDefaultConfig(&config);
    35.     config.baudRate_Bps = BOARD_DEBUG_UART_BAUDRATE;
    36.     config.enableTx     = true;
    37.     config.enableRx     = true;

    38.     USART_Init(DEMO_USART, &config, DEMO_USART_CLK_FREQ);
    39.     USART_WriteBlocking(DEMO_USART, g_tipString, (sizeof(g_tipString) / sizeof(g_tipString[0])) - 1);
    40.     USART_EnableInterrupts(DEMO_USART, kUSART_RxLevelInterruptEnable | kUSART_RxErrorInterruptEnable);
    41.     EnableIRQ(DEMO_USART_IRQn);

    42.     while (1) {
    43.         while ((kUSART_TxFifoNotFullFlag & USART_GetStatusFlags(DEMO_USART)) && (rxIndex != txIndex)) {
    44.             USART_WriteByte(DEMO_USART, demoRingBuffer[txIndex]);
    45.             txIndex++;
    46.             txIndex %= DEMO_RING_BUFFER_SIZE;
    47.         }
    48.     }
    49. }</font>
    复制代码
    三、说明。


    将串口线的TXD连接开发板P8的TX,RXD连接开发板P8的RX。


    烧完代码,板子会发一串字符过来,然后就是发送什么,它就回响什么。

    2.png

    四、其它问题。


    1、使用串口0(FC0)时,需要在P1上插上短路帽,否则U6会导致RXD引脚不能拉低,而影响串口0接收数据。

    3.png

    2、由于Xpresso编辑器对中文支持不好,不能直接写成如下形式:


    SendString("启动");


    可以将中文转成16进制的编码,存入数组中,再发送,如下所示:


    s8 strStart[] = {0xC6,0xF4,0xB6,0xAF}; // 启动


    SendString(strStart);


    3、该例子的串口收发是使用了FIFO缓冲器,所以使用USART_WriteByte()发送字节,发现很久没发出去,而且有部分字节被冲刷掉。所以需要改成以下发送、接收函数。
    1. <font size="3" face="微软雅黑">void SendChar(u8 t) {
    2.     USART_WriteByte(USART0, t);
    3.     while(!(kUSART_TxFifoEmptyFlag & USART_GetStatusFlags(USART0)));
    4. }

    5. void FLEXCOMM0_IRQHandler(void) {
    6.     uint8_t data;
    7.     while((kUSART_RxFifoNotEmptyFlag & USART_GetStatusFlags(USART0))) {
    8.         data = USART_ReadByte(USART0);
    9.     }
    10. }</font>
    复制代码




    文章出处:点击

    签到签到
    回复

    使用道具 举报

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

    本版积分规则

    关闭

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

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-18 13:59 , Processed in 0.084031 second(s), 20 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表