完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
芯片:STM32f303CBT6
IDE:keil 我配置好后ADC后,当从ADC通道引脚输入的电压超过设置范围后,不能进入ADC模拟看门狗中断。 如果在main函数中的while循环里调用ADC_GetConversionValue(ADC1)时,则可以以进入ADC模拟看门狗中断 我想在不调用ADC_GetConversionValue(ADC1)情况应该是可以进入ADC模拟看门狗中断的, 可能是我哪没有 配置好才导致进不了中断的。有用过stm32f303看门狗的帮忙指正,在这里谢谢了。 以下是代码: **注:不用DMA功能,用DMA功能当然可以产生中断,因为DMA会在后台会读取ADC数据寄存器。** u32 calibration_value1 = 0; void ADC1_2_IRQHandler(void) { if(SET == ADC_GetFlagStatus(ADC1,ADC_FLAG_AWD1)) { ADC_ITConfig(ADC1,ADC_IT_AWD1,DISABLE); ADC_ClearFlag(ADC1,ADC_FLAG_AWD1); ADC_ClearITPendingBit(ADC1,ADC_IT_AWD1); } if(SET == ADC_GetFlagStatus(ADC2,ADC_FLAG_AWD2)) { ADC_ITConfig(ADC2,ADC_IT_AWD2,DISABLE); ADC_ClearITPendingBit(ADC2,ADC_IT_AWD2); } } void adc1_init(void) { ADC_CommonInitTypeDef cs; ADC_InitTypeDef adcs; ADC_VoltageRegulatorCmd(ADC1, ENABLE); delay_ms(1); ADC_SelectCalibrationMode(ADC1, ADC_CalibrationMode_Single); ADC_StartCalibration(ADC1); while(ADC_GetCalibrationStatus(ADC1) != RESET ); calibration_value1 = ADC_GetCalibrationValue(ADC1); adcs.ADC_ContinuousConvMode = ADC_ContinuousConvMode_Enable; adcs.ADC_Resolution = ADC_Resolution_12b; adcs.ADC_ExternalTrigConvEvent = ADC_ExternalTrigConvEvent_0;//ADC_ExternalTrigConvEvent_7 adcs.ADC_ExternalTrigEventEdge = ADC_ExternalTrigEventEdge_None; adcs.ADC_DataAlign = ADC_DataAlign_Right; adcs.ADC_OverrunMode = ADC_OverrunMode_Disable; adcs.ADC_AutoInjMode = ADC_AutoInjec_Disable; adcs.ADC_NbrOfRegChannel = 1; ADC_Init(ADC1, adcs); cs.ADC_Clock = ADC_Clock_AsynClkMode; cs.ADC_Mode = ADC_Mode_Independent;//ADC_Mode_Interleave; cs.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;; cs.ADC_DMAMode = ADC_DMAMode_Circular; cs.ADC_TwoSamplingDelay = 0; ADC_CommonInit(ADC1, cs); //Tconv = Sampling time + 12.5 ADC clock cycles (12.5+Sampling)/64M ADC_RegularChannelConfig(ADC1, ADC_Channel_3, 1, ADC_SampleTime_61Cycles5);//ADC_SampleTime_1Cycles5 ADC_Cmd(ADC1, ENABLE); } void adc1_watchDog_cfg(void) { ADC_AnalogWatchdog1SingleChannelConfig(ADC1,ADC_Channel_3); ADC_AnalogWatchdog1ThresholdsConfig(ADC1,400,0); ADC_AnalogWatchdogCmd(ADC1,ADC_AnalogWatchdog_SingleRegEnable); ADC_ITConfig(ADC1,ADC_IT_AWD1,ENABLE); } void ad_gpio_cfg(void) { GPIO_InitTypeDef gs; RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); // RCC_AHB1PeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); gs.GPIO_Mode = GPIO_Mode_AN; gs.GPIO_OType = GPIO_OType_PP; gs.GPIO_PuPd = GPIO_PuPd_NOPULL; gs.GPIO_Speed = GPIO_Speed_50MHz; //PA1--->ADC1_IN2 PA2--->ADC1_IN3 PA4--->ADC2_IN1 gs.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_4; GPIO_Init(GPIOA, gs); } void adc_init(void) { //VrefintCal = *((u16 *)(VREFINT_CAL_ADDR)); ad_gpio_cfg(); RCC_ADCCLKConfig(RCC_ADC12PLLCLK_Div1);//RCC_ADC12PLLCLK_Div1 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_ADC12, ENABLE); ADC_DeInit(ADC1); adc1_init(); adc1_watchDog_cfg(); ADC_StartConversion(ADC1); } main函数 int main(void) { ... while(1) { ADC_GetConversionValue(ADC1); } ... } |
|
相关推荐
1个回答
|
|
貌似楼主在ADC中断里把ADC中断关闭了。
|
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
148 浏览 0 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
440 浏览 1 评论
286 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
254 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
618 浏览 2 评论
1382浏览 9评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
80浏览 3评论
43浏览 3评论
STM32CUBEMX4.22.1在main函数里面添加一行语句就死机的原因?
55浏览 3评论
49浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-5-3 18:17 , Processed in 0.665594 second(s), Total 78, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号