STM32 하드웨어 디버깅 도중 Delay질문
1607 단어 ARM
#define Delay_ms(x) Delay_us(1000*x)// ms
즉, 지연 x 단위 ms, Delayus() 함수 정의:
void Delay_us(__IO u32 nTime)
{
TimingDelay = nTime;
while(TimingDelay != 0);
}
매개변수
TimingDelay가 0이 아니면 여기는while 사순환입니다. 연구를 통해 TimingDelay 매개 변수는 시스템 타이머 인터럽트 중 점차적으로 감소해야 한다는 것을 발견했습니다. 즉,
/**@filename stm32f10x_it.c
* @brief This function handles SysTick Handler.
* @param None
* @retval None
*/
void SysTick_Handler(void)
{
TimingDelay_Decrement();
}
함수.
TimingDelay_Decrement() 정의는 다음과 같습니다.
/*-------------------------------------------------------------------------------
:TimingDelay_Decrement
: 0
:
:
: SysTick_Handler()
---------------------------------------------------------------------------------*/
void TimingDelay_Decrement(void)
{
if (TimingDelay != 0x00)
{
TimingDelay--;
}
}
프로그램이 끊긴 이유는 끊긴 거예요.
함수 SysTickHandler(void)에 TimingDelay에 대한 체감(호출 함수 TimingDelay Decrement()가 없어서 사순환을 벗어나지 못합니다.
또 주의해야 할 것은
SysTick을 사용하기 전에 중단이 가능하도록 초기화해야 합니다.
void SysTick_Init(void)
{
// SystemFrequency / 1000 1ms
// SystemFrequency / 100000 10us
// SystemFrequency / 1000000 1us
if (SysTick_Config(SystemCoreClock / 1000000)) // 1us ST3.5.0
{
/* Capture error */
while (1);
}
}
끊을 수 없으면 타이머 중단 함수에 들어갈 수 없고while 순환에서 끊길 수 있습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
PSoC5LP에서 FreeRTOSv10.2.1을 사용한 L 치카PSoC Creator 4.2 FreeRTOS 10.2.1 디바이스는 이번에 이용하는 CY8C5888LTI-LP097을 선택. 템플릿은 빈 empty를 선택. zip과 exe가 있지만 이번에는 zip을 선택. 이 중...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.