完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
ADC1+tiM4触发+DMA(DMA2_Stream0_CH0)+DMA中断完全正常更改为ADC2+TIM4触发+DMA(DMA2_Stream2_CH1)+DMA中断会死机(取消中断后完全正常)更改为ADC3+TIM4触发+DMA(DMA2_Stream1_CH2)+DMA中断会死机(取消中断后完全正常)
void ADC2_EXIT_TIM4_CC4_Trig_DMAConfiguration(unsigned short F_Prescaler,unsigned int F_ARR )//ADC_TIM4_CC4外部触发转换{ GPIO_InitTypeDef GPIO_InitStructure;ADC_CommonInitTypeDef ADC_CommonInitStructure;ADC_InitTypeDef ADC_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//使能GPIOA时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC2, ENABLE); //使能ADC2时钟//RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);//使能GPIOC时钟RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2,ENABLE);//DMA2时钟使能 // Configure PA5 PA4 PC2(ADC Channel 5-0-1-13) as analog input -------------------------GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;//GPIO模式为ADC模拟输入模式GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 ;//选择PA5 PA4 为输入通道GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//端口速度50MHzGPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;//不带上下拉GPIO_Init(GPIOA, &GPIO_InitStructure); // ADC2 configuration -----------------------------------------------------// ADCs DeInit RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC2,ENABLE); //ADC2复位RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC2,DISABLE); //复位结束RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC2, ENABLE); //使能ADC2时钟 ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;//12位模式ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;;//连续转换模式 使用(连续模式)ADC_InitStructure.ADC_ScanConvMode = DISABLE;;//扫面模式 使用(扫描)ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_Falling;//禁止触发检测,使用软件触发ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T4_CC4;//外部触发源 外部引脚 (已经禁止触发检测了)ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//右对齐ADC_InitStructure.ADC_NbrOfConversion = 1;//指定规则组转换的通道 5个通道ADC_Init(ADC2, &ADC_InitStructure);//ADC初始化 ADC_RegularChannelConfig(ADC2, ADC_Channel_5, 1, ADC_SampleTime_3Cycles); ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;//独立模式ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;//两个采样阶段之间的延迟5个时钟ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled; //DMA使能模式ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div4;//预分频4分频。ADCCLK=PCLK2/4=84/4=21Mhz,ADC时钟最好不要超过36MhzADC_CommonInit(&ADC_CommonInitStructure);//初始化 ADC_DMARequestAfterLastTransferCmd(ADC2,ENABLE); //单通道使用//ADC_MultiModeDMARequestAfterLastTransferCmd(ENABLE);ADC_DMACmd(ADC2,ENABLE);//使能ADC的DMA数据传送功能 ADC_Cmd(ADC2, ENABLE);//使能ADC2// DMA2_Stream2_CH0[i]ADC configuration ----------------------------------------------DMA2_Stream2_CH1_ADC2_Config((uint32_t *)OSC_ADC_ConvertedValue,232,DMA_Mode_Circular);// DMA2_Stream2_CH1_ADC2_Config ADC DMANVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//配置中断优先级分组方式,整个程序只配置一次,可以放置在程序最开始 NVIC_InitTypeDef NVIC_InitStructure;NVIC_InitStructure.NVIC_IRQChannel = DMA2_Stream2_IRQn;//DMA2_Stream2中断占用通道NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能中断通道NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//配置中断抢占优先级值,分组2的值为0-3NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;//配置中断响应优先级的值 分组2的值为0-3NVIC_Init(&NVIC_InitStructure); DMA_Cmd(DMA2_Stream2, ENABLE);//打开DMA2 Stream0(或者使能)/[i] Enable DMA Channelx complete transfer interrupt /// DMA_ClearITPendingBit(DMA2_Stream2, DMA_IT_TC); //清除中断标志// DMA_ITConfig(DMA2_Stream2, DMA_IT_TC, ENABLE); // Start ADC2 Software Conversion ADC_SoftwareStartConv(ADC2); //使能指定的ADC2的软件转换启动功能 TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;//配置定时器计时参数TIM_OCInitTypeDef TIM_OCInitStructure;//设置结构体 //开启TIM4时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); //选择TIM4的时钟模式为内部模式,时钟源为内部时钟(42*2=84MHZ)TIM_InternalClockConfig(TIM4); //初始化上述结构体TIM_TimeBaseStructInit(&TIM_TimeBaseInitStructure); //配置预分频系数为8400TIM_TimeBaseInitStructure.TIM_Prescaler = F_Prescaler; //配置自动重装值为10000TIM_TimeBaseInitStructure.TIM_Period = F_ARR; //配置计数模式为向上计数TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;//配置定时器时钟频率与数字滤波器所使用的采样时钟之间的分频比TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1; //配置重复计数器的值为0TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0; //初始化时基单元TIM_TimeBaseInit(TIM4, &TIM_TimeBaseInitStructure); TIM_OCStructInit(&TIM_OCInitStructure);//给结构体设置默认初始值////配置TIM4 通道1占空比TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;//输出比较模式 PWM1模式TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;//输出比较极性,默认输出高电平TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//使能输出比较TIM_OCInitStructure.TIM_Pulse = 10; //设置CCR数值 输出比较直0-FFFF(占空比-CCR/ARR)TIM_OC4Init(TIM4, &TIM_OCInitStructure);//初始化TIM4输出通道OC4 //选择更新事件作为触发输出TIM_SelectOutputTrigger(TIM4, TIM_TRGOSource_OC4Ref); //开启TIM4,此时计数器开始工作TIM_Cmd(TIM4, ENABLE); } void DMA2_Stream2_IRQHandler(void) //DMA2_Stream2_IRQn{if(DMA_GetFlagStatus(DMA2_Stream2,DMA_FLAG_TCIF1)) //清除传输完成中断{DMA_ClearITPendingBit(DMA2_Stream2, DMA_IT_TCIF1); // 清除传输完成标志DMA_ClearFlag(DMA2_Stream2,DMA_FLAG_TCIF1);OSC_ADC_FLAG=1;TIM_Cmd(TIM4, DISABLE);} if( DMA_GetFlagStatus(DMA2_Stream2,DMA_FLAG_HTIF1)) //清除半传输完成中断 {DMA_ClearFlag(DMA2_Stream2,DMA_FLAG_HTIF1); } // Clear the Streamx direct mode error flag if( DMA_GetFlagStatus(DMA2_Stream2,DMA_FLAG_DMEIF1)) //清除传输错误中断 {DMA_ClearFlag(DMA2_Stream2,DMA_FLAG_DMEIF1); } if( DMA_GetFlagStatus(DMA2_Stream2,DMA_FLAG_FEIF1)) //清除Streamx FIFO error flag {DMA_ClearFlag(DMA2_Stream2,DMA_FLAG_FEIF1); } } 以上换成ADC1+TIM4+DMA+DMA中断工作完全正常 不清楚是什么原因 |
|
相关推荐
1个回答
|
|
|
根据您的描述,ADC1配置正常工作而ADC2/ADC3在启用中断时死机,问题可能出在DMA中断配置或资源冲突。以下是解决方案: 关键问题原因
修复步骤1. 修正中断向量配置2. 完善中断服务程序3. 补充时钟使能在初始化函数开头添加: 4. 修正DMA初始化配置在您的配置函数中添加: 完整配置代码修改调试建议
补充说明
通过以上修改应该能解决ADC2/ADC3的DMA中断死机问题。重点检查中断向量配置和标志清除操作,这是ADC1正常工作而ADC2/ADC3失败的关键差异点。 |
|
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
4138 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
3228 浏览 1 评论
2752 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
2181 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
14980 浏览 2 评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
3086浏览 4评论
stm32f4下spi+dma读取数据不对是什么原因导致的?
1896浏览 3评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
2066浏览 3评论
1979浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
2168浏览 3评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 07:41 , Processed in 0.731741 second(s), Total 76, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
558