发 帖  
示波器stm32程序
2018-7-6 04:01:58  322 示波器 STM32
分享
希望大家多多支持,分享资料,共同学习

所有资料提供下载:
    OSC.rar  


单片机源程序如下:
  • #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=ind;j<ind+250;j=j+1)
  •                         {
  •                 temp = a[j] * 3300 / 4096  *  25 /vcc_div;
  •                                 temp1 = a[j + 1] * 3300 / 4096 * 25 / vcc_div;
  •                                 clear_point(j-ind);
  •                                 if(temp>200)
  •                                 {
  •                                         temp=200;
  •                                 }
  •                                 if(temp<0)
  •                                 {
  •                                         temp=0;
  •                                 }
  •                                 if(temp1>200)
  •                                 {
  •                                         temp1=200;
  •                                 }
  •                                 if(temp1<0)
  •                                 {
  •                                         temp1=0;
  •                                 }
  •                                 lcd_huadian(j-ind,temp);
  •                                 lcd_huaxian(j-ind,temp,j-ind+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);
  •         GPIO_InitTypeStruct.GPIO_Pin = GPIO_Pin_4;
  •         GPIO_InitTypeStruct.GPIO_Speed = GPIO_Speed_50MHz;                                 //        S4
  •         GPIO_InitTypeStruct.GPIO_Mode = GPIO_Mode_Out_PP;
  •         GPIO_Init(GPIOA, &GPIO_InitTypeStruct);
  •         GPIO_InitTypeStruct.GPIO_Pin = GPIO_Pin_5;
  •         GPIO_InitTypeStruct.GPIO_Speed = GPIO_Speed_50MHz;                                 //        S5
  •         GPIO_InitTypeStruct.GPIO_Mode = GPIO_Mode_Out_PP;
  •         GPIO_Init(GPIOA, &GPIO_InitTypeStruct);
  •         GPIO_InitTypeStruct.GPIO_Pin = GPIO_Pin_6;
  •         GPIO_InitTypeStruct.GPIO_Speed = GPIO_Speed_50MHz;                                 //        S6
  •         GPIO_InitTypeStruct.GPIO_Mode = GPIO_Mode_Out_PP;
  •         GPIO_Init(GPIOA, &GPIO_InitTypeStruct);
  •         GPIO_InitTypeStruct.GPIO_Pin = GPIO_Pin_7;
  •         GPIO_InitTypeStruct.GPIO_Speed = GPIO_Speed_50MHz;                                 // S7
  •         GPIO_InitTypeStruct.GPIO_Mode = GPIO_Mode_Out_PP;
  •         GPIO_Init(GPIOA, &GPIO_InitTypeStruct);
  • }







0
2018-7-6 04:01:58   评论

只有小组成员才能发言,加入小组>>

307个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /7 下一条

快速回复 返回顶部 返回列表