|
如题,有人使用过这个功能吗?求解答
PC13外部中断触发DMA把数据传输到GPIOA上,实现PA5输出脉冲,代码如下:
static void MX_DMA_Init(void)
{
/* Local variables */
HAL_DMA_MuxRequestGeneratorConfigTypeDef pRequestGeneratorConfig = {0};
/* DMA controller clock enable */
__HAL_RCC_DMA1_CLK_ENABLE();
/* Configure DMA request hdma_dma_generator0 on DMA1_Channel1 */
hdma_dma_generator0.Instance = DMA1_Channel1;
hdma_dma_generator0.Init.Request = DMA_REQUEST_GENERATOR0;
hdma_dma_generator0.Init.Direction = DMA_MEMORY_TO_PERIPH;
hdma_dma_generator0.Init.PeriphInc = DMA_PINC_DISABLE;
hdma_dma_generator0.Init.MemInc = DMA_MINC_ENABLE;
hdma_dma_generator0.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
hdma_dma_generator0.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
hdma_dma_generator0.Init.Mode = DMA_CIRCULAR;
hdma_dma_generator0.Init.Priority = DMA_PRIORITY_LOW;
if (HAL_DMA_Init(&hdma_dma_generator0) != HAL_OK)
{
Error_Handler( );
}
/* Configure the DMAMUX request generator for the selected DMA channel */
pRequestGeneratorConfig.SignalID = HAL_DMAMUX1_REQ_GEN_EXTI13;
pRequestGeneratorConfig.Polarity = HAL_DMAMUX_REQ_GEN_RISING;
pRequestGeneratorConfig.RequestNumber = 1;
if (HAL_DMAEx_ConfigMuxRequestGenerator(&hdma_dma_generator0, &pRequestGeneratorConfig) != HAL_OK)
{
Error_Handler( );
}
}
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
/* GPIO Ports Clock Enable */
__HAL_RCC_GPIOC_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin, GPIO_PIN_RESET);
/*Configure GPIO pin : PC13 */
GPIO_InitStruct.Pin = GPIO_PIN_13;
GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
/*Configure GPIO pin : LED_GREEN_Pin */
GPIO_InitStruct.Pin = LED_GREEN_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(LED_GREEN_GPIO_Port, &GPIO_InitStruct);
/* EXTI interrupt init*/
HAL_NVIC_SetPriority(EXTI4_15_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(EXTI4_15_IRQn);
}
int main(void)
{
uint16_t DataSource[]={GPIO_PIN_5,0,GPIO_PIN_5,0};
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* Configure the system clock */
SystemClock_Config();
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_DMA_Init();
HAL_DMAEx_EnableMuxRequestGenerator(&hdma_dma_generator0);
HAL_DMA_Start(&hdma_dma_generator0,(uint32_t)&DataSource,(uint32_t)&(GPIOA->ODR),4);
while (1)
{
}
}
|
|