想使用STM32F1结合RFID对电机进行操控,具体功能是RFID不断寻卡,寻到卡后电机输入脉冲停止,过几秒后电机继续运行。
使用Delay函数对脉冲频率进行控制,电机所需要的脉冲频率在微秒级别。
我一开始在while(1)循环中同时驱动电机和RFID读写,但是发现由于电机脉冲频率过高,RFID的读写又需要一定时间,导致实际脉冲输出频率误差较大。
while (1)
{
HAL_GPIO_WritePin(Motor_Pulse_GPIO_Port, Motor_Pulse_Pin, GPIO_PIN_SET);
Delay_us(1000);
HAL_GPIO_WritePin(Motor_Pulse_GPIO_Port, Motor_Pulse_Pin, GPIO_PIN_RESET);
Delay_us(1000);
if(!readCard(readUid,NULL)){
printf("卡号:%x-%x-%x-%x\n",readUid[0],readUid[1],readUid[2],readUid[3]);
if(!strncmp((char *)readUid,(char *)UID,4)){
//比对卡号正确要做什么
printf("卡号正确\r\n");
HAL_GPIO_WritePin(Motor_Pulse_GPIO_Port, Motor_Pulse_Pin, GPIO_PIN_RESET);
HAL_Delay(3000);
}
else{
//比对卡号错误要做什么
printf("卡号错误\r\n");
}
}
}
个人认为,电机和RFID的读取都是需要不断循环的事件,但是前者对于时间精确度要求高,所以两者不能放在同一个循环内,想到用中断函数,但是RFID的不断读取又感觉不能使用中断函数完成,刚入门,求指导~