历史上的今天
返回首页

历史上的今天

今天是:2025年02月19日(星期三)

正在发生

2020年02月19日 | STM32定时TIM2触发ADC采样,使用DMA保存结果

2020-02-19 来源:eefocus

1.adc.h文件

//ADC-------------------------------------------------------------------------//

#ifndef __EVAL_ADC_H

        #define __EVAL_ADC_H


// Includes ------------------------------------------------------------------//

        #include "stm32f10x.h"

        #include "eval.h"

       

// Exported types ------------------------------------------------------------//

        typedef struct

        {

                GPIO_TypeDef*  io_gpio_port;

                const uint16_t io_gpio_pin;

                const uint32_t io_gpio_clk;

                const uint8_t  adc_channel;

                const uint8_t  adc_sample;

        }ADC_CONFIG_STRUCT;

// Exported constants --------------------------------------------------------//

// Exported macro ------------------------------------------------------------//

// Exported define -----------------------------------------------------------//

        #define ADC1_DR_Address    ((uint32_t)0x4001244C)

        //ADC_DR(ADC规则数据寄存器),偏移量=0x4c  ADC1(0x40012400-0x400127ff)

        //so ADC1_DR_Address=0x40012400+0x4c

       

        #define ADC_USE_DMA              1//仅使用DMA方式,才能同时进行多路采样

        #define ADC_USE_TIM              1//=1定时器触发扫描,=0为连续扫描

       

//ADC输入        PA0

        #define ADCn                     3

       

        #define ADC_1                                IO1 //信号1

        #define ADC_2                                IO2 //信号2

        #define ADC_3                                IO3 //信号3

#if PLATFORM_PKT

        #define ADC_1_PIN                        GPIO_Pin_1

        #define ADC_1_GPIO_PORT                GPIOA

        #define ADC_1_GPIO_CLK                RCC_APB2Periph_GPIOA  

        #define ADC_1_CHANNEL                ADC_Channel_1

        #define ADC_1_SAMPLE                ADC_SampleTime_239Cycles5

       

        #define ADC_2_PIN                        GPIO_Pin_0

        #define ADC_2_GPIO_PORT                GPIOA

        #define ADC_2_GPIO_CLK                RCC_APB2Periph_GPIOA  

        #define ADC_2_CHANNEL                ADC_Channel_0

        #define ADC_2_SAMPLE                ADC_SampleTime_239Cycles5

       

        #define ADC_3_PIN                        GPIO_Pin_2

        #define ADC_3_GPIO_PORT                GPIOA

        #define ADC_3_GPIO_CLK                RCC_APB2Periph_GPIOA  

        #define ADC_3_CHANNEL                ADC_Channel_2

        #define ADC_3_SAMPLE                ADC_SampleTime_239Cycles5

       

        #define ADC_4_PIN                        GPIO_Pin_3

        #define ADC_4_GPIO_PORT                GPIOA

        #define ADC_4_GPIO_CLK                RCC_APB2Periph_GPIOA  

        #define ADC_4_CHANNEL                ADC_Channel_3

        #define ADC_4_SAMPLE                ADC_SampleTime_239Cycles5

       

        #define ADC_5_PIN                        GPIO_Pin_1

        #define ADC_5_GPIO_PORT                GPIOA

        #define ADC_5_GPIO_CLK                RCC_APB2Periph_GPIOA  

        #define ADC_5_CHANNEL                ADC_Channel_1

        #define ADC_5_SAMPLE                ADC_SampleTime_239Cycles5

       

        #define ADC_6_PIN                        GPIO_Pin_1

        #define ADC_6_GPIO_PORT                GPIOA

        #define ADC_6_GPIO_CLK                RCC_APB2Periph_GPIOA

        #define ADC_6_CHANNEL                ADC_Channel_1

        #define ADC_6_SAMPLE                ADC_SampleTime_239Cycles5//ADC_SampleTime_7Cycles5//

#else

        #define ADC_1_PIN                        GPIO_Pin_0

        #define ADC_1_GPIO_PORT                GPIOA

        #define ADC_1_GPIO_CLK                RCC_APB2Periph_GPIOA  

        #define ADC_1_CHANNEL                ADC_Channel_0

        #define ADC_1_SAMPLE                ADC_SampleTime_239Cycles5//ADC_SampleTime_7Cycles5//

#endif

//----------------------------------------------------------------------------//

       

/*

        #define ADC16_PIN                        GPIO_Pin_0

        #define ADC16_GPIO_PORT                GPIOA

        #define ADC16_GPIO_CLK                RCC_APB2Periph_GPIOA  

        #define ADC16_CHANNEL                ADC_Channel_16//通道16(内部温度)

        #define ADC16_SAMPLE                ADC_SampleTime_239Cycles5

       

        #define ADC17_PIN                        GPIO_Pin_0

        #define ADC17_GPIO_PORT                GPIOA

        #define ADC17_GPIO_CLK                RCC_APB2Periph_GPIOA  

        #define ADC17_CHANNEL                ADC_Channel_17//通道17(内部1.2v参照电压)

        #define ADC17_SAMPLE                ADC_SampleTime_239Cycles5

*/




// External variables --------------------------------------------------------//

        extern volatile uint16_t ADC_Value[ADCn];

        extern uint16_t ADC_ConvertedValue[ADCn];

//        extern uint16_t ADC_ConvertedValue[3];

//        extern volatile uint8_t adc_dma_simple_ok;

// Exported functions ------------------------------------------------------- //

        void ADC_Configuration(void);

        uint16_t Get_ADC_Converted_Values(uint8_t channel);

        void ADC_Sample_Frequency_Set(u32 Frequency);

       

#endif

//----------------------------------------------------------------------------//

2.adc.c

/*

规则组采集多路电压时,使用DMA方式,且必须启用扫描模式,否则只能单路采样;

ADC时钟,必须<14MHz;



ADC的速度由2个参数决定,它是采样时间和转换时间之和:

TCONV = 采样时间 + 12.5个ADC时钟周期

采样时间共有8种选择:1.5、7.5、13.5、28.5、41.5、55.5、71.5和239.5;

若ADC的时钟频率=14MHz,则最高ADC的采样频率=14/(12.5+1.5)=1MHz;最低=14/(12.5+239.5)=55.56kHz

若ADC的时钟频率=12MHz,则最低ADC的采样频率=12/(12.5+239.5)=47.62kHz;

*/


// Includes ------------------------------------------------------------------//

#include "adc.h"

#include "ucos_ii.h"

/* Private define ------------------------------------------------------------*/

/* Private macro -------------------------------------------------------------*/

/* Private variables ---------------------------------------------------------*/

#ifdef OS_uCOS_II_H

        OS_EVENT* adc_dma_simple_ok;//信号量

推荐阅读

史海拾趣

台湾美丽微(FMS)公司的发展小趣事

随着技术的不断发展,FTDI并未满足于现状,而是不断拓展其产品线。公司推出了MM232R和USB-COM232-PLUS1等接口产品,这些产品在连接性和兼容性上展现了FTDI的创新精神。同时,FTDI还涉足USB和其他通信协议的转换领域,满足了市场对多样化通信解决方案的需求。这一系列的技术创新和产品拓展,使得FTDI在电子行业中的影响力逐渐增强。

Fischer Connectors公司的发展小趣事

近年来,FTDI通过战略并购进一步拓展了其业务领域。例如,电连技术通过发行股份及支付现金的方式收购了FTDI的控股权,这一举措不仅使电连技术在产品和客户层面实现了更完整的布局,也增强了其在汽车电子、物联网、工业产品、医疗设备等多个领域的市场竞争力。FTDI凭借其在USB桥接芯片领域的深厚积累和技术优势,为电连技术的业务扩展提供了有力支持,共同推动了公司在全球电子元件产业的持续发展。

Force Technologies Ltd公司的发展小趣事

背景:随着全球对环境保护意识的增强,Force Technologies Ltd积极响应号召,将绿色环保理念融入企业发展中。

发展:公司投入巨资研发环保型电子产品和制造工艺,致力于减少生产过程中的废弃物排放和能源消耗。同时,公司还积极推动供应链的绿色化转型,与供应商共同制定环保标准和措施。这些努力不仅提升了公司的社会形象,还为其赢得了更多消费者的信赖和支持。

Gould Ami公司的发展小趣事
检查水泵电机是否损坏,轴承是否磨损。如有必要,可拆卸水泵进行检修或更换损坏部件。
D3公司的发展小趣事

在电子行业的激烈竞争中,D3公司凭借其对技术创新的不懈追求,逐渐崭露头角。公司创始人李先生深知,在电子产品日新月异的今天,只有不断创新才能立于不败之地。他带领团队潜心研发,推出了一系列具有创新功能的电子产品,如集成了先进人工智能技术的智能音箱、采用全新电池技术的超薄笔记本等。这些产品一经上市,便受到了市场的热烈追捧,D3公司的市场份额也迅速扩大。

华瓷(Chinocera)公司的发展小趣事

随着公司实力的增强和市场份额的扩大,华瓷开始将目光投向国际市场。公司积极参加国际陶瓷及电子行业的展会,与国际同行交流学习,同时大力推广自身的品牌和产品。通过多年的努力,华瓷的陶瓷材料在国际市场上获得了广泛的认可,成功打入欧洲、北美等高端市场。

问答坊 | AI 解惑

学历、性别、经验对电子行业薪酬的影响

学历与薪酬收入   根据2007年度中国电子行业薪酬和职业发展调查。   调查显示,中国电子工程师的薪酬奖金收入与学历成正比例关系。拥有博士学位的电子工程师的平均年薪酬最高约为人民币131396元(月薪人民币10950元),平均年奖金收入为人民币 ...…

查看全部问答>

单片机如何通过ps2向pc传输数据

我想将数据经过ps/2接口传输到pc,这样数据直接在文本上可显示,怎样编程?…

查看全部问答>

安装evc4.0 sp4的时候出错

安装evc4成功,但是安装evc sp4多次,老是在最后弹出这么个提示,怎么办啊????…

查看全部问答>

求问wince中电源管理

我想得到wince平台电池的剩余的百分比, 但是我找了wince的help并没有哪个函数可以得到这个剩余量 这个值应该怎么得到呢? 谢谢…

查看全部问答>

导出DLL整个类和单独导出类函数有何区别?

我要用到一个开源包(GeoPad),开发环境为EVC+PPC2003模拟器,所给开发包SDK中包括了3个DLL(GeoPAD.DLL,GeoPADVB.NET.DLL,和GeoPADVC.NET.DLL)和一个.h文件(定义了一个类GeoPADCtrl),还分别给了C#和c++版的2个例程。 C#版的例程将GeoPADVB.NET. ...…

查看全部问答>

位图问题,想在uboot启动的时候把一张图片显示到LCD上面。这时候系统还没有起来,不知道程序怎么写?

我现在能想到的方案是这样的: @ 把bitmap图像的数据用数组的形式组织起来,然后把这些数据丢到显示缓存上面。然后让其显示在lcd上面。 现在遇到的问题是, 1;不知道bimap的数据是怎样组织的。用UltraEdit打开一张bitmap位图,里面的数据看不懂 ...…

查看全部问答>

急!!!!!!!!能提供一款超声波的收发的芯片或是电路

急!!!!!!!!能提供一款超声波的收发的芯片或是电路…

查看全部问答>

关于keil的问题求助前辈

我在用KEIL编程的时候,发现mian.c函数的前面有三个点, 后面查资料说是没有参与编译。 如图 下载 (9.33 KB) 2010-10-1 20:44 请问下KEIL是在哪里设置函数是否参与编译? 谢谢。…

查看全部问答>

altium designer中关于polygon和焊盘间距的布线规则的设置

步骤如下:— Design》Rules》Design Rules》Electrical》Clearances— 右键单击鼠标,而后选择*New Rule*即添加了新的间距规则— 在上面的where the first object matches选项里选advanced,query builder>>下拉菜单-object kind is 后面选pol ...…

查看全部问答>

Stellaris M3 选型表 ,含芯片系列(Tempest,Sandstorm..)

附件是ti stellaris m3 芯片的选型表,里面有各种芯片是对应哪个系列的对应关系。很多客户可能不知道一个型号究竟是那个系列的芯片,用这个选型表最容易查出来。…

查看全部问答>