完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
GD32F305是一款高性能的32位微控制器,具有丰富的外设和功能。关于您的问题,GD32F305确实支持通过外部EXTI(外部中断)的上升沿和下降沿分别触发两组DMA数据传输。
以下是实现此功能的步骤: 1. **配置外部中断(EXTI)**: - 首先,您需要配置外部中断线(例如,EXTI0)以检测上升沿和下降沿。 - 在EXTI配置中,您需要启用上升沿和下降沿触发。 2. **配置DMA**: - 为两组数据传输配置两个DMA通道。 - 设置DMA的源地址、目标地址、传输大小等参数。 3. **关联EXTI与DMA**: - 将配置好的DMA通道与相应的EXTI线关联起来。 - 这通常涉及到设置DMA的触发源为EXTI。 4. **编写中断服务例程(ISR)**: - 编写一个中断服务例程来处理EXTI中断。 - 在ISR中,您可以根据上升沿或下降沿触发相应的DMA传输。 5. **启动DMA传输**: - 在ISR中,启动DMA传输。 6. **测试**: - 通过模拟外部信号或实际应用来测试您的设置。 以下是一些可能的代码片段示例(注意,这只是一个概念性的示例,实际代码需要根据您的具体需求和硬件配置进行调整): ```c // 假设使用EXTI0和DMA通道0 void EXTI0_IRQHandler(void) { if (EXTI_GetITStatus(EXTI_Line0) != RESET) { // 清除EXTI线挂起位 EXTI_ClearITPendingBit(EXTI_Line0); // 检查是上升沿还是下降沿 if (EXTI_GetEXTILineStatus(EXTI_Line0) == SET) { // 启动DMA传输 DMA_Cmd(DMA_Channel0, ENABLE); } else { // 启动另一组DMA传输 DMA_Cmd(DMA_Channel1, ENABLE); } } } void DMA_Config(void) { // 配置DMA通道0 DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&PERIPH_BASE; DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)memory_address; DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; DMA_InitStructure.DMA_BufferSize = BUFFER_SIZE; DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Enable; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word; DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; DMA_InitStructure.DMA_Priority = DMA_Priority_High; DMA_InitStructure.DMA_M2M = DMA_M2M_Enable; DMA_Init(DMA_Channel0, &DMA_InitStructure); // 配置DMA通道1 DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)another_memory_address; DMA_Init(DMA_Channel1, &DMA_InitStructure); } void EXTI_Config(void) { // 配置EXTI0,上升沿和下降沿触发 EXTI_InitStructure.EXTI_Line = EXTI_Line0; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); // 配置NVIC NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } ``` 请确保您已经正确配置了所有的外设时钟和GPIO,并且您的硬件连接是正确的。此外,您可能还需要根据您的具体应用调整DMA和EXTI的配置参数。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1777 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1621 浏览 1 评论
1080 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
728 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1678 浏览 2 评论
1938浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
731浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
570浏览 3评论
595浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
554浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 12:20 , Processed in 1.168266 second(s), Total 82, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号