zwll 发表于 2022-12-4 13:40

永远返回RESET

STM8S的ADC1,等待ADC1_GetFlagStatus(ADC1_FLAG_EOC),永远返回RESET

zwll 发表于 2022-12-4 13:47

我用STM8S的AIN0采集电压,配置如下:
GPIO_Init(GPIOB, GPIO_PIN_0, GPIO_MODE_IN_FL_NO_IT);
ADC1_DeInit();ADC1_Init(ADC1_CONVERSIONMODE_SINGLE,               /*单次转换*/
            ADC1_CHANNEL_0,                                                               /*目标通道*/
            ADC1_PRESSEL_FCPU_D8,                                                       /*Fadc = Fcpu/8*/
            ADC1_EXTTRIG_TIM,                                                               /*Timer1触发*/
            DISABLE,                                                                                 /*禁止外部触发*/
            ADC1_ALIGN_RIGHT,                                                               /*右对齐*/
            ADC1_SCHMITTTRIG_CHANNEL0,                                             /*禁止ADC通道的施密特触发功能*/
            DISABLE                                                                                  /*以降低IO的静态功耗*/
             );

ADC1_Cmd(ENABLE);
ADC1_StartConversion();
while(ADC1_GetFlagStatus(ADC1_FLAG_EOC) == RESET);
。。。。。。
上面的程序,永远在while()处等待

zwll 发表于 2022-12-4 13:49

是不是还差一个配置呀,导致永远转换不完?

renyaq 发表于 2022-12-4 13:55


/*Timer1触发*/

有触发吗,改为软件触发

zwll 发表于 2022-12-4 13:56

你意思是ADC1_EXTTRIG_TIM下面的DISABLE改成ENABLE?

heweibig 发表于 2022-12-4 13:59


感觉你的配置有问题

ADC1_EXTTRIG_TIM,看看触发源里面有没有软件触发的定义

zwll 发表于 2022-12-4 14:01


typedef enum
{
ADC1_EXTTRIG_TIM   = (uint8_t)0x00, /**< Conversion from Internal TIM1 TRGO event */
ADC1_EXTTRIG_GPIO= (uint8_t)0x10/**< Conversion from External interrupt on ADC_ETR pin*/
} ADC1_ExtTrig_TypeDef;

这是stm8s_adc1.h里面的定义,ADC1触发方式有两种,外部引脚触发和TIM1触发,我用TIM1触发,ADC1_ExtTriggerState也改成了ENABLE,改后的代码如下:
GPIO_Init(GPIOB, GPIO_PIN_0, GPIO_MODE_IN_FL_NO_IT);
ADC1_DeInit();ADC1_Init(ADC1_CONVERSIONMODE_SINGLE,               /*单次转换*/
            ADC1_CHANNEL_0,                                                               /*目标通道*/
            ADC1_PRESSEL_FCPU_D8,                                                       /*Fadc = Fcpu/8*/
            ADC1_EXTTRIG_TIM,                                                               /*Timer1触发*/
            ENABLE,                                                                              /*使能TIM1触发*/
            ADC1_ALIGN_RIGHT,                                                               /*右对齐*/
            ADC1_SCHMITTTRIG_CHANNEL0,                                             /*禁止ADC通道的施密特触发功能*/
            DISABLE                                                                                  /*以降低IO的静态功耗*/
             );

ADC1_Cmd(ENABLE);
ADC1_StartConversion();
while(ADC1_GetFlagStatus(ADC1_FLAG_EOC) == RESET);
。。。。。。
程序执行结果还是一样,永远在while()处等待,现在触发源TIM1在配置函数里已经打开了,难道TIM1需要单独配置一下吗?

llljh 发表于 2022-12-4 14:04

TIM1应该也要正确配置的

zwll 发表于 2022-12-4 14:05

电压已经读出来了,TIM1确实不用配置

huangchui 发表于 2022-12-4 14:07

犯了个低级错误

zwll 发表于 2022-12-4 14:10

嗯,我的判断语句不是前面发的帖子的while(),是if(ADC1_GetFlagStatus(ADC1_FLAG_EOC) == SET)

pengf 发表于 2022-12-4 14:12

问题在这句话里,永远进入不了if语句的{}内

zwll 发表于 2022-12-4 14:14

知道怎么回事了,多谢大家

MessageRing 发表于 2022-12-6 14:28

触发源里面有没有软件触发的定义

Stahan 发表于 2022-12-6 14:49

改为软件触发试试

Henryko 发表于 2022-12-6 16:17

你的软件配置有问题吧

Bowclad 发表于 2022-12-6 16:25

是不差个配置,有触发吗

Bowclad 发表于 2022-12-6 18:05

TIM1不用配置吧

Undshing 发表于 2022-12-6 19:40

是不是软件配置问题

AloneKaven 发表于 2022-12-6 19:54

这个判断条件没法满足吧
页: [1] 2
查看完整版本: 永远返回RESET