找回密码
 立即注册

QQ登录

只需一步,快速开始

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

STM32单片机水质检测-浊度与叶绿素传感器程序源码(modbus rtu通讯方式)

  [复制链接]
跳转到指定楼层
楼主
ID:232646 发表于 2017-9-12 15:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
附件是使用浊度与叶绿素传感器检测水中浊度与叶绿素值得程序
采用modbus rtu 通讯方式

所有资料51hei提供下载:
禹山叶绿素 -CRC.rar (329.59 KB, 下载次数: 284)

单片机源程序如下:
  1. #include "led.h"
  2. #include "delay.h"
  3. #include "key.h"
  4. #include "sys.h"
  5. #include "lcd.h"
  6. #include "usart.h"         
  7. #include "rs485.h"
  8. #include "stdio.h"
  9. #include "math.h"

  10. /************************************************

  11. ************************************************/
  12. uint32_t        i1;
  13. u8  num2500[8]={0x01,0x03,0x25,0x00,0x00,0x00,0x4e,0xc6};
  14. u8  num2600[8]={0x01,0x03,0x26,0x00,0x00,0x04,0x4f,0x41};
  15. u8 crc1_H,crc1_L,crc2_H,crc2_L,num1,num2;
  16. u8 usart2_rx_buf[13],usart1_rx_buf[13];
  17. float fdata,pfvalue;
  18. u8  usart1len,usart2len;
  19. char usart1_ch,usart2_ch;
  20. int length;
  21. u8 key;
  22. u8 i=0,t=0;
  23. u8 cnt=0;
  24. union data
  25. {
  26.         unsigned char A[4];
  27.         float Temp;
  28. };


  29. void My_USART1_Init(void)
  30. {
  31.         GPIO_InitTypeDef  GPIO_InitStructure;   /*定义相关结构体*/
  32.         USART_InitTypeDef  USART_InitStructure;
  33.         NVIC_InitTypeDef  NVIC_InitStructure;   
  34.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//① 使能相应的时钟
  35.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
  36.         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
  37.         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;
  38.         GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;
  39.         GPIO_Init(GPIOA,&GPIO_InitStructure);//②   初始化相应的IO口模式
  40.         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
  41.         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;
  42.         GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;
  43.         GPIO_Init(GPIOA,&GPIO_InitStructure);//②  初始化相应的IO口模式
  44.         USART_InitStructure.USART_BaudRate=9600;//波特率
  45.         USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//无硬件流控
  46.         USART_InitStructure.USART_Mode=USART_Mode_Tx|USART_Mode_Rx;//模式
  47.         USART_InitStructure.USART_Parity=USART_Parity_No;//校验
  48.         USART_InitStructure.USART_StopBits=USART_StopBits_1;//停止位
  49.         USART_InitStructure.USART_WordLength=USART_WordLength_8b;//数据长度
  50.         
  51.         USART_Init(USART1,&USART_InitStructure);//③ 初始化串口相关参数
  52.         
  53.         USART_Cmd(USART1,ENABLE);//使能串口1
  54.         
  55.         USART_ITConfig(USART1,USART_IT_RXNE,DISABLE);//开启接收中断
  56.         
  57.         NVIC_InitStructure.NVIC_IRQChannel=USART1_IRQn;//通道
  58.         NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//开启中断通道
  59.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;//设置中断优先级
  60.         NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;//子优先级
  61.         NVIC_Init(&NVIC_InitStructure);
  62. }

  63. void        USART1_IRQHandler(void)
  64. {
  65.         if(USART_GetITStatus(USART1,USART_IT_RXNE))
  66.         {
  67.                
  68.                 usart1_ch=USART_ReceiveData(USART1);
  69.                 usart1_rx_buf[usart1len++]=usart1_ch;
  70.         }        
  71. }

  72.         
  73. void Usart1Send(u8 *buf1)
  74. {        
  75.                 int i;
  76.                 for(i=0;i<8;i++)
  77.                 {        
  78.                
  79.                         USART_SendData(USART1, buf1[i]);
  80.                         while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET){}; //等待发送完成
  81.                 }
  82.         return;
  83. }
  84. void RS485_Init(u32 bound)
  85. {  
  86.   GPIO_InitTypeDef GPIO_InitStructure;
  87.   USART_InitTypeDef USART_InitStructure;
  88.          NVIC_InitTypeDef NVIC_InitStructure;

  89.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD, ENABLE);//使能GPIOA,D时钟
  90.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);//使能USART2时钟
  91.         
  92.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;                                 //PD7端口配置
  93.          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  //推挽输出
  94.          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  95.          GPIO_Init(GPIOD, &GPIO_InitStructure);
  96.         GPIO_SetBits(GPIOD,GPIO_Pin_7);
  97.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;        //PA2
  98.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;        //复用推挽
  99.   GPIO_Init(GPIOA, &GPIO_InitStructure);
  100.    
  101.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;//PA3
  102.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入
  103.   GPIO_Init(GPIOA, &GPIO_InitStructure);  

  104.         RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2,ENABLE);//复位串口2
  105.         RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2,DISABLE);//停止复位
  106.         
  107.         USART_InitStructure.USART_BaudRate = bound;//波特率设置
  108.         USART_InitStructure.USART_WordLength = USART_WordLength_8b;//8位数据长度
  109.         USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位
  110.         USART_InitStructure.USART_Parity = USART_Parity_No;///奇偶校验位
  111.         USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制
  112.         USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;//收发模式

  113.   USART_Init(USART2, &USART_InitStructure); ; //初始化串口
  114.   
  115.         NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn; //使能串口2中断
  116.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3; //先占优先级2级
  117.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //从优先级2级
  118.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中断通道
  119.         NVIC_Init(&NVIC_InitStructure); //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器

  120.   USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//开启中断
  121.    
  122.   USART_Cmd(USART2, ENABLE);                    //使能串口
  123. }
  124. void        USART2_IRQHandler(void)
  125. {
  126.         
  127.         if(USART_GetITStatus(USART2,USART_IT_RXNE))
  128.         {

  129.                 /*构建字节FIFO*/
  130.                         
  131.                         usart2_ch=USART_ReceiveData(USART2);
  132.                         usart2_rx_buf[usart2len++]=usart2_ch;
  133.         }
  134. }

  135. void Usart2Send(u8 *buf2)
  136. {        
  137.                 int i;
  138.                 for(i=0;i<8;i++)
  139.                 {        
  140.                
  141.                         USART_SendData(USART2, buf2[i]);
  142.                         while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET){}; //等待发送完成
  143.                 }
  144.         return;
  145. }
  146. void delay_ms1(u16 time)
  147. {      
  148.   u16 y=0;     
  149.         while(time--)   
  150.                 {        
  151.                         y=12000;  //????      
  152.                         while(y--);   
  153.                 }
  154. }

  155. void numinit()
  156. {
  157.         int h;
  158.         for( h=0;h<12;h++)
  159.         {
  160.                 usart1_rx_buf[h]=0;
  161.         }
  162. }

  163. u16 crc_check(u8 *ptr , int len)
  164. {
  165.         u16 crc16=0xffff;
  166.         int i,j,tmp;
  167.         for(i=0;i<len;i++)
  168.         {
  169.                 crc16=*ptr^crc16;
  170.                 for(j=0;j<8;j++)
  171.                 {
  172.                         tmp=crc16&0x0001;
  173.                         crc16=crc16>>1;
  174.                         if(tmp)
  175.                                 crc16=crc16^0xa001;
  176.                 }
  177.                 *ptr++;
  178.         }
  179.         return crc16;
  180.         
  181. }
  182. int main(void)
  183. {        
  184.         
  185.         union data  a;
  186.         delay_init();
  187.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
  188.         LED_Init();                                  //初始化与LED连接的硬件接口                        
  189.         KEY_Init();        
  190.         My_USART1_Init();        
  191.         RS485_Init(9600);
  192.         Usart1Send(num2500);
  193.         delay_ms1(1000);
  194.         numinit();
  195.                          while(1)
  196.                 {
  197.                         USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
  198.                         Usart1Send(num2600);
  199.                         if(usart1len>=13)
  200.                         {
  201.                                         a.A[0]=usart1_rx_buf[3];
  202.                                         a.A[1]=usart1_rx_buf[4];
  203.                                         a.A[2]=usart1_rx_buf[5];
  204.                                         a.A[3]=usart1_rx_buf[6];
  205.                                         fdata=a.Temp;
  206.                                         a.A[0]=usart1_rx_buf[7];
  207.                                         a.A[1]=usart1_rx_buf[8];
  208.                                         a.A[2]=usart1_rx_buf[9];
  209.                                         a.A[3]=usart1_rx_buf[10];
  210.                                         pfvalue=a.Temp;
  211.                                         usart1len=0;
  212.                                 
  213.                         }
  214.                         
  215.                         delay_ms1(100);
  216.                 }
  217. }
复制代码




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

使用道具 举报

沙发
ID:266751 发表于 2017-12-25 20:45 | 只看该作者
thanks,好资料,51黑有你更精彩!!!
回复

使用道具 举报

板凳
ID:344928 发表于 2018-6-4 22:23 | 只看该作者
51黑有你更精彩!!!
回复

使用道具 举报

地板
ID:68712 发表于 2018-6-8 09:13 | 只看该作者
谢谢,收藏了
回复

使用道具 举报

5#
ID:233873 发表于 2018-6-27 13:22 | 只看该作者
谢谢,收藏了,
51黑有你更精彩!!!
回复

使用道具 举报

6#
ID:435771 发表于 2018-11-29 15:08 | 只看该作者
haxvn 发表于 2017-12-25 20:45
**** 作者被禁止或删除 内容自动屏蔽 ****

真好真好真好
回复

使用道具 举报

7#
ID:335466 发表于 2018-12-13 16:21 | 只看该作者

谢谢,收藏了,
回复

使用道具 举报

8#
ID:351567 发表于 2019-1-13 11:48 | 只看该作者
有没有防真图
回复

使用道具 举报

9#
ID:476548 发表于 2019-2-15 10:37 | 只看该作者
参考参考


回复

使用道具 举报

10#
ID:541246 发表于 2019-6-29 21:02 | 只看该作者
要是有引脚接线说明就更好了
回复

使用道具 举报

11#
ID:541246 发表于 2019-6-29 21:03 | 只看该作者
很不错
回复

使用道具 举报

12#
ID:979424 发表于 2021-11-10 15:57 | 只看该作者
你好,有没有具体的引脚连接图啊
回复

使用道具 举报

13#
ID:668925 发表于 2022-6-29 08:59 | 只看该作者
51黑有你更精彩!!!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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