stm32 adc中断,采样,然后一直(中断一次,采样一次)循环怎么做,求高手指导,自己小白。 10
自己设计了打开adc中断,但是进不去,求好用的stm32的实例,或者告诉我设置方法,在此谢过!!!贴出部分源码:求指点——————————————————————————...
自己设计了打开adc中断,但是进不去,求好用的stm32的实例,或者告诉我设置方法,在此谢过!!!
贴出部分源码:求指点
——————————————————————————————————————
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //ADC1工作在独立模式
ADC_InitStructure.ADC_ScanConvMode = DISABLE; //模数转换工作在扫描模式(多通道)还是单次(单通道)模式
ADC_InitStructure.ADC_ContinuousConvMode =ENABLE; //连续转换还是单次转换
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //转换由软件而不是外部触发启动
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //ADC数据右对齐
ADC_InitStructure.ADC_NbrOfChannel = 1; //规定了顺序进行规则转换的ADC通道的数目。这个数目的取值范围是1到16
ADC_Init(ADC1, &ADC_InitStructure);
ADC_RegularChannelConfig(ADC1, ADC_Channel_11, 1, ADC_SampleTime_239Cycles5); //通道11采样时间 239.5周期
ADC_DMACmd(ADC1, ENABLE); //使能ADC1 DMA
ADC_Cmd(ADC1, ENABLE); //使能ADC1
ADC_ResetCalibration(ADC1); // 初始化ADC1校准寄存器
while(ADC_GetResetCalibrationStatus(ADC1)); //检测ADC1校准寄存器初始化是否完成
ADC_StartCalibration(ADC1); //开始校准ADC1
while(ADC_GetCalibrationStatus(ADC1)); //检测是否完成校准
ADC_SoftwareStartConvCmd(ADC1, ENABLE); //ADC1转换启动
ADC_ExternalTrigConvCmd(ADC1, ENABLE); //使能ADC经外部触发启动转换功能
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
NVIC_InitStructure.NVIC_IRQChannel = ADC1_2_IRQn; //ADC1,ADC2全局中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;//先占优先级0
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //从优先级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
ADC_ITConfig(ADC1,ADC_IT_EOC,ENABLE);
---------------------------------------------------------------------------------------------------------
void ADC1_2_IRQHandler(void){
int Status;
Status = ADC_GetITStatus(ADC1, ADC_IT_EOC); //检查指定的ADC中断是否发生
if(Status ==SET){
USART_OUT(USART1,"XXXX = %d \r\n", ADC_ConvertedValue);
ADC_ClearITPendingBit(ADC1, ADC_IT_EOC);
}
}
---------------------------------------------------------------------------------------------------------
Status 貌似一直是0,跟断点也进不去,求一个好的demo! 展开
贴出部分源码:求指点
——————————————————————————————————————
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //ADC1工作在独立模式
ADC_InitStructure.ADC_ScanConvMode = DISABLE; //模数转换工作在扫描模式(多通道)还是单次(单通道)模式
ADC_InitStructure.ADC_ContinuousConvMode =ENABLE; //连续转换还是单次转换
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //转换由软件而不是外部触发启动
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //ADC数据右对齐
ADC_InitStructure.ADC_NbrOfChannel = 1; //规定了顺序进行规则转换的ADC通道的数目。这个数目的取值范围是1到16
ADC_Init(ADC1, &ADC_InitStructure);
ADC_RegularChannelConfig(ADC1, ADC_Channel_11, 1, ADC_SampleTime_239Cycles5); //通道11采样时间 239.5周期
ADC_DMACmd(ADC1, ENABLE); //使能ADC1 DMA
ADC_Cmd(ADC1, ENABLE); //使能ADC1
ADC_ResetCalibration(ADC1); // 初始化ADC1校准寄存器
while(ADC_GetResetCalibrationStatus(ADC1)); //检测ADC1校准寄存器初始化是否完成
ADC_StartCalibration(ADC1); //开始校准ADC1
while(ADC_GetCalibrationStatus(ADC1)); //检测是否完成校准
ADC_SoftwareStartConvCmd(ADC1, ENABLE); //ADC1转换启动
ADC_ExternalTrigConvCmd(ADC1, ENABLE); //使能ADC经外部触发启动转换功能
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
NVIC_InitStructure.NVIC_IRQChannel = ADC1_2_IRQn; //ADC1,ADC2全局中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;//先占优先级0
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //从优先级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
ADC_ITConfig(ADC1,ADC_IT_EOC,ENABLE);
---------------------------------------------------------------------------------------------------------
void ADC1_2_IRQHandler(void){
int Status;
Status = ADC_GetITStatus(ADC1, ADC_IT_EOC); //检查指定的ADC中断是否发生
if(Status ==SET){
USART_OUT(USART1,"XXXX = %d \r\n", ADC_ConvertedValue);
ADC_ClearITPendingBit(ADC1, ADC_IT_EOC);
}
}
---------------------------------------------------------------------------------------------------------
Status 貌似一直是0,跟断点也进不去,求一个好的demo! 展开
意法半导体(中国)投资有限公司
2023-06-12 广告
2023-06-12 广告
STM32F103是一款高性能的嵌入式芯片,由意法半导体(STMicroelectronics)公司生产。它是STM32系列芯片之一,具有紧凑、低功耗、高性能等特点,被广泛应用于嵌入式系统中。STM32F103的主要特点包括:1. 集成了A...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
展开全部
ADC_DMACmd(ADC1, ENABLE);
这个是打开ADC_DMA功能
ADC_ITConfig(ADC1, ADC_IT_EOC, ENABLE);
中断都没打开你怎么进中断函数
这个是打开ADC_DMA功能
ADC_ITConfig(ADC1, ADC_IT_EOC, ENABLE);
中断都没打开你怎么进中断函数
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
stm32 ADC的启动方式我没有具体看过,不是特别清楚。
但即使没有这种启动方式。采用外部中断,编程也能实现外部下降沿触发ADC中断。
但即使没有这种启动方式。采用外部中断,编程也能实现外部下降沿触发ADC中断。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询