STM32 질문/답변

인터럽트 실행 질문드립니다.

yuns 5 4,614 2018.01.18 20:12

안녕하세요.

 

인터럽트 실행하는 중에 연락드립니다.

 

전체적인 코드 구조는

 

A()

{ 인터럽트1 발생 시 엣지 카운트}

 

B()

{ 인터럽트2 발생 시 엣지 카운트}

 

C()

{ 타이머로 PWM 파형 발생}

 

main()

{A();

B();

C();

while(1);}

 

형태 입니다.

 

그런데 여기서 main을 실행하면 A와 B는 실행되지 않고 C만 실행됩니다. 

A,B,C 는 각각 돌렸을 때는 실행이 잘 되는 검증된 코드 입니다.

합치기만 하면 안돌아가서 질문드립니다.

PWM생성 코드를 다른 인터럽트와 돌려서 그런건지

아니면 while을 다른 곳에 넣어야하는걸까요?

 

답변에 필요할 듯 하여 코드 첨부합니다.

 

 

Comments

plainy 2018.01.19 14:13
소스코드를 그냥 올려주시면 좋겠습니다.
HWP파일 뷰어를 사용하지 않아 소스를 볼수가 없습니다.
다시한번 올려주시기 바랍니다.
plainy 2018.01.19 16:02
HWP뷰어를 설치하여 소스를 확인해 보았습니다.
mo_init함수와 esc함수가 실행되지 않는다고 하셨는데 EXTI Handler에 breakpoint를 찍어서 확인하신건지 아니면 printf로만 확인하신건지 궁금합니다.
pwm함수에서 마지막에 while(1)에서 다음 루틴이 실행되지 않기 때문에 printf가 동작하지 않을 것 같습니다.
pwm함수내의 while문은 필요하지 않을것으로 보이니 제거해 주시기 바랍니다.
yuns 2018.01.19 17:39
breakpoint로 확인한 것은 아니고 printf로만 확인했습니다. 그리고 pwm 마지막에 while(1)을 제거 하였는데 같은 문제가 발생하고 있습니다. 혹시 인터럽트 읽어들이는 시간과 pwm 생성 주기가 달라서 문제가 발생할 경우는 없는건가요?
yuns 2018.01.19 18:07
조금 전 breakpoint로 확인을 하였는데 mo_int와 esc를 거쳐 pwm으로 가면 다시 mo_init으로 돌아가지 않습니다.
plainy 2018.01.22 18:28
void main()
{
  mo_init();
  esc();
    pwm();
  while(1)
    {
   
   
        __WFI();


        printf("MOTOR = %f,  %d\r\n", rpm_m, motor);
        printf("PROP = %f,  %d\r\n", rpm_p, prop);
    }
 
 올려주신 소스에 의하면 mo_init함수, esc함수, pwm실행하고 while문으로 진입하는데 다시 mo_init이 동작하지 않는게 정상적인 경우인것 같은데요.
External Interrupt handler가 발생되지 않는다는 말씀이신지 다시한번 질문을 정리해서 올려 주시면 좋겠습니다.
Category
글이 없습니다.
글이 없습니다.
Facebook Twitter GooglePlus KakaoStory NaverBand