stm32 & rtos
[stm32] can통신 , freeRTOS 메세지 큐
별의 별
2022. 8. 24. 15:59
[stm32] can통신 , freeRTOS 메세지 큐
can으로 모터의 angle을 받아오고, queue로 값을 전달하기
6시간을 thread가 왜 queue send할 때 멈추는가로 보냈다..
<구조>
can_request_angle.c 에
1. can thread 생성 함수
2. can thread
3. send velocity command - 모터에 speed 전달 함수
4. SendAngleRequest - 모터에 angle값 달라 요청
5. can통신으로 받은 값 인터럽트 callback 함수
먼저 can thread로 모터에 speed 전달하고 angle값을 달라 요청을 한다 -> 인터럽트가 되서 해당 id 에 맞는 값이 들어오면
xQueueSendFromISR 로 값을 전달한다.
-> 주의!!!
xQueueSend()를 사용하면 thread가 돌지 않는다. 아예 보드가 뻗는다.
void HAL_FDCAN_RxFifo0Callback(FDCAN_HandleTypeDef *hfdcan, uint32_t RxFifo0ITs)
{
if(xQueueSendFromISR(motor_angle_queue_handler, &motor_angle.motor_angle, 0) == pdPASS){
PrintDbgMsg("motor_angle_send_ok\r\n");
}
}
대충 요렇게 넣어줘야한다....
control.c 에서
xQueueReceive()로 값을 받는다.