我参考了H7的示例修改G0的,但没实现功能 代码配置 DMA static void MX_DMA_Init(void) { /* DMA controller clock enable */ __HAL_RCC_DMA1_CLK_ENABLE(); hdma_memtomem_dma1_channel1.Instance = DMA1_Channel1; hdma_memtomem_dma1_channel1.Init.Request = DMA_REQUEST_GENERATOR0; hdma_memtomem_dma1_channel1.Init.Direction = DMA_MEMORY_TO_PERIPH; hdma_memtomem_dma1_channel1.Init.PeriphInc = DMA_PINC_DISABLE; hdma_memtomem_dma1_channel1.Init.MemInc = DMA_MINC_ENABLE; hdma_memtomem_dma1_channel1.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; hdma_memtomem_dma1_channel1.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; hdma_memtomem_dma1_channel1.Init.Mode = DMA_CIRCULAR; hdma_memtomem_dma1_channel1.Init.Priority = DMA_PRIORITY_LOW; if (HAL_DMA_Init(&hdma_memtomem_dma1_channel1) != HAL_OK) { Error_Handler(); } /* Select Callbacks functions called after Transfer complete and Transfer error */ //HAL_DMA_RegisterCallback(&hdma_memtomem_dma1_channel1, HAL_DMA_XFER_CPLT_CB_ID, TransferComplete); HAL_DMA_RegisterCallback(&hdma_memtomem_dma1_channel1, HAL_DMA_XFER_ERROR_CB_ID, TransferError); /* DMA interrupt init */ /* DMA1_Channel1_IRQn interrupt configuration */ HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 1, 0); HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn); /*##-3- Configure and enable the DMAMUX Request generator ####################*/ dmamux_ReqGenParams.SignalID = HAL_DMAMUX1_REQ_GEN_EXTI0; /* External request signal is EXTI0 signal */ dmamux_ReqGenParams.Polarity = HAL_DMAMUX_REQ_GEN_FALLING;//HAL_DMAMUX_REQ_GEN_RISING; /* External request signal edge is falling */ dmamux_ReqGenParams.RequestNumber = 1; /* 1 requests on each edge of the external request signal */ HAL_DMAEx_ConfigMuxRequestGenerator(&hdma_memtomem_dma1_channel1, &dmamux_ReqGenParams); /* NVIC configuration for DMAMUX request generator overrun errors*/ HAL_NVIC_SetPriority(DMA1_Ch4_7_DMAMUX1_OVR_IRQn, 2, 0); HAL_NVIC_EnableIRQ(DMA1_Ch4_7_DMAMUX1_OVR_IRQn); } 外部中断口PA0配置 static void EXTI_IRQHandler_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; /* Enable GPIOC clock */ __HAL_RCC_GPIOA_CLK_ENABLE(); /* Configure PA.0 pin as input floating */ GPIO_InitStructure.Mode = GPIO_MODE_IT_FALLING; GPIO_InitStructure.Pull = GPIO_NOPULL; GPIO_InitStructure.Pin = GPIO_PIN_0; HAL_GPIO_Init(GPIOA, &GPIO_InitStructure); // HAL_NVIC_SetPriority(EXTI0_1_IRQn, 3, 0); // HAL_NVIC_EnableIRQ(EXTI0_1_IRQn); } 主函数调用 MX_DMA_Init(); /* Infinite loop */ /* USER CODE BEGIN WHILE */ /* Reset transferErrorDetected to 0, it will be set to 1 if a transfer error is detected */ transferErrorDetected = 0; /* Reset transferCompleteDetected to 0, it will be set to 1 if a transfer is correctly completed */ transferCompleteDetected = 0; HAL_DMAEx_EnableMuxRequestGenerator (&hdma_memtomem_dma1_channel1); EXTI_IRQHandler_Config(); if (HAL_DMA_Start_IT(&hdma_memtomem_dma1_channel1, (uint32_t)&g_uitemp[0], (uint32_t)&LED4_GPIO_PORT->ODR, 2) != HAL_OK) { /* Transfer Error */ Error_Handler(); } /* Infinite loop */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ if (transferErrorDetected == 1) { /* Toggle LED4 with a period of 200 ms */ //BSP_LED_Toggle(LED4); transferErrorDetected = 0; } if (transferCompleteDetected == 1) { /* Turn LED4 on*/ //BSP_LED_On(LED4); transferCompleteDetected = 0; } } /* USER CODE END 3 */ |
STM32H743 SPI从进入DMA完成中断时间疑问
adc采集电压
关于使用STM32G030C8T6的串口收发过程中串口接收问题
STM32G0B1的CAN自动重发
用stm32cubeide生成的STM32G030F6P6代码只要一开中断,任何中断程序都会跑飞.
关于stm32g431串口与FDCAN数据不同同时处理问题
STM32G0B1CBT6 双Bank升级,运行Bank2上Flash不能写问题
有关STM32G0B1RET6芯片FLASH擦除问题
STM32G030烧录程序
Stm32G071 i2c slave配置问题
确认开了__HAL_RCC_SYSCFG_CLK_ENABLE();
太感谢了,最好是完整的工程代码发一个,建议官方给的示例工程能多一些,每个功能点都有就好了,初学者很需要啊
通过STM32外部中断触发DMA传输 (qq.com)
这个你看看,介绍了整个基于G4芯片的实现过程。
参照帖子使用CubeMx设置生成的工程,主函数也添加了代码,IO还是没翻转,无奈了。。。。。。。。。
这是代码,看不出哪有问题
Src.rar
2021-8-11 10:54 上传
点击文件名下载附件
下载积分: ST金币 -14.35 KB, 下载次数: 2, 下载积分: ST金币 -1
有点懵了
很无语啊,弄好几天了,如果你解决了就告诉我一下
可以参考下,遗憾的是这并不是一个解决方案。
G0系列的DMA与GPIO并没有总线相连,因此DMA控制器无法访**PIO寄存器。
可以测试将DMA目的地址更改为Memory或者USART的TDR,DMA在这些情况下可以正常工作,原因在于M0+对于GPIO使用了"special port",对比G0系列和G4系列的系统框图,你将会明白为什么后者可以成功,谢谢。
[md]你补充得对。
查看手册,G0跟G4在这个地方不一样,G0的DMA是没法访**PIO的,而G4可以。
STM32系列太多了,我们这些做开发的偶尔也难免会栽进去。