MSP432E401Y开发板在freertos下使用串口回调接收数据代码
时间: 2024-02-03 10:15:14 浏览: 88
接收串口数据并把数据用曲线显示出来,里面有控件,还有源代码,控件开发文档
5星 · 资源好评率100%
以下是MSP432E401Y开发板在FreeRTOS下使用串口回调接收数据的示例代码:
```c
#include "FreeRTOS.h"
#include "task.h"
#include "semphr.h"
#include "driverlib.h"
#define BUFFER_SIZE 128
typedef struct {
uint8_t buffer[BUFFER_SIZE];
uint8_t head;
uint8_t tail;
} circular_buffer_t;
static circular_buffer_t rx_buffer;
static SemaphoreHandle_t rx_sem;
void UART1_IRQHandler(void)
{
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
uint32_t status = UART_getEnabledInterruptStatus(EUSCI_A1_BASE);
if (status & EUSCI_A_UART_RECEIVE_INTERRUPT_FLAG) {
uint8_t data = UART_receiveData(EUSCI_A1_BASE);
uint8_t next = (rx_buffer.head + 1) % BUFFER_SIZE;
if (next != rx_buffer.tail) {
rx_buffer.buffer[rx_buffer.head] = data;
rx_buffer.head = next;
xSemaphoreGiveFromISR(rx_sem, &xHigherPriorityTaskWoken);
}
}
portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
}
void vUARTTask(void *pvParameters)
{
while (1) {
xSemaphoreTake(rx_sem, portMAX_DELAY);
while (rx_buffer.tail != rx_buffer.head) {
uint8_t data = rx_buffer.buffer[rx_buffer.tail];
rx_buffer.tail = (rx_buffer.tail + 1) % BUFFER_SIZE;
// 处理接收到的数据
}
}
}
void vApplicationIdleHook(void)
{
// 休眠以降低功耗
__asm volatile ("wfi");
}
int main(void)
{
// 初始化串口
const eUSCI_UART_Config uartConfig = {
EUSCI_A_UART_CLOCKSOURCE_SMCLK, // 时钟源
78, // BRDIV
2, // UCxBRF
0, // UCxBRS
EUSCI_A_UART_NO_PARITY, // 无校验位
EUSCI_A_UART_LSB_FIRST, // 先送出 LSB
EUSCI_A_UART_ONE_STOP_BIT, // 一个停止位
EUSCI_A_UART_MODE, // UART 模式
EUSCI_A_UART_OVERSAMPLING_BAUDRATE_GENERATION, // 过采样
};
UART_initModule(EUSCI_A1_BASE, &uartConfig);
UART_enableModule(EUSCI_A1_BASE);
UART_enableInterrupt(EUSCI_A1_BASE, EUSCI_A_UART_RECEIVE_INTERRUPT);
Interrupt_enableInterrupt(INT_EUSCIA1);
// 创建信号量
rx_sem = xSemaphoreCreateBinary();
// 创建任务
xTaskCreate(vUARTTask, "UART", 256, NULL, 2, NULL);
// 启动 FreeRTOS
vTaskStartScheduler();
return 0;
}
```
在这个示例代码中,我们使用了一个循环缓冲区来存储接收到的数据。当有数据到达时,我们将其存储到缓冲区中,并通知任务处理数据。任务将会一直等待,直到接收到数据,然后处理缓冲区中的所有数据。在空闲钩子函数中,我们使用 wfi 指令将处理器置于低功耗模式,以降低功耗。
阅读全文