내 연락처 정보
우편메소피아@프로톤메일.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
타이머 인터럽트(판정) 시간 매개변수 키 인터럽트(수정)
DCD SysTick_Handler ; SysTick Handler
- void SysTick_Handler(void)
- {
-
- HAL_IncTick();//增加计数值,
-
- extern void check_timer(void);
- check_timer();
-
- }
- __weak void HAL_IncTick(void)
- {
- uwTick += uwTickFreq;
- }
-
- __weak uint32_t HAL_GetTick(void)
- {
- return uwTick;
- }
바늘 시간과 시계 시간
pTimer 구조시간 및 프로세스 카운트 값을 포함하는 함수
시스템에서시계 처리 기능시계 확인 기능을 추가하고 check_timer의 if 문은 포인터 시간을 시계 시간보다 작거나 같도록 제한합니다.
중단되면 통과인터럽트 콜백 함수자신의 포인터 시간에 10ms를 추가합니다.이 기간 동안 또 다른 중단이 발생하면 포인터 시간이 10씩 증가합니다.
중단이 발생하지 않거나 (n*10) ms 내에 중단이 발생하면 check_timer에 if 함수 본문을 입력하기 위한 조건이 충족되지 않습니다.
지터가 없어질 때까지 if 함수 본문을 입력합니다.타이머 함수와 check_timer 함수를 통해 구조체 내 함수 호출,만들다카운트 값증가하다
- struct soft_timer {
- uint32_t timeout;
- void * args;
- void (*func)(void *);
- };
-
- int g_key_cnt = 0;
-
- void key_timeout_func(void *args);
- struct soft_timer key_timer = {~0, NULL, key_timeout_func};
- void key_timeout_func(void *args)
- {
- g_key_cnt++;
- key_timer.timeout = ~0;
- }
-
- void mod_timer(struct soft_timer *pTimer, uint32_t timeout)
- {
- pTimer->timeout = HAL_GetTick() + timeout;
- }
-
- void check_timer(void)
- {
- if (key_timer.timeout <= HAL_GetTick())
- {
- key_timer.func(key_timer.args);
- }
- }
-
- 、、数据处理的源头,发生中断
- void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
- {
- if (GPIO_Pin == GPIO_PIN_14)
- {
- mod_timer(&key_timer, 10);
- }
- }
- int main(){
- OLED_Init();
- OLED_Clear();
- OLED_PrintString(0, 4, "Key ISR cnt = ");
- while (1)
- {
- OLED_PrintSignedVal(0, 6, g_key_cnt);
-
- }
-
- }
DCD EXTI15_10_IRQ핸들러; EXTI 라인 15..10
- void EXTI15_10_IRQHandler(void)
- {
- /* USER CODE BEGIN EXTI15_10_IRQn 0 */
-
- /* USER CODE END EXTI15_10_IRQn 0 */
- HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_14);
- /* USER CODE BEGIN EXTI15_10_IRQn 1 */
-
- /* USER CODE END EXTI15_10_IRQn 1 */
- }
데이터 처리 소스, 중단 발생
- void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin)
- {
- /* EXTI line interrupt detected */
- if (__HAL_GPIO_EXTI_GET_IT(GPIO_Pin) != 0x00u)
- {
- __HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin);
- HAL_GPIO_EXTI_Callback(GPIO_Pin);
- }
- }