蓝桥杯嵌入式第十五届省赛编程题真题+代码

  1. STM32CubeMX
  • 引脚功能一览:包括LED1、LED2、LED3、LED8;按键B1、B2、B3、B4;

  • 时钟树配置:80MHz系统主频

  • TIM2配置:PA15捕获A通道XL555频率(频率大小受R40电位器调控)、TIM3配置:PB4捕获B通道XL555频率(频率大小受R39电位器调控)

  1. 工程代码
  • 主程序
/**********************************main.h*************************************/
//枚举变量、结构体变量定义
enum
{
   
	DATAf = 1,
	DATAt,
	PARA,
	RECD,
} ;

typedef struct
{
   
	char MyStr[21];
	uint8_t ucBrush;
	uint8_t Interface;
} LCD;
extern LCD Lcd;

typedef struct
{
   
	double dFreq;
	double dTime;
	double Max;
	double Min;
	uint8_t ucBrush;
	uint8_t ND;
	uint8_t NH;
} TIM;
extern TIM myR40A;
extern TIM myR39B;

/**********************************main.c*************************************/
#include "main.h"
#include "tim.h"
#include "gpio.h"

#include <stdio.h>
#include "key.h"
#include "lcd.h"
#include "led.h"

LCD Lcd;     //LCD相关结构体变量
TIM myR40A;  //TIM2相关结构体变量
TIM myR39B;  //TIM3相关结构体变量

uint16_t PD = 1000; //PD参数,默认值1000
uint16_t PH = 5000; //PH参数,默认值5000
int PX = 0;         //PX参数,默认值0
uint8_t ParaChoice = 1; //参数选择标志
uint16_t t3s = 0;       //3s窗口时间

void SystemClock_Config(void);

void LCD_Proc(void);
void R40A_Capture(void);
void R39B_Capture(void);
void Measured_Proc(void);

void InitMySystem(void)
{
   
	LCD_Init();                 //LCD初始化
	LCD_Clear(Black);
	LCD_SetBackColor(Black);
	LCD_SetTextColor(White);

	Lcd.Interface = DATAf;      //默认界面
	HAL_TIM_IC_Start(&htim2,TIM_CHANNEL_1); //开启TIM2输入捕获
	HAL_TIM_IC_Start(&htim3,TIM_CHANNEL_1); //开启TIM3输入捕获
	HAL_Delay(10); //上电延时10ms
}

int main(void)
{
   
    HAL_Init();
    SystemClock_Config();
    MX_GPIO_Init();
    MX_TIM2_Init();
    MX_TIM3_Init();
    
    InitMySystem();  
    
    /*数据预处理BEGIN*/
	R40A_Capture();
	R39B_Capture();
	myR40A.dFreq += PX;
	myR39B.dFreq += PX;
	if(myR40A.dFreq > 20000)  //限幅,频率测量最大值20KHz
		myR40A.dFreq = 20000;
	if(myR39B.dFreq > 20000)
		myR39B.dFreq = 20000;
	
	myR40A.Max = myR40A.Min = myR40A.dFreq;
	myR39B.Max = myR39B.Min = myR39B.dFreq;
	/*数据预处理END*/
    
    while (1)
    {
   
        Key_Proc();      //按键
        LED_Proc();      //LED
        LCD_Proc();      //LCD
        Measured_Proc(); //数据
    }
}
    
void R40A_Capture(void)
{
   
    myR40A.dTime = HAL_TIM_ReadCapturedValue(&htim2,TIM_CHANNEL_1); //周期
    myR40A.dFreq = 1000000 / myR40A.dTime;  //1M(us)/T(us) 频率
}

void R39B_Capture</
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值