F💻W/그 외

DMA - Dynamic Memory Access (MSP Init)

천숭이 2023. 6. 30. 14:14

메모리에 직접 접근하는 기술

CPU의 개입 없이 I/O 장치와 메모리 간의 데이터 전송을 허용하는 기술
CPU가 다른 작업을 수행하는 동안에도 I/O 장치에서 데이터를 전송할 수 있으므로 시스템 성능 향상됨

timers, ADC, SPIs. I2Cs, USARTs 에서 사용된다.

따라서 위 기능들을 사용할 때는 MSP Init을 해줘야 함.

 

 

 

아래 예시코드를 보면

UART_MSPInit 함수를 사용한다.

(주의할 점은 하단의 __HAL_UART_ENABLE_IT(&huart1, UART_IT_RXNE); 가 안써져 있다. 써줘야 UART의 동작이 정상적으로 구현된다)

void HAL_UART_MspInit(UART_HandleTypeDef* huart)
{
  GPIO_InitTypeDef GPIO_InitStruct = {0};
  if(huart->Instance==USART1)
  {
  /* USER CODE BEGIN USART1_MspInit 0 */

  /* USER CODE END USART1_MspInit 0 */
    /* Peripheral clock enable */
    __HAL_RCC_USART1_CLK_ENABLE();

    __HAL_RCC_GPIOA_CLK_ENABLE();
    /**USART1 GPIO Configuration
    PA9     ------> USART1_TX
    PA10     ------> USART1_RX
    */
    GPIO_InitStruct.Pin = GPIO_PIN_9;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

    GPIO_InitStruct.Pin = GPIO_PIN_10;
    GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  /* USER CODE BEGIN USART1_MspInit 1 */
    __HAL_UART_ENABLE_IT(&huart1, UART_IT_RXNE); 
  /* USER CODE END USART1_MspInit 1 */
  }

}

'F💻W > 그 외' 카테고리의 다른 글

STM32 Clock Configuration System Clock 설정  (0) 2023.06.30
GPIO MODE의 종류와 설명  (0) 2023.06.26
IAR 프로젝트 생성 후 초기 설정  (0) 2023.02.21
NXP사 NCF3320제품 조사  (0) 2022.10.24
RFID 시스템 정리  (0) 2022.10.07
동기 / 비동기 / UART / I2C / I2S / SPI  (2) 2022.10.06