[STM32의HAL 라이브러리 개발] 큐브MX의HAL 라이브러리 설정, 직렬 인터페이스에 들어가지 않는 문제

1523 단어

[STM32의 HAL 라이브러리 개발] 직렬 인터럽트

  • 개발 환경
  • main.c 코드 추가(1/2)
  • stm32f4xxit.c 코드 추가(2/2)
  • 주의
  • 코드 첨부
  • 개발 환경


    cubemx V5.5.0 + MDK Keil V5.29.0.0 + STM32F429NIH

    이메일c 코드 추가(1/2)


    main 함수에서uart를 초기화한 후 실행
    ==__HAL_UART_ENABLE_IT(&huart1,UART_IT_RXNE);==
    

    끊을 수 있도록 쓰다.전제는 cube에uart1의 직렬 수신 중단을 설정한 것입니다.이 정도만 하면 USART1에 들어갈 수 있어요.IRQHandler()는 중단됐지만 한 번만 들어갈 수 있습니다.debug에서 외부 장치를 보았을 때 중단된 표지 위치 제거 문제가 발견되었습니다.

    stm32f4xxit.c 코드 추가(2/2)


    USART1IRQHandler() 인터럽트 함수 마지막 두 행에 코드 추가
    __HAL_UART_ENABLE_IT(&huart1,UART_IT_ERR);
    __HAL_UART_ENABLE_IT(&huart1,UART_IT_RXNE);
    

    USART1에 바이트 단위로 들어갈 수 있음IRQHandler ()가 중단되었습니다.

    주의


    이 방법은hal 라이브러리의 불필요한 중단 처리와 리셋 함수를 사용하지 않았기 때문에 직렬 수신 함수와 관련된 다른 부분, 예를 들어HALUART_IRQHandler(&huart1); 사귀다상기 세 줄 코드만 추가하면 직렬 수신이 중단되어 라이브러리 함수 시대로 돌아갈 수 있다.

    부코드

    /**
      * @brief This function handles USART1 global interrupt.
      */
    void USART1_IRQHandler(void)
    {
      /* USER CODE BEGIN USART1_IRQn 0 */
    	uint8_t temp;
    	
    	if(USART1->SR & 0x00000020){
    		temp = USART1->DR;
    		RX_BUFF[RX_CNT++] = temp;		
    		if(temp==0x0d)console_setflag();
    	}
      /* USER CODE END USART1_IRQn 0 */
      HAL_UART_IRQHandler(&huart1);
      /* USER CODE BEGIN USART1_IRQn 1 */
    	__HAL_UART_ENABLE_IT(&huart1,UART_IT_ERR);
    	__HAL_UART_ENABLE_IT(&huart1,UART_IT_RXNE);
      /* USER CODE END USART1_IRQn 1 */
    }
    

    좋은 웹페이지 즐겨찾기