欢迎来到SFWR的博客

作业二,adc,dac的使用,以及利萨如图

#include "main.h"
#include "adc.h"
#include "tim.h"
#include "usart.h"
#include "gpio.h"
#include "stdio.h"

#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif
PUTCHAR_PROTOTYPE
{
    HAL_UART_Transmit(&huart1 , (uint8_t *)&ch, 1, 0xFFFF);
    return ch;
}
uint32_t max(uint32_t a,uint32_t b)
{return a>b?a:b;}

void SystemClock_Config(void);
uint32_t AD_Value = 0;
int cnt=0,flag=0;
void scr1()
{
    uint32_t v1=0;
    cnt=0;
    HAL_ADC_Start(&hadc1);
    HAL_TIM_Base_Start_IT(&htim2);
    HAL_Delay(1000);
    HAL_TIM_Base_Stop_IT(&htim2);
    for(int i=0;i<=5000;i++)
    {
        AD_Value = HAL_ADC_GetValue(&hadc1);
        v1=max(AD_Value,v1);
    }
    printf("波一的频率为%dHz,最大值为%f\r\n",cnt/2,v1*3.3/4096);
}
void scr2()
{
    uint32_t v2=0;
    cnt=0;
    HAL_ADC_Start(&hadc2);
    HAL_TIM_Base_Start_IT(&htim2);
    HAL_Delay(1000);
    HAL_TIM_Base_Stop_IT(&htim2);
    for(int i=0;i<=5000;i++)
    {
        AD_Value = HAL_ADC_GetValue(&hadc2);
        v2=max(AD_Value,v2);
    }
    printf("波二的频率为%dHz,最大值为%f\r\n",cnt/2,v2*3.3/4096);
}
int main(void)
{
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_ADC1_Init();
  MX_USART1_UART_Init();
  MX_ADC2_Init();
  MX_TIM2_Init();

  while (1)
  {
      if(HAL_GPIO_ReadPin(k0_GPIO_Port,k0_Pin)==GPIO_PIN_SET||mode==0)
      {
          scr1();
          scr2();
          while(1){if(HAL_GPIO_ReadPin(k1_GPIO_Port,k1_Pin)==GPIO_PIN_SET){mode=1;break;}}
      }

      else
      {

      }
  }
}

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)

{
    if (htim->Instance == TIM2)
    {
        AD_Value = HAL_ADC_GetValue(&hadc1);
          uint32_t p=AD_Value*3.3/4096;
           if(flag==0)if(p>0){cnt++;flag^=1;}
           else if(flag==1)if(p==0){cnt++;flag^=1;}
    }
}

尚未施工完成……dac还没有写,然后测频率还没有测试,写的很蠢,时间也不太够之前一直在摸,死亡冲刺了

posted @ 2020-12-27 01:26  SFWR  Views(226)  Comments(0Edit  收藏  举报