feat: add STM32 four-channel weighing firmware

This commit is contained in:
FinleyHsu
2026-07-28 11:01:55 +08:00
commit 1282b9b77e
205 changed files with 80376 additions and 0 deletions
@@ -0,0 +1,669 @@
/*************************** (C) COPYRIGHT 2017 CXHY ****************************
* 文件名 buzzer.c
* 描 述 :蜂鸣器驱动程序
* 版 本 V1.0
* 作 者 XuZhongPing
* 日 期 2017/03/06
*********************************************************************************/
#include "buzzer.h"
#include "timer.h"
#define BEEP_PeriphClock RCC_APB2Periph_GPIOB
#define BEEP_PORT GPIOB
#define BEEP_PIN GPIO_Pin_2
uint8_t beep_startUpMark = 0; //开机提示标志
uint8_t beep_shortBeepMark = 0; //蜂鸣器短响标志
uint8_t beep_longBeepMark = 0; //蜂鸣器长响标志
uint8_t beep_closeDoorBeepMark = 0; //蜂鸣器关门响标志
uint8_t beep_warningBeepMark = 0; //蜂鸣器错误警告提示响标志
uint8_t beep_contSlowBeepMark = 0; //蜂鸣器连续慢响标志
uint8_t beep_contFastBeepMark = 0; //蜂鸣器连续快响标志
/*
***********************************************************************
* 函 数 名: KeyInit
* 功能说明: 开关IO口初始化
* 形 参:无
* 返 回 值: 无
***********************************************************************
*/
void BeepInit(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(BEEP_PeriphClock, ENABLE);
GPIO_InitStructure.GPIO_Pin = BEEP_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(BEEP_PORT, &GPIO_InitStructure);
GPIO_ResetBits(BEEP_PORT, BEEP_PIN);
beep_startUpMark = 1; //标志正在开机启动提示
}
/*
***********************************************************************
* 函 数 名: SetBuzzerStatus
* 功能说明: 设置蜂鸣器工作状态
* 形 参:param -> 设置的状态,0关,1:开
* 返 回 值: 无
***********************************************************************
*/
void SetBuzzerStatus(uint8_t param)
{
if(param)
{
GPIO_SetBits(BEEP_PORT, BEEP_PIN);
// printf("\r\n开蜂鸣器\r\n");
}else{
GPIO_ResetBits(BEEP_PORT, BEEP_PIN);
// printf("\r\n关蜂鸣器\r\n");
}
}
/*
***********************************************************************
* 函 数 名: BEEP_ShortBeep
* 功能说明: 蜂鸣器短响
* 形 参:无
* 返 回 值: 无
***********************************************************************
*/
static void BEEP_ShortBeep(void)
{
static uint8_t beepStatus = 0x00;
static timer beepOnTimer;
static uint8_t timer_ok = 0;
if(timer_ok == 0)
{
timer_ok = 1;
timer_set(&beepOnTimer, 2);
}
switch(beepStatus)
{
case 0x00:
if(beep_shortBeepMark == 1)
{
beep_shortBeepMark = 0;
SetBuzzerStatus(1); //打开蜂鸣器
timer_restart(&beepOnTimer);
beepStatus = 0x01;
break;
}
break;
case 0x01:
if(timer_expired(&beepOnTimer))
{
SetBuzzerStatus(0); //关闭蜂鸣器
beepStatus = 0x00;
break;
}
break;
default:
SetBuzzerStatus(0); //关闭蜂鸣器
beepStatus = 0x00;
break;
}
}
/*
***********************************************************************
* 函 数 名: BEEP_LongBeep
* 功能说明: 蜂鸣器长响
* 形 参:无
* 返 回 值: 无
***********************************************************************
*/
static void BEEP_LongBeep(void)
{
static uint8_t beepStatus = 0x00;
static timer beepOnTimer;
static uint8_t timer_ok = 0;
if(timer_ok == 0)
{
timer_ok = 1;
timer_set(&beepOnTimer, 20);
}
switch(beepStatus)
{
case 0x00:
if(beep_longBeepMark == 1)
{
beep_longBeepMark = 0;
SetBuzzerStatus(1); //打开蜂鸣器
timer_restart(&beepOnTimer);
beepStatus = 0x01;
break;
}
break;
case 0x01:
if(timer_expired(&beepOnTimer))
{
SetBuzzerStatus(0); //关闭蜂鸣器
beepStatus = 0x00;
break;
}
SetBuzzerStatus(1); //打开蜂鸣器
break;
default:
SetBuzzerStatus(0); //关闭蜂鸣器
beepStatus = 0x00;
break;
}
}
/*
***********************************************************************
* 函 数 名: BEEP_StartUpBeep
* 功能说明: 蜂鸣器开机提示声
* 形 参:无
* 返 回 值: 无
***********************************************************************
*/
static void BEEP_StartUpBeep(void)
{
static uint8_t beepStatus = 0x00;
static timer beepOnTimer1;
static timer beepOnTimer2;
static timer beepOffTimer1;
static timer beepOffTimer2;
static uint8_t timer_ok = 0;
if(timer_ok == 0)
{
timer_ok = 1;
timer_set(&beepOnTimer1, 1);
timer_set(&beepOnTimer2, 2);
timer_set(&beepOffTimer1, 1);
timer_set(&beepOffTimer2, 2);
}
switch(beepStatus)
{
case 0x00:
if(beep_startUpMark == 1)
{
beep_startUpMark = 0;
SetBuzzerStatus(1); //打开蜂鸣器
timer_restart(&beepOnTimer1);
beepStatus = 0x01;
break;
}
break;
case 0x01:
if(timer_expired(&beepOnTimer1))
{
SetBuzzerStatus(0); //关闭蜂鸣器
timer_restart(&beepOffTimer1);
beepStatus = 0x02;
break;
}
break;
case 0x02:
if(timer_expired(&beepOffTimer1))
{
SetBuzzerStatus(1); //打开蜂鸣器
timer_restart(&beepOnTimer2);
beepStatus = 0x03;
break;
}
break;
case 0x03:
if(timer_expired(&beepOnTimer2))
{
SetBuzzerStatus(0); //关闭蜂鸣器
timer_restart(&beepOffTimer2);
beepStatus = 0x04;
break;
}
break;
case 0x04:
if(timer_expired(&beepOffTimer2))
{
SetBuzzerStatus(1);
timer_restart(&beepOnTimer2);
beepStatus = 0x05;
break;
}
break;
case 0x05:
if(timer_expired(&beepOnTimer2))
{
SetBuzzerStatus(0); //关闭蜂鸣器
beep_startUpMark = 0;
beepStatus = 0x00;
break;
}
break;
default:
SetBuzzerStatus(0); //关闭蜂鸣器
beepStatus = 0x00;
break;
}
}
/*
***********************************************************************
* 函 数 名: BEEP_CloseDoorBeep
* 功能说明: 蜂鸣器关门提示声
* 形 参:无
* 返 回 值: 无
***********************************************************************
*/
static void BEEP_CloseDoorBeep(void)
{
static uint8_t beepStatus = 0x00;
static timer closeDoorBeepOnTimer;
static uint8_t timer_ok = 0;
if(timer_ok == 0)
{
timer_ok = 1;
timer_set(&closeDoorBeepOnTimer, 5);
}
switch(beepStatus)
{
case 0x00:
if(beep_closeDoorBeepMark == 1)
{
beep_closeDoorBeepMark = 0;
SetBuzzerStatus(1); //打开蜂鸣器
timer_restart(&closeDoorBeepOnTimer);
beepStatus = 0x01;
break;
}
break;
case 0x01:
if(timer_expired(&closeDoorBeepOnTimer))
{
SetBuzzerStatus(0); //关闭蜂鸣器
timer_restart(&closeDoorBeepOnTimer);
beepStatus = 0x02;
break;
}
break;
case 0x02:
if(timer_expired(&closeDoorBeepOnTimer))
{
SetBuzzerStatus(1); //打开蜂鸣器
timer_restart(&closeDoorBeepOnTimer);
beepStatus = 0x03;
break;
}
break;
case 0x03:
if(timer_expired(&closeDoorBeepOnTimer))
{
SetBuzzerStatus(0); //关闭蜂鸣器
timer_restart(&closeDoorBeepOnTimer);
beepStatus = 0x04;
break;
}
break;
case 0x04:
if(timer_expired(&closeDoorBeepOnTimer))
{
SetBuzzerStatus(1); //打开蜂鸣器
timer_restart(&closeDoorBeepOnTimer);
beepStatus = 0x05;
break;
}
break;
case 0x05:
if(timer_expired(&closeDoorBeepOnTimer))
{
SetBuzzerStatus(0); //关闭蜂鸣器
beep_closeDoorBeepMark = 0;
beepStatus = 0x00;
break;
}
break;
default:
SetBuzzerStatus(0); //关闭蜂鸣器
beepStatus = 0x00;
break;
}
}
/*
***********************************************************************
* 函 数 名: BEEP_WarningBeep
* 功能说明: 蜂鸣器警告提示声
* 形 参:无
* 返 回 值: 无
***********************************************************************
*/
static void BEEP_WarningBeep(void)
{
static uint8_t beepStatus = 0x00;
static timer warningBeepOnTimer;
static timer warningBeepOffTimer;
static uint8_t timer_ok = 0;
if(timer_ok == 0)
{
timer_ok = 1;
timer_set(&warningBeepOnTimer, 2);
timer_set(&warningBeepOffTimer, 2);
}
switch(beepStatus)
{
case 0x00:
if(beep_warningBeepMark == 1)
{
beep_warningBeepMark = 0;
SetBuzzerStatus(1); //打开蜂鸣器
timer_restart(&warningBeepOnTimer);
beepStatus = 0x01;
break;
}
break;
case 0x01:
if(timer_expired(&warningBeepOnTimer))
{
SetBuzzerStatus(0); //关闭蜂鸣器
timer_restart(&warningBeepOnTimer);
beepStatus = 0x02;
break;
}
break;
case 0x02:
if(timer_expired(&warningBeepOnTimer))
{
SetBuzzerStatus(1); //打开蜂鸣器
timer_restart(&warningBeepOnTimer);
beepStatus = 0x03;
break;
}
break;
case 0x03:
if(timer_expired(&warningBeepOnTimer))
{
SetBuzzerStatus(0); //关闭蜂鸣器
timer_restart(&warningBeepOnTimer);
beepStatus = 0x04;
break;
}
break;
case 0x04:
if(timer_expired(&warningBeepOnTimer))
{
SetBuzzerStatus(1); //打开蜂鸣器
timer_restart(&warningBeepOnTimer);
beepStatus = 0x05;
break;
}
break;
case 0x05:
if(timer_expired(&warningBeepOnTimer))
{
SetBuzzerStatus(0); //关闭蜂鸣器
timer_restart(&warningBeepOnTimer);
beepStatus = 0x06;
break;
}
break;
case 0x06:
if(timer_expired(&warningBeepOnTimer))
{
SetBuzzerStatus(1); //打开蜂鸣器
timer_restart(&warningBeepOnTimer);
beepStatus = 0x07;
break;
}
break;
case 0x07:
if(timer_expired(&warningBeepOnTimer))
{
SetBuzzerStatus(0); //关闭蜂鸣器
timer_restart(&warningBeepOnTimer);
beepStatus = 0x08;
break;
}
break;
case 0x08:
if(timer_expired(&warningBeepOnTimer))
{
SetBuzzerStatus(1); //打开蜂鸣器
timer_restart(&warningBeepOnTimer);
beepStatus = 0x09;
break;
}
break;
case 0x09:
if(timer_expired(&warningBeepOnTimer))
{
SetBuzzerStatus(0); //关闭蜂鸣器
beep_warningBeepMark = 0;
beepStatus = 0x00;
}
break;
default:
SetBuzzerStatus(0); //关闭蜂鸣器
beep_warningBeepMark = 0;
beepStatus = 0x00;
break;
}
}
/*
***********************************************************************
* 函 数 名: BEEP_ContSlowBeep
* 功能说明: 蜂鸣器连续慢响
* 形 参:无
* 返 回 值: 无
***********************************************************************
*/
static void BEEP_ContSlowBeep(void)
{
static uint8_t beepStatus = 0x00;
static timer beepOnTimer;
static timer beepOffTimer;
static uint8_t timer_ok = 0;
if(timer_ok == 0)
{
timer_ok = 1;
timer_set(&beepOnTimer, 2);
timer_set(&beepOffTimer, 8);
}
switch(beepStatus)
{
case 0x00:
if(beep_contSlowBeepMark == 1)
{
SetBuzzerStatus(1); //打开蜂鸣器
timer_restart(&beepOnTimer);
beepStatus = 0x01;
break;
}
break;
case 0x01:
if(timer_expired(&beepOnTimer))
{
SetBuzzerStatus(0); //关闭蜂鸣器
timer_restart(&beepOffTimer);
beepStatus = 0x02;
break;
}
if(beep_contSlowBeepMark == 0)
{
SetBuzzerStatus(0);
beepStatus = 0x00;
break;
}
break;
case 0x02:
if(timer_expired(&beepOffTimer))
{
beepStatus = 0x00;
break;
}
if(beep_contSlowBeepMark == 0)
{
SetBuzzerStatus(0);
beepStatus = 0x00;
break;
}
break;
default:
SetBuzzerStatus(0); //关闭蜂鸣器
beepStatus = 0x00;
break;
}
}
/*
***********************************************************************
* 函 数 名: BEEP_ContFastBeep
* 功能说明: 蜂鸣器连续快响
* 形 参:无
* 返 回 值: 无
***********************************************************************
*/
static void BEEP_ContFastBeep(void)
{
static uint8_t beepStatus = 0x00;
static timer beepOnTimer;
static timer beepOffTimer;
static uint8_t timer_ok = 0;
if(timer_ok == 0)
{
timer_ok = 1;
timer_set(&beepOnTimer, 1);
timer_set(&beepOffTimer, 2);
}
switch(beepStatus)
{
case 0x00:
if(beep_contFastBeepMark == 1)
{
SetBuzzerStatus(1); //打开蜂鸣器
timer_restart(&beepOnTimer);
beepStatus = 0x01;
break;
}
break;
case 0x01:
if(timer_expired(&beepOnTimer))
{
SetBuzzerStatus(0); //关闭蜂鸣器
timer_restart(&beepOffTimer);
beepStatus = 0x02;
break;
}
if(beep_contFastBeepMark == 0)
{
SetBuzzerStatus(0);
beepStatus = 0x00;
break;
}
break;
case 0x02:
if(timer_expired(&beepOffTimer))
{
beepStatus = 0x00;
break;
}
if(beep_contFastBeepMark == 0)
{
SetBuzzerStatus(0);
beepStatus = 0x00;
break;
}
break;
default:
SetBuzzerStatus(0); //关闭蜂鸣器
beepStatus = 0x00;
break;
}
}
/*
***********************************************************************
* 函 数 名: BeepTask
* 功能说明:
* 形 参:无
* 返 回 值: 返回对应开关的键值
***********************************************************************
*/
void BeepTask(void)
{
BEEP_ContSlowBeep();
BEEP_ContFastBeep();
BEEP_ShortBeep();
BEEP_LongBeep();
BEEP_StartUpBeep();
BEEP_CloseDoorBeep();
BEEP_WarningBeep();
}
/******************** (C) COPYRIGHT 2017 CXHY *****END OF FILE*******************/