common.h
3.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
/*
*********************************************************************************************************
*
* 模块名称 : 串口驱动模块
* 文件名称 : bsp_usart.h
* 版 本 : V2.0
* 说 明 : 头文件
*
* Copyright (C), 2010-2011, 安富莱电子 www.armfly.com
*
*********************************************************************************************************
*/
#ifndef __COMMON_H
#define __COMMON_H
#include "stm32f4xx.h" /* 如果要用ST的固件库,必须包含这个文件 */
#include <stdio.h> /* 因为用到了printf函数,所以必须包含这个文件 */
#include <math.h>
#include <stdarg.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
//#define PI 3.141593f
/*
从0x08000000开始到0x0801BFFF共112K分配给系统代码
从0x0801C000开始到0x0802FFFF共84K分配给掉电保存空间、PLC代码空间、PLC数据空间、系统参数空间
从0x08030000开始到0x08040000共64K分配给地标动作数据空间、线路数据空间、避让数据空间
*/
//掉电保存空间
#define FLASH_DATA_SAVE_ADDRESS ADDR_FLASH_SECTOR_1
#define DATA_SAVE_LEN 16
//掉电保存空间备份
#define FLASH_DATA_SAVE_ADDRESS_BACKUP ADDR_FLASH_SECTOR_2
#define DATA_SAVE_LEN_BACKUP 16
//保存固定参数
#define FLASH_CONST_DATA_SAVE_ADDRESS ADDR_FLASH_SECTOR_3
#define CONST_DATA_SAVE_LEN 16
//系统程序
#define FLASH_SYSTEM_PROGRAM_ADDRESS ADDR_FLASH_SECTOR_5
#define SYSTEM_PROGRAM_LEN 256
//地图信息保存空间
#define FLASH_MAP_INFO_SAVE_ADDRESS ADDR_FLASH_SECTOR_10
#define MAP_INFO_SAVE_LEN 128
//保存空间备份
#define FLASH_MAPINFO_SAVE_ADDRESS_BACKUP ADDR_FLASH_SECTOR_11
#define MAPINFO_SAVE_LEN_BACKUP 128
//队列数据缓存区大小
#define QUEUE_BUF_LEN 0x3ff
typedef struct
{
unsigned char RxBuf[QUEUE_BUF_LEN+1]; //接收队列数据缓存区
unsigned char TxBuf[QUEUE_BUF_LEN+1]; //发送队列数据缓存区
volatile unsigned short RxBuf_In; //接收队列入列位置
volatile unsigned short RxBuf_Out; //接收队列出列位置
volatile unsigned short TxBuf_In; //发送队列入列位置
volatile unsigned short TxBuf_Out; //发送队列出列位置
}QueueBufStruct;
typedef struct
{
float SetValue; //定义设定值
float Proportion; // 比例常数 Proportional Const
float Integral; // 积分常数 Integral Const
float Derivative; // 微分常数 Derivative Const
float LastError; // Error[-1]
float PrevError; // Error[-2]
float SumError; // Sums of Errors
float MaxValue; //最大值限定
float MinValue; //最小值限定
}PidStruct;
extern void BitToByte(unsigned char byte_data,unsigned char bit_len,unsigned char byte_buf[],unsigned short *byte_offset,unsigned short *bit_offset);
extern void SetBitToByte(unsigned long data,unsigned char bit_len,unsigned char byte_buf[],unsigned short *byte_offset,unsigned short *bit_offset);
extern unsigned long GetBitFromByte(unsigned char bit_len,unsigned char byte_buf[],unsigned short *byte_offset,unsigned short *bit_offset);
extern unsigned char HexAscii2Decimal(unsigned char asciiH,unsigned char asciiL);
extern void Init_PID(PidStruct *pid, float Kp,float Ki,float Kd);
extern float PID_Calculate(PidStruct *pid, float inputTargetvalue,float inputActualValue);
extern float Weight_Recurrence_Average_Filter(float inputValue,float speed);
#endif