初级会员

- 积分
- 70
- 金钱
- 70
- 注册时间
- 2015-3-25
- 在线时间
- 11 小时
|
5金钱
[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("\r\n");
}
}
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!='\0')
{
Send(*dat);
dat++;
//delay2us();
}
}
[/mw_shl_code] |
最佳答案
查看完整内容[请看2#楼]
要是我没有猜错的话,就和我之前碰到的问题一样,就是因为编译器优化掉了,你如果在下面加一句adc_value -= 1; 应该就可以了
|