下面是使用KEA128芯片在Keil环境下,使用UART2中断方法接收串口不定长度的16位进制数值类型数据,并存储下来,然后一次性从串口再发送出来的示例代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "SKEAZ1284.h"

#define BUFFER_SIZE 8

volatile uint8_t rxBuffer[BUFFER_SIZE];
volatile uint8_t rxIndex = 0;
volatile uint8_t rxComplete = 0;

void UART2_IRQHandler(void)
{
    if (UART2_S1 & UART_S1_RDRF_MASK)
    {
        uint8_t data = UART2_D;
        
        if (rxIndex < BUFFER_SIZE)
        {
            rxBuffer[rxIndex++] = data;
        }
        
        if (rxIndex == BUFFER_SIZE)
        {
            rxComplete = 1;
            rxIndex = 0;
        }
    }
}

void UART2_Init(void)
{
    // Enable UART2 clock
    SIM_SCGC |= SIM_SCGC_UART2_MASK;
    
    // Set UART2 pin muxing
    PORTA_PCR1 = PORT_PCR_MUX(2);   // UART2_RX
    PORTA_PCR2 = PORT_PCR_MUX(2);   // UART2_TX
    
    // Disable UART2 before configuring
    UART2_C2 &= ~UART_C2_TE_MASK;
    UART2_C2 &= ~UART_C2_RE_MASK;
    
    // Configure UART2 for 115200 baud rate
    UART2_BDH = 0x00;
    UART2_BDL = 0x17;
    UART2_C4 = 0x0F;
    
    // Enable UART2 receiver interrupt
    UART2_C2 |= UART_C2_RIE_MASK;
    
    // Enable UART2
    UART2_C2 |= UART_C2_TE_MASK;
    UART2_C2 |= UART_C2_RE_MASK;
    
    // Enable UART2 interrupt in NVIC
    NVIC_EnableIRQ(UART2_IRQn);
}

void UART2_SendData(uint8_t* data, uint8_t length)
{
    for (uint8_t i = 0; i < length; i++)
    {
        while (!(UART2_S1 & UART_S1_TDRE_MASK));
        UART2_D = data[i];
    }
    
    while (!(UART2_S1 & UART_S1_TC_MASK));
}

int main(void)
{
    UART2_Init();
    
    while (1)
    {
        if (rxComplete)
        {
            // Process received data
            // ...
            
            // Send data back
            UART2_SendData(rxBuffer, BUFFER_SIZE);
            
            // Clear buffer and flag
            memset(rxBuffer, 0, sizeof(rxBuffer));
            rxComplete = 0;
        }
    }
    
    return 0;
}

在上述代码中,我们使用UART2的中断来接收串口数据,并存储到rxBuffer数组中。当接收到8个字节的数据时,设置rxComplete标志位并清除rxIndex计数器。在主循环中,如果rxComplete标志位被设置,表示接收到了完整的数据,我们可以对接收到的数据进行处理,并通过UART2发送回去。最后,我们清除rxBuffer数组并重置rxComplete标志位,以便接收下一组数据。

请注意,代码中的波特率设置为115200,如果需要其他波特率,请根据实际情况修改相关寄存器的值。另外,代码还未实现对接收到的数据的处理部分,你可以根据自己的需求进行相应的处理。

KEA128芯片在Keil环境下使用UART2中断方法接收串口不定长度的16位进制数值类型数据并存存下来一次性从口串口再发送出来使用C语言编写可运行的所有程序要求无停止位要求接收到的数据是8个元素不符要求时数组清除

原文地址: https://www.cveoy.top/t/topic/i2WQ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录