|
主要功能描述:可以設(shè)置4種采樣頻率,利用GPIO-PIN-5外部中斷來(lái)選擇(1、2、3、4循環(huán)),實(shí)驗(yàn)中抗干擾較弱,可以嘗試加一個(gè)上拉電阻。能觀察波形的頻率范圍大概在300至5KHZ,過(guò)低的頻率需要自己再修改相關(guān)分頻和時(shí)鐘;輸入電壓需要保證大于0,如果小于零需要設(shè)計(jì)分壓電路來(lái)抬高輸入電壓,為了匹配需要測(cè)量的波形需要調(diào)整顯示函數(shù)的參數(shù);另外OLED也只是完成波形的顯示,沒(méi)有坐標(biāo)軸等,需要自己修改添加。
主函數(shù)部分代碼如下:
#include "delay.h"
#include "sys.h"
#include "stdio.h"
#include "oled.h"
#include "interrupt.h"
#include "ad.h"
#include "stdlib.h"
u16 resurt;
ADC_NODE* Top;
ADC_NODE* Tail;
ADC_NODE* InitNode;
ADC_NODE ADC_data[128];
unsigned char c=1;
void ShowVoltage(float Voltage,u8 startX,u8 startY);
int main(void)
{
ADC_NODE* GetResult;
unsigned char a, b;
float Voltages;
delay_init();
OLED_Init(); /
OLED_Clear();
ExitOn(); //GPIOA_PIN_5
ADC_DATA_Init();
ADC_init(RCC_PCLK2_Div8);
while(1)
{
ADC_Control(0);
GetResult = Tail; // change every 26.5us
GetResult = GetResult->next->next;
for(a=1; a<129;a++){
OLED_ClearLine(a);
//Voltages = (float)resurt*3.3/4096;
//Voltages = 16+15*sin(0.1*a);
b = (char)(GetResult->data*70/4096);
OLED_DrawP(a,b-33);
GetResult = GetResult->next;
}
ADC_Control(1);
delay_ms(50);
}
}
void EXTI9_5_IRQHandler(void){
c++;
if(c==5) c=0;
switch (c){
case 1: ADC_init(RCC_PCLK2_Div2);break;
case 2: ADC_init(RCC_PCLK2_Div4);break;
case 3: ADC_init(RCC_PCLK2_Div6);break;
case 4: ADC_init(RCC_PCLK2_Div8);break;
};
EXTI_ClearITPendingBit(Z_Line);
}
其中有一些頭文件和代碼沒(méi)有在主程序中使用到,是學(xué)習(xí)和測(cè)試時(shí)寫(xiě)的可以刪掉,僅保留示波器源程序。
接線說(shuō)明:
A6接SCK ,A7接SDA,OLED接3.3V(注意不是0.96寸的OLED。
電壓輸入接A1,需要共地,外部中斷為A5。
代碼下載:
STM32f103c8t6簡(jiǎn)易示波器.7z
(194.01 KB, 下載次數(shù): 170)
2021-7-5 02:13 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|