查看: 932|回复: 0

[评测分享] 【NXP OKdo E1双核Cortex M33开发板】试用5:LPC55S69之串口

[复制链接]
  • TA的每日心情
    无聊
    2021-4-7 11:23
  • 签到天数: 27 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    发表于 2020-11-28 16:15:20 | 显示全部楼层 |阅读模式
    分享到:
    emmm,忘了调通串口了。好在官方的例子全,还快弄好了。

    一、引脚。

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

    其他问题

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

    SendString("启动");

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

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

    SendString(strStart);

    2、该例子的串口收发是使用了FIFO缓冲器,所以使用USART_WriteByte()发送字节,发现很久没发出去,而且有部分字节被冲刷掉。所以需要改成以下发送、接收函数。

    void SendChar(u8 t) {
        USART_WriteByte(USART0, t);
        while(!(kUSART_TxFifoEmptyFlag & USART_GetStatusFlags(USART0)));
    }

    void FLEXCOMM0_IRQHandler(void) {
        uint8_t data;
        while((kUSART_RxFifoNotEmptyFlag & USART_GetStatusFlags(USART0))) {
            data = USART_ReadByte(USART0);
        }
    }


    代码:

    #include "board.h"
    #include "fsl_usart.h"
    #include "pin_mux.h"
    #include <stdbool.h>

    #define DEMO_USART USART0
    #define DEMO_USART_CLK_SRC kCLOCK_Flexcomm0
    #define DEMO_USART_CLK_FREQ CLOCK_GetFlexCommClkFreq(0U)
    #define DEMO_USART_IRQHandler FLEXCOMM0_IRQHandler
    #define DEMO_USART_IRQn FLEXCOMM0_IRQn
    #define DEMO_RING_BUFFER_SIZE 16

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

    void DEMO_USART_IRQHandler(void) {
        uint8_t data;
        if ((kUSART_RxFifoNotEmptyFlag | kUSART_RxError) & USART_GetStatusFlags(DEMO_USART)) {
            data = USART_ReadByte(DEMO_USART);
            if (((rxIndex + 1) % DEMO_RING_BUFFER_SIZE) != txIndex) {
                demoRingBuffer[rxIndex] = data;
                rxIndex++;
                rxIndex %= DEMO_RING_BUFFER_SIZE;
            }
        }
    }

    int main(void) {
        usart_config_t config;

        CLOCK_AttachClk(BOARD_DEBUG_UART_CLK_ATTACH);
        BOARD_InitPins();
        BOARD_BootClockPLL150M();
        BOARD_InitDebugConsole();

        USART_GetDefaultConfig(&config);
        config.baudRate_Bps = BOARD_DEBUG_UART_BAUDRATE;
        config.enableTx     = true;
        config.enableRx     = true;

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

        while (1) {
            while ((kUSART_TxFifoNotFullFlag & USART_GetStatusFlags(DEMO_USART)) && (rxIndex != txIndex)) {
                USART_WriteByte(DEMO_USART, demoRingBuffer[txIndex]);
                txIndex++;
                txIndex %= DEMO_RING_BUFFER_SIZE;
            }
        }
    }

    回复

    使用道具 举报

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

    本版积分规则

    关闭

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

    手机版|小黑屋|与非网

    GMT+8, 2024-4-25 03:04 , Processed in 0.114311 second(s), 16 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.