资源简介
基于stm32开发的简易示波器,使用了stm32自带的adc采样所以速率只能到达几十K。但是对于刚学习示波器使用的孩子,很有借鉴意义。
代码片段和文件信息
#include “adc.h“
#include “math.h“
#include “tim.h“
#include “stm32f10x_it.h“
#define ADC1_DR_Address ((u32)0x4001244C)
u16 a[640];
u16 index = 0;
u16 index1 = 0;
void DMA1_Init(void)
{
DMA_InitTypeDef DMA_InitTypeStruct;
DMA_DeInit(DMA1_Channel1); //ADC1的DMA通道
DMA_InitTypeStruct.DMA_PeripheralbaseAddr = ADC1_DR_Address;
DMA_InitTypeStruct.DMA_MemorybaseAddr = (u32)a;
DMA_InitTypeStruct.DMA_DIR = DMA_DIR_PeripheralSRC;
DMA_InitTypeStruct.DMA_BufferSize = 640;
DMA_InitTypeStruct.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
DMA_InitTypeStruct.DMA_MemoryInc = DMA_MemoryInc_Enable;
DMA_InitTypeStruct.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
DMA_InitTypeStruct.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
DMA_InitTypeStruct.DMA_Mode = DMA_Mode_Normal;
DMA_InitTypeStruct.DMA_Priority = DMA_Priority_VeryHigh;
DMA_InitTypeStruct.DMA_M2M = DMA_M2M_Disable;
DMA_Init(DMA1_Channel1&DMA_InitTypeStruct); //DMA初始化,ADC结果寄存器存入SRAM中
DMA_Cmd(DMA1_Channel1ENABLE); //DMA使能
}
void AD_Init(void)
{
ADC_InitTypeDef ADC_InitTypeStruct;
ADC_DeInit(ADC1); //复位ADC1
ADC_InitTypeStruct.ADC_Mode = ADC_Mode_Independent;//ADC工作在独立模式
ADC_InitTypeStruct.ADC_ScanConvMode = DISABLE; //单通道模式
ADC_InitTypeStruct.ADC_ContinuousConvMode = DISABLE; //单次模式
ADC_InitTypeStruct.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1;//选择定时器1来触发
ADC_InitTypeStruct.ADC_DataAlign = ADC_DataAlign_Right; //数据右对齐
ADC_InitTypeStruct.ADC_NbrOfChannel = 1; //通道数目为1
ADC_Init(ADC1 &ADC_InitTypeStruct); //ADC初始化
ADC_ExternalTrigConvCmd(ADC1ENABLE); //ADC外部触发使能
ADC_RegularChannelConfig(ADC1 ADC_Channel_2 1 ADC_SampleTime_1Cycles5);//配置ADC1,通道1等
}
void ADC1_Init(void) //adc初始化
{
DMA1_Init();
AD_Init();
ADC_DMACmd(ADC1 ENABLE); //ADC DMA使能
ADC_Cmd(ADC1 ENABLE); //ADC使能
ADC_ResetCalibration(ADC1); //ADC校准复位
while(ADC_GetResetCalibrationStatus(ADC1));
ADC_StartCalibration(ADC1); //ADC开始校准
while(ADC_GetCalibrationStatus(ADC1));
}
void ADC_Get_Value(void) //得到数据,
{
float gao_pin_period = 0;
DMA1_Init();
TIM_SetCounter(TIM10); //清空寄存器
if(num_shao_miao>7)
{
TIM_PrescalerConfig(TIM171TIM_PSCReloadMode_Immediate);
TIM_SetCompare1(TIM1 (shao_miao_shu_du/25)-1);
TIM_SetAutoreload(TIM1 (shao_miao_shu_du/25)-1); //设定扫描速度
}
else
{
TIM_PrescalerConfig(TIM10TIM_PSCReloadMode_Immediate);
gao_pin_period = 288000000.0/frequency +gao_pin_palus-1;
TIM_SetCompare1(TIM1 gao_pin_period);
TIM_SetAutoreload(TIM1gao_pin_period);
}
TIM_Cmd(TIM1ENABLE);
while(!DMA_GetFlagStatus(DMA1_FLAG_TC1));
DMA_ClearFlag(DMA1_FLAG_TC1);
if(DMA_GetFlagStatus(DMA1_FLAG_TE1))
{
DMA_ClearFlag(DMA1_FLAG_TE1);
ADC_Get_Value();
}
TIM_Cmd(TIM1DISABLE);
}
u16 ADC_Get_Vpp(void)
{
u32 max_data=a[0];
u32 min_data=a[0];
u32 n=0;
float pp=0;
for(n = 1;n<320;n++)
{
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2016-11-24 15:57 简易示波器\
目录 0 2016-11-24 15:57 简易示波器\SYSTEM\
目录 0 2016-11-24 15:57 简易示波器\SYSTEM\delay\
文件 6020 2015-09-25 11:29 简易示波器\SYSTEM\delay\delay.c
文件 209 2015-09-25 14:07 简易示波器\SYSTEM\delay\delay.h
目录 0 2016-11-24 15:57 简易示波器\SYSTEM\sys\
文件 166 2015-11-26 21:07 简易示波器\SYSTEM\sys\sys.c
文件 2227 2015-11-26 21:06 简易示波器\SYSTEM\sys\sys.h
目录 0 2016-11-24 15:57 简易示波器\SYSTEM\usart\
文件 4151 2015-09-25 11:29 简易示波器\SYSTEM\usart\usart.c
文件 431 2015-09-25 14:07 简易示波器\SYSTEM\usart\usart.h
目录 0 2016-11-24 15:56 简易示波器\app\
目录 0 2016-11-24 15:56 简易示波器\app\AT24Cxx\
文件 3580 2015-11-26 14:49 简易示波器\app\AT24Cxx\AT24CXX.c
文件 695 2015-11-26 14:49 简易示波器\app\AT24Cxx\AT24CXX.h
目录 0 2016-11-24 15:56 简易示波器\app\DHT11\
文件 2685 2015-11-12 12:14 简易示波器\app\DHT11\dht11.c
文件 447 2015-11-12 12:01 简易示波器\app\DHT11\dht11.h
目录 0 2016-11-24 15:56 简易示波器\app\DS18B20\
文件 4925 2015-11-12 10:16 简易示波器\app\DS18B20\ds18b20.c
文件 526 2015-11-12 10:16 简易示波器\app\DS18B20\ds18b20.h
目录 0 2016-11-24 15:56 简易示波器\app\IIC(24C02)\
文件 2466 2014-12-16 17:16 简易示波器\app\IIC(24C02)\iic.c
文件 675 2015-11-05 16:13 简易示波器\app\IIC(24C02)\iic.h
目录 0 2016-11-24 15:56 简易示波器\app\Tetris\
文件 22983 2015-11-26 19:41 简易示波器\app\Tetris\Tetris.c
文件 1108 2015-11-26 16:21 简易示波器\app\Tetris\Tetris.h
文件 4321 2015-11-26 09:23 简易示波器\app\Tetris\model.h
目录 0 2016-11-24 15:56 简易示波器\app\W25QXX\
文件 8907 2015-11-07 09:25 简易示波器\app\W25QXX\w25qxx.c
文件 1755 2015-11-06 12:37 简易示波器\app\W25QXX\w25qxx.h
............此处省略411个文件信息
相关资源
- ILI9325驱动显示屏显示完整代码
- STM32CubeMX_v5.2.0.rar
- STM32CubeMX 4.26.1
- 基于stm32单片机的MQ-3酒精模块检测程
- STM32F407例程库函数
- Keil.STM32G4xx_DFP.1.2.0.rar
- 32小车全.zip
- 已测试基于STM32的MLX90614程序
- STM32-LD3320A.zip
- 一次搞定,STM32F103各种外围电路合集
- UWB室内定位 含PCB stm32源码
- STM32F4系列例程大全,包含各个模块(
- STM32F103C8开发板 STM32最小系统核心板
- UBLOX-6M GPS资料包V4.6.zip
- stm32制作的plc原理图
- STM32F429 双LCD屏 正点原子阿波罗开发板
- stm32h743 uCOS-iii
- 基于LabVIEW的ARM Cortex-M3嵌入式开发宝典
- STM32F4官方固件库与手册标准库.rar
- stm32俄罗斯方块源程序
- STM32L051开发
- 四轴飞控stm32f4原理图PCB
- STM32_UVC
- STM32F107官方开发板电路包括原理图和
- pulse sensor中文资料+Stm32f103程序
- stm32 三路ADC
- Keil.STM32F0xx_DFP 包括2.0.0和1.4.0两个版本
- STM3232人体检测-心率血氧、跌到检测、
- ALIENTEK战舰STM32 V2.3原理图和PCB
- 实验3:CubeMx+Proteus+STM32 IO口模拟SPI协
评论
共有 条评论