【无刷直流电机--闭环控制】【Stm32G070】【例程是hal库】增加按键长按使系统初始化

直流无刷电机控制板

在这里插入图片描述

想法来源?

这个板子只有2个按键,
S2控制正转速度 ,S1增加反转速度(短按)
没有reset键,每次执行完1程序,我都得重新下载,很麻烦。
----->所以就想给它增加一个系统初始化的功能(长按)
达到了设置的延长时间后,蜂鸣器就会响(标志可以松手,系统初始化)

怎么做?

在这里插入图片描述

按键S1、S2按下 处于低电平(接地)

void KEY_Process(void)
{
		uint32_t count=0;
		key1_state=HAL_GPIO_ReadPin(DIN1_GPIO_Port,DIN1_Pin);
		key2_state=HAL_GPIO_ReadPin(DIN2_GPIO_Port,DIN2_Pin);
		//-----增加的代码------增加的代码------增加的代码-----增加的代码------增加的代码------增加的代码
		while(!KEY1_S1_PRESS)//如果S1按下(一直处于低电平)
		{
			count++;//count 开始计数
			if(count>LONG_KEY_DELAY) //如果 count 超过 设定值
			{
				HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, !GPIO_PIN_RESET); //把PA5 置为0
			}
		}
		if(count>LONG_KEY_DELAY)
		{
			SoftReset();
		}
		//------增加的代码------增加的代码------增加的代码------增加的代码------增加的代码------增加的代码
		if(key1_state<key1_state_b)
			target_speed+=1000;
		if(key2_state<key2_state_b)
			target_speed-=1000;
		if(target_speed>20000)
			target_speed=20000;
		if(target_speed<-20000)
			target_speed=-20000;
		
		if((key1_state==0)&&(key2_state==0))
		{
			key12_count++;
		}
		if(key12_count>5000)
		{
			key12_count=0;
			//find_commutation_and_set_tamagawazero();
		}
		
		key1_state_b=key1_state;
		key2_state_b=key2_state;

}

注意

1、此处的 count的类型

LONG_KEY_DELAY的大小有关,我之前用的是uint8_t,而LONG_KEY_DELAY设为10000,超过了变量的范围(详细说明在下方),值溢出,现象出不来,改成uint32_t就可以了

在这里插入图片描述

知识扫盲:什么是*_t

以下内容引出自 https://blog.csdn.net/weixin_40700884/article/details/104785995

typedef signed char             int8_t;
typedef short int               int16_t;
typedef int                     int32_t;

typedef unsigned char           uint8_t;
typedef unsigned short int      uint16_t;
typedef unsigned int            uint32_t;

uint8_t实际上就是一个char,所以输出 uint8_t类型的变量实际上输出对应的字符,而不是数值,比如:

uint8_t  num=67;
cout << num << endl;		//输出结果为字母C

首先在内存中,char与unsigned char没有什么不同,都是一个字节,唯一的区别是,char的最高位为符号位,因此char能表示-128~127, unsigned char没有符号位,因此能表示0~255,这个好理解,8个bit,最多256种情况,因此无论如何都能表示256个数字。

在这里插入图片描述

以上内容引出自 https://blog.csdn.net/weixin_40700884/article/details/104785995

2、将SPI口用来接 蜂鸣器

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

这里要使用 SPI口用来接蜂鸣器 要先把main中的MX_SPI1_Init();注释掉,否则它不会响。。。。
>](https://img-blog.csdnimg.cn/2b5953487e024f5e8f17fc626394fc1e.png)

PA5进行初始化,同时把该口设置为低电平 为后面蜂鸣器(高电平触发)的使用做准备
在这里插入图片描述

  GPIO_InitStruct.Pin = GPIO_PIN_5; 		//PA5
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; //推挽输出
  GPIO_InitStruct.Pull = GPIO_NOPULL;		//上拉
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; //高速
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); 
  
  HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,RESET);
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KevinGuo457

哈哈哈资助我买两包辣条叭

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值