基于stm32简易计算机电路图,基于stm32mini开发板简易示波器电路+源程序

#include"stm32f10x.h"

#include"systick.h"

#include "lcd.h"

#include"adc.h"

#include "stm32f10x_it.h"

#include"timer.h"

u16 j = 0;

float temp;

float temp1;

void nvic_init(void);

void rcc_init(void);

void gpio_init(void);

void clear_point(u16 hang)

{

u8 index_clear_lie = 0;

POINT_COLOR = DARKBLUE;

for(index_clear_lie = 0;index_clear_lie <201;index_clear_lie++)

{

lcd_huadian(hang,index_clear_lie);

}

POINT_COLOR=RED;

}

int main(void)

{

SystemInit();                    //系统时钟初始化

nvic_init();                   // 中断优先级配置

rcc_init();                           //外设时钟配置

gpio_init();                           //外设io口配置

set_io0();

key_init();

systick_init();                   //滴答配置,

adc_init();                                //adc配置

LCD_Init();                                 //tft液晶初始化

set_background();                  //初始化背景

time_init();                        //定时器配置,测频率用的二个定时器

time_enable();                        //同步开始计数

get_value();

vpp = get_vpp();

while(1)

{

for(j=index;j

{

temp = a[j] * 3300 / 4096  *  25 /vcc_div;

temp1 = a[j + 1] * 3300 / 4096 * 25 / vcc_div;

clear_point(j-index);

if(temp>200)

{

temp=200;

}

if(temp<0)

{

temp=0;

}

if(temp1>200)

{

temp1=200;

}

if(temp1<0)

{

temp1=0;

}

lcd_huadian(j-index,temp);

lcd_huaxian(j-index,temp,j-index+1,temp1);

hua_wang();

}

LCD_Show2Num(144,224,vpp,5,16,0);

get_value();

vpp = get_vpp();

}

}

void nvic_init(void)

{

NVIC_InitTypeDef    NVIC_InitTypeStruct;

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

NVIC_InitTypeStruct.NVIC_IRQChannel = EXTI0_IRQn;

NVIC_InitTypeStruct.NVIC_IRQChannelPreemptionPriority =        2;

NVIC_InitTypeStruct.NVIC_IRQChannelSubPriority = 0;

NVIC_Init(&NVIC_InitTypeStruct);

NVIC_InitTypeStruct.NVIC_IRQChannel = EXTI15_10_IRQn;

NVIC_InitTypeStruct.NVIC_IRQChannelPreemptionPriority =        2;

NVIC_InitTypeStruct.NVIC_IRQChannelSubPriority = 1;

NVIC_Init(&NVIC_InitTypeStruct);

NVIC_InitTypeStruct.NVIC_IRQChannel = TIM2_IRQn;                     //配置中断优先级

NVIC_InitTypeStruct.NVIC_IRQChannelPreemptionPriority =        0;

NVIC_InitTypeStruct.NVIC_IRQChannelSubPriority = 2;

NVIC_InitTypeStruct.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitTypeStruct);

NVIC_InitTypeStruct.NVIC_IRQChannel = TIM3_IRQn;

NVIC_InitTypeStruct.NVIC_IRQChannelPreemptionPriority =        0;

NVIC_InitTypeStruct.NVIC_IRQChannelSubPriority = 3;

NVIC_Init(&NVIC_InitTypeStruct);

}

void rcc_init(void)

{

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);

RCC_ADCCLKConfig(RCC_PCLK2_Div6);

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);

}

void gpio_init(void)

{

GPIO_InitTypeDef GPIO_InitTypeStruct;

GPIO_InitTypeStruct.GPIO_Pin = GPIO_Pin_2;

GPIO_InitTypeStruct.GPIO_Speed = GPIO_Speed_50MHz;                                 //外部时钟的,用来测频率的,

GPIO_InitTypeStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;

GPIO_Init(GPIOD, &GPIO_InitTypeStruct);

GPIO_InitTypeStruct.GPIO_Pin = GPIO_Pin_1;

GPIO_InitTypeStruct.GPIO_Speed = GPIO_Speed_50MHz;                                  //adc输入引脚

GPIO_InitTypeStruct.GPIO_Mode = GPIO_Mode_AIN;

GPIO_Init(GPIOA, &GPIO_InitTypeStruct);

GPIO_InitTypeStruct.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_15;

GPIO_InitTypeStruct.GPIO_Speed = GPIO_Speed_50MHz;                                  //外部中断的io配置

GPIO_InitTypeStruct.GPIO_Mode = GPIO_Mode_IPU;

GPIO_Init(GPIOA, &GPIO_InitTypeStruct);

GPIO_InitTypeStruct.GPIO_Pin = GPIO_Pin_0;

GPIO_InitTypeStruct.GPIO_Speed = GPIO_Speed_50MHz;                                 //外部中断的io配置

GPIO_InitTypeStruct.GPIO_Mode = GPIO_Mode_IPD;

GPIO_Init(GPIOA, &GPIO_InitTypeStruct);

GPIO_InitTypeStruct.GPIO_Pin = GPIO_Pin_8;                                         //定时器1触发ad转换的输出的那个口

GPIO_InitTypeStruct.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitTypeStruct.GPIO_Mode = GPIO_Mode_AF_PP;

GPIO_Init(GPIOA, &GPIO_InitTypeStruct);

GPIO_InitTypeStruct.GPIO_Pin = GPIO_Pin_3;

GPIO_InitTypeStruct.GPIO_Speed = GPIO_Speed_50MHz;                                 // S3

GPIO_InitTypeStruct.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_Init(GPIOA, &GPIO_InitTypeStruct);

……………………

…………限于本文篇幅 余下代码请从51黑下载附件…………

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
制作简易示波器需要以下步骤: 1. 确定硬件平台:stm32f407zgt6开发板 2. 确定显示屏:可以使用OLED或者LCD屏幕 3. 确定输入方式:可以使用按键、旋钮等方式输入信号参数 4. 设计信号输入模块:通过ADC模块进行信号采集,并将采集到的数据传输到处理器中 5. 数据处理:使用DMA传输数据到内存中,通过算法进行信号处理和分析 6. 显示信号:将处理后的信号波形显示在屏幕上 7. 调试和优化:检查程序中的逻辑错误,确保程序的稳定性和精确性 以下是简单的示波器程序框架: ```c #include "stm32f4xx.h" #define OLED_SCL_PIN GPIO_Pin_10 #define OLED_SDA_PIN GPIO_Pin_11 #define OLED_SCL_PORT GPIOB #define OLED_SDA_PORT GPIOB /* ADC采样数据定义 */ #define ADC_DR_ADDRESS ((uint32_t)0x4001244C) /* 定义数据缓冲区 */ #define ADC_BUFFER_SIZE 1024 uint16_t ADC_Buffer[ADC_BUFFER_SIZE]; /* 定义DMA传输完成标志变量 */ __IO uint32_t TransferStatus = 0; /* OLED初始化函数 */ void OLED_Init(void) { /* ... */ } /* OLED显示函数 */ void OLED_ShowWaveform(uint16_t *data) { /* ... */ } /* ADC采样初始化函数 */ void ADC_Configuration(void) { /* ... */ } /* DMA传输初始化函数 */ void DMA_Configuration(void) { /* ... */ } /* 主函数 */ int main(void) { /* 系统初始化 */ RCC_Configuration(); GPIO_Configuration(); NVIC_Configuration(); /* OLED初始化 */ OLED_Init(); /* ADC采样初始化 */ ADC_Configuration(); /* DMA传输初始化 */ DMA_Configuration(); /* 启动ADC采样 */ ADC_SoftwareStartConv(ADC1); /* 等待DMA传输完成 */ while (TransferStatus == 0); /* 显示波形图 */ OLED_ShowWaveform(ADC_Buffer); while(1); } ``` 在这个示例程序中,我们使用了STM32F4的ADC模块进行信号采集,并通过DMA传输数据到内存中。然后,我们对采集到的数据进行处理和分析,并将处理后的数据显示在OLED屏幕上。注意,在实际设计中,可能需要更加复杂的算法和处理过程,具体实现会有所不同。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值