初级会员

- 积分
- 59
- 金钱
- 59
- 注册时间
- 2019-6-4
- 在线时间
- 13 小时
|

楼主 |
发表于 2019-9-18 09:14:10
|
显示全部楼层
本帖最后由 韩同学叫园园 于 2019-9-18 17:22 编辑
主函数
#include <stm32h7xx.h>
#include "stdio.h"
#include "string.h"
#include "stdbool.h"
#include "math.h"
#include "delay.h"
//#include "sdram.h"
#include "setting.h"
#include "para.h"
#include "sci.h"
#include "gpio.h"
#include "lcd19264.h"
#include "phaseCalculate.h"
#include "da.h"
//信号调制变量-----------------------------------------------------------------------------
uint16_t table[daCount]; //定义DA缓冲区
uint16_t tableK[adCount]; //定义幅值矫正系数
int g, B, K, M;
double k;
volatile uint8_t DA_DMA_CONVEND;//DA缓冲区溢出状态标志位,表示激光器调制完成一个周期
int mode=0; //工作模式 0:连续调制和采样, 1:停止调制和采样、并输出采样数据
int updateTable=0;
int y[SampNmb]; //调制波形插值点纵坐标 SampNmb=11
int x[SampNmb]; //调制波形插值点横坐标
int x_Default[SampNmb];
int x_Backup[SampNmb];
//硬件层变量------------------------------------------------------------------------------
volatile int PingPang; //乒乓操作标识,0:取前半段数据,1:取后半段数据
uint16_t adc0Buffer[adCountX2]={0}; //第一路AD乒乓采样缓冲区
uint16_t adc1Buffer[adCountX2]={0}; //第二路AD乒乓采样缓冲区
#ifdef threeChannel
uint16_t adc2Buffer[adCountX2]={0}; //第三路AD乒乓采样缓冲区
#endif
int unit=0; //单位: 0-nm, 1-um, 2-mm
unsigned char buf[50];
int bufLen;
int bufInd;
//函数声明--------------------------------------------------------------------------------
void initPara(void);
void InitTable(int n, int a[], int b[], uint16_t table[]);
void displayInit(void);
void showData(int64_t relativeDis[],int chnCnt);
void keyProcess(void);
void DMA1_Stream5_IRQHandler(void);
int main()
{
Cache_Enable(); //打开L1-Cache
HAL_Init(); //初始化HAL库
Stm32_Clock_Init(160,5,2,4); //设置时钟,400Mhz
delay_init(400); //延时初始化
uart_init(115200); //串口初始化
// SDRAM_Init(); //初始化SDRAM
initPara(); //DA节点、幅值矫正系数初始化
InitTable(SampNmb, x, y, table); //初始化DA缓冲区
DA_DMA_INIT( );//da初始化
HAL_DAC_Start_DMA(&DAC1_Handler,DAC_CHANNEL_1,(uint32_t *)&table,140, DAC_ALIGN_12B_R);//开启DAC的DMA
}//---------------------------------------------------------------------------------------
void initPara() //全局变量的初始化,防止全局变量的初值赋值失败
{
int i;
int deltaX=daCount/(SampNmb-1);
int deltaY=DaMax/(SampNmb-1);
for(i=0;i<SampNmb;i++)
{
x=i*deltaX;
y=i*deltaY;
}
x[SampNmb-1]=daCount-1; //3999;
y[SampNmb-1]=0;
for ( i=0; i<SampNmb; i++)
{
x_Default=x;
x_Backup=x;
}
g = 1800; //400*9/2
K = 150; //压缩0.15倍
k = K*0.001;
B = 1638; //0.06*20*4096/3
mode = 1;
PingPang = 1;
updateTable = 0;
//初始化数据处理函数
resetDistance(0);
resetDistance(1);
resetDistance(2);
}
//---------------------------------------------------------------------------------------
void InitTable(int n, int a[], int b[], uint16_t table[])
{
int i,j;
int Dx; //两采样点之间间隔
double Dy; //两采样点之间幅值差
double dy; //插入点幅值步长
int temp;
for(i=0;i<n;i++)
{
Dx=a[i+1]-a;
Dy=b[i+1]-b;
dy=Dy/Dx;
table[a]=(int)(k*(b-g))+B; //左起点
for( j=1;j<Dx;j++)
{
temp=(b+dy*j);
table [a+j]=(int)(k*(temp-g))+B; //插入点量化幅值
}
}
table[a[n-1]]=(int)(k*(b[n-1]-g))+B; //右端点
}
//----------------------------------------------------------------------------------------
|
|