上海航芯ACM32F070开发板评测 4、基于ACM32F070的体温检测报警系统
[复制链接]
本帖最后由 wenyangzeng 于 2022-10-1 10:48 编辑
上海航芯ACM32F070开发板评测 4、基于ACM32F070的体温检测报警系统
基于ACM32F070的体温检测报警系统使用的开发板的硬件资源框图如下:
1、外接测温头通过USART串口向主机发送温度数据;
2、开发板的LCD显示器上一行显示预设报警上限值,下一行显示检测的温度值。报警温度值和检测温度值显示2位整数,一位小数;
3、当检测的温度值超过预设值报警值后蜂鸣器声响报警,USR LED熄灭。这个USR LED由于是绿色的,只能安排正常时亮起,报警时熄灭;
4、触摸按键使用了左右两键TK7和TK9用于调节预设的超温报警值。
软件直接调用航芯官方演示代码包的LCD、触摸屏、串口通讯LED等演示代码稍加修改而成。
部分代码
#include "APP.h"
GPIO_InitTypeDef GPIOC_Handle;
UART_HandleTypeDef UART2_Handle;
GPIO_InitTypeDef GPIOD_Handle;
extern uint8_t gu8_TxBuffer[6];
extern uint8_t gu8_RxBuffer[6];
void Uart_Init(uint32_t fu32_Baudrate)
{
UART2_Handle.Instance = UART2;
UART2_Handle.Init.BaudRate = fu32_Baudrate;
UART2_Handle.Init.WordLength = UART_WORDLENGTH_8B;
UART2_Handle.Init.StopBits = UART_STOPBITS_1;
UART2_Handle.Init.Parity = UART_PARITY_NONE;
UART2_Handle.Init.Mode = UART_MODE_TX_RX_DEBUG;
UART2_Handle.Init.HwFlowCtl = UART_HWCONTROL_NONE;
HAL_UART_Init(&UART2_Handle);
HAL_UART_Enable_Disable_FIFO(&UART2_Handle,FUNC_ENABLE);
HAL_UART_Receive_IT(&UART2_Handle, gu8_RxBuffer, sizeof(gu8_RxBuffer), UART_RX_FIFO_1_2);
GPIOD_Handle.Pin = GPIO_PIN_3;
GPIOD_Handle.Mode = GPIO_MODE_OUTPUT_PP;
GPIOD_Handle.Pull = GPIO_PULLUP;
GPIOD_Handle.Alternate = GPIO_FUNCTION_0;
HAL_GPIO_Init(GPIOD, &GPIOD_Handle);
System_Get_APBClock());
}
int main(void)
{
System_Init();
Uart_Init(9600);
App_Test();
while(1);
}
void App_Test(void)
{
uint8_t fu8_Tkey_state = 0xff;
uint8_t ret = 0;
LCD_Config();
SHT30_Init();
BUZZER_Init();
ret = TouchKey_Init();
Disp_Number();
SysTick_Handler_Callback = SysTick_Callback;
while(1)
{
HAL_UART_Receive_IT(&UART2_Handle, gu8_RxBuffer, sizeof(gu8_RxBuffer), UART_RX_FIFO_1_2);
if(gu32_RxCpltStatus2==true)
{
gu32_RxCpltStatus2=false;
UxART_RxTest();
}
fu8_Tkey_state = TK_TimerSacn_GetKeyVal();
if(fu8_Tkey_state != 0xFF)
{
Beep_On(25);
}
TKEY_Calibrate_Process();
if(fu8_Tkey_state == 7)
{
if(Set_Temperature<420)
Set_Temperature++;
Disp_Number();
}
else
if(fu8_Tkey_state == 9)
{
if(Set_Temperature>340)
Set_Temperature--;
Disp_Number();
}
}
}
void UxART_RxTest(void)
{
uint8_t i;
uint16_t temp;
uint16_t C_RC;
C_RC=0x00;
for(i=0;i<5;i++)
C_RC +=gu8_TxBuffer;
C_RC &=0x00ff;
if(C_RC==gu8_TxBuffer[5])
{
temp=gu8_TxBuffer[3]<<8;
temp |=gu8_TxBuffer[4];
Temperature=BCD2HEX(temp);
Disp_Number();
if(Temperature>Set_Temperature)
{
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_3, GPIO_PIN_SET);
Beep_On(500);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_3, GPIO_PIN_CLEAR);
}
}
}
运行结果视频:
视频中,显示第一行是预设报警值,第二行是检测温度值。
通过本次评测,深深体会到上海航芯ACM32F070是一款性能优良,上手容易的ST系列芯片的优选替代品,可以方便应用的各种产品的开发应用。
谢谢EEWORLD,谢谢上海航芯提供本次评测机会。
|