怎么把ADC各函数都放到.c文件,然后在主函数调用
时间:10-02
整理:3721RD
点击:
ADC的程序没有问题,采回了AD值。新建一个adc.c文件就不能采ad值了。
目标:把ADC配置函数、中断服务函数都放到adc.c文件中,按照我的方式处理后,采不到AD,好像是进不了中断
我的做法:新建adc.c文件并加入工程中;新建adc.h文件声明void ADC_Configuration(void); uint16_t ADC1_sample(void);然后怎么就进不去中断了呢?
adc.c文件内容:
#include "stm32f10x.h"
#include "stm32f10x_exti.h"
#include "stm32f10x_rcc.h"
#include "misc.h"
static uint16_t ADC_Value;
static volatile int ad_over;
void ADC_Configuration()
{
}
void ADC1_2_IRQHandler(void)
{
while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));
ADC_Value=ADC_GetConversionValue(ADC1);
ad_over=1;
ADC_ClearITPendingBit(ADC1, ADC_IT_EOC);
}
uint16_t ADC1_sample(void)
{
// ADC_Cmd(ADC1, ENABLE);
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
while(1)
{
if(ad_over)
{
ad_over=0;
break;
}
}
return ADC_Value;
}
下面是adc.h文件的内容:
#ifndef __ADC_H
#define __ADC_H
#include "stdint.h"
void ADC_Configuration(void);
uint16_t ADC1_sample(void);
#endif
下面是主函数main.c文件内容:
#include "pbdata.h"
#include "adc.h"
unsigned char Buffer[2];
int main(void)
{
u16 ad;
SystemInit();
while(1)
{
ad = 0;
ad=ADC1_sample();
ad=(3.3/4095)*ad*1000;
Buffer[0]=ad/100;
Buffer[1]=ad%100;
SysTick_delay_ms(800);
}
}
请问我哪里出了问题
原先程序是这样的,可以正常运行
void ADC_Configuration()在main.c文件中
void ADC1_2_IRQHandler(void)和uint16_t ADC1_sample(void);在stm32f10x_it.c中
程序可以正常运行,采到AD值。我把他们放的adc.c文件就不行了。
复制代码
目标:把ADC配置函数、中断服务函数都放到adc.c文件中,按照我的方式处理后,采不到AD,好像是进不了中断
我的做法:新建adc.c文件并加入工程中;新建adc.h文件声明void ADC_Configuration(void); uint16_t ADC1_sample(void);然后怎么就进不去中断了呢?
adc.c文件内容:
#include "stm32f10x.h"
#include "stm32f10x_exti.h"
#include "stm32f10x_rcc.h"
#include "misc.h"
static uint16_t ADC_Value;
static volatile int ad_over;
void ADC_Configuration()
{
}
void ADC1_2_IRQHandler(void)
{
while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));
ADC_Value=ADC_GetConversionValue(ADC1);
ad_over=1;
ADC_ClearITPendingBit(ADC1, ADC_IT_EOC);
}
uint16_t ADC1_sample(void)
{
// ADC_Cmd(ADC1, ENABLE);
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
while(1)
{
if(ad_over)
{
ad_over=0;
break;
}
}
return ADC_Value;
}
下面是adc.h文件的内容:
#ifndef __ADC_H
#define __ADC_H
#include "stdint.h"
void ADC_Configuration(void);
uint16_t ADC1_sample(void);
#endif
下面是主函数main.c文件内容:
#include "pbdata.h"
#include "adc.h"
unsigned char Buffer[2];
int main(void)
{
u16 ad;
SystemInit();
while(1)
{
ad = 0;
ad=ADC1_sample();
ad=(3.3/4095)*ad*1000;
Buffer[0]=ad/100;
Buffer[1]=ad%100;
SysTick_delay_ms(800);
}
}
请问我哪里出了问题
原先程序是这样的,可以正常运行
void ADC_Configuration()在main.c文件中
void ADC1_2_IRQHandler(void)和uint16_t ADC1_sample(void);在stm32f10x_it.c中
程序可以正常运行,采到AD值。我把他们放的adc.c文件就不行了。
- void ADC_Configuration(void)
- {
- /* Initialize the ADC1 according to the ADC_InitStructure members */
- }
复制代码
声明加 extern
.h文件中的函数申明加不加extern效果是一样的。
把 IRQHandler 挪回去试试?
最开始我只把void ADC_Configuration(void)放到adc.c中,void ADC1_2_IRQHandler(void)和uint16_t ADC1_sample(void);仍在stm32f10x_it.c中,就进不去中断了
没看到哪个地方调用了 ADC_Configuration()啊
在主函数调用ADC_Configuration()就可以了。多谢
你可能那个头文件没有在c/c++那里面的选项里添加
1.主函数调用配置函数
2.声明一下中断函数,可能他找不到中断函数