找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2418|回复: 1
打印 上一主题 下一主题
收起左侧

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, 下载次数: 76)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:328014 发表于 2021-3-25 16:53 | 只看该作者
好东东 谢谢,楼主能分享一下原理图吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

Powered by 单片机教程网

快速回复 返回顶部 返回列表