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 */
}
}