NXP SKEAZ128 UART2 串口通信:发送和接收 8 字节数组数据(中断接收)
NXP SKEAZ128 UART2 串口通信:发送和接收 8 字节数组数据(中断接收)
以下是使用 Keil 软件编写 NXP SKEAZ128 处理器 UART2 串口发送和接收 8 个字节为一帧的数组数据,并使用中断方式进行接收数据的示例代码:
#include "SKEAZ1284.h"
#define UART2_BAUDRATE 9600
#define DATA_LENGTH 8
uint8_t txData[DATA_LENGTH] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08};
uint8_t rxData[DATA_LENGTH];
void UART2_Init(void) {
SIM_SCGC |= SIM_SCGC_UART2_MASK; // Enable UART2 clock
UART2_BDH = 0x00;
UART2_BDL = (uint8_t)(CPU_FREQUENCY / (16 * UART2_BAUDRATE)); // Set baud rate
UART2_C1 |= UART_C1_TE_MASK; // Enable transmitter
UART2_C2 |= UART_C2_RE_MASK | UART_C2_RIE_MASK; // Enable receiver and receiver interrupt
NVIC_ISER |= (1 << 12); // Enable UART2 interrupt
}
void UART2_SendData(uint8_t *data, uint8_t length) {
for (uint8_t i = 0; i < length; i++) {
while (!(UART2_S1 & UART_S1_TDRE_MASK)); // Wait until transmit buffer is empty
UART2_D = data[i]; // Send data
}
while (!(UART2_S1 & UART_S1_TC_MASK)); // Wait until transmission is complete
}
void UART2_IRQHandler(void) {
if (UART2_S1 & UART_S1_RDRF_MASK) { // Receive data register full interrupt
static uint8_t dataIndex = 0; // Index of received data
uint8_t receivedData = UART2_D; // Read received data
rxData[dataIndex++] = receivedData; // Store received data
if (dataIndex >= DATA_LENGTH) {
dataIndex = 0; // Reset index
UART2_SendData(rxData, DATA_LENGTH); // Send received data
}
}
}
int main(void) {
UART2_Init();
UART2_SendData(txData, DATA_LENGTH); // Send initial data
while (1);
}
在这个示例代码中,我们首先定义了 UART2 的波特率和数据长度,以及要发送和接收的数据数组。然后,在 UART2_Init 函数中,我们使能了 UART2 的时钟,设置了波特率和使能了发送和接收的相关功能和中断。在 UART2_SendData 函数中,我们使用循环发送数据,并在发送完所有数据后等待传输完成。在 UART2_IRQHandler 中断服务函数中,我们使用静态变量 dataIndex 来记录接收数据的索引,将接收到的数据存储到 rxData 数组中,并在接收完一个完整的数据帧后,重置索引并发送接收到的数据。最后,在 main 函数中,我们初始化 UART2 并发送初始数据,然后通过一个无限循环来保持程序运行。
请注意,上述代码只是一个示例,并且可能需要根据您的具体需求进行修改和适配。确保根据您的硬件连接正确配置 UART2 引脚,并根据需要调整波特率和数据长度。
原文地址: https://www.cveoy.top/t/topic/qqTx 著作权归作者所有。请勿转载和采集!