stm8s103f3 adc一个非常奇怪的问题,去掉串口发送,ADC1_GetConversionValue()就不赋值

2019-07-19 21:22发布

[mw_shl_code=c,true]代码见下面,stvd用swim调试,只要注释掉adc_value = ADC1_GetConversionValue();后面的3个串口发送语句,adc_value = ADC1_GetConversionValue();这一句函数返回值就不能赋给adc_value。加上一句串口发送的语句就行,把adc_value定义为全局变量,放在main之外定义,也能正确赋值。以上所有的adc寄存器值是没有问题的。这个例子是文档自己带的。有人知道为什么吗?其他的调用Init_UART1,Init_ADC定义也在后面给出来了[/mw_shl_code] [mw_shl_code=c,true]void main(void) {     u16 adc_value;  FlagStatus flag_status;        Init_UART1();     Init_ADC();  /* Infinite loop */   while (1)   { //Send(0xf0); ADC1_StartConversion();     flag_status = ADC1_GetFlagStatus(ADC1_FLAG_EOC);     while(flag_status == SET); // SET or RESET     adc_value = ADC1_GetConversionValue(); //UART1_sendhex((adc_value>>8));        //UART1_sendhex((adc_value&0xff));       //UART1_sendstr(" ");   }    }  uint8_t HexTable[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};    void Init_UART1(void)  {  UART1_DeInit();  UART1_Init((u32)9600, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, UART1_PARITY_NO, UART1_SYNCMODE_CLOCK_DISABLE, UART1_MODE_TX_ENABLE);  // UART1_Cmd(ENABLE);  }  void Send(uint8_t dat)  {    while(( UART1_GetFlagStatus(UART1_FLAG_TXE)==RESET));    UART1_SendData8(dat);    }  void Init_ADC(void)  {  GPIO_Init(GPIOC, GPIO_PIN_4, GPIO_MODE_IN_FL_NO_IT);  ADC1_DeInit();  ADC1_Init(ADC1_CONVERSIONMODE_CONTINUOUS, ADC1_CHANNEL_2, ADC1_PRESSEL_FCPU_D2, ADC1_EXTTRIG_TIM, DISABLE, ADC1_ALIGN_RIGHT, ADC1_SCHMITTTRIG_CHANNEL2, ENABLE);  ADC1_Cmd(ENABLE);        }  void UART1_sendhex(unsigned char dat)  {  Send('0');  Send('x');  Send(HexTable[dat>>4]);  Send(HexTable[dat&0x0f]);  Send(' ');  }  void UART1_sendstr(unsigned char *dat)  {  while(*dat!='')  {  Send(*dat);  dat++;  //delay2us();  }  }   [/mw_shl_code]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。