作业二,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还没有写,然后测频率还没有测试,写的很蠢,时间也不太够之前一直在摸,死亡冲刺了