单片机教程网

电脑版
提示:原网页已由神马搜索转码, 内容由www.51hei.com提供.
查看:2626|回复:2

STM32F407+AD7606采集32路信号 源程序

[复制链接]
ID:693249发表于 2021-3-25 11:27|显示全部楼层
32路AD采集,芯片AD7606

单片机源程序如下:
  1. /***********************************************************************
  2.    main.c
  3. ********************************************************************/
  4. #include "main.h"
  5. #include "bsp_AD7606.h"
  6. #include "bsp_io.h"
  7. #include "bsp_W25qxx.h"
  8. #include "bsp_timer.h"
  9. #include "lwip_comm.h"
  10. #include "udp_server.h"
  11. #ifdef USART_DEBUG
  12. #include "usart.h"
  13. #endif
  14. #include "delay.h"

  15. /**************************************************************************/
  16. uint8_t   CPUIDbuf[12];   //CPUID
  17. WORKINFO  WorkInfo;     //工作参数
  18. AD_ARRAY  NewFrame;     //最新1帧数据
  19. ADARRAYCTR ADArrayCtr;   //数据队列控制
  20. //帧数据队列
  21. AD_ARRAY  Array[AD_ARRAYNum];// __attribute__ ((at(0x10000000)));
  22. //uint16_t  ADIntCnt[4];
  23. /*****************************************
  24. byte:{0x01,0x02,0x03,0x04}->int:0x04030201
  25. ****************************************/
  26. uint32_t byte2int(uint8_t *ps)
  27. {
  28.    uint8_t i;
  29.    B4_I1  utemp;

  30.    for(i=0;i<4;i++)
  31.        utemp.v[i] = ps[i];
  32.    return utemp.v32;
  33. }
  34. /*****************************************
  35. int:0x01020304->byte:{0x04,0x03,0x02,0x01}
  36. ****************************************/
  37. void int2byte(uint32_t dat,uint8_t *pd)
  38. {
  39.    uint8_t i;
  40.    B4_I1  utemp;

  41.    utemp.v32 = dat;
  42.    for(i=0;i<4;i++)
  43.        pd[i] = utemp.v[i];
  44. }

  45. /******************************************************
  46.    GetCPUID
  47. 描述:读STM32F407唯一ID,12字节,96bit
  48. 输出: DecGuidStr= 设备唯一码字符串格式
  49. ******************************************************/
  50. static void GetCPUID(void)
  51. {
  52.    uint8_t i;

  53.    for (i = 0; i< 12; i++)
  54.    {
  55.        CPUIDbuf[i] = *(uint8_t *)(0x1FFF7A10 + i);
  56.    }
  57. }

  58. /***********************************************
  59.    GetWorkInfo
  60. 描述:读上次使用的工作参数
  61. **********************************************/
  62. void GetWorkInfo(void)
  63. {
  64.    W25qX_Read(SPI1,(uint8_t *)&WorkInfo,W25_WORKINFO_ADD,sizeof(WORKINFO));
  65.    if (WorkInfo.FirstFlag!=0xad1e)
  66.    {//首次上电,赋默认值
  67.        WorkInfo.FirstFlag = 0xad1e;
  68.        WorkInfo.ADParam.AD_gain = 0;   //10V
  69.        WorkInfo.ADParam.AD_os = 0;     //无过过采样率
  70.        WorkInfo.ADParam.AD_freq = 48000;   //采样频率=48KHz
  71.        WorkInfo.ADParam.AD_num = 10;  

  72.        WorkInfo.NetSet.IP[0] = 192;
  73.        WorkInfo.NetSet.IP[1] = 168;
  74.        WorkInfo.NetSet.IP[2] = 1;
  75.        WorkInfo.NetSet.IP[3] = 30;
  76.        WorkInfo.NetSet.SubNet[0] = 255;
  77.        WorkInfo.NetSet.SubNet[1] = 255;
  78.        WorkInfo.NetSet.SubNet[2] = 255;
  79.        WorkInfo.NetSet.SubNet[3] = 0;
  80.        WorkInfo.NetSet.Gate[0] = 192;
  81.        WorkInfo.NetSet.Gate[1] = 168;
  82.        WorkInfo.NetSet.Gate[2] = 1;
  83.        WorkInfo.NetSet.Gate[3] = 1;
  84.        WorkInfo.NetSet.Port = 5050;
  85.        WorkInfo.NetSet.Mac[0] = 2;
  86.        WorkInfo.NetSet.Mac[1] = 0;
  87.        WorkInfo.NetSet.Mac[2] = 0;
  88.        WorkInfo.NetSet.Mac[3] = CPUIDbuf[0];
  89.        WorkInfo.NetSet.Mac[4] = CPUIDbuf[1];
  90.        WorkInfo.NetSet.Mac[5] = CPUIDbuf[2];

  91.        W25qX_Write(SPI1,(uint8_t *)&WorkInfo,W25_WORKINFO_ADD,sizeof(WORKINFO));
  92.    }
  93. }
  94. /***********************************************
  95.    SetWorkInfo
  96. 描述:保存当前使用的工作参数
  97. ***********************************************/
  98. void SetWorkInfo(void)
  99. {
  100.    W25qX_Write(SPI1,(uint8_t *)&WorkInfo,W25_WORKINFO_ADD,sizeof(WORKINFO));
  101. }

  102. /***********************************************************
  103.    AD_Array_Init
  104. 描述:队列初始化
  105. ***********************************************************/
  106. void AD_Array_Init(void)
  107. {
  108.      //u8_t i;
  109.    ADArrayCtr.Rpoint = Array;
  110.    ADArrayCtr.Wpoint = Array;
  111.    ADArrayCtr.frameCnt = 0;
  112.    ADArrayCtr.ChannelCnt = 0;
  113.    ADArrayCtr.NewframeOK = 0;
  114.      //for(i=0;i<4;i++)
  115.      //     ADIntCnt[i] = 0;
  116. }

  117. //复位AD及相关参数
  118. void AD_SoftReset(void)
  119. {
  120.      AD7606_Stop();
  121.    //AD7606初始化  
  122.    RST_H();
  123.    delay_us(10);
  124.    RST_L();
  125.    delay_us(10);
  126.    AD7606_Init();
  127.    AD_Array_Init();
  128. }  
  129. /**************************************************************************
  130.                      main 函数
  131. **************************************************************************/
  132. int main(void)
  133. {
  134.    // 嵌套向量中断控制器组选择
  135.    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  136.     
  137.      //delay_init(168);
  138.    // 初始化基本IO  
  139.    IO_GPIO_Config();
  140.    // 初始化W25q16(SPI1)
  141.    if (W25qX_Init()<0)
  142.    {//flash错,死循环
  143.        BELL_ON();
  144.        while (1);
  145.    }
  146.    //节拍定时器(TIM2)初始化
  147.    Tick_TIM2_Config();
  148. #ifdef USART_DEBUG
  149.    //初始化调试串口RS232(串口1)
  150.    uart_init(115200);
  151. #endif    

  152.    //AD7606初始化
  153.    AD7606_Init();
  154.    //数据队列初始化
  155.    AD_Array_Init();
  156.    //工作参数初始化
  157.    memset((char *)&WorkInfo,0,sizeof(WORKINFO));
  158.      //读CPUID
  159.    GetCPUID();
  160.    GetWorkInfo();
  161.    //网络初始化
  162.    while (lwip_comm_init()) //lwip初始化
  163.    {
  164.      // 失败
  165.        BELL_ON();
  166.        delay_ms(1200);
  167.    }
  168.    //初始化OK
  169.    BELL_OFF();
  170.    delay_ms(1000);
  171.    //UDP服务器端初始化
  172.    udp_echoserver_init();

  173.    BELL_ON();
  174.    delay_ms(500);
  175.    BELL_OFF();

  176.    while (1)
  177.    {
  178.        if(udp_server_flag&0x03)
  179.        {
  180.          LED5_ON();
  181.          ContinueSendTo();
  182.          LED5_OFF();
  183.        }
  184.    }
  185. }
复制代码

所有代码51hei提供下载:
LWIP-dap32.7z(1.28 MB, 下载次数: 84)

评分

黑币 +50
收起理由
+ 50
共享资料的黑币奖励!

查看全部评分

ID:328014发表于 2021-3-25 16:53|显示全部楼层
好东东 谢谢,楼主能分享一下原理图吗?
ID:831825发表于 2024-5-31 14:25|显示全部楼层
楼主,可以分享一下原理图吗

手机版|小黑屋|51黑电子论坛|51黑电子论坛6群QQ管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网