32路AD采集,芯片AD7606
單片機源程序如下:
- /***********************************************************************
- main.c
- ********************************************************************/
- #include "main.h"
- #include "bsp_AD7606.h"
- #include "bsp_io.h"
- #include "bsp_W25qxx.h"
- #include "bsp_timer.h"
- #include "lwip_comm.h"
- #include "udp_server.h"
- #ifdef USART_DEBUG
- #include "usart.h"
- #endif
- #include "delay.h"
- /**************************************************************************/
- uint8_t CPUIDbuf[12]; //CPUID
- WORKINFO WorkInfo; //工作參數
- AD_ARRAY NewFrame; //最新1幀數據
- ADARRAYCTR ADArrayCtr; //數據隊列控制
- //幀數據隊列
- AD_ARRAY Array[AD_ARRAYNum];// __attribute__ ((at(0x10000000)));
- //uint16_t ADIntCnt[4];
- /*****************************************
- byte:{0x01,0x02,0x03,0x04}->int:0x04030201
- ****************************************/
- uint32_t byte2int(uint8_t *ps)
- {
- uint8_t i;
- B4_I1 utemp;
- for(i=0;i<4;i++)
- utemp.v[i] = ps[i];
- return utemp.v32;
- }
- /*****************************************
- int:0x01020304->byte:{0x04,0x03,0x02,0x01}
- ****************************************/
- void int2byte(uint32_t dat,uint8_t *pd)
- {
- uint8_t i;
- B4_I1 utemp;
- utemp.v32 = dat;
- for(i=0;i<4;i++)
- pd[i] = utemp.v[i];
- }
- /******************************************************
- GetCPUID
- 描述:讀STM32F407唯一ID,12字節,96bit
- 輸出: DecGuidStr= 設備唯一碼字符串格式
- ******************************************************/
- static void GetCPUID(void)
- {
- uint8_t i;
- for (i = 0; i < 12; i++)
- {
- CPUIDbuf[i] = *(uint8_t *)(0x1FFF7A10 + i);
- }
- }
- /***********************************************
- GetWorkInfo
- 描述:讀上次使用的工作參數
- **********************************************/
- void GetWorkInfo(void)
- {
- W25qX_Read(SPI1,(uint8_t *)&WorkInfo,W25_WORKINFO_ADD,sizeof(WORKINFO));
- if (WorkInfo.FirstFlag!=0xad1e)
- {//首次上電,賦默認值
- WorkInfo.FirstFlag = 0xad1e;
- WorkInfo.ADParam.AD_gain = 0; //10V
- WorkInfo.ADParam.AD_os = 0; //無過過采樣率
- WorkInfo.ADParam.AD_freq = 48000; //采樣頻率=48KHz
- WorkInfo.ADParam.AD_num = 10;
- WorkInfo.NetSet.IP[0] = 192;
- WorkInfo.NetSet.IP[1] = 168;
- WorkInfo.NetSet.IP[2] = 1;
- WorkInfo.NetSet.IP[3] = 30;
- WorkInfo.NetSet.SubNet[0] = 255;
- WorkInfo.NetSet.SubNet[1] = 255;
- WorkInfo.NetSet.SubNet[2] = 255;
- WorkInfo.NetSet.SubNet[3] = 0;
- WorkInfo.NetSet.Gate[0] = 192;
- WorkInfo.NetSet.Gate[1] = 168;
- WorkInfo.NetSet.Gate[2] = 1;
- WorkInfo.NetSet.Gate[3] = 1;
- WorkInfo.NetSet.Port = 5050;
- WorkInfo.NetSet.Mac[0] = 2;
- WorkInfo.NetSet.Mac[1] = 0;
- WorkInfo.NetSet.Mac[2] = 0;
- WorkInfo.NetSet.Mac[3] = CPUIDbuf[0];
- WorkInfo.NetSet.Mac[4] = CPUIDbuf[1];
- WorkInfo.NetSet.Mac[5] = CPUIDbuf[2];
- W25qX_Write(SPI1,(uint8_t *)&WorkInfo,W25_WORKINFO_ADD,sizeof(WORKINFO));
- }
- }
- /***********************************************
- SetWorkInfo
- 描述:保存當前使用的工作參數
- ***********************************************/
- void SetWorkInfo(void)
- {
- W25qX_Write(SPI1,(uint8_t *)&WorkInfo,W25_WORKINFO_ADD,sizeof(WORKINFO));
- }
- /***********************************************************
- AD_Array_Init
- 描述:隊列初始化
- ***********************************************************/
- void AD_Array_Init(void)
- {
- //u8_t i;
- ADArrayCtr.Rpoint = Array;
- ADArrayCtr.Wpoint = Array;
- ADArrayCtr.frameCnt = 0;
- ADArrayCtr.ChannelCnt = 0;
- ADArrayCtr.NewframeOK = 0;
- //for(i=0;i<4;i++)
- // ADIntCnt[i] = 0;
- }
- //復位AD及相關參數
- void AD_SoftReset(void)
- {
- AD7606_Stop();
- //AD7606初始化
- RST_H();
- delay_us(10);
- RST_L();
- delay_us(10);
- AD7606_Init();
- AD_Array_Init();
- }
- /**************************************************************************
- main 函數
- **************************************************************************/
- int main(void)
- {
- // 嵌套向量中斷控制器組選擇
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
-
- //delay_init(168);
- // 初始化基本IO
- IO_GPIO_Config();
- // 初始化W25q16(SPI1)
- if (W25qX_Init()<0)
- {//flash錯,死循環
- BELL_ON();
- while (1);
- }
- //節拍定時器(TIM2)初始化
- Tick_TIM2_Config();
- #ifdef USART_DEBUG
- //初始化調試串口RS232(串口1)
- uart_init(115200);
- #endif
- //AD7606初始化
- AD7606_Init();
- //數據隊列初始化
- AD_Array_Init();
- //工作參數初始化
- memset((char *)&WorkInfo,0,sizeof(WORKINFO));
- //讀CPUID
- GetCPUID();
- GetWorkInfo();
- //網絡初始化
- while (lwip_comm_init()) //lwip初始化
- {
- // 失敗
- BELL_ON();
- delay_ms(1200);
- }
- //初始化OK
- BELL_OFF();
- delay_ms(1000);
- //UDP服務器端初始化
- udp_echoserver_init();
- BELL_ON();
- delay_ms(500);
- BELL_OFF();
- while (1)
- {
- if(udp_server_flag&0x03)
- {
- LED5_ON();
- ContinueSendTo();
- LED5_OFF();
- }
- }
- }
復制代碼
所有代碼51hei提供下載:
LWIP-dap32.7z
(1.28 MB, 下載次數: 92)
2021-3-25 16:52 上傳
點擊文件名下載附件
ad+lwip+sd 下載積分: 黑幣 -5
|