微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 怎么把ADC各函数都放到.c文件,然后在主函数调用

怎么把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文件就不行了。
  • 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.声明一下中断函数,可能他找不到中断函数

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top