嵌入式-蓝桥杯

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

嵌入式—蓝桥杯

基本操作

stm32G431RBTx

RCC: 外部时钟HSE SYS: Serial Wire IDE:MDK-ARM

1.Debug: CMSIS-DAP Debugger Settngs: reset and run

2.MDK-ARM同级目录下创建 bsp文件夹;勾选自动生成.c/.h文件

3.在K5下面加上bsp文件,右键添加.c文件

4.C/C++:include path加上test\bsp

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

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "led.h"
#include "lcd.h"
#include "interrup.h"
#include "kadc.h"
#include "stdint.h"
#include "i2c.h"
#include "stm32_hal_legacy.h"
#include "string.h"

LED

pd2:锁存器控制端口 高电平使能

pc8-pc15 gpio_output GPIO output Level:high

void LED_Disp(uchar dsLED)
	{
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_All,GPIO_PIN_SET);
		HAL_GPIO_WritePin(GPIOC,dsLED<<8,GPIO_PIN_RESET);
		HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
		HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
	}
#ifndef _LED_H
#define _LED_H
#include "main.h"

void LED_Disp(uchar dsLED);
	
#endif
#define uchar unsigned char;
#define uint unsigned int;
LED_Disp(0x00);    //初始化

LED_Disp (0x01);//00000001;while 1
HAL_Delay(500);
LED_Disp (0x2E);//00101110
HAL_Delay(500);

LCD

官方库——INC/SRC中的.c/.h文件 放到bsp文件中

LCD的初始化

GPIO_INPUT 引脚配置

NVIC中将中断进行使能

#include "interrup.h"

extern struct keys key[4];        //main.c

HAL_TIM_Base_Start_IT(&htim3);
#include "interrup.h"

struct keys key[4]={0,0,0};
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	if(htim->Instance==TIM3)
	{   
		key[0].key_sta=HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0);
		key[1].key_sta=HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1);
		key[2].key_sta=HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2);
		key[3].key_sta=HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_3);

		for (int i=0;i<4;i++)
	{
		switch(key[i].judge_sta)
		{
			case 0:
			{
				if(key[i].key_sta==0)
				key[i].judge_sta=1;
				key[i].key_time=0;
			}
			break ;
			case 1:  //消除抖动
			{
				if(key[i].key_sta==0){
				key[i].judge_sta=2;
				}
				else key[i].judge_sta=0;
			}
			break ;	
			case 2:
			{
				if(key[i].key_sta==1)
					{
				key[i].judge_sta=0;
		
					if(key[i].key_time<70)
				{
					key[i].single_flag=1;
				}
				
					}
			else 
			{
				key[i].key_time++;
				if(key[i].key_time>70)
				{
					key[i].long_flag=1;
				}
			}
			}
			break ;
			
		}
	}
}
	}
uchar ccrl_val1=0,ccrl_val2=0;
	uint frq1=0,frq2=0;
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
	{
	if(htim->Instance==TIM2)  //定时器锁定到TIM2
	{
		ccrl_val1 = HAL_TIM_ReadCapturedValue (htim,TIM_CHANNEL_1 );
		__HAL_TIM_SetCounter(htim,0);
		frq1 = (80000000/80)/ccrl_val1;
		HAL_TIM_IC_Start(htim,0);
		HAL_TIM_IC_Start(htim,TIM_CHANNEL_1);
	}
	if(htim->Instance==TIM3)
	{
		ccrl_val2 = HAL_TIM_ReadCapturedValue (htim,TIM_CHANNEL_1 );  //计时值
		__HAL_TIM_SetCounter(htim,0);  //清零
		frq2 = (80000000/80)/ccrl_val2;     //频率=80兆/分频系数/计时值
		HAL_TIM_IC_Start(htim,0);
		HAL_TIM_IC_Start(htim,TIM_CHANNEL_1);
	}
}
#ifndef __INTERRUP_H
#define __INTERRUP_H

#include "main.h"
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim);
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim);
struct keys
{
	uchar judge_sta;
	uchar key_sta;        //按下为0
	uchar single_flag;     //确认按下为1,短按键
	uchar long_flag;     //长按键
	uint key_time;
};
#endif

切换界面

key_proc

disp_proc

	void key_proc();
	void disp_proc();
	
		key_proc();
		disp_proc();
		
	void key_proc(void)
{
	if(key[0].single_flag ==1)
		{
			LCD_Clear(Blue);
			view=!view;
	//		HAL_Delay(5000);
			key[0].single_flag =0;
			}
}

PWM/脉冲输出

HAL_TIM_PWM_Start (&htim16 ,TIM_CHANNEL_1);   //pwm输出开启
HAL_TIM_PWM_Start (&htim17 ,TIM_CHANNEL_1);
HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_1);   //频率测量定时器捕获
HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_1);
void key_proc(void)
{
	if(key[0].single_flag ==1)
		{
	//	LCD_Clear(Blue);
			view=!view;
	//		HAL_Delay(5000);
			key[0].single_flag =0;
		}
		if(key[1].single_flag ==1)
		{
			pa6_duty+=10;
			if(pa6_duty>=100) pa6_duty=10;
			__HAL_TIM_SetCompare(&htim16,TIM_CHANNEL_1,pa6_duty);
			key[1].single_flag =0;
		}
		if(key[2].single_flag ==1)
		{
			pa7_duty+=10;
			if(pa7_duty>=100) pa7_duty=10;
			__HAL_TIM_SetCompare(&htim17,TIM_CHANNEL_1,pa7_duty);
			key[2].single_flag =0;
		}
	
}


void disp_proc(void)
{
//	LCD_Clear(Blue);
	if(view==0)
	{
		LCD_Clear(Blue);
		 char text[30];
				sprintf(text,"   Data  ");
			LCD_DisplayStringLine ( Line6, (uint8_t*)text);

		
//			LCD_DisplayStringLine ( Line0, (uint8_t*)text);
//		sprintf(text,"   FRQ1:%d ",frq1);
//			LCD_DisplayStringLine ( Line2, (uint8_t*)text);
//		sprintf(text,"   FRQ2:%d ",	frq2);
//			LCD_DisplayStringLine ( Line4, (uint8_t*)text);	
	}
	if(view==1)
	{
		LCD_Clear(Blue);
		  char text[30];
			sprintf(text,"   Para  ");
		LCD_DisplayStringLine ( Line1, (uint8_t*)text);
			LCD_DisplayStringLine ( Line0, (uint8_t*)text);
		sprintf(text,"   PA6:%d ",pa6_duty);
			LCD_DisplayStringLine ( Line2, (uint8_t*)text);
		sprintf(text,"   PA7:%d ",pa7_duty);
			LCD_DisplayStringLine ( Line4, (uint8_t*)text);
	//2	key[1].single_flag =0;
	}
}

捕获计数器(频率、占空比

PA15、PB4

ADC

I2C

  • 13
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值