微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 我想在这个程序里添加新的功能,可是添加进去之后板子直接lcd都无法显示想问问各位大神怎么解决。

我想在这个程序里添加新的功能,可是添加进去之后板子直接lcd都无法显示想问问各位大神怎么解决。

时间:10-02 整理:3721RD 点击:
以下为main程序被注释部分是我想添加的部分
#include "public.h"
#include "adc.h"
#include "systick.h"
#include "gui.h"

int main(void)
{    GPIO_InitTypeDef GPIO_InitStructure;
   
    switch()
    u8 i,dat1[6],dat2[6],dat3[6],dat4[6];
    u16 value;
//    u16 IC2value;
    float ad;
    TFT_Init();     //TFT初始化
    adc_init();     //ADC初始化
   
    TFT_ClearScreen(BLACK);
    GUI_Show12ASCII(10,100," Vm/V ",YELLOW,BLACK);
    GUI_Show12ASCII(10,130," F/HZ ",YELLOW,BLACK);
    GUI_Show12ASCII(10,160," D/% ",YELLOW,BLACK);
    GUI_Show12ASCII(10,190," Tr/ns ",YELLOW,BLACK);
     
    while(1)
    {
//    GPIO_InitTypeDef GPIO_InitStructure;
//    NVIC_InitTypeDef NVIC_InitStructure;
//    TIM_ICInitTypeDef TIM_ICInitStructure;
//   
//        
//  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);      //时钟配置
//  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
//
//  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;                               //GPIO配置
//  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
//  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
//  GPIO_Init(GPIOA, &GPIO_InitStructure);
//
//  NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;                     //NVIC配置
//  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
//  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
//  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
//  NVIC_Init(&NVIC_InitStructure);
//
//  TIM_ICInitStructure.TIM_Channel = TIM_Channel_2;                   //通道选择
//  TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;       //上升沿触发
//  TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;    //管脚与寄存器对应关系
//  TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_div1;     
////输入预分频。意思是控制在多少个  输入周期做一次捕获,如果
////输入的信号频率没有变,测得的周期也不会变。比如选择4分频,则每四个输入周期才做一次捕获,这样在输入信号变化不频繁的情况下,
////可以减少软件被不断中断的次数。
//  TIM_ICInitStructure.TIM_ICFilter = 0x0;       //滤波设置,经历几个周期跳变认定波形稳定0x0~0xF
//  TIM_PWMIConfig(TIM3, &TIM_ICInitStructure);                 //根据参数配置TIM外设信息
//  TIM_SelectInputTrigger(TIM3, TIM_TS_TI2FP2);                //选择IC2为始终触发源
//  TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset);
//   //TIM从模式:触发信号的上升沿重新初始化计数器和触发寄存器的更新事件
//  TIM_SelectMasterSlaveMode(TIM3, TIM_MasterSlaveMode_Enable); //启动定时器的被动触发
//  TIM_Cmd(TIM3, ENABLE);                                 //启动TIM3      
//  TIM_ITConfig(TIM3, TIM_IT_CC2, ENABLE);     //打开中断

        value=0;
        for(i=0;i<10;i++)
        {     
            ADC_SoftwareStartConvCmd(ADC1, ENABLE);
            while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));//转换结束标志位
            value=value+ADC_GetConversionValue(ADC1);//返回最近一次ADCx规则组的转换结果   
        }
        value=value/10;
        ad=value*3.3/4096;
        value=(u16)(ad*100);
        dat1[0]=value/100+0x30;
        dat1[1]='.';
        dat1[2]=value%100/10+0x30;
        dat1[3]=value%100%10+0x30;
        dat1[4]='0';
        dat1[5]='\0';

        GUI_Show12ASCII(160,100,dat1,RED,BLACK);
        GUI_Show12ASCII(160,130,dat2,RED,BLACK);
        GUI_Show12ASCII(160,160,dat3,RED,BLACK);
        GUI_Show12ASCII(160,190,dat4,RED,BLACK);        
    }            
}


////中断处理函数
//void TIM3_IRQHandler(void)
//{
//u16 IC2value;
//u16 Frequency,DutyCycle;
//  TIM_ClearITPendingBit(TIM3, TIM_IT_CC2);       //清楚TIM的中断待处理位
//   IC2value = TIM_GetCapture2();              //读取IC2捕获寄存器的值,即为PWM周期的计数值
//  if (IC2value != 0)
//  {   
//    DutyCycle = (TIM_GetCapture1(TIM3) * 100) / IC2value; //读取IC1捕获寄存器的值,并计算占空比
//   Frequency = 72000000 / IC2value;      //计算PWM频率。
//   //Frequency = 自己分频过的定时器时钟频率 / IC2Value;
//  }
//  else
//  {
//    DutyCycle = 0;
//    Frequency = 0;
//  }
//}

不要放在while(1)里面,那样会被不断地初始化

  1. int main(void)
  2. {   
  3.     GPIO_InitTypeDef GPIO_InitStructure;
  4.     NVIC_InitTypeDef NVIC_InitStructure;
  5.     TIM_ICInitTypeDef TIM_ICInitStructure;  

  6.     u8 i,dat1[6],dat2[6],dat3[6],dat4[6];
  7.     u16 value;
  8.     float ad;
  9.    
  10.    
  11.     TFT_Init();     //TFT初始化
  12.     adc_init();     //ADC初始化
  13.    
  14.     TFT_ClearScreen(BLACK);
  15.     GUI_Show12ASCII(10,100," Vm/V ",YELLOW,BLACK);
  16.     GUI_Show12ASCII(10,130," F/HZ ",YELLOW,BLACK);
  17.     GUI_Show12ASCII(10,160," D/% ",YELLOW,BLACK);
  18.     GUI_Show12ASCII(10,190," Tr/ns ",YELLOW,BLACK);

  19.    
  20.         
  21.   RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);      //时钟配置
  22.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

  23.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;                               //GPIO配置
  24.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  25.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  26.   GPIO_Init(GPIOA, &GPIO_InitStructure);

  27.   NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;                     //NVIC配置
  28.   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  29.   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  30.   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  31.   NVIC_Init(&NVIC_InitStructure);

  32.   TIM_ICInitStructure.TIM_Channel = TIM_Channel_2;                   //通道选择
  33.   TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;       //上升沿触发
  34.   TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;    //管脚与寄存器对应关系
  35.   TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_div1;     
  36. //输入预分频。意思是控制在多少个  输入周期做一次捕获,如果
  37. //输入的信号频率没有变,测得的周期也不会变。比如选择4分频,则每四个输入周期才做一次捕获,这样在输入信号变化不频繁的情况下,
  38. //可以减少软件被不断中断的次数。
  39.   TIM_ICInitStructure.TIM_ICFilter = 0x0;       //滤波设置,经历几个周期跳变认定波形稳定0x0~0xF
  40.   TIM_PWMIConfig(TIM3, &TIM_ICInitStructure);                 //根据参数配置TIM外设信息
  41.   TIM_SelectInputTrigger(TIM3, TIM_TS_TI2FP2);                //选择IC2为始终触发源
  42.   TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset);
  43.    //TIM从模式:触发信号的上升沿重新初始化计数器和触发寄存器的更新事件
  44.   TIM_SelectMasterSlaveMode(TIM3, TIM_MasterSlaveMode_Enable); //启动定时器的被动触发
  45.   TIM_Cmd(TIM3, ENABLE);                                 //启动TIM3      
  46.   TIM_ITConfig(TIM3, TIM_IT_CC2, ENABLE);     //打开中断     
  47.     while(1)
  48.     {
  49.         value=0;
  50.         for(i=0;i<10;i++)
  51.         {     
  52.             ADC_SoftwareStartConvCmd(ADC1, ENABLE);
  53.             while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));//转换结束标志位
  54.             value=value+ADC_GetConversionValue(ADC1);//返回最近一次ADCx规则组的转换结果   
  55.         }

  56.         value=value/10;
  57.         ad=value*3.3/4096;
  58.         value=(u16)(ad*100);

  59.         dat1[0]=value/100+0x30;
  60.         dat1[1]='.';
  61.         dat1[2]=value%100/10+0x30;
  62.         dat1[3]=value%100%10+0x30;
  63.         dat1[4]='0';
  64.         dat1[5]='\0';


  65.         GUI_Show12ASCII(160,100,dat1,RED,BLACK);
  66.         GUI_Show12ASCII(160,130,dat2,RED,BLACK);
  67.         GUI_Show12ASCII(160,160,dat3,RED,BLACK);
  68.         GUI_Show12ASCII(160,190,dat4,RED,BLACK);        
  69.     }            
  70. }

复制代码

不要放在while(1)里面,那样会被不断地初始化

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top