实现RFID逻辑

This commit is contained in:
2026-04-14 23:40:46 +08:00
parent 65478d9f02
commit a6359364fd
7 changed files with 970 additions and 1 deletions

View File

@@ -34,6 +34,7 @@
#include "bsp_hall.h" // 添加对 bsp_hall.h 的包含
#include "bsp_track_ir.h" // 添加对 bsp_track_ir.h 的包含
#include "bsp_sr04.h" // 添加超声波头文件
#include "bsp_rc522.h" // 添加 RFID 头文件
/* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*/
@@ -83,6 +84,13 @@ const osThreadAttr_t sr04Task_attributes = {
.stack_size = 128 * 4,
.priority = (osPriority_t) osPriorityLow,
};
/* Definitions for rc522Task */
osThreadId_t rc522TaskHandle;
const osThreadAttr_t rc522Task_attributes = {
.name = "rc522Task",
.stack_size = 128 * 4,
.priority = (osPriority_t) osPriorityBelowNormal,
};
/* Definitions for CmdQueue */
osMessageQueueId_t CmdQueueHandle;
const osMessageQueueAttr_t CmdQueue_attributes = {
@@ -107,6 +115,7 @@ void StartDefaultTask(void *argument);
void CarCtrl_Task(void *argument);
void speed_get(void *argument);
void sr04_task(void *argument);
void rc522_task(void *argument);
void MX_FREERTOS_Init(void); /* (MISRA C 2004 rule 8.1) */
@@ -126,6 +135,9 @@ void MX_FREERTOS_Init(void) {
hall_init(); // 初始化霍尔传感器
track_ir_init(); // 初始化轨迹红外传感器
sr04_init(); // 初始化超声波
rc522_init(); // 初始化 RFID 模块
/* USER CODE END Init */
@@ -162,6 +174,9 @@ void MX_FREERTOS_Init(void) {
/* creation of sr04Task */
sr04TaskHandle = osThreadNew(sr04_task, NULL, &sr04Task_attributes);
/* creation of rc522Task */
rc522TaskHandle = osThreadNew(rc522_task, NULL, &rc522Task_attributes);
/* USER CODE BEGIN RTOS_THREADS */
/* add threads, ... */
/* USER CODE END RTOS_THREADS */
@@ -256,6 +271,43 @@ void sr04_task(void *argument)
/* USER CODE END sr04_task */
}
/* USER CODE BEGIN Header_rc522_task */
/**
* @brief Function implementing the rc522Task thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_rc522_task */
void rc522_task(void *argument)
{
/* USER CODE BEGIN rc522_task */
rc522_card_info_t card;
char uid_str[3 * RC522_UID_MAX_LEN] = {0};
station_id_t station = STATION_NONE;
/* Infinite loop */
for(;;)
{
rc522_status_t st = rc522_poll(&card);
if (st == RC522_OK) {
if (rc522_uid_to_string(&card, uid_str, sizeof(uid_str))) {
printf("RFID UID: %s, SAK:0x%02X, ATQA:0x%04X\r\n",
uid_str, card.sak, card.atqa);
}
// 站点匹配逻辑
station = rc522_match_station(card.uid, card.uid_len);
if (station == STATION_1) {
printf("到达站点1\r\n");
// 可在此处添加到站动作,如停车、蜂鸣等
} else if (station == STATION_2) {
printf("到达站点2\r\n");
// 可在此处添加到站动作,如停车、蜂鸣等
}
}
osDelay(100);
}
/* USER CODE END rc522_task */
}
/* Private application code --------------------------------------------------*/
/* USER CODE BEGIN Application */