历史上的今天
今天是: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;//信号量
史海拾趣
|
学历与薪酬收入 根据2007年度中国电子行业薪酬和职业发展调查。 调查显示,中国电子工程师的薪酬奖金收入与学历成正比例关系。拥有博士学位的电子工程师的平均年薪酬最高约为人民币131396元(月薪人民币10950元),平均年奖金收入为人民币 ...… 查看全部问答> |
|
我要用到一个开源包(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编程的时候,发现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 芯片的选型表,里面有各种芯片是对应哪个系列的对应关系。很多客户可能不知道一个型号究竟是那个系列的芯片,用这个选型表最容易查出来。… 查看全部问答> |




