PWM 서브 모터 제어(SG90)
시스템 clock이84MHZ
->분주 : 84M / 1680 :50,000HZ(50KHZ)
->주기 : 1/F =1/50,000 = 0.00002sec = 20us
->20ms :20us * 1000
HAL_Delay 를 쓰지 않고 timer로 처리
0도 -> 90도 -> 180도
extern volatile int t1ms_counter;
if((2000 > t1ms_counter) && (t1ms_counter>= 1000))
{
__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,29) ;// 0도
}
else if((3000 > t1ms_counter) && (t1ms_counter>= 2000))
{
__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,70) ;// 90도
}
else if(t1ms_counter>= 3000)
{
__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,112) ;// 180도
t1ms_counter = 0;
}
SPI통신(RFID 리더기)
SS가 low를 유지해야 통신을 함.
-CPOL
CPHA(Clock Phase,클락 위상) 빨간색 선
-CPHA = 0 (IDLE -> Active)
-CPHA = 1 (Active -> IDLE) 파란색 선
CPOL이 0이고 CPHA가 1이면 CLOCK이 1에서 0으로 떨어질 때
CPOL이 1이고 CPHA가 1이면 CLOCK이 0에서 1로 올라갈 때
Full-Duplex 를 선택하면 rx,tx둘다 가능
uint8_t rfid_rx;
void rfid_reader_init()
{
mfrc522_init(&hspi1);
HAL_Delay(1000); //안정화 시간 필요
rfid_rx = mfrc522_read(VersionReg);
if (rfid_rx == 0x92)
{
printf("RC522v2 Detect !!!\n");
}
else if (rfid_rx ==0x91 || rfid_rx ==0x90)
{
printf("RC522v1 Detect !!!\n");
}
else
{
printf("No Detect !!!\n");
}
}
[STM32] RFID / Servo Motor 연동
uint8_t rfid_key_table[][6] 에 2개의 card key를 등록한다
1.rfid_key_table에 등록된 caed key이면
(1) LCD창에 card번호와 door open문자를 display출력
(2) 서버 모터를 (90도 회전) 3초간 유지 한후
(3) 서버 모터를 0도 회전
***[STM32] ASCII CODE 출력 PROGRAM
for문을 이용 하여 ASCII 문자를 툴력 하는 프로그램을 작성 하시오
1. 16진수 0x00 ~ 0x20 까지는 특수 문자로
printf("%c") 로는 출력 이 되지 않는다.
0는 NUL 1은 SOH와 같이 출력 하고록 한다.
2. 헤더 는 30라인 출력 할 때 마다 출력 한다.
DEC HEX BIN CHAR
=== ==== ==== =====
0 0x00 00000000 NUL
32 0x20 00100000 SP
33 0x21 00100001 !