完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我正在使用STM8S103F2P这个芯片, CPU没有使用外部晶振, 功能主要是读取电池电压, 我使用是 PD3 / AIN4 这个引脚,
程序一直进入读ADC中断。进入中断读到采集值为0. 程序如下: main.c -------------------------------------------------------- /* Includes ------------------------------------------------------------------*/ #include quot;stm8s.h quot; uint16_t Conversion_Value = 0; static void ADC_Config() { GPIO_Init(GPIOC, (GPIO_Pin_TypeDef)GPIO_PIN_7, GPIO_MODE_OUT_PP_HIGH_FAST); GPIO_Init(GPIOC, (GPIO_Pin_TypeDef)GPIO_PIN_6, GPIO_MODE_OUT_PP_HIGH_FAST); /* Init GPIO for ADC2 */ GPIO_Init(GPIOD, GPIO_PIN_3, GPIO_MODE_IN_FL_NO_IT); /* De-Init ADC peripheral*/ ADC1_DeInit(); /* Init ADC2 peripheral */ ADC1_Init(ADC1_CONVERSIONMODE_CONTINUOUS, ADC1_CHANNEL_9, ADC1_PRESSEL_FCPU_D2, ADC1_EXTTRIG_TIM, DISABLE, ADC1_ALIGN_RIGHT, ADC1_SCHMITTTRIG_CHANNEL9, DISABLE); /* Enable EOC interrupt */ ADC1_ITConfig(ADC1_IT_EOCIE, ENABLE); /* Enable general interrupts */ enableInterrupts(); /*Start Conversion */ ADC1_StartConversion(); } void main(void) { ADC_Config(); /* Infinite loop */ while (1) { } } ------------------------------------------------------------ stm8s_it.c ---------------------------------------------------------------- INTERRUPT_HANDLER(ADC1_IRQHandler, 22) { /* In order to detect unexpected events during development, it is recommended to set a breakpoint on the following instruction. */ /* Get converted value */ Conversion_Value = ADC1_GetConversionValue(); ADC1_ClearITPendingBit(ADC1_IT_EOC); } |
|
相关推荐
2个回答
|
|
Conversion_Value = ADC1_GetConversionValue();
ADC1_ClearITPendingBit(ADC1_IT_EOC); 楼主将这两句顺序调一下,先清除标志位,再读数据 ADC1_ClearITPendingBit(ADC1_IT_EOC); Conversion_Value = ADC1_GetConversionValue(); |
|
|
|
根据您提供的代码片段和描述,您的程序一直在进入ADC中断,可能是因为以下几个原因:
1. ADC配置问题:请确保您已经正确配置了ADC。在STM8S103F2P中,您需要设置ADC的触发源、时钟分频、分辨率等参数。请检查您的ADC_Config()函数,确保所有相关参数都已正确设置。 2. 中断使能:请检查您的程序是否使能了ADC中断。如果使能了ADC中断,当ADC转换完成时,程序会自动进入中断服务程序。您可以在中断服务程序中添加一些调试信息,以确定是否真的是因为ADC转换完成而进入中断。 3. 中断优先级:请检查您的中断优先级设置。如果ADC中断优先级较高,它可能会优先于其他中断执行。您可以在中断向量表中调整中断优先级,以确保程序按照预期的顺序执行。 4. ADC通道选择:您提到使用的是PD3/AIN4引脚,但请确保您在ADC_Config()函数中正确选择了这个通道。例如,您可能需要设置ADC通道选择寄存器,以选择AIN4作为ADC输入。 5. 外部晶振:虽然您提到没有使用外部晶振,但请确保您的系统时钟设置正确。STM8S103F2P的ADC性能可能受到系统时钟的影响。如果系统时钟不稳定或不准确,可能会导致ADC转换结果不准确或不稳定。 6. 电池电压问题:您提到程序一直进入读ADC中断,并且读到的采集值为0。这可能是因为电池电压为0,或者电池电压低于ADC的可测量范围。请检查您的电池电压,确保它在ADC的可测量范围内。 7. 硬件连接问题:请检查您的硬件连接,确保PD3/AIN4引脚与电池电压正确连接。如果连接不正确,可能会导致错误的ADC读数。 8. 代码错误:请仔细检查您的代码,确保没有逻辑错误或语法错误。这些错误可能会导致程序无法正常执行。 综上所述,要解决这个问题,您需要逐步检查和调试您的程序。首先,从ADC配置和中断设置开始,然后检查硬件连接和电池电压。最后,确保您的代码没有错误。通过这些步骤,您应该能够找到问题的原因并解决它。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1763 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1617 浏览 1 评论
1059 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
723 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1670 浏览 2 评论
1933浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
726浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
566浏览 3评论
592浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
550浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-21 08:35 , Processed in 1.064050 second(s), Total 82, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号