common.h 3.26 KB
/*
*********************************************************************************************************
*	                                  
*	模块名称 : 串口驱动模块    
*	文件名称 : 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