51
main.c
Uart_Sent_Char(ox8a); //采集开
Uart_Sent_Char(ox88); //采集关
if(uart_rx_flag == 1) //串口接收到数据
{
uart_rx_flag = 0;
if(uart_buf[0] == 0xff) //正确数据
{
blood_H = uart_buf[71]; //收缩压
blood_L = uart_buf[72]; //舒张压
}
}
blood_press = (blood_H + 2*blood_L)/3; //血压
if(blood_press > blood_value) //取血压最大值
blood_value = blood_press;
/****
*******定时器0初始化函数
*****/
void Time0_init()
{
TMOD |= 0x01;
TH0 = (65535-921)/256;
TL0 = (65535-921)%256;
EA = 1;
ET0 = 1;
TR0 = 1;
}
/****
*******定时器0中断函数
*****/
void Time0() interrupt 1
{
TH0 = (65535-921)/256;
TL0 = (65535-921)%256;
if(uart_num != 0) //串口接收到数据
uart_time++;
if(uart_time >= 10) //10毫秒后数据接收完,
{
uart_time = 0; //计时清零
uart_num = 0; //数据位数清零
uart_rx_flag = 1; //接收标志位为1
}
}
uart.c
/**********************************
包含头文件
**********************************/
#include "uart.h"
/**********************************
变量定义
**********************************/
uchar uart_num,uart_buf[90],uart_time; //串口接收相关变量
bit uart_rx_flag; //串口接收标志位
/**********************************
函数定义
**********************************/
/****
*******串口初始化函数
*****/
void Uart_Init(void)
{
SCON=0x50; //配置串口为模式 1
/* 用定时器2,注释四行 */
// PCON |= 0X80; //
// TMOD|=0x20; //配置 T1 为模式 2
// TL1 = TH1 = 256-11059200/12/16/9600; //
// TR1=1; // //启动 T1
/* 不用定时器2,注释5行 */
RCLK = 1; //串口接受时钟由定时器2提供
TCLK = 1; //串口发送时钟由定时器2提供
TH2 = RCAP2H = (65536 - 11059200/32/38400)/256; //设置波特率 把 9600 改成115200 波特率就是115200
TL2 = RCAP2L = (65536 - 11059200/32/38400)%256; //设置波特率
TR2 = 1; //启动 定时器2
/*********/
ES=1; //打开串口中断
EA=1; //打开总中断
// UART_EN=1; //485一直在写
}
/****
*******串口发送一个字节函数
*****/
void Uart_Sent_Char(uchar date)
{
SBUF=date;
while(!TI);
TI=0;
}
///****
//*******串口发送字符串函数
//*****/
//void Uart_Sent_Str(uchar *date)
//{
// while(*date != '\0')
// {
// Uart_Sent_Char(*date);
// date++;
// }
//}
/****
******* 串口中断服务程序函数
*****/
void ser() interrupt 4
{
// static uchar string[1]; //接收一位数据,如果接收两位数据,则string[2]
if(RI)
{
RI=0;
// string[0]=SBUF;
// switch(string[0])
// {
// case('A'): uart_num = 1 ;break;
// case('B'): uart_num = 2 ;break;
// default: break;
// }
uart_buf[uart_num++] = SBUF;
uart_time = 0;
}
}
uart.h
#ifndef _UART_H_
#define _UART_H_
/**********************************
包含头文件
**********************************/
#include "main.h"
//extern uchar uart_num,uart_buf[80],uart_time; //串口接收相关变量
//extern bit uart_rx_flag; //串口接收标志位
/**********************************
函数声明
**********************************/
void Uart_Init(void); //串口初始化函数
void Uart_Sent_Char(uchar date); //串口发送一个字节函数
void Uart_Sent_Str(uchar *date); //串口发送字符串函数
#endif
32
//串口3的数据获取
uint8_t uart3_value; //串口传的单个数据
//串口的储存数组,串口的接收时间,串口存值的数量
uint8_t uart3_buf[36],uart3_time,uart3_num;
uint8_t uart3_rx_flag;//串口的获取值的标志位
u3_printf("%c",0x8a); //采集打开
u3_printf("%c",0x88); //采集关闭
if(uart3_rx_flag == 1) //接收蓝牙指令
{
uart3_rx_flag = 0;
if(uart3_buf[0] == 0xff)
{
xueya_H1 = uart3_buf[71]; //收缩压
xueya_L1 = uart3_buf[72]; //舒张压
}
}
HAL_UART_Receive_IT(&huart3, &uart3_value, 1);
//定时器中串口3处理过程
if(uart3_num != 0) //串口接收到数据传来
{
uart3_time++; //计时开始
if(uart3_time >= 10)//一帧数据接受完成
{
//将标志位清零
uart3_time = 0;
uart3_num = 0;
//接收标志位置1
uart3_rx_flag = 1;
}
}
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart->Instance == huart3.Instance)//串口2触发中断
{
//获取串口2的数据,uart2_value
HAL_UART_Receive_IT(&huart3, &uart3_value, 1);
//将数据存储到uart2_buf中
uart3_buf[uart3_num++] = uart3_value;
uart3_time = 0;
}
}
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。